dotfiles

notes

Edit on GitHub

One page per module, holding what used to live in its header block: why the module is the way it is, the measurements behind each number, and what was tried and rejected.

Why this folder exists

Rule 2 used to allow a header block "as long as it needs to be". Measured on 16/08/2026, that had grown into 6062 comment lines out of 16634 across the tree, 36%, with one module (modules/home/shell/claude-code.nix) carrying a 123-line header. A header that long stops being documentation and becomes a wall you scroll past to reach the code. Worse, none of that reasoning was reachable from docs/: to find out why Caddy has a jail, you had to already know to open modules/nixos/services/caddy.nix.

So the reasoning moved here instead of being deleted. The module keeps a 2-line header that says what it is and points at its page. After the sweep the tree is at 1601 comment lines out of 13299, 12%, and no comment anywhere runs longer than 2 lines.

Nothing was deleted. Every measurement, every rejected alternative and every correction that was in a header is on one of these pages. If you find something here that the code no longer does, that is rule 16 and the page is the bug.

How it relates to the rest of docs/

FolderQuestion it answers
../history/"What happened on that day, and what did I learn?" Chronological, append-only
notes/ (here)"Why is THIS module like this, right now?" One page per module, kept current
../guides/"What do I type to redo this by hand?" Steps outside Nix's reach

The history is a diary and keeps its entries even when they go stale, because a diary that gets edited stops being evidence. These notes are the opposite: they describe the CURRENT state, and rule 16 applies in full, so a note that stops being true is a bug.

Conventions

  • Grouped by SUBJECT, not by repo path. A mirror of the tree was measured and rejected: 30 of the 93 pages name files on both sides of the modules/nixos/ and modules/home/ boundary (arch-legacy, claude-code, monitors, theme, restic, vpn, fonts and others), and 58 name two or more modules. They cross because the ARTIFACT crosses, so a mirror would have to split a third of the pages or file them under a half-truth. The folder answers "where would I go looking", which is the question a reader actually has.

    The count is a module path written anywhere in the page (re-measured 13/10/2026; it was 16 of 51 on 16/08, the same third). Counting only the modules whose 2-line header points AT the page gives 13 of 74 instead, but it misses theme, vpn and fonts, which plainly span both sides.

  • The file name mirrors the module, so modules/nixos/services/caddy.nix becomes network/caddy.md. When a page covers several modules it takes the name of the SUBJECT (desktop-plumbing.md, apps-and-mime.md).

  • A page is created only when there is something to say. A module whose header compresses to 2 lines with nothing lost does not get a page.

  • The module points here, never the other way around. The pointer lives in the 2-line header, and repo/link-checker.md is what keeps those pointers honest: a broken one fails nix flake check.

The pages

boot-and-storage

PageWhat you would come here asking
bootLimine, the Secure Boot trust chain, and what it does NOT protect
diskothe subvolume layout, and why the swapfile belongs to the host
btrfsthe scrub, the alarm, the reclaim, and why fstrim is off
btrbkthe local snapshots, which are NOT a backup
resticwhy the backup is gone, the frozen repos, and ~/Drive
arch-legacythe old Arch archive, permanently mounted, and --no-lock
disk-hygienethe space alarm that names the biggest consumers
downloads-tidy~/Downloads as an inbox, sorted by type every 30 min
disk-insightthe size trend, the usage sampler, and why not atime
impermanencethe home persistence list written before the switch, and persist-diff
games-diskone game install shared with Windows, and the force option that stays off
shutdownwhy the machine takes that long to go down

hardware

PageWhat you would come here asking
gputhe Arc B580 on xe, and why the driver stack must NOT go unstable
gpu-rgbthe Steel Legend's LED, the bus everyone assumed wrong, and when to delete the patches
fansthe Arc's fan that was supposed to be uncontrollable, the PCODE path, and the firmware red herring
monitorsthe connector SSOT, and why it lives on the system side
fontsthe UI font SSOT, and the fallback coverage
mousethe MX Master, the boot race, and the gestures
razerthe DeathAdder's DPI OSD, and why openrazer does not build on 7.x
androidpairing the phone over wireless ADB, and why SFTP could not clean it
oomearlyoom, and the three traps in its regex
power-and-memory-baselinethe 18/10/2026 audit: where the RAM goes, what was kept and why, what is still unmeasured
powerBalanced, Gaming and Eco: power-profiles-daemon, and GameMode's hold
webcamthe UVC -71, everything it is NOT, and the one test left

network

PageWhat you would come here asking
networkthe firewall by SOURCE, the DDNS that moved to the router, fail2ban, the FAI gateway
exposurethe house seen from outside: open ports and the sshd, weekly
router-logthe router's syslog kept here 30 days: who may send it, and why the order matters
vpnFAI (nxBender) and UFSCar (openconnect), always split-tunnel
sshthe exposed SSH, the hosts, and reaching the FAI workstation
sunshineremote access, the black screen, and why dpms is forbidden
caddythe reverse proxy, the auto-gate, client_ip vs remote_ip
tunnelthe Cloudflare Tunnel behind Access, the MCP portal, what is NOT in git
fai-workstationthe host SSOT, Wake-on-LAN, and the rclone mount
vps-mount~/VPS, the KingHost VPS' root over rclone SFTP

desktop

PageWhat you would come here asking
desktopHyprland, the autologin trade, the portals, the keyring
hyprthe Lua config, the helper scripts, the remote-access safety net
keybindsevery bind, and why the cheatsheet is generated from them
quickshellthe shell in QML, and the 758 MiB XEmbed bridge
barthe bar and its popovers, the VPN probe, the holiday table
hyprglassthe Liquid Glass plugin: the pinned build, the presets, turning it on and off
nixos-centerthe logo's panel: notifications, do-not-disturb, the session, the toasts
dashthe glance band on the standing monitor: vitals, month, CI pages
glance-feedthe SQLite network cache: fetch only what changed, paint from disk at boot
lockscreenthe QML lock (Quickshell), hyprlock as its fallback, hypridle, and the hardware lessons
awaya black screen and dark LEDs while an agent works, and why not DDC or DPMS
weatherone source for the bar and the lock, and the icon-by-regex trap
themedark mode, Kvantum, the Win11 icons, the palette SSOT
autostartwhat opens at login, and Spotify's 4145 restarts
hyprsunsetthe blue light curve, and why 13 profiles
backlightDDC/CI on both panels, the 10000 K that faked a broken filter
desktop-plumbingthe polkit agent, XDG associations, the wallpaper, the cheatsheet, clipboard-push
vicinaethe launcher, the clipboard history, the command palette
spellcheckEnglish and pt-BR in every app: one list, one layer per app family

apps

PageWhat you would come here asking
dolphinthe ViewMode enum trap, and the Windows Explorer parity
recollsearching by content, and why the index must never see a secret
dropboxthe tray icon's cost, and 10 days of syncing nothing
vscodea versioned mirror and not an immutable source
claude-codetwo accounts, one archive, and the rules every project inherits
codexwho owns config.toml, and why the settings option is left empty
antigravity-cliwhy agy and not gemini-cli, and the symlink this one clobbers
basic-memorytwo memory servers split at the FAI boundary, uv2nix, and why HTTP and not stdio
azure-mcpthe Azure MCP server, FAI only
flameshotthe v14 keyboard flow, and the duplicated bar
screenrecrecording a monitor or a region by keyboard, MP4 with GIF on demand, and why not the portal
curseforgethe repackaged AppImage, and why the schemes are declared
curseforge-fix-permsthe +x the app loses, and why ELF magic and not names
fai-meetthe FAI's meeting recorder: the pointer AppImage and its login scheme
hydralauncherthe game launcher on upstream's latest, its download sources declared, and its login scheme
bottlesthe library declared without owning the prefix, and the name that is not the directory
megamegatools, the quota, and why the loop waits
spotifastthe native Spotify client, why the release binary, and the theme that must be a real file
apps-and-mimemedia, office, MangoHud, OpenAL, and the CANONICAL mimetype
zenthe launch guard, and the NSS check that had to be written backwards
cryptoStack Wallet and Bisq 2, the threat model with no LUKS, and the first purchase
fastfetchboxes drawn from the key, and a donut.c-style logo rendered at build time

services

PageWhat you would come here asking
service-togglesthe optional-service list, and why it is centralized
jellyfinthe media library, the UMask override, DLNA on the TV
immichthe photo library, why it lives in /srv, and why it is not a backup
ollamalocal models on the Arc through Vulkan
duothe compose stack declared in Nix, and the three Docker traps
grad-radarthe stack at boot, and the monitor chain's order
credit-radarwhy the most sensitive service never leaves the house
docker-prunethe 11 GB with no ceiling, and the two options that destroy data
phone-syncwhy Syncthing for the phone's photos, and the Revert button that deletes
libvirtthe KVM sandbox, and the three wiki steps that are wrong on 26.05
cockpitstart/stop from the browser, and stop versus toggle
beszelthe resource history Cockpit cannot keep, and the pairing step

repo

PageWhat you would come here asking
flakethe inputs, the overlays, and the quality gate
coreNix settings, the GC, locale, and why each ceiling is that number
packageswhat is installed and why, per package
shellzsh, the aliases, and the NH_FLAKE trap
secretssops-nix, Bitwarden, and the two recipients
version-bumpsthe three-layer version strategy, and the four bump scripts
link-checkerwhat keeps these pointers from rotting
dead-configwhat is declared and never used, and the seven checks
rules-indexevery rule N points at a live rule, and which rules a check enforces
ownershipthe long form of rules 11, 14 and 15: one source, one writer, one starter
hardeningthe systemd sandbox baseline for this repo's own root services, with scores
router-ssotthe values the router repeats, and who guards them
prose-stylerule 17's bans, and what counts as a literal instead of prose
vm-bootwhether this config still boots on a machine that is not this one
sitehow docs/ becomes a site, and why the tree did not move to match it
site-sourceswhich repo files each page is about, and what the site may publish of them
github-settingswhat protects the repo on GitHub, outside git
eval-metricswhat evaluating the config costs, how big the code is, and the budgets
usage-auditwhich apps show any sign of being used, and why it is not a gate
readmethe README's header, the stats counted at build, and the two diagrams
licenseMIT for the code, CC BY 4.0 for the docs, and what neither covers