aboutsummaryrefslogtreecommitdiff
path: root/doc/manual/src/language
diff options
context:
space:
mode:
authoreldritch horrors <pennae@lix.systems>2024-03-07 10:46:47 +0100
committereldritch horrors <pennae@lix.systems>2024-03-07 10:46:47 +0100
commit9eb58f5209f9cd1fd18f33b691c6a613075dffc4 (patch)
tree5cf7c86dd196f0f3b5a83d4c4cc962d2b8333349 /doc/manual/src/language
parentca03f7cc28ba09cb4db59ca51c52d4e7783f11e0 (diff)
Merge pull request #9032 from Ma27/structured-attrs-env-vars
structured attrs: improve support / usage of NIX_ATTRS_{SH,JSON}_FILE (cherry picked from commit 3c042f3b0b0a7ef9c47bf049f5410dbd4aac9e90) Change-Id: I7e41838338ee1edf31fff6f9e354c3db2bba6c0e
Diffstat (limited to 'doc/manual/src/language')
-rw-r--r--doc/manual/src/language/advanced-attributes.md17
-rw-r--r--doc/manual/src/language/derivations.md5
2 files changed, 15 insertions, 7 deletions
diff --git a/doc/manual/src/language/advanced-attributes.md b/doc/manual/src/language/advanced-attributes.md
index 4907f7457..a5ad47a93 100644
--- a/doc/manual/src/language/advanced-attributes.md
+++ b/doc/manual/src/language/advanced-attributes.md
@@ -274,18 +274,21 @@ Derivations can declare some infrequently used optional attributes.
- [`__structuredAttrs`]{#adv-attr-structuredAttrs}\
If the special attribute `__structuredAttrs` is set to `true`, the other derivation
- attributes are serialised in JSON format and made available to the
- builder via the file `.attrs.json` in the builder’s temporary
- directory. This obviates the need for [`passAsFile`](#adv-attr-passAsFile) since JSON files
- have no size restrictions, unlike process environments.
+ attributes are serialised into a file in JSON format. The environment variable
+ `NIX_ATTRS_JSON_FILE` points to the exact location of that file both in a build
+ and a [`nix-shell`](../command-ref/nix-shell.md). This obviates the need for
+ [`passAsFile`](#adv-attr-passAsFile) since JSON files have no size restrictions,
+ unlike process environments.
It also makes it possible to tweak derivation settings in a structured way; see
[`outputChecks`](#adv-attr-outputChecks) for example.
As a convenience to Bash builders,
- Nix writes a script named `.attrs.sh` to the builder’s directory
- that initialises shell variables corresponding to all attributes
- that are representable in Bash. This includes non-nested
+ Nix writes a script that initialises shell variables
+ corresponding to all attributes that are representable in Bash. The
+ environment variable `NIX_ATTRS_SH_FILE` points to the exact
+ location of the script, both in a build and a
+ [`nix-shell`](../command-ref/nix-shell.md). This includes non-nested
(associative) arrays. For example, the attribute `hardening.format = true`
ends up as the Bash associative array element `${hardening[format]}`.
diff --git a/doc/manual/src/language/derivations.md b/doc/manual/src/language/derivations.md
index 79a09122a..e4a2fe714 100644
--- a/doc/manual/src/language/derivations.md
+++ b/doc/manual/src/language/derivations.md
@@ -123,6 +123,11 @@ The builder is executed as follows:
- `NIX_STORE` is set to the path of the top-level Nix store
directory (typically, `/nix/store`).
+
+ - `NIX_ATTRS_JSON_FILE` & `NIX_ATTRS_SH_FILE` if `__structuredAttrs`
+ is set to `true` for the dervation. A detailed explanation of this
+ behavior can be found in the
+ [section about structured attrs](./advanced-attributes.md#adv-attr-structuredAttrs).
- For each output declared in `outputs`, the corresponding
environment variable is set to point to the intended path in the