Skip to content

Commit a492493

Browse files
committed
Rearrange release notes
1 parent 2c0343e commit a492493

File tree

1 file changed

+37
-29
lines changed

1 file changed

+37
-29
lines changed

doc/manual/source/release-notes/rl-2.30.md

Lines changed: 37 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,6 @@
11
# Release 2.30.0 (2025-07-07)
22

3-
- Reduce the size of value from 24 to 16 bytes [#13407](https://github.com/NixOS/nix/pull/13407)
4-
5-
This shaves off a very significant amount of memory used for evaluation (~20% percent reduction in maximum heap size and ~17% in total bytes).
6-
7-
- `builtins.sort` uses PeekSort [#12623](https://github.com/NixOS/nix/pull/12623)
8-
9-
Previously it used libstdc++'s `std::stable_sort()`. However, that implementation is not reliable if the user-supplied comparison function is not a strict weak ordering.
10-
11-
- `nix repl` prints which variables were loaded [#11406](https://github.com/NixOS/nix/pull/11406)
12-
13-
Instead of `Added <n> variables` it now prints the first 10 variables that were added to the global scope.
14-
15-
- `nix flake archive`: add `--no-check-sigs` option [#13277](https://github.com/NixOS/nix/pull/13277)
16-
17-
This is useful when using `nix flake archive` with the destination set to a remote store.
18-
19-
- Emit warnings for IFDs with `trace-import-from-derivation` option [#13279](https://github.com/NixOS/nix/pull/13279)
20-
21-
While we have the setting `allow-import-from-derivation` to deny import-from-derivation (IFD), sometimes users would like to observe IFDs during CI processes to gradually phase out the idiom. The new setting `trace-import-from-derivation`, when set, logs a simple warning to the console.
3+
## Backward-incompatible changes and deprecations
224

235
- `build-dir` no longer defaults to `$TMPDIR`
246

@@ -28,7 +10,7 @@
2810
cause build impurities even when not used maliciously. We now default to `builds`
2911
in `NIX_STATE_DIR` (which is `/nix/var/nix/builds` in the default configuration).
3012

31-
- Deprecate manually making structured attrs with `__json = ...;` [#13220](https://github.com/NixOS/nix/pull/13220)
13+
- Deprecate manually making structured attrs using the `__json` attribute [#13220](https://github.com/NixOS/nix/pull/13220)
3214

3315
The proper way to create a derivation using [structured attrs] in the Nix language is by using `__structuredAttrs = true` with [`builtins.derivation`].
3416
However, by exploiting how structured attrs are implementated, it has also been possible to create them by setting the `__json` environment variable to a serialized JSON string.
@@ -37,6 +19,20 @@
3719
[structured attrs]: @docroot@/language/advanced-attributes.md#adv-attr-structuredAttrs
3820
[`builtins.derivation`]: @docroot@/language/builtins.html#builtins-derivation
3921

22+
- Rename `nix profile install` to `nix profile add` [#13224](https://github.com/NixOS/nix/pull/13224)
23+
24+
The command `nix profile install` has been renamed to `nix profile add` (though the former is still available as an alias). This is because the verb "add" is a better antonym for the verb "remove" (i.e. `nix profile remove`). Nix also does not have install hooks or general behavior often associated with "installing".
25+
26+
## Performance improvements
27+
28+
This release has a number performance improvements, in particular:
29+
30+
- Reduce the size of value from 24 to 16 bytes [#13407](https://github.com/NixOS/nix/pull/13407)
31+
32+
This shaves off a very significant amount of memory used for evaluation (~20% percent reduction in maximum heap size and ~17% in total bytes).
33+
34+
## Features
35+
4036
- Add stack sampling evaluation profiler [#13220](https://github.com/NixOS/nix/pull/13220)
4137

4238
Nix evaluator now supports stack sampling evaluation profiling via `--eval-profiler flamegraph` setting.
@@ -48,13 +44,21 @@
4844
Unlike existing `--trace-function-calls` this profiler includes the name of the function
4945
being called when it's available.
5046

51-
- `json-log-path` setting [#13003](https://github.com/NixOS/nix/pull/13003)
47+
- `nix repl` prints which variables were loaded [#11406](https://github.com/NixOS/nix/pull/11406)
5248

53-
New setting `json-log-path` that sends a copy of all Nix log messages (in JSON format) to a file or Unix domain socket.
49+
Instead of `Added <n> variables` it now prints the first 10 variables that were added to the global scope.
5450

55-
- Rename `nix profile install` to `nix profile add` [#13224](https://github.com/NixOS/nix/pull/13224)
51+
- `nix flake archive`: Add `--no-check-sigs` option [#13277](https://github.com/NixOS/nix/pull/13277)
5652

57-
The command `nix profile install` has been renamed to `nix profile add` (though the former is still available as an alias). This is because the verb "add" is a better antonym for the verb "remove" (i.e. `nix profile remove`). Nix also does not have install hooks or general behavior often associated with "installing".
53+
This is useful when using `nix flake archive` with the destination set to a remote store.
54+
55+
- Emit warnings for IFDs with `trace-import-from-derivation` option [#13279](https://github.com/NixOS/nix/pull/13279)
56+
57+
While we have the setting `allow-import-from-derivation` to deny import-from-derivation (IFD), sometimes users would like to observe IFDs during CI processes to gradually phase out the idiom. The new setting `trace-import-from-derivation`, when set, logs a simple warning to the console.
58+
59+
- `json-log-path` setting [#13003](https://github.com/NixOS/nix/pull/13003)
60+
61+
New setting `json-log-path` that sends a copy of all Nix log messages (in JSON format) to a file or Unix domain socket.
5862

5963
- Non-flake inputs now contain a `sourceInfo` attribute [#13164](https://github.com/NixOS/nix/issues/13164) [#13170](https://github.com/NixOS/nix/pull/13170)
6064

@@ -70,23 +74,27 @@
7074
This iterates on the work done in 2.26 to improve relative path support ([#10089](https://github.com/NixOS/nix/pull/10089)),
7175
and resolves a regression introduced in 2.28 relating to nested relative path inputs ([#13164](https://github.com/NixOS/nix/issues/13164)).
7276

77+
## Miscellaneous changes
78+
79+
- `builtins.sort` uses PeekSort [#12623](https://github.com/NixOS/nix/pull/12623)
80+
81+
Previously it used libstdc++'s `std::stable_sort()`. However, that implementation is not reliable if the user-supplied comparison function is not a strict weak ordering.
82+
7383
- Revert incomplete closure mixed download and build feature [#77](https://github.com/NixOS/nix/issues/77) [#12628](https://github.com/NixOS/nix/issues/12628) [#13176](https://github.com/NixOS/nix/pull/13176)
7484

7585
Since Nix 1.3 (299141ecbd08bae17013226dbeae71e842b4fdd7 in 2013) Nix has attempted to mix together upstream fresh builds and downstream substitutions when remote substuters contain an "incomplete closure" (have some store objects, but not the store objects they reference).
7686
This feature is now removed.
7787

78-
Worst case, removing this feature could cause more building downstream, but it should not cause outright failures, since this is not happening for opaque store objects that we don't know how to build if we decide not to substitute.
79-
In practice, however, we doubt even the more building is very likely to happen.
88+
In the worst case, removing this feature could cause more building downstream, but it should not cause outright failures, since this is not happening for opaque store objects that we don't know how to build if we decide not to substitute.
89+
In practice, however, we doubt even more building is very likely to happen.
8090
Remote stores that are missing dependencies in arbitrary ways (e.g. corruption) don't seem to be very common.
8191

8292
On the contrary, when remote stores fail to implement the [closure property](@docroot@/store/store-object.md#closure-property), it is usually an *intentional* choice on the part of the remote store, because it wishes to serve as an "overlay" store over another store, such as `https://cache.nixos.org`.
8393
If an "incomplete closure" is encountered in that situation, the right fix is not to do some sort of "franken-building" as this feature implemented, but instead to make sure both substituters are enabled in the settings.
8494

8595
(In the future, we should make it easier for remote stores to indicate this to clients, to catch settings that won't work in general before a missing dependency is actually encountered.)
8696

87-
88-
# Contributors
89-
97+
## Contributors
9098

9199
This release was made possible by the following 32 contributors:
92100

0 commit comments

Comments
 (0)