Skip to content

Repository files navigation

How This README Is Generated1

Each section is contributed by whichever module it documents, via text.readme.parts.<name>, and assembled in the order listed by text.readme.order. For example, the Hosts section below comes from hosts.nix, not this file - each module documents itself next to its own definition rather than everything living in one place.

Regenerate after editing any parts.* with:

write-files

(available in the devshell).

Input Management2

Inputs are pinned with nixtamal and resolved with with-inputs. There is no flake.lock; pins live in lock.json.

Entry points

File Purpose
default.nix Primary entry point; returns full flake outputs
system.nix Convenience entry point; selects the NixOS config for the current hostname (impure - reads /etc/hostname)
flake.nix Thin shim so flake-aware tools still work

Switching

nh os switch -f ./system.nix

Updating inputs

nixtamal refresh             # refresh all non-frozen inputs
nixtamal refresh <name>      # refresh one input
nixtamal check-soundness     # verify all fetches resolve

Hosts3

The set of NixOS hosts is defined via an option which accepts deferred modules. Differentiating the hosts as a subset of the NixOS modules allows us to map over the hosts without string matching.

See usage at autolycus.

Closure Checks4

Closure size checks are defined via the closureChecks option. Each entry logs the human-readable closure size; an optional budget field causes the check to fail if the size exceeds it.

See checks at closureChecks/.

Footnotes

  1. Written at readme.nix.

  2. Written at inputs.nix.

  3. Written at hosts.nix.

  4. Written at closureChecks.nix.