NixOS dotfiles — tgirl (x86_64) + laptop (aarch64 Asahi)
  • CSS 77.5%
  • Nix 10.7%
  • QML 10.2%
  • Shell 1.2%
  • Python 0.2%
  • Other 0.2%
Find a file
2026-09-05 10:11:22 -07:00
.claude home: port the full KDE look (dark mode, panels, splash, theme) 2026-06-14 12:59:24 -07:00
assets home: switch the PC browser to helium, drop thorium 2026-09-03 13:42:14 -07:00
home home: jellyfin-desktop on the laptop without QTWEBENGINE_FORCE_USE_GBM (Asahi crash) 2026-09-05 10:11:22 -07:00
hosts laptop: add 32G btrfs swapfile on nested /swap subvolume 2026-07-21 10:53:13 -07:00
modules modules: mullvad gui.enable, signal-desktop polkit actions 2026-09-03 13:42:14 -07:00
parity parity: clean up the zerotier note (id was scrubbed from history) 2026-06-27 01:25:26 -07:00
pkgs home: plain vesktop, drop claude-code override, skip signing on the laptop 2026-09-03 13:42:14 -07:00
scripts repo: trim verbose comments across nix + shell files (terse style) 2026-06-27 13:30:25 -07:00
.gitignore repo: move pc disk serial into a gitignored local.nix 2026-06-27 01:37:19 -07:00
flake.lock flake: bump inputs, drop custom-packages + orionquests 2026-09-03 13:42:14 -07:00
flake.nix flake: bump inputs, drop custom-packages + orionquests 2026-09-03 13:42:14 -07:00
local.example.nix nix: trim over-verbose comments to a terse, non-obvious-only style 2026-06-27 13:11:48 -07:00
PHASE2.md docs: tidy comments and .gitignore 2026-06-13 20:30:38 -07:00
README.md hosts: rename the laptop from laptop to cantor 2026-06-25 13:19:11 -07:00
REINSTALL.md yubikey: root-owned system authfile + keep the guard serial out of the repo 2026-06-27 01:03:29 -07:00
TESTING.md hosts: rename the x86 desktop from tgirl to fourier 2026-06-25 13:14:21 -07:00

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.nix has helpers mkNixos and mkHome. Each host = modules/common.nix (+ home-manager) plus its hosts/<x>.nix delta and home/<x>.nix delta.
  • Per-host differences are passed as specialArgs/extraSpecialArgs flags (host, isLaptop, username) and branched on locally — the tree is not forked.
  • home/common.nix is 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.0 for 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_char patch 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); see home/waywallen.nix.
  • VR/XR stack (monado, wivrn, xrizer, wayvr via the nixpkgs-xr overlay) is applied pc-only in hosts/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

  1. Install Nix (flakes on). The repo is developed against nixos-unstable.
  2. nix flake check — every output evaluates.
  3. nix run .#parity — package parity report.
  4. 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-generated hardware-configuration.nix + firmware. The pre-disko, VM-friendly baseline is tagged baseline-testable.