Liam Wohlstedt

configuration.nix
# configuration.nix
# Liam Wohlstedt
{ config, pkgs, ... }:

{
  # Software developer at MSAB in Stockholm, working on
  # digital forensics software with C++, C#, and TypeScript.
  # Outside of that: small tools, poking at systems until
  # they make sense, and writing down what I learn.

  person = {
    name     = "Liam Wohlstedt";
    role     = "Software Developer";
    company  = "MSAB";
    location = "Stockholm, Sweden";
    stack    = [ "C++" "C#" "Python" "TypeScript" ];
    focus    = [ "security" "systems" "automation" ];
    status   = "open to interesting conversations";
  };

  contact = {
    email    = "Liam@wohlstedt.com";
    github   = "github.com/LwwDev";
    linkedin = "linkedin.com/in/liamww";
  };

  imports = [ ./projects.nix ./notes.nix ];
}

projects.featured = [

cali

Copies your whole terminal output to clipboard. No more dragging your mouse up 1000 lines after a test run.

Rust · PowerShell — repo

Enigma Machine CLI

A terminal-based simulation of the Enigma machine, rotors and plugboard included.

C++ — repo

hexabend

hxd, but for glitching images — open a photo, edit its raw bytes in a hex grid, watch the preview corrupt live.

C# · WPF · .NET 10 — repo

Kanban-board

A small terminal kanban board written in C++.

C++ — repo

];# see all projects →

notes.recent = [

What C++ ownership actually teaches you

C++ has a way of making vague thinking about ownership obvious — the compiler and the crashes both tell you pretty quickly.

Mar 15, 2026

Split keyboards feel wrong until they don't

Notes on moving to a wireless Lily58 and what the ZMK config workflow actually looks like day to day.

Feb 10, 2026

];# see all notes →

beyond-software.enable = true;

# Keyboards, Linux, my girlfriend, and our cats.