doc/manual/source/release-notes/rl-2.23.md
New builtin: builtins.warn #306026 #10592
builtins.warn behaves like builtins.trace "warning: ${msg}", has an accurate log level, and is controlled by the options
debugger-on-trace,
debugger-on-warn and
abort-on-warn.
Make nix build --keep-going consistent with nix-build --keep-going
This means that if e.g. multiple fixed-output derivations fail to build, all hash mismatches are displayed.
Modify nix derivation {add,show} JSON format #9866 #10722
The JSON format for derivations has been slightly revised to better conform to our JSON guidelines.
In particular, the hash algorithm and content addressing method of content-addressed derivation outputs are now separated into two fields hashAlgo and method,
rather than one field with an arcane :-separated format.
This JSON format is only used by the experimental nix derivation family of commands, at this time.
Future revisions are expected as the JSON format is still not entirely in compliance even after these changes.
Warn on unknown settings anywhere in the command line #10701
All nix commands will now properly warn when an unknown option is specified anywhere in the command line.
Before:
$ nix-instantiate --option foobar baz --expr '{}'
warning: unknown setting 'foobar'
$ nix-instantiate '{}' --option foobar baz --expr
$ nix eval --expr '{}' --option foobar baz
{ }
After:
$ nix-instantiate --option foobar baz --expr '{}'
warning: unknown setting 'foobar'
$ nix-instantiate '{}' --option foobar baz --expr
warning: unknown setting 'foobar'
$ nix eval --expr '{}' --option foobar baz
warning: unknown setting 'foobar'
{ }
nix env shell is the new nix shell, and nix shell remains an accepted alias #10504 #10807
This is part of an effort to bring more structure to the CLI subcommands.
nix env will be about the process environment.
Future commands may include nix env run and nix env print-env.
It is also somewhat analogous to the planned nix dev shell (currently nix develop), which is less about environment variables, and more about running a development shell, which is a more powerful command, but also requires more setup.
Flake operations that expect derivations now print the failing value and its type #10778
In errors like flake output attribute 'nixosConfigurations.yuki.config' is not a derivation or path, the message now includes the failing value and type.
Before:
error: flake output attribute 'nixosConfigurations.yuki.config' is not a derivation or path
After:
error: expected flake output attribute 'nixosConfigurations.yuki.config' to be a derivation or path but found a set: { appstream = «thunk»; assertions = «thunk»; boot = { bcache = «thunk»; binfmt = «thunk»; binfmtMiscRegistrations = «thunk»; blacklistedKernelModules = «thunk»; bootMount = «thunk»; bootspec = «thunk»; cleanTmpDir = «thunk»; consoleLogLevel = «thunk»; «43 attributes elided» }; «48 attributes elided» }
fetchTree now fetches Git repositories shallowly by default #10028
builtins.fetchTree now clones Git repositories shallowly by default, which reduces network traffic and disk usage significantly in many cases.
Previously, the default behavior was to clone the full history of a specific tag or branch (e.g. ref) and only afterwards extract the files of one specific revision.
From now on, the ref and allRefs arguments will be ignored, except if shallow cloning is disabled by setting shallow = false.
The defaults for builtins.fetchGit remain unchanged. Here, shallow cloning has to be enabled manually by passing shallow = true.
Store object info JSON format now uses null rather than omitting fields #9995
The store object info JSON format, used for e.g. nix path-info, no longer omits fields to indicate absent information, but instead includes the fields with a null value.
For example, "ca": null is used to indicate a store object that isn't content-addressed rather than omitting the ca field entirely.
This makes records of this sort more self-describing, and easier to consume programmatically.
We will follow this design principle going forward; the JSON guidelines in the contributing section have been updated accordingly.
Large path warnings #10661
Nix can now warn when evaluation of a Nix expression causes a large
path to be copied to the Nix store. The threshold for this warning can
be configured using the warn-large-path-threshold
setting,
e.g. --warn-large-path-threshold 100M will warn about paths larger
than 100 MiB.