From 8a9e625ba5483f08aaef7c4b7074042bcc7f0f57 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 7 Jul 2025 14:06:24 +0200 Subject: [PATCH 1/8] release notes: 2.30.0 --- doc/manual/rl-next/build-dir-mandatory.md | 9 -- doc/manual/rl-next/deprecate__json.md | 11 -- doc/manual/rl-next/eval-profiler.md | 13 --- doc/manual/rl-next/json-logger.md | 6 - doc/manual/rl-next/nix-profile-add.md | 6 - .../rl-next/outpath-and-sourceinfo-fixes.md | 17 --- doc/manual/rl-next/revert-77.md | 17 --- doc/manual/source/SUMMARY.md.in | 1 + doc/manual/source/release-notes/rl-2.30.md | 106 ++++++++++++++++++ .../data/release-credits-email-to-handle.json | 21 +++- .../data/release-credits-handle-to-name.json | 18 ++- 11 files changed, 144 insertions(+), 81 deletions(-) delete mode 100644 doc/manual/rl-next/build-dir-mandatory.md delete mode 100644 doc/manual/rl-next/deprecate__json.md delete mode 100644 doc/manual/rl-next/eval-profiler.md delete mode 100644 doc/manual/rl-next/json-logger.md delete mode 100644 doc/manual/rl-next/nix-profile-add.md delete mode 100644 doc/manual/rl-next/outpath-and-sourceinfo-fixes.md delete mode 100644 doc/manual/rl-next/revert-77.md create mode 100644 doc/manual/source/release-notes/rl-2.30.md diff --git a/doc/manual/rl-next/build-dir-mandatory.md b/doc/manual/rl-next/build-dir-mandatory.md deleted file mode 100644 index cb45a4315..000000000 --- a/doc/manual/rl-next/build-dir-mandatory.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -synopsis: "`build-dir` no longer defaults to `$TMPDIR`" ---- - -The directory in which temporary build directories are created no longer defaults -to `TMPDIR` or `/tmp`, to avoid builders making their directories -world-accessible. This behavior allowed escaping the build sandbox and can -cause build impurities even when not used maliciously. We now default to `builds` -in `NIX_STATE_DIR` (which is `/nix/var/nix/builds` in the default configuration). diff --git a/doc/manual/rl-next/deprecate__json.md b/doc/manual/rl-next/deprecate__json.md deleted file mode 100644 index 7fc05832f..000000000 --- a/doc/manual/rl-next/deprecate__json.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -synopsis: Deprecate manually making structured attrs with `__json = ...;` -prs: [13220] ---- - -The proper way to create a derivation using [structured attrs] in the Nix language is by using `__structuredAttrs = true` with [`builtins.derivation`]. -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. -This sneaky alternative method is now deprecated, and may be disallowed in future versions of Nix. - -[structured attrs]: @docroot@/language/advanced-attributes.md#adv-attr-structuredAttrs -[`builtins.derivation`]: @docroot@/language/builtins.html#builtins-derivation diff --git a/doc/manual/rl-next/eval-profiler.md b/doc/manual/rl-next/eval-profiler.md deleted file mode 100644 index 6b2bf2ce7..000000000 --- a/doc/manual/rl-next/eval-profiler.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -synopsis: Add stack sampling evaluation profiler -prs: [13220] ---- - -Nix evaluator now supports stack sampling evaluation profiling via `--eval-profiler flamegraph` setting. -It collects collapsed call stack information to output file specified by -`--eval-profile-file` (`nix.profile` by default) in a format directly consumable -by `flamegraph.pl` and compatible tools like [speedscope](https://speedscope.app/). -Sampling frequency can be configured via `--eval-profiler-frequency` (99 Hz by default). - -Unlike existing `--trace-function-calls` this profiler includes the name of the function -being called when it's available. diff --git a/doc/manual/rl-next/json-logger.md b/doc/manual/rl-next/json-logger.md deleted file mode 100644 index 867b5d8b3..000000000 --- a/doc/manual/rl-next/json-logger.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -synopsis: "`json-log-path` setting" -prs: [13003] ---- - -New setting `json-log-path` that sends a copy of all Nix log messages (in JSON format) to a file or Unix domain socket. diff --git a/doc/manual/rl-next/nix-profile-add.md b/doc/manual/rl-next/nix-profile-add.md deleted file mode 100644 index a2fbcaa8d..000000000 --- a/doc/manual/rl-next/nix-profile-add.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -synopsis: "Rename `nix profile install` to `nix profile add`" -prs: [13224] ---- - -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". diff --git a/doc/manual/rl-next/outpath-and-sourceinfo-fixes.md b/doc/manual/rl-next/outpath-and-sourceinfo-fixes.md deleted file mode 100644 index 479a2f5cb..000000000 --- a/doc/manual/rl-next/outpath-and-sourceinfo-fixes.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -synopsis: Non-flake inputs now contain a `sourceInfo` attribute -issues: 13164 -prs: 13170 ---- - -Flakes have always a `sourceInfo` attribute which describes the source of the flake. -The `sourceInfo.outPath` is often identical to the flake's `outPath`, however it can differ when the flake is located in a subdirectory of its source. - -Non-flake inputs (i.e. inputs with `flake = false`) can also be located at some path _within_ a wider source. -This usually happens when defining a relative path input within the same source as the parent flake, e.g. `inputs.foo.url = ./some-file.nix`. -Such relative inputs will now inherit their parent's `sourceInfo`. - -This also means it is now possible to use `?dir=subdir` on non-flake inputs. - -This iterates on the work done in 2.26 to improve relative path support ([#10089](https://github.com/NixOS/nix/pull/10089)), -and resolves a regression introduced in 2.28 relating to nested relative path inputs ([#13164](https://github.com/NixOS/nix/issues/13164)). diff --git a/doc/manual/rl-next/revert-77.md b/doc/manual/rl-next/revert-77.md deleted file mode 100644 index c2cef74d3..000000000 --- a/doc/manual/rl-next/revert-77.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -synopsis: Revert incomplete closure mixed download and build feature -issues: [77, 12628] -prs: [13176] ---- - -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). -This feature is now removed. - -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. -In practice, however, we doubt even the more building is very likely to happen. -Remote stores that are missing dependencies in arbitrary ways (e.g. corruption) don't seem to be very common. - -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`. -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. - -(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.) diff --git a/doc/manual/source/SUMMARY.md.in b/doc/manual/source/SUMMARY.md.in index 8326a96e3..bfb921567 100644 --- a/doc/manual/source/SUMMARY.md.in +++ b/doc/manual/source/SUMMARY.md.in @@ -137,6 +137,7 @@ - [Contributing](development/contributing.md) - [Releases](release-notes/index.md) {{#include ./SUMMARY-rl-next.md}} + - [Release 2.30 (2025-07-07)](release-notes/rl-2.30.md) - [Release 2.29 (2025-05-14)](release-notes/rl-2.29.md) - [Release 2.28 (2025-04-02)](release-notes/rl-2.28.md) - [Release 2.27 (2025-03-03)](release-notes/rl-2.27.md) diff --git a/doc/manual/source/release-notes/rl-2.30.md b/doc/manual/source/release-notes/rl-2.30.md new file mode 100644 index 000000000..b205bad51 --- /dev/null +++ b/doc/manual/source/release-notes/rl-2.30.md @@ -0,0 +1,106 @@ +# Release 2.30.0 (2025-07-07) + +- `build-dir` no longer defaults to `$TMPDIR` + + The directory in which temporary build directories are created no longer defaults + to `TMPDIR` or `/tmp`, to avoid builders making their directories + world-accessible. This behavior allowed escaping the build sandbox and can + cause build impurities even when not used maliciously. We now default to `builds` + in `NIX_STATE_DIR` (which is `/nix/var/nix/builds` in the default configuration). + +- Deprecate manually making structured attrs with `__json = ...;` [#13220](https://github.com/NixOS/nix/pull/13220) + + The proper way to create a derivation using [structured attrs] in the Nix language is by using `__structuredAttrs = true` with [`builtins.derivation`]. + 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. + This sneaky alternative method is now deprecated, and may be disallowed in future versions of Nix. + + [structured attrs]: @docroot@/language/advanced-attributes.md#adv-attr-structuredAttrs + [`builtins.derivation`]: @docroot@/language/builtins.html#builtins-derivation + +- Add stack sampling evaluation profiler [#13220](https://github.com/NixOS/nix/pull/13220) + + Nix evaluator now supports stack sampling evaluation profiling via `--eval-profiler flamegraph` setting. + It collects collapsed call stack information to output file specified by + `--eval-profile-file` (`nix.profile` by default) in a format directly consumable + by `flamegraph.pl` and compatible tools like [speedscope](https://speedscope.app/). + Sampling frequency can be configured via `--eval-profiler-frequency` (99 Hz by default). + + Unlike existing `--trace-function-calls` this profiler includes the name of the function + being called when it's available. + +- `json-log-path` setting [#13003](https://github.com/NixOS/nix/pull/13003) + + New setting `json-log-path` that sends a copy of all Nix log messages (in JSON format) to a file or Unix domain socket. + +- Rename `nix profile install` to `nix profile add` [#13224](https://github.com/NixOS/nix/pull/13224) + + 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". + +- Non-flake inputs now contain a `sourceInfo` attribute [#13164](https://github.com/NixOS/nix/issues/13164) [#13170](https://github.com/NixOS/nix/pull/13170) + + Flakes have always a `sourceInfo` attribute which describes the source of the flake. + The `sourceInfo.outPath` is often identical to the flake's `outPath`, however it can differ when the flake is located in a subdirectory of its source. + + Non-flake inputs (i.e. inputs with `flake = false`) can also be located at some path _within_ a wider source. + This usually happens when defining a relative path input within the same source as the parent flake, e.g. `inputs.foo.url = ./some-file.nix`. + Such relative inputs will now inherit their parent's `sourceInfo`. + + This also means it is now possible to use `?dir=subdir` on non-flake inputs. + + This iterates on the work done in 2.26 to improve relative path support ([#10089](https://github.com/NixOS/nix/pull/10089)), + and resolves a regression introduced in 2.28 relating to nested relative path inputs ([#13164](https://github.com/NixOS/nix/issues/13164)). + +- 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) + + 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). + This feature is now removed. + + 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. + In practice, however, we doubt even the more building is very likely to happen. + Remote stores that are missing dependencies in arbitrary ways (e.g. corruption) don't seem to be very common. + + 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`. + 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. + + (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.) + + +# Contributors + + +This release was made possible by the following 32 contributors: + +- Robert Hensing [**(@roberth)**](https://github.com/roberth) +- Jörg Thalheim [**(@Mic92)**](https://github.com/Mic92) +- Egor Konovalov [**(@egorkonovalov)**](https://github.com/egorkonovalov) +- PopeRigby [**(@poperigby)**](https://github.com/poperigby) +- Peder Bergebakken Sundt [**(@pbsds)**](https://github.com/pbsds) +- Farid Zakaria [**(@fzakaria)**](https://github.com/fzakaria) +- Gwenn Le Bihan [**(@gwennlbh)**](https://github.com/gwennlbh) +- Jade Masker [**(@donottellmetonottellyou)**](https://github.com/donottellmetonottellyou) +- Nikita Krasnov [**(@synalice)**](https://github.com/synalice) +- tomberek [**(@tomberek)**](https://github.com/tomberek) +- Wolfgang Walther [**(@wolfgangwalther)**](https://github.com/wolfgangwalther) +- Samuli Thomasson [**(@SimSaladin)**](https://github.com/SimSaladin) +- h0nIg [**(@h0nIg)**](https://github.com/h0nIg) +- Valentin Gagarin [**(@fricklerhandwerk)**](https://github.com/fricklerhandwerk) +- Vladimír Čunát [**(@vcunat)**](https://github.com/vcunat) +- Graham Christensen [**(@grahamc)**](https://github.com/grahamc) +- kstrafe [**(@kstrafe)**](https://github.com/kstrafe) +- gustavderdrache [**(@gustavderdrache)**](https://github.com/gustavderdrache) +- Matt Sturgeon [**(@MattSturgeon)**](https://github.com/MattSturgeon) +- John Ericson [**(@Ericson2314)**](https://github.com/Ericson2314) +- Tristan Ross [**(@RossComputerGuy)**](https://github.com/RossComputerGuy) +- jayeshv [**(@jayeshv)**](https://github.com/jayeshv) +- Eelco Dolstra [**(@edolstra)**](https://github.com/edolstra) +- pennae [**(@pennae)**](https://github.com/pennae) +- Luc Perkins [**(@lucperkins)**](https://github.com/lucperkins) +- Cole Helbling [**(@cole-h)**](https://github.com/cole-h) +- Pol Dellaiera [**(@drupol)**](https://github.com/drupol) +- Sergei Zimmerman [**(@xokdvium)**](https://github.com/xokdvium) +- Seth Flynn [**(@getchoo)**](https://github.com/getchoo) +- Jonas Chevalier [**(@zimbatm)**](https://github.com/zimbatm) +- Stefan Boca [**(@stefanboca)**](https://github.com/stefanboca) +- Jeremy Fleischman [**(@jfly)**](https://github.com/jfly) +- Philipp Otterbein +- Raito Bezarius diff --git a/maintainers/data/release-credits-email-to-handle.json b/maintainers/data/release-credits-email-to-handle.json index c77fe4684..48e8685e6 100644 --- a/maintainers/data/release-credits-email-to-handle.json +++ b/maintainers/data/release-credits-email-to-handle.json @@ -166,5 +166,24 @@ "the-tumultuous-unicorn-of-darkness@gmx.com": "TheTumultuousUnicornOfDarkness", "dev@rodney.id.au": "rvl", "pe@pijul.org": "P-E-Meunier", - "yannik@floxdev.com": "ysndr" + "yannik@floxdev.com": "ysndr", + "73017521+egorkonovalov@users.noreply.github.com": "egorkonovalov", + "raito@lix.systems": null, + "nikita.nikita.krasnov@gmail.com": "synalice", + "lucperkins@gmail.com": "lucperkins", + "vladimir.cunat@nic.cz": "vcunat", + "walther@technowledgy.de": "wolfgangwalther", + "jayesh.mail@gmail.com": "jayeshv", + "samuli.thomasson@pm.me": "SimSaladin", + "kevin@stravers.net": "kstrafe", + "poperigby@mailbox.org": "poperigby", + "cole.helbling@determinate.systems": "cole-h", + "donottellmetonottellyou@gmail.com": "donottellmetonottellyou", + "getchoo@tuta.io": "getchoo", + "alex.ford@determinate.systems": "gustavderdrache", + "stefan.r.boca@gmail.com": "stefanboca", + "gwenn.lebihan7@gmail.com": "gwennlbh", + "hey@ewen.works": "gwennlbh", + "matt@sturgeon.me.uk": "MattSturgeon", + "pbsds@hotmail.com": "pbsds" } \ No newline at end of file diff --git a/maintainers/data/release-credits-handle-to-name.json b/maintainers/data/release-credits-handle-to-name.json index 734476078..a6352c44b 100644 --- a/maintainers/data/release-credits-handle-to-name.json +++ b/maintainers/data/release-credits-handle-to-name.json @@ -146,5 +146,21 @@ "ajlekcahdp4": "Alexander Romanov", "Valodim": "Vincent Breitmoser", "rvl": "Rodney Lorrimar", - "whatsthecraic": "Dean De Leo" + "whatsthecraic": "Dean De Leo", + "gwennlbh": "Gwenn Le Bihan", + "donottellmetonottellyou": "Jade Masker", + "kstrafe": null, + "synalice": "Nikita Krasnov", + "poperigby": "PopeRigby", + "MattSturgeon": "Matt Sturgeon", + "lucperkins": "Luc Perkins", + "gustavderdrache": null, + "SimSaladin": "Samuli Thomasson", + "getchoo": "Seth Flynn", + "stefanboca": "Stefan Boca", + "wolfgangwalther": "Wolfgang Walther", + "pbsds": "Peder Bergebakken Sundt", + "egorkonovalov": "Egor Konovalov", + "jayeshv": "jayeshv", + "vcunat": "Vladim\u00edr \u010cun\u00e1t" } \ No newline at end of file From 19c4e78d9726fa64bcb4060ea968eb885f0e95c7 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 7 Jul 2025 14:19:57 +0200 Subject: [PATCH 2/8] Typo --- doc/manual/source/release-notes/rl-2.30.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/manual/source/release-notes/rl-2.30.md b/doc/manual/source/release-notes/rl-2.30.md index b205bad51..3111eddc6 100644 --- a/doc/manual/source/release-notes/rl-2.30.md +++ b/doc/manual/source/release-notes/rl-2.30.md @@ -38,8 +38,8 @@ - Non-flake inputs now contain a `sourceInfo` attribute [#13164](https://github.com/NixOS/nix/issues/13164) [#13170](https://github.com/NixOS/nix/pull/13170) - Flakes have always a `sourceInfo` attribute which describes the source of the flake. - The `sourceInfo.outPath` is often identical to the flake's `outPath`, however it can differ when the flake is located in a subdirectory of its source. + Flakes have always had a `sourceInfo` attribute which describes the source of the flake. + The `sourceInfo.outPath` is often identical to the flake's `outPath`. However, it can differ when the flake is located in a subdirectory of its source. Non-flake inputs (i.e. inputs with `flake = false`) can also be located at some path _within_ a wider source. This usually happens when defining a relative path input within the same source as the parent flake, e.g. `inputs.foo.url = ./some-file.nix`. From f5312492c1280f01914ee2a5bd025eed7b5305d9 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 7 Jul 2025 14:53:11 +0200 Subject: [PATCH 3/8] Add manual release notes --- doc/manual/source/release-notes/rl-2.30.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/doc/manual/source/release-notes/rl-2.30.md b/doc/manual/source/release-notes/rl-2.30.md index 3111eddc6..05e1d7fcb 100644 --- a/doc/manual/source/release-notes/rl-2.30.md +++ b/doc/manual/source/release-notes/rl-2.30.md @@ -1,5 +1,25 @@ # Release 2.30.0 (2025-07-07) +- Reduce the size of value from 24 to 16 bytes [#13407](https://github.com/NixOS/nix/pull/13407) + + This shaves off a very significant amount of memory used for evaluation (~20% percent reduction in maximum heap size and ~17% in total bytes). + +- `builtins.sort` uses PeekSort [#12623](https://github.com/NixOS/nix/pull/12623) + + 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. + +- `nix repl` prints which variables were loaded [#11406](https://github.com/NixOS/nix/pull/11406) + + Instead of `Added variables` it now prints the first 10 variables that were added to the global scope. + +- `nix flake archive`: add `--no-check-sigs` option [#13277](https://github.com/NixOS/nix/pull/13277) + + This is useful when using `nix flake archive` with the destination set to a remote store. + +- Emit warnings for IFDs with `trace-import-from-derivation` option [#13279](https://github.com/NixOS/nix/pull/13279) + + 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. + - `build-dir` no longer defaults to `$TMPDIR` The directory in which temporary build directories are created no longer defaults From 2c0343ec51ef83c2cafda021e68046b35cb67c12 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 7 Jul 2025 15:00:49 +0200 Subject: [PATCH 4/8] # Contributors -> ## Contributors --- doc/manual/source/release-notes/rl-2.24.md | 2 +- doc/manual/source/release-notes/rl-2.25.md | 2 +- doc/manual/source/release-notes/rl-2.26.md | 2 +- doc/manual/source/release-notes/rl-2.27.md | 2 +- doc/manual/source/release-notes/rl-2.28.md | 2 +- doc/manual/source/release-notes/rl-2.29.md | 2 +- maintainers/release-notes | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/doc/manual/source/release-notes/rl-2.24.md b/doc/manual/source/release-notes/rl-2.24.md index bac0a5998..d4af3cb51 100644 --- a/doc/manual/source/release-notes/rl-2.24.md +++ b/doc/manual/source/release-notes/rl-2.24.md @@ -269,7 +269,7 @@ e.g. `--warn-large-path-threshold 100M`. -# Contributors +## Contributors This release was made possible by the following 43 contributors: diff --git a/doc/manual/source/release-notes/rl-2.25.md b/doc/manual/source/release-notes/rl-2.25.md index 29e3e509c..cfde8b1ef 100644 --- a/doc/manual/source/release-notes/rl-2.25.md +++ b/doc/manual/source/release-notes/rl-2.25.md @@ -77,7 +77,7 @@ `` is also known as the builtin derivation builder `builtin:fetchurl`. It's not to be confused with the evaluation-time function `builtins.fetchurl`, which was not affected by this issue. -# Contributors +## Contributors This release was made possible by the following 58 contributors: diff --git a/doc/manual/source/release-notes/rl-2.26.md b/doc/manual/source/release-notes/rl-2.26.md index d2a890eb6..0c3df828f 100644 --- a/doc/manual/source/release-notes/rl-2.26.md +++ b/doc/manual/source/release-notes/rl-2.26.md @@ -76,7 +76,7 @@ - Evaluation caching now works for dirty Git workdirs [#11992](https://github.com/NixOS/nix/pull/11992) -# Contributors +## Contributors This release was made possible by the following 45 contributors: diff --git a/doc/manual/source/release-notes/rl-2.27.md b/doc/manual/source/release-notes/rl-2.27.md index 3643f7476..34da62525 100644 --- a/doc/manual/source/release-notes/rl-2.27.md +++ b/doc/manual/source/release-notes/rl-2.27.md @@ -47,7 +47,7 @@ blake3-34P4p+iZXcbbyB1i4uoF7eWCGcZHjmaRn6Y7QdynLwU= ``` -# Contributors +## Contributors This release was made possible by the following 21 contributors: diff --git a/doc/manual/source/release-notes/rl-2.28.md b/doc/manual/source/release-notes/rl-2.28.md index 6da09546e..93ea2cfde 100644 --- a/doc/manual/source/release-notes/rl-2.28.md +++ b/doc/manual/source/release-notes/rl-2.28.md @@ -82,7 +82,7 @@ This completes the infrastructure overhaul for the [RFC 132](https://github.com/ Although this change is not as critical, we figured it would be good to do this API change at the same time, also. Also note that we try to keep the C API compatible, but we decided to break this function because it was young and likely not in widespread use yet. This frees up time to make important progress on the rest of the C API. -# Contributors +## Contributors This earlier-than-usual release was made possible by the following 16 contributors: diff --git a/doc/manual/source/release-notes/rl-2.29.md b/doc/manual/source/release-notes/rl-2.29.md index ad63fff2f..b59d6d6f0 100644 --- a/doc/manual/source/release-notes/rl-2.29.md +++ b/doc/manual/source/release-notes/rl-2.29.md @@ -111,7 +111,7 @@ This fact is counterbalanced by the fact that most of those changes are bug fixe This in particular prevents parts of GCC 14's diagnostics from being improperly filtered away. -# Contributors +## Contributors This release was made possible by the following 40 contributors: diff --git a/maintainers/release-notes b/maintainers/release-notes index 6586b22dc..5bb492227 100755 --- a/maintainers/release-notes +++ b/maintainers/release-notes @@ -157,7 +157,7 @@ section_title="Release $version_full ($DATE)" if ! $IS_PATCH; then echo - echo "# Contributors" + echo "## Contributors" echo VERSION=$version_full ./maintainers/release-credits fi From a492493d97d0d2beceb8fc6d20b4ea2d2459d2a5 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 7 Jul 2025 15:01:18 +0200 Subject: [PATCH 5/8] Rearrange release notes --- doc/manual/source/release-notes/rl-2.30.md | 66 ++++++++++++---------- 1 file changed, 37 insertions(+), 29 deletions(-) diff --git a/doc/manual/source/release-notes/rl-2.30.md b/doc/manual/source/release-notes/rl-2.30.md index 05e1d7fcb..c5b741a1f 100644 --- a/doc/manual/source/release-notes/rl-2.30.md +++ b/doc/manual/source/release-notes/rl-2.30.md @@ -1,24 +1,6 @@ # Release 2.30.0 (2025-07-07) -- Reduce the size of value from 24 to 16 bytes [#13407](https://github.com/NixOS/nix/pull/13407) - - This shaves off a very significant amount of memory used for evaluation (~20% percent reduction in maximum heap size and ~17% in total bytes). - -- `builtins.sort` uses PeekSort [#12623](https://github.com/NixOS/nix/pull/12623) - - 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. - -- `nix repl` prints which variables were loaded [#11406](https://github.com/NixOS/nix/pull/11406) - - Instead of `Added variables` it now prints the first 10 variables that were added to the global scope. - -- `nix flake archive`: add `--no-check-sigs` option [#13277](https://github.com/NixOS/nix/pull/13277) - - This is useful when using `nix flake archive` with the destination set to a remote store. - -- Emit warnings for IFDs with `trace-import-from-derivation` option [#13279](https://github.com/NixOS/nix/pull/13279) - - 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. +## Backward-incompatible changes and deprecations - `build-dir` no longer defaults to `$TMPDIR` @@ -28,7 +10,7 @@ cause build impurities even when not used maliciously. We now default to `builds` in `NIX_STATE_DIR` (which is `/nix/var/nix/builds` in the default configuration). -- Deprecate manually making structured attrs with `__json = ...;` [#13220](https://github.com/NixOS/nix/pull/13220) +- Deprecate manually making structured attrs using the `__json` attribute [#13220](https://github.com/NixOS/nix/pull/13220) The proper way to create a derivation using [structured attrs] in the Nix language is by using `__structuredAttrs = true` with [`builtins.derivation`]. 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 @@ [structured attrs]: @docroot@/language/advanced-attributes.md#adv-attr-structuredAttrs [`builtins.derivation`]: @docroot@/language/builtins.html#builtins-derivation +- Rename `nix profile install` to `nix profile add` [#13224](https://github.com/NixOS/nix/pull/13224) + + 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". + +## Performance improvements + +This release has a number performance improvements, in particular: + +- Reduce the size of value from 24 to 16 bytes [#13407](https://github.com/NixOS/nix/pull/13407) + + This shaves off a very significant amount of memory used for evaluation (~20% percent reduction in maximum heap size and ~17% in total bytes). + +## Features + - Add stack sampling evaluation profiler [#13220](https://github.com/NixOS/nix/pull/13220) Nix evaluator now supports stack sampling evaluation profiling via `--eval-profiler flamegraph` setting. @@ -48,14 +44,22 @@ Unlike existing `--trace-function-calls` this profiler includes the name of the function being called when it's available. +- `nix repl` prints which variables were loaded [#11406](https://github.com/NixOS/nix/pull/11406) + + Instead of `Added variables` it now prints the first 10 variables that were added to the global scope. + +- `nix flake archive`: Add `--no-check-sigs` option [#13277](https://github.com/NixOS/nix/pull/13277) + + This is useful when using `nix flake archive` with the destination set to a remote store. + +- Emit warnings for IFDs with `trace-import-from-derivation` option [#13279](https://github.com/NixOS/nix/pull/13279) + + 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. + - `json-log-path` setting [#13003](https://github.com/NixOS/nix/pull/13003) New setting `json-log-path` that sends a copy of all Nix log messages (in JSON format) to a file or Unix domain socket. -- Rename `nix profile install` to `nix profile add` [#13224](https://github.com/NixOS/nix/pull/13224) - - 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". - - Non-flake inputs now contain a `sourceInfo` attribute [#13164](https://github.com/NixOS/nix/issues/13164) [#13170](https://github.com/NixOS/nix/pull/13170) Flakes have always had a `sourceInfo` attribute which describes the source of the flake. @@ -70,13 +74,19 @@ This iterates on the work done in 2.26 to improve relative path support ([#10089](https://github.com/NixOS/nix/pull/10089)), and resolves a regression introduced in 2.28 relating to nested relative path inputs ([#13164](https://github.com/NixOS/nix/issues/13164)). +## Miscellaneous changes + +- `builtins.sort` uses PeekSort [#12623](https://github.com/NixOS/nix/pull/12623) + + 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. + - 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) 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). This feature is now removed. - 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. - In practice, however, we doubt even the more building is very likely to happen. + 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. + In practice, however, we doubt even more building is very likely to happen. Remote stores that are missing dependencies in arbitrary ways (e.g. corruption) don't seem to be very common. 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`. @@ -84,9 +94,7 @@ (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.) - -# Contributors - +## Contributors This release was made possible by the following 32 contributors: From 8c71de202fc7b110cf1b7a28d20241fcab96f392 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 7 Jul 2025 15:49:12 +0200 Subject: [PATCH 6/8] Add link --- doc/manual/source/release-notes/rl-2.30.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/manual/source/release-notes/rl-2.30.md b/doc/manual/source/release-notes/rl-2.30.md index c5b741a1f..cb9698846 100644 --- a/doc/manual/source/release-notes/rl-2.30.md +++ b/doc/manual/source/release-notes/rl-2.30.md @@ -35,13 +35,13 @@ This release has a number performance improvements, in particular: - Add stack sampling evaluation profiler [#13220](https://github.com/NixOS/nix/pull/13220) - Nix evaluator now supports stack sampling evaluation profiling via `--eval-profiler flamegraph` setting. - It collects collapsed call stack information to output file specified by + The Nix evaluator now supports [stack sampling evaluation profiling](@docroot@/advanced-topics/eval-profiler.md) via the `--eval-profiler flamegraph` setting. + It outputs collapsed call stack information to the file specified by `--eval-profile-file` (`nix.profile` by default) in a format directly consumable by `flamegraph.pl` and compatible tools like [speedscope](https://speedscope.app/). Sampling frequency can be configured via `--eval-profiler-frequency` (99 Hz by default). - Unlike existing `--trace-function-calls` this profiler includes the name of the function + Unlike the existing `--trace-function-calls`, this profiler includes the name of the function being called when it's available. - `nix repl` prints which variables were loaded [#11406](https://github.com/NixOS/nix/pull/11406) From 58e07c3291074af6fb3716c90a6b7b54bdd3de7c Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 7 Jul 2025 16:17:06 +0200 Subject: [PATCH 7/8] Sort contributors --- doc/manual/source/release-notes/rl-2.30.md | 58 +++++++++++----------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/doc/manual/source/release-notes/rl-2.30.md b/doc/manual/source/release-notes/rl-2.30.md index cb9698846..9c9e63acb 100644 --- a/doc/manual/source/release-notes/rl-2.30.md +++ b/doc/manual/source/release-notes/rl-2.30.md @@ -98,37 +98,37 @@ This release has a number performance improvements, in particular: This release was made possible by the following 32 contributors: -- Robert Hensing [**(@roberth)**](https://github.com/roberth) -- Jörg Thalheim [**(@Mic92)**](https://github.com/Mic92) -- Egor Konovalov [**(@egorkonovalov)**](https://github.com/egorkonovalov) -- PopeRigby [**(@poperigby)**](https://github.com/poperigby) -- Peder Bergebakken Sundt [**(@pbsds)**](https://github.com/pbsds) -- Farid Zakaria [**(@fzakaria)**](https://github.com/fzakaria) -- Gwenn Le Bihan [**(@gwennlbh)**](https://github.com/gwennlbh) -- Jade Masker [**(@donottellmetonottellyou)**](https://github.com/donottellmetonottellyou) -- Nikita Krasnov [**(@synalice)**](https://github.com/synalice) -- tomberek [**(@tomberek)**](https://github.com/tomberek) -- Wolfgang Walther [**(@wolfgangwalther)**](https://github.com/wolfgangwalther) -- Samuli Thomasson [**(@SimSaladin)**](https://github.com/SimSaladin) -- h0nIg [**(@h0nIg)**](https://github.com/h0nIg) -- Valentin Gagarin [**(@fricklerhandwerk)**](https://github.com/fricklerhandwerk) -- Vladimír Čunát [**(@vcunat)**](https://github.com/vcunat) -- Graham Christensen [**(@grahamc)**](https://github.com/grahamc) -- kstrafe [**(@kstrafe)**](https://github.com/kstrafe) -- gustavderdrache [**(@gustavderdrache)**](https://github.com/gustavderdrache) -- Matt Sturgeon [**(@MattSturgeon)**](https://github.com/MattSturgeon) -- John Ericson [**(@Ericson2314)**](https://github.com/Ericson2314) -- Tristan Ross [**(@RossComputerGuy)**](https://github.com/RossComputerGuy) -- jayeshv [**(@jayeshv)**](https://github.com/jayeshv) -- Eelco Dolstra [**(@edolstra)**](https://github.com/edolstra) -- pennae [**(@pennae)**](https://github.com/pennae) -- Luc Perkins [**(@lucperkins)**](https://github.com/lucperkins) - Cole Helbling [**(@cole-h)**](https://github.com/cole-h) +- Eelco Dolstra [**(@edolstra)**](https://github.com/edolstra) +- Egor Konovalov [**(@egorkonovalov)**](https://github.com/egorkonovalov) +- Farid Zakaria [**(@fzakaria)**](https://github.com/fzakaria) +- Graham Christensen [**(@grahamc)**](https://github.com/grahamc) +- gustavderdrache [**(@gustavderdrache)**](https://github.com/gustavderdrache) +- Gwenn Le Bihan [**(@gwennlbh)**](https://github.com/gwennlbh) +- h0nIg [**(@h0nIg)**](https://github.com/h0nIg) +- Jade Masker [**(@donottellmetonottellyou)**](https://github.com/donottellmetonottellyou) +- jayeshv [**(@jayeshv)**](https://github.com/jayeshv) +- Jeremy Fleischman [**(@jfly)**](https://github.com/jfly) +- John Ericson [**(@Ericson2314)**](https://github.com/Ericson2314) +- Jonas Chevalier [**(@zimbatm)**](https://github.com/zimbatm) +- Jörg Thalheim [**(@Mic92)**](https://github.com/Mic92) +- kstrafe [**(@kstrafe)**](https://github.com/kstrafe) +- Luc Perkins [**(@lucperkins)**](https://github.com/lucperkins) +- Matt Sturgeon [**(@MattSturgeon)**](https://github.com/MattSturgeon) +- Nikita Krasnov [**(@synalice)**](https://github.com/synalice) +- Peder Bergebakken Sundt [**(@pbsds)**](https://github.com/pbsds) +- pennae [**(@pennae)**](https://github.com/pennae) +- Philipp Otterbein - Pol Dellaiera [**(@drupol)**](https://github.com/drupol) +- PopeRigby [**(@poperigby)**](https://github.com/poperigby) +- Raito Bezarius +- Robert Hensing [**(@roberth)**](https://github.com/roberth) +- Samuli Thomasson [**(@SimSaladin)**](https://github.com/SimSaladin) - Sergei Zimmerman [**(@xokdvium)**](https://github.com/xokdvium) - Seth Flynn [**(@getchoo)**](https://github.com/getchoo) -- Jonas Chevalier [**(@zimbatm)**](https://github.com/zimbatm) - Stefan Boca [**(@stefanboca)**](https://github.com/stefanboca) -- Jeremy Fleischman [**(@jfly)**](https://github.com/jfly) -- Philipp Otterbein -- Raito Bezarius +- tomberek [**(@tomberek)**](https://github.com/tomberek) +- Tristan Ross [**(@RossComputerGuy)**](https://github.com/RossComputerGuy) +- Valentin Gagarin [**(@fricklerhandwerk)**](https://github.com/fricklerhandwerk) +- Vladimír Čunát [**(@vcunat)**](https://github.com/vcunat) +- Wolfgang Walther [**(@wolfgangwalther)**](https://github.com/wolfgangwalther) From 9f8df6878faec8d0992d64f7a41f90adf6003896 Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Mon, 7 Jul 2025 16:13:53 +0200 Subject: [PATCH 8/8] doc: Add more links Mostly in the 2.30 release notes --- doc/manual/source/release-notes/rl-2.30.md | 53 +++++++++++++------ src/libexpr/include/nix/expr/eval-settings.hh | 2 + 2 files changed, 38 insertions(+), 17 deletions(-) diff --git a/doc/manual/source/release-notes/rl-2.30.md b/doc/manual/source/release-notes/rl-2.30.md index 9c9e63acb..34d3e5bab 100644 --- a/doc/manual/source/release-notes/rl-2.30.md +++ b/doc/manual/source/release-notes/rl-2.30.md @@ -2,7 +2,7 @@ ## Backward-incompatible changes and deprecations -- `build-dir` no longer defaults to `$TMPDIR` +- [`build-dir`] no longer defaults to `$TMPDIR` The directory in which temporary build directories are created no longer defaults to `TMPDIR` or `/tmp`, to avoid builders making their directories @@ -19,9 +19,9 @@ [structured attrs]: @docroot@/language/advanced-attributes.md#adv-attr-structuredAttrs [`builtins.derivation`]: @docroot@/language/builtins.html#builtins-derivation -- Rename `nix profile install` to `nix profile add` [#13224](https://github.com/NixOS/nix/pull/13224) +- Rename `nix profile install` to [`nix profile add`] [#13224](https://github.com/NixOS/nix/pull/13224) - 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". + 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". ## Performance improvements @@ -33,39 +33,39 @@ This release has a number performance improvements, in particular: ## Features -- Add stack sampling evaluation profiler [#13220](https://github.com/NixOS/nix/pull/13220) +- Add [stack sampling evaluation profiler] [#13220](https://github.com/NixOS/nix/pull/13220) - The Nix evaluator now supports [stack sampling evaluation profiling](@docroot@/advanced-topics/eval-profiler.md) via the `--eval-profiler flamegraph` setting. + The Nix evaluator now supports [stack sampling evaluation profiling](@docroot@/advanced-topics/eval-profiler.md) via the [`--eval-profiler flamegraph`] setting. It outputs collapsed call stack information to the file specified by - `--eval-profile-file` (`nix.profile` by default) in a format directly consumable + [`--eval-profile-file`] (`nix.profile` by default) in a format directly consumable by `flamegraph.pl` and compatible tools like [speedscope](https://speedscope.app/). - Sampling frequency can be configured via `--eval-profiler-frequency` (99 Hz by default). + Sampling frequency can be configured via [`--eval-profiler-frequency`] (99 Hz by default). - Unlike the existing `--trace-function-calls`, this profiler includes the name of the function + Unlike the existing [`--trace-function-calls`], this profiler includes the name of the function being called when it's available. -- `nix repl` prints which variables were loaded [#11406](https://github.com/NixOS/nix/pull/11406) +- [`nix repl`] prints which variables were loaded [#11406](https://github.com/NixOS/nix/pull/11406) Instead of `Added variables` it now prints the first 10 variables that were added to the global scope. -- `nix flake archive`: Add `--no-check-sigs` option [#13277](https://github.com/NixOS/nix/pull/13277) +- `nix flake archive`: Add [`--no-check-sigs`] option [#13277](https://github.com/NixOS/nix/pull/13277) - This is useful when using `nix flake archive` with the destination set to a remote store. + This is useful when using [`nix flake archive`] with the destination set to a remote store. -- Emit warnings for IFDs with `trace-import-from-derivation` option [#13279](https://github.com/NixOS/nix/pull/13279) +- Emit warnings for IFDs with [`trace-import-from-derivation`] option [#13279](https://github.com/NixOS/nix/pull/13279) - 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. + 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. - `json-log-path` setting [#13003](https://github.com/NixOS/nix/pull/13003) - New setting `json-log-path` that sends a copy of all Nix log messages (in JSON format) to a file or Unix domain socket. + New setting [`json-log-path`] that sends a copy of all Nix log messages (in JSON format) to a file or Unix domain socket. - Non-flake inputs now contain a `sourceInfo` attribute [#13164](https://github.com/NixOS/nix/issues/13164) [#13170](https://github.com/NixOS/nix/pull/13170) Flakes have always had a `sourceInfo` attribute which describes the source of the flake. The `sourceInfo.outPath` is often identical to the flake's `outPath`. However, it can differ when the flake is located in a subdirectory of its source. - Non-flake inputs (i.e. inputs with `flake = false`) can also be located at some path _within_ a wider source. + Non-flake inputs (i.e. inputs with [`flake = false`]) can also be located at some path _within_ a wider source. This usually happens when defining a relative path input within the same source as the parent flake, e.g. `inputs.foo.url = ./some-file.nix`. Such relative inputs will now inherit their parent's `sourceInfo`. @@ -76,13 +76,13 @@ This release has a number performance improvements, in particular: ## Miscellaneous changes -- `builtins.sort` uses PeekSort [#12623](https://github.com/NixOS/nix/pull/12623) +- [`builtins.sort`] uses PeekSort [#12623](https://github.com/NixOS/nix/pull/12623) 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. - 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) - 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). + Since Nix 1.3 ([commit `299141e`] 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). This feature is now removed. 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. @@ -132,3 +132,22 @@ This release was made possible by the following 32 contributors: - Valentin Gagarin [**(@fricklerhandwerk)**](https://github.com/fricklerhandwerk) - Vladimír Čunát [**(@vcunat)**](https://github.com/vcunat) - Wolfgang Walther [**(@wolfgangwalther)**](https://github.com/wolfgangwalther) + + +[stack sampling evaluation profiler]: @docroot@/advanced-topics/eval-profiler.md +[`--eval-profiler`]: @docroot@/command-ref/conf-file.md#conf-eval-profiler +[`--eval-profiler flamegraph`]: @docroot@/command-ref/conf-file.md#conf-eval-profiler +[`--trace-function-calls`]: @docroot@/command-ref/conf-file.md#conf-trace-function-calls +[`--eval-profile-file`]: @docroot@/command-ref/conf-file.md#conf-eval-profile-file +[`--eval-profiler-frequency`]: @docroot@/command-ref/conf-file.md#conf-eval-profiler-frequency +[`build-dir`]: @docroot@/command-ref/conf-file.md#conf-build-dir +[`nix profile add`]: @docroot@/command-ref/new-cli/nix3-profile-add.md +[`nix repl`]: @docroot@/command-ref/new-cli/nix3-repl.md +[`nix flake archive`]: @docroot@/command-ref/new-cli/nix3-flake-archive.md +[`json-log-path`]: @docroot@/command-ref/conf-file.md#conf-json-log-path +[`trace-import-from-derivation`]: @docroot@/command-ref/conf-file.md#conf-trace-import-from-derivation +[`allow-import-from-derivation`]: @docroot@/command-ref/conf-file.md#conf-allow-import-from-derivation +[`builtins.sort`]: @docroot@/language/builtins.md#builtins-sort +[`flake = false`]: @docroot@/command-ref/new-cli/nix3-flake.md?highlight=false#flake-inputs +[`--no-check-sigs`]: @docroot@/command-ref/new-cli/nix3-flake-archive.md#opt-no-check-sigs +[commit `299141e`]: https://github.com/NixOS/nix/commit/299141ecbd08bae17013226dbeae71e842b4fdd7 diff --git a/src/libexpr/include/nix/expr/eval-settings.hh b/src/libexpr/include/nix/expr/eval-settings.hh index f88f13874..eee3b0f0e 100644 --- a/src/libexpr/include/nix/expr/eval-settings.hh +++ b/src/libexpr/include/nix/expr/eval-settings.hh @@ -211,6 +211,8 @@ struct EvalSettings : Config * `flamegraph` stack sampling profiler. Outputs folded format, one line per stack (suitable for `flamegraph.pl` and compatible tools). Use [`eval-profile-file`](#conf-eval-profile-file) to specify where the profile is saved. + + See [Using the `eval-profiler`](@docroot@/advanced-topics/eval-profiler.md). )"}; Setting evalProfileFile{this, "nix.profile", "eval-profile-file",