Skip to content
kzndotshPublic

Repository files navigation

kaizen@ikigai ~/dotfiles ❄

Desktop demo

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.

Hosts

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

Hardware

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

Desktop

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)

Theme

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.

background (#1a1b26) background dark (#16161e) surface (#292e42)
black (#15161e) gutter (#3b4261) dark3 (#545c7e)
comment (#565f89) dark5 (#737aa2) subtext (#9aa5ce)
foreground dim (#a9b1d6) foreground (#c0caf5) red (#f7768e)
red dark (#db4b4b) orange (#ff9e64) yellow (#e0af68)
green (#9ece6a) teal (#73daca) cyan (#7dcfff)
cyan dark (#27a1b9) light blue (#2ac3de) pale blue (#89ddff)
blue (#7aa2f7) purple (#bb9af7) pink (#ff007c)

Keybinds

$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)

Architecture

  • Hosts import modules from explicit lists in each configuration.nix. Nothing is auto-discovered.
  • lib/identity.nix feeds 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.

Layout

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 .

Commands

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.

Docs

Credits

Upstream work this config builds on. If I missed you, reach out.