Nix 2.28 – 2.34 (bridge)
| Area | Change |
|---|---|
| Fetchers | Stricter NAR hash mismatches; prefer SRI hash = "sha256-…" over legacy sha256. |
| Flakes | Source trees copied into the store more lazily (completed in 2.35). |
nix store |
diff-closures, copy, ping remain the daily ops set. |
Pin nixos-25.11 only to read old machines. Do not start new desk hosts there: it reached EOL on 2026-06-30.
Nix 2.35
| Area | Change |
|---|---|
| Flake sources | Copied to the store lazily; unused flake files are not hashed into evaluation unless needed. |
| Sandbox | FreeBSD jail sandboxing; Linux sandbox unchanged. |
| Installer | Current upstream installer ships 2.35.2 (2026-08). |
| Security | Recursive-nix advisory fix from the 2.35.0 series. |
Key feature — current CLI on a 26.05 host
Stock 26.05 may print nix (Nix) 2.34.x. For this book’s 2.35+ baseline, install the upstream Nix installer on foreign Linux/macOS, or set nix.package = pkgs.nixVersions.latest; (or nix_2_35) on NixOS. Then:
nix --version
nix flake metadata github:NixOS/nixpkgs/nixos-26.05Output (shape, after pinning 2.35):
nix (Nix) 2.35.2
Resolved URL: github:NixOS/nixpkgs/nixos-26.05
NixOS 25.05 / 25.11
25.05 and 25.11 are previous stables. 25.11 “Xantusia” is deprecated (EOL 2026-06-30). If system.stateVersion is "25.11", leave it and move the flake input to nixos-26.05.
NixOS 26.05 — Yarara
| Area | Change |
|---|---|
| Support | Bugfix/security until 2026-12-31. |
| Initrd | Stage-1 systemd initrd is the default (not the old scripted initrd). |
| Toolchain | GCC 15; GNOME 50 on desktop ISOs. |
| Nix | Channel ships Nix 2.34; book CLI baseline remains 2.35+ (installer or nix.package). |
| Modules | New options; confirm names with nixos-option if a 24.11 snippet fails eval. |
Key feature — pin 26.05 in the desk flake
Save as flake.nix:
# flake.nix
{
description = "Desk workstation on NixOS 26.05";
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-26.05";
outputs = { self, nixpkgs }: {
nixosConfigurations.desk-workstation = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
{
networking.hostName = "desk-workstation";
system.stateVersion = "26.05";
}
];
};
};
}nix flake metadata
sudo nixos-rebuild dry-build --flake .#desk-workstationQuick-Reference Matrix
The table below maps each NixOS release to the Nix CLI it ships and highlights the single most operationally significant change per pair.
| NixOS Release | Nix Version Shipped | Most Impactful Addition |
|---|---|---|
| 23.05 Stoat | 2.13 | Flakes opt-in stable via experimental-features |
| 23.11 Tapir | 2.18 | nix flake metadata improvements; --log-format for CI |
| 24.05 Uakari | 2.22 | nix build --rebuild reproducibility check; systemd initrd opt-in |
| 24.11 Vicuna | 2.24 | nix store diff-closures stable; services.openssh.settings.AllowGroups |
| 25.05 | 2.28 | nix flake check / fetch-tree hardening; module cleanups |
| 25.11 Xantusia | 2.31 | EOL 2026-06-30; last train before Yarara |
| 26.05 Yarara | 2.34 (pin 2.35+) | Current baseline; systemd stage-1 initrd default; GCC 15 |
Nix 2.19–2.34 intermediate releases are available via pkgs.nixVersions even when the channel ships another version. Pin only when you need a CLI feature the channel does not have yet:
# configuration.nix (pin Nix version independently of channel)
{ pkgs, ... }:
{
nix.package = pkgs.nixVersions.latest; # or pkgs.nixVersions.nix_2_35
}