My personal NixOS flake: Sway desktop, hardened libvirt VM, Hetzner VPS. System modules only; no Home Manager. Tokyo Night on the desktop stack.
Important
These dotfiles are built for my hardware, domain, workflows, and secrets. Not a template; they will not work out of the box on your machine. Do not nh os switch or nixos-rebuild switch this flake on foreign hardware. If you fork, start with lib/identity.nix, your own hardware-configuration.nix, .env.kzn, and ~/.secrets/; see AGENTS.md for the rest.
| Flake attr | Machine | Purpose | |
|---|---|---|---|
| Desktop | ikigai |
Ryzen 5800X, RX 6700 XT | Daily driver |
| Guest | hardened-vm |
libvirt qcow2 | Throwaway sessions, leaves nothing behind |
| Guest | windows-vm |
libvirt qcow2 | Tuned Windows 11 (no GPU passthrough currently) |
| Server | vps |
Hetzner cx33 | Public services on kzn.sh |
What ikigai actually runs on.
| Board | ASRock B550AM Gaming |
| CPU | AMD Ryzen 7 5800X — Zen 3, 8C/16T, up to 4.85 GHz |
| GPU | AMD Radeon RX 6700 XT — Navi 22 / RDNA 2, 12 GB, gfx1031 |
| Memory | 128 GB, no disk swap (zram, zstd, 50%) |
| Display | MSI MAG 275UD E14 — 27" 4K @ 144 Hz, DP-3 at scale 2× |
| Boot / root | Samsung 970 EVO Plus 2 TB NVMe — LUKS ext4 root + EFI |
| Storage | WD SN550 1 TB NVMe, Samsung 870 QVO 2 TB SATA, 14 TB HDD (LUKS, /mnt/crypt) |
| Network | Intel I211 gigabit (enp5s0), Intel AC 3168 Wi-Fi + Bluetooth |
| Audio in / out | Logitech Yeti X, FiiO E10 DAC |
| Peripherals | Logitech G502 Lightspeed (solaar), Corsair keyboard (ckb-next), EMEET Nova 4K cam |
| Window manager | Sway + regreet |
| Bar / lock / notifications | Waybar, swaylock-effects, swaync |
| Window switcher | swayr (fuzzel backend) |
| Terminal / editor | Ghostty, micro |
| Launcher | fuzzel |
| File manager | Nautilus |
| Browser | Firefox |
| Shell | zsh + starship + mise (node/pnpm/bun/python/uv) |
| Audio | PipeWire + WirePlumber |
| Kernel / GPU stack | Zen kernel, Mesa RADV, ROCm (gfx1030 override), VA-API radeonsi |
| Theme | Tokyo Night (GTK, Qt, Ghostty, Firefox, Spotify) |
| Gaming | Steam, Wine, emulators via nix-gaming |
| Dev runtimes | mise — pinned node/pnpm/bun/python/uv (modules/dev/mise.nix); projects use direnv + uv sync |
| AI | Ollama, ComfyUI, Open WebUI, kiro-gateway, w-okada (RVC), RisuAI, AIRI, Kiro Crew, llmcord, OpenCode, voice (speaches, kokoro, Fish Audio) |
| GTK | Tokyonight-Dark |
| Qt | Kvantum Tokyo Night |
| Icons | TokyoNight-SE |
| Cursor | Catppuccin Mocha Blue, size 24 |
| UI font | Inter Nerd Font |
| Mono font | JetBrainsMono Nerd Font |
| Emoji | Twitter Color Emoji |
Tokyo Night (Night). Same palette across Sway, Waybar, swaync, swaylock-effects, Ghostty, micro, btop, fzf, starship, lazygit, and delta.
$mod is Alt. Full set: modules/desktop/sway/keybinds.nix.
| Key | Action |
|---|---|
Alt + Return |
Terminal (ghostty) |
Alt + d |
Launcher (fuzzel) |
Alt + grave |
Window switcher (swayr) |
Alt + c |
Color picker to clipboard (wl-color-picker) |
Alt + period |
Emoji picker (bemoji) |
Alt + Shift + v |
Clipboard history (cliphist) |
Alt + Shift + n |
Toggle notifications (swaync) |
Print |
Whole screen to clipboard |
Ctrl + Print |
Region to satty |
Alt + Shift + s |
Region upload to Zipline |
Alt + s / w / e |
Stacking / tabbed / toggle split |
Alt + f |
Fullscreen |
Alt + Shift + space |
Toggle floating |
Alt + Shift + q |
Kill window |
Alt + Shift + l |
Lock (swaylock-effects) |
Alt + Shift + r |
Reload Sway |
Alt + Shift + e |
Exit Sway (confirm) |
- Hosts import modules from explicit lists in each
configuration.nix. Nothing is auto-discovered. lib/identity.nixfeeds NixOS hosts and Terranix (infra/).- Cloud (
vps-plan,vps-apply) provisions Hetzner + Cloudflare DNS. NixOS (vps-install,nh os switch) is a separate step. - Secrets: sops ciphertext in
secrets/; private keys and runtime env in~/.secrets/. - Substituters: desktop + VM import
modules/nix/default.nix, which adds Cachix caches (including nix-gaming). No separate Cachix CLI install; VPS uses minimal nix settings only.
flake.nix inputs, hosts, deploy apps
hosts/ desktop, hardened-vm, windows-vm, vps
modules/ NixOS modules (desktop, ai, gaming, …)
packages/ kiro-gateway, crankshaft, session-desktop, …
infra/ Hetzner + Cloudflare (Terranix → OpenTofu)
secrets/ sops ciphertext
lib/identity.nix username, domain, SSH public key
Flake outputs (hosts, packages, apps):
nix flake show .| Goal | Command |
|---|---|
| Apply desktop | nh os switch ~/dotfiles |
| Eval desktop | nix build .#nixosConfigurations.ikigai.config.system.build.toplevel |
| Build hardened-vm image | nix run .#vm-install |
| Stage Windows 11 disk + ISO | nix run .#windows-vm-install -- /path/to/Win11.iso then attach hdc (see hosts/windows-vm/AGENTS.md) |
| VPS plan (DNS/Hetzner) | nix run .#vps-plan |
| VPS apply | nix run .#vps-apply |
| VPS destroy | nix run .#vps-destroy |
| VPS install (wipes disk) | nix run .#vps-install -- root@<ip> |
| VPS switch (installed) | nix run .#vps-switch -- root@<ip> |
| Sync tunnel creds | nix run .#vps-tunnels-sync |
| Render topology SVGs | nix run .#topology-render |
| Validate flake | nix flake check --no-build |
| Lint Nix | statix check . && deadnix . --exclude references archive |
The vps-* apps need .env.kzn (Hetzner + Cloudflare tokens, from .env.example); vps-install also needs the age key at ~/.secrets/vps-age.key. Everything else is self-contained in the flake.
- AGENTS.md — module map, sops, boundaries
- hosts/windows-vm/AGENTS.md — Win11 libvirt guest (ISO, virtio drivers, Spice)
- docs/resources.md — external docs tied to config in this flake
Upstream work this config builds on. If I missed you, reach out.
- @enkia — Tokyo Night palette
- @Fausto-Korpsvart — Tokyonight GTK theme
- @ljmill — Tokyo Night SE icons
- @0xsch1zo — Kvantum Tokyo Night
- @catppuccin — Mocha Blue cursors
- @fufexan — nix-gaming (Steam, wine-tkg)
- @Mic92 — sops-nix
- @nix-community — disko, nh, nixos-anywhere
- @akai-hana — min-max tuning inspiration
























