- JavaScript 68%
- Nix 26%
- CSS 2%
- Rust 1%
- HTML 1%
- 6 more languages 2%
ark #
NixOS and home-manager configurations, packages and modules.
Source of truth #
Ark is the canonical flake. Keep host changes here rather than rebuilding from
an old nixcfg checkout or a migration worktree.
Valefar's configuration is hosts/valefar/; on the host this repo is checked out
(branch terra) at ~/.config/nixos, and /etc/nixos only holds a pointer note.
Its RustFS credentials stay encrypted in secrets/rustfs-credentials.env.age; its
service refuses to start unless /rustfs is mounted. Keep the existing system
generation for rollback.
Focalor (hosts/focalor/) is set up the same way: ark at ~/.config/nixos, a
pointer note in /etc/nixos, deployed with nix run .#deploy -- focalor --target-build.
Build on an x86_64 Linux machine: some inputs use Linux import-from-derivation, so evaluating these hosts on macOS can fail with a platform mismatch.
nix build --no-write-lock-file --no-link --print-out-paths \
.#nixosConfigurations.valefar.config.system.build.toplevel
nix eval --no-write-lock-file --raw \
.#nixosConfigurations.focalor.config.system.build.toplevel.drvPath
After reviewing the build and service changes, deploy Valefar from this checkout:
nix run .#deploy -- valefar --target-build
The default is a live switch, not a reboot. That is only safe when the kernel and
the nvidia driver are unchanged: a live switch swaps the userspace driver under the
already-loaded kernel module and breaks the GPU (and skews zfs). Compare first, and
use --boot plus a planned reboot (VMs and services go down) when either moves:
nix store diff-closures /run/current-system "$new" | rg 'linux-6|nvidia|zfs'
After a reboot into a new generation, if you pinned the old one as a fallback with
bootctl set-default, run sudo bootctl set-default '' once it is healthy. A left-over
EFI default overrides the loader.conf nixos writes, so later deploys would still
boot the pinned generation.
A failed agenix secret does not fail the switch. After deploying, check that every
secret in hosts/valefar/secrets.nix exists under /run/agenix; a missing
pia-wireguard-auth.env leaves the two PIA containers failing to start.
Valefar services outside this repo #
- Bonsai 2 27B (
hosts/valefar/bonsai.nix, packageterra.llama-cpp-bonsai):bonsai2.serviceserves it on127.0.0.1:8899and a socket exposes it on the LAN and tailnet addresses without an API key, since the host firewall is off. The weights are not in the store:~/models/bonsai2-27b/Ternary-Bonsai-2-27B-PTQ1_0-mtp-lean.gguf(sudoingX's MTP graft; the other quants are in/storage/models/bonsai2-27b/). - Spindle (
hosts/valefar/spindle.nix, ci.klbr.net) and its ncps binary cache keep their state in the hand-made datasetsrustfs/spindle(quota 400G) andrustfs/nix-cache(quota 200G). ci.klbr.net reaches it through trimounts:spindle-tunnelholds the private half of the keyhosts/trimounts/modules/spindle.nixauthorizes, so rotating that key needs a trimounts deploy too. - VM disks (niri, dawn) are Proxmox state in
/etc/pve, not nix. Both live on theHBAdrivestorage (/storage). storagezpool is two partitions of one 8 TB SAS disk striped together, so there is no redundancy; only therustfspool is on a different disk. Its USB/SAS adapter (152d:0562) uses bulk-only transport viausb-storage.quirks=152d:0562:u. Keep that quirk: capacity and file reads were verified at 5 Gbps withusb-storage, while the initial UAS connection failed. ZFS already imports the pool and uses its existing/storagemountpoint; no new filesystem or pool is needed.
The Yoga laptop runs Fedora, not NixOS. Its current desktop dotfiles are unmanaged; do not apply Valefar's NixOS configuration there. Moving them to home-manager is a separate change.