2.3 KiB
2.3 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
What This Is
A flake-based NixOS configuration managing 6 hosts (all x86_64-linux). Pinned to nixpkgs nixos-25.11.
Common Commands
- Build/deploy locally:
rebuild-nixos(installed to~/.local/binviamake)- This runs on the target machine: pulls from local git remote, then
doas nixos-rebuild switch --flake .
- This runs on the target machine: pulls from local git remote, then
- Build a specific host (dry run):
nixos-rebuild build --flake .#<hostname> - Flash a remote machine:
./script/flash.sh <config-name> <ssh-address>(uses nixos-anywhere) - Check if reboot needed:
./script/check-restart.sh - Install the rebuild script:
make
Architecture
Flake Structure
All hosts are generated via lib.genAttrs in flake.nix. Each host gets:
diskomodule (declarative disk management)nix-index-databasewith comma- Host-specific config from
./hw/<hostname>/ - Shared base from
./configuration.nix
Custom packages ke and kte are flake inputs from git.wntrmute.dev/kyle/.
Host Layout
Each host has a directory under hw/<hostname>/ containing:
default.nix— imports hardware-config and (for desktops) desktop/qemu moduleshardware-configuration.nix— auto-generated hardware configdisk-config.nix— disko disk layout (where applicable)
Desktop hosts (imladris, orion, vade, ono-sendai) import configs/desktop.nix and configs/qemu.nix.
Server hosts (rift, sk) are minimal — hardware config + disk config only.
Shared Modules (configs/)
pkgs.nix— system-wide packagesdesktop.nix— GDM + i3, PipeWire audio, Bluetooth, CUPSdesktop-packages.nix— GUI applications (imported by desktop.nix)git.nix— git identity configqemu.nix— QEMU/KVM virtualization
Key Design Decisions
- No home-manager — all config is system-level NixOS modules
- No overlays — packages are used directly;
allowUnfree = true - No secrets manager — SSH keys via gpg-agent,
doas(not sudo) for privilege escalation - Podman with Docker compatibility enabled on all hosts
- Tailscale and Syncthing enabled on all hosts
- LUKS encryption on some hosts (rift, ono-sendai)
inputsare passed to modules viaspecialArgs