Release 2.26.0 (2025-01-22)
-
Support for relative path inputs #10089
Flakes can now refer to other flakes in the same repository using relative paths, e.g.
inputs.foo.url = "path:./foo";
uses the flake in the
foo
subdirectory of the referring flake. For more information, see the documentation on thepath
flake input type.This feature required a change to the lock file format. Previous Nix versions will not be able to use lock files that have locks for relative path inputs in them.
-
Flake lock file generation now ignores local registries #12019
When resolving indirect flake references like
nixpkgs
inflake.nix
files, Nix will no longer use the system and user flake registries. It will only use the global flake registry and overrides given on the command line via--override-flake
.This avoids accidents where users have local registry overrides that map
nixpkgs
to apath:
flake in the local file system, which then end up in committed lock files pushed to other users.In the future, we may remove the use of the registry during lock file generation altogether. It's better to explicitly specify the URL of a flake input. For example, instead of
{ outputs = { self, nixpkgs }: { ... }; }
write
{ inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.11"; outputs = { self, nixpkgs }: { ... }; }
-
nix copy
supports--profile
and--out-link
#11657The
nix copy
command now has flags--profile
and--out-link
, similar tonix build
.--profile
makes a profile point to the top-level store path, while--out-link
create symlinks to the top-level store paths.For example, when updating the local NixOS system profile from a NixOS system closure on a remote machine, instead of
# nix copy --from ssh://server $path # nix build --profile /nix/var/nix/profiles/system $path
you can now do
# nix copy --from ssh://server --profile /nix/var/nix/profiles/system $path
The advantage is that this avoids a time window where path is not a garbage collector root, and so could be deleted by a concurrent
nix store gc
process. -
nix-instantiate --eval
now supports--raw
#12119The
nix-instantiate --eval
command now supports a--raw
flag, when used the evaluation result must be a string, which is printed verbatim without quotation marks or escaping. -
Improved
NIX_SSHOPTS
parsing for better SSH option handling #5181 #12020The parsing of the
NIX_SSHOPTS
environment variable has been improved to handle spaces and quotes correctly. Previously, incorrectly split SSH options could cause failures in commands likenix-copy-closure
, especially when using complex SSH invocations such as-o ProxyCommand="ssh -W %h:%p ..."
.This change introduces a
shellSplitString
function to ensure thatNIX_SSHOPTS
is parsed in a manner consistent with shell behavior, addressing common parsing errors.For example, the following now works as expected:
export NIX_SSHOPTS='-o ProxyCommand="ssh -W %h:%p ..."'
This update improves the reliability of SSH-related operations using
NIX_SSHOPTS
across Nix CLIs. -
Nix is now built using Meson
As proposed in RFC 132, Nix's build system now uses Meson/Ninja. The old Make-based build system has been removed.
-
Evaluation caching now works for dirty Git workdirs #11992
Contributors
This release was made possible by the following 45 contributors:
- Anatoli Babenia (@abitrolly)
- Domagoj Mišković (@allrealmsoflife)
- Yaroslav Bolyukin (@CertainLach)
- bryango (@bryango)
- tomberek (@tomberek)
- Matej Urbas (@mupdt)
- elikoga (@elikoga)
- wh0 (@wh0)
- Félix (@picnoir)
- Valentin Gagarin (@fricklerhandwerk)
- Gavin John (@Pandapip1)
- Travis A. Everett (@abathur)
- Vladimir Panteleev (@CyberShadow)
- Ilja (@suruaku)
- Jason Yundt (@Jayman2000)
- Mike Kusold (@kusold)
- Andy Hamon (@andrewhamon)
- Brian McKenna (@puffnfresh)
- Greg Curtis (@gcurtis)
- Andrew Poelstra (@apoelstra)
- Linus Heckemann (@lheckemann)
- Tristan Ross (@RossComputerGuy)
- Dominique Martinet (@martinetd)
- h0nIg (@h0nIg)
- Eelco Dolstra (@edolstra)
- Shahar "Dawn" Or (@mightyiam)
- NAHO (@trueNAHO)
- Ryan Hendrickson (@rhendric)
- the-sun-will-rise-tomorrow (@the-sun-will-rise-tomorrow)
- Connor Baker (@ConnorBaker)
- Cole Helbling (@cole-h)
- Jack Wilsdon (@jackwilsdon)
- rekcäH nitraM (@dwt)
- Martin Fischer (@not-my-profile)
- John Ericson (@Ericson2314)
- Graham Christensen (@grahamc)
- Sergei Zimmerman (@xokdvium)
- Siddarth Kumar (@siddarthkay)
- Sergei Trofimovich (@trofi)
- Robert Hensing (@roberth)
- Mutsuha Asada (@momeemt)
- Parker Jones (@knotapun)
- Jörg Thalheim (@Mic92)
- dbdr (@dbdr)
- myclevorname (@myclevorname)
- Philipp Otterbein