Skip to content

chore(nix): bump the seed installer pin 2.28.3 → 2.35.1 - #139

Merged
dlovell merged 1 commit into
mainfrom
chore/bump-nix-2.35.1
Aug 7, 2026
Merged

chore(nix): bump the seed installer pin 2.28.3 → 2.35.1#139
dlovell merged 1 commit into
mainfrom
chore/bump-nix-2.35.1

Conversation

@dlovell

@dlovell dlovell commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

#135 repaired dev/bump-nix — it resolves versions from /tags, since NixOS/nix publishes no releases — but repairing the resolver does not move the pin, and nothing in the tree notices a stale one. The coupling is tool:-guarded precisely because no hermetic test can verify an installer checksum, so a tool nobody runs is indistinguishable from a pin that is current.

So: run the tool. NIX_VERSION and NIX_INSTALLER_SHA256 move together or not at all, which makes this a two-line whole-pin rewrite rather than a half-bump.

Verification

The suite cannot reach this coupling, so I checked the parts it can't — against a real build and a real seeded volume:

Check Result
The checksum is really the release's A second independent download of nix-2.35.1/install hashes to the committed 34e0ef63…
sha256sum -c passes at the real build site A docker build running the same two lines every nix-seed overlay uses (. nix-seed.sh; nix_build_install) on the classic route's base image
The seeded profile still lands on PATH (the NIX_USER invariant) Seeding a fresh /nix volume from the new tarball leaves nix (Nix) 2.35.1 on PATH at the exact /home/vscode/.nix-profile/bin literal the overlays repeat in EXTRA_PATH, with nix.conf's sandbox forced off as before
No installer drift over 7 minor versions --no-daemon is still a supported install mode, and scripts/nix-profile.sh.in is byte-identical between the two tags — neither the flag nor profile resolution moved
nix/base unaffected It builds its store from nixpkgs and references the installer pin nowhere
Hermetic suite + hooks tests/run-all 0 failed; pre-commit run --all-files clean

Stale prose, dropped rather than re-synced

The bump made two copies of the old version stale: a comment in projects/xorq-desktop/install-system.sh and an example snippet in nix/base/README.md, both naming 2.28.3. Both get pointers to the single pin instead of a refreshed number — a restated value is a drift source, and these two are exactly the "prose stood in for a guard" shape CLAUDE.md records.

No new guard ships with them because there is no longer a second copy to disagree: the fact is structural now, living in lib/nix-seed.sh alone. The README also now names devcontainer bump-nix as the way to move the shared pin, which it previously did not.

Out of scope, filed separately

While checking the NIX_USER invariant I found that nix_seed_volume's fallback symlinks ~/.nix-profile/nix/var/nix/profiles/per-user/$NIX_USER/profile, but nix installs the single-user profile to $HOME/.local/state/nix/profiles/profileper-user/ is an empty directory in the seed tarball. This is identical at 2.28.3, so it is not a regression from this bump, and it is latent rather than live: the branch is gated on [ ! -e "$HOME/.nix-profile" ] and the installer's own compat symlink is baked into the image, so the guard never fires today. Deliberately untouched here to keep this PR a pin bump.

Closes #137

🤖 Generated with Claude Code

`#135` repaired `dev/bump-nix` (it resolves from /tags, since NixOS/nix
publishes no releases) but repairing the resolver does not move the pin, and
nothing in the tree notices a stale one: the coupling is `tool:`-guarded
precisely because no hermetic test can verify an installer checksum, so a tool
nobody runs is indistinguishable from a pin that is current.

Run the tool. `NIX_VERSION` and `NIX_INSTALLER_SHA256` move together or not at
all, so this is a two-line whole-pin rewrite, not a half-bump.

Verified against the real build and runtime rather than the suite alone, since
this is exactly the coupling no offline test can reach:

- the checksum is the release's — a second independent download of
  nix-2.35.1/install hashes to the committed value;
- `sha256sum -c` passes at the real build site, in a docker build running the
  same two lines every nix-seed overlay uses (`. nix-seed.sh; nix_build_install`)
  on the classic route's base image;
- the seeded profile still lands on PATH per the `NIX_USER` invariant: seeding a
  fresh `/nix` volume from the new tarball leaves `nix (Nix) 2.35.1` on PATH at
  the exact `/home/vscode/.nix-profile/bin` literal the overlays repeat in
  `EXTRA_PATH`, with nix.conf's sandbox forced off as before;
- `--no-daemon` is still a supported install mode and `scripts/nix-profile.sh.in`
  is byte-identical across the jump, so neither the flag nor profile resolution
  drifted over 7 minor versions;
- `nix/base` is unaffected: it builds its store from nixpkgs and references the
  installer pin nowhere.

Also drop the two prose copies of the old version this bump just made stale — a
comment in `xorq-desktop/install-system.sh` and an example in
`nix/base/README.md`, both naming 2.28.3. They get pointers to the single pin
rather than a re-synced number: a restated value is a drift source, and these
two are the "prose stood in for a guard" shape CLAUDE.md already records. No new
guard comes with them because there is no longer a second copy to disagree —
the fact is structural now, living in `lib/nix-seed.sh` alone.

Closes #137

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@dlovell
dlovell merged commit 97430dc into main Aug 7, 2026
7 checks passed
@dlovell
dlovell deleted the chore/bump-nix-2.35.1 branch August 7, 2026 19:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Run the repaired dev/bump-nix: the pin is still on 2.28.3 with upstream at 2.35.1

1 participant