- CSS 77.5%
- Nix 10.7%
- QML 10.2%
- Shell 1.2%
- Python 0.2%
- Other 0.2%
| .claude | ||
| assets | ||
| home | ||
| hosts | ||
| modules | ||
| parity | ||
| pkgs | ||
| scripts | ||
| .gitignore | ||
| flake.lock | ||
| flake.nix | ||
| local.example.nix | ||
| PHASE2.md | ||
| README.md | ||
| REINSTALL.md | ||
| TESTING.md | ||
dotfiles — NixOS flake for two hosts (Arch → NixOS migration)
One flake repo configuring two machines, with the hostname selecting the config. Built so the migration can be validated in layers before any system is swapped.
| host | attr | arch | notes |
|---|---|---|---|
fourier |
nixosConfigurations.fourier |
x86_64-linux |
desktop: Ryzen 9 9950X + RX 9070 XT (RDNA4). Arch for now, converts to NixOS last. |
| (alias) | nixosConfigurations.pc |
x86_64-linux |
same evaluated config, reachable as .#pc. |
cantor |
nixosConfigurations.cantor |
aarch64-linux |
MacBook Pro M2, Asahi, via nixos-apple-silicon (main). |
| (alias) | nixosConfigurations.laptop |
aarch64-linux |
same evaluated config, reachable as .#laptop. |
fourier is the desktop's real hostname, so a bare nixos-rebuild switch --flake .
auto-selects it on that machine. pc is just a second name for the same thing.
Layout (composition, not one big conditional)
flake.nix inputs + outputs (nixos/home configs, parity app, checks)
modules/common.nix shared SYSTEM config, CPU-arch-agnostic
hosts/pc.nix x86 deltas: amdgpu/RDNA4, boot, latest kernel, steam, ROCm stub
hosts/laptop.nix aarch64 deltas: apple-silicon-support, Asahi cache, boot
hosts/firmware/ placeholder for Asahi peripheral firmware (laptop)
hosts/pc-disko.nix declarative LUKS2 + Btrfs disk layout for the desktop
modules/sddm-ocean.nix packages the custom "Ocean-P6" SDDM login theme
modules/secureboot.nix lanzaboote Secure Boot (pc-only, imported by hosts/pc.nix)
home/common.nix shared USERLAND (home-manager): zsh, starship, git, plasma
home/pc.nix x86 userland (electron/x86-only/unfree/VR-adjacent GUI apps)
home/laptop.nix aarch64 userland
home/plasma.nix full plasma-manager rc2nix dump (Catppuccin Mocha)
home/plasma-theming.nix Fluent purple icons + aurorae + color-schemes
home/waywallen.nix waywallen wallpaper daemon install + autostart (pc-only)
home/starship.toml ported verbatim from ~/.config/starship.toml (Catppuccin Mocha)
pkgs/waywallen/ from-source nix derivation for waywallen (Rust+Qt6, x86)
assets/sddm/Ocean-P6/ vendored custom SDDM theme files
assets/plasma/ vendored aurorae + color-schemes
parity/ package-parity snapshots + annotations (see below)
scripts/parity.sh the parity checker (nix run .#parity)
TESTING.md the runbook (what's verified vs what only you can run)
PHASE2.md disko + LUKS2 (done) · secure boot + TPM (todo)
How the pieces compose
flake.nixhas helpersmkNixosandmkHome. Each host =modules/common.nix(+ home-manager) plus itshosts/<x>.nixdelta andhome/<x>.nixdelta.- Per-host differences are passed as
specialArgs/extraSpecialArgsflags (host,isLaptop,username) and branched on locally — the tree is not forked. home/common.nixis written to work in two contexts: as a NixOS module and standalone (homeConfigurations."asriel@pc"), so the whole userland can be tested on the live Arch box with zero system risk. See TESTING.md.
Carve-outs (host-specific on purpose)
- ROCm / GPU-compute is x86 + AMD only → enabled in
hosts/pc.nix(rocmPackages+HSA_OVERRIDE_GFX_VERSION=12.0.0for RDNA4, best-effort). Never on the laptop. - Secure Boot (lanzaboote) is pc-only (
modules/secureboot.nix). - waywallen (animated wallpaper, built from source) runs on both hosts —
the package carries a small
c_charpatch so it builds on aarch64 too (build-verified on both arches via emulation). On the Asahi laptop video decode is software-only (no VAAPI HW). Configure its Steam-Workshop wallpaper once via its UI (stateful); seehome/waywallen.nix. - VR/XR stack (monado, wivrn, xrizer, wayvr via the
nixpkgs-xroverlay) is applied pc-only inhosts/pc.nix— no XR on aarch64/Asahi. - x86-only apps on the laptop run via emulation (box64 / FEX / muvm) — noted, not nix-packaged.
- GPU bits (VA-API driver, amdgpu, mesa overlay) live in the host files.
Package parity (nix run .#parity)
The artifact that proves nothing silently got dropped. It compares your Arch
packages (parity/arch-packages.txt = pacman -Qqe, parity/aur-packages.txt
= pacman -Qqm) against what the nix config declares, and classifies every one
as matched / name-changed / bundled / dropped / unmapped-AUR / emulated / phase2.
It exits non-zero if anything is unaccounted for, so you can gate on it.
Your curated decisions live in parity/annotations.toml. Re-run it anytime:
nix run .#parity # check
nix run .#parity -- --refresh # re-snapshot from live pacman first
Quick start
- Install Nix (flakes on). The repo is developed against
nixos-unstable. nix flake check— every output evaluates.nix run .#parity— package parity report.- See TESTING.md for the full layered validation runbook.
Status: desktop (
pc) is a real installable config — disko + LUKS2 + Secure Boot (lanzaboote) done (key enrollment is user-run, see PHASE2.md); only TPM2 unlock remains. The laptop still needs its installer-generatedhardware-configuration.nix+ firmware. The pre-disko, VM-friendly baseline is taggedbaseline-testable.