Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

ADR-0002: one real nixosConfiguration, no decoy split

Status: accepted (2026-07-06)

Context

ward-os shipped nixosConfigurations.workstation as a headless CI-safe decoy and hid the real machine behind a custom installable.workstation output. That kept nix flake check green in CI, but broke every stock tool (nixos-rebuild –flake targeted the wrong config), confused every session, and meant CI never evaluated the closure that actually runs.

Decision

One output: nixosConfigurations.noreply-hardware, the real machine. There is no decoy and no installable.* namespace. CI checks are made eval-safe (pure eval, no secrets read at eval time) instead of the machine being made check-shaped. nix flake check and build.yml exercise the real closure.

Alternatives considered

  • Keep the decoy/installable split: proven confusing and check-hollow.
  • Per-environment configs (ci-baseline + real): same problem, renamed.

Consequences

Stock tooling works unmodified. Anything that cannot evaluate in CI is a bug in the module, not a reason to fork the config. The wrong-disk guard moves into the config itself (ADR-0004) since there is no placeholder tree.