mirror of
https://github.com/NixOS/nix.dev.git
synced 2024-10-18 14:32:43 -04:00
rework notes on search paths
remove duplication so we can link to the respective section from the language tutorial
This commit is contained in:
parent
41faf1b5b4
commit
42e5ab74a5
|
@ -89,21 +89,41 @@ buildInputs = lib.attrVals ["curl" "jq"] pkgs
|
||||||
|
|
||||||
## `<...>` search path
|
## `<...>` search path
|
||||||
|
|
||||||
`<...>` is syntax, commonly `<nixpkgs>` is for looking up Nix expression's path
|
You will often see Nix language code samples that refer to `<nixpkgs>`.
|
||||||
specified by shell environment variable `$NIX_PATH`.
|
|
||||||
|
|
||||||
Two developers on different machines are likely to have `<nixpkgs>` point to different revisions,
|
`<...>` is special syntax that was [introduced in 2011][1ecc97b6bd] to conveniently access values from the shell environment variable [`$NIX_PATH`][NIX_PATH].
|
||||||
which will lead to getting different results.
|
|
||||||
|
|
||||||
It's {ref}`possible to specify exact nixpkgs commit <ref-pinning-nixpkgs>` via `$NIX_PATH`,
|
This means, the value of a search path depends on external system state.
|
||||||
but that's still problematic unless:
|
When using search paths, the same Nix expression can produce different results.
|
||||||
|
|
||||||
1. You specify the commit **at one place only** and reference it else where.
|
In most cases, `$NIX_PATH` is set to the latest channel when Nix is installed, and is therefore likely to differ from machine to machine.
|
||||||
2. And you can control the environment via your source code,
|
|
||||||
so that a) applies by somehow setting `$NIX_PATH` via nix-shell or NixOS options
|
:::{note}
|
||||||
|
[Channels](https://nixos.wiki/wiki/Nix_channels) are a way of distributing Nix software.
|
||||||
|
They are being phased out, but still used by default.
|
||||||
|
:::
|
||||||
|
|
||||||
|
For example, two developers on different machines are likely to have `<nixpkgs>` point to different revisions of `nixpkgs`.
|
||||||
|
Builds may work for one and fail for the other, causing confusion.
|
||||||
|
|
||||||
|
It's <ref-pinning-nixpkgs>`possible to specify an exact \`nixpkgs\` revision ` via `$NIX_PATH`.
|
||||||
|
But that is still problematic, unless:
|
||||||
|
|
||||||
|
1. you specify the commit **at one place only**,
|
||||||
|
|
||||||
|
and
|
||||||
|
|
||||||
|
2. you control the shell environment via your source code, setting `$NIX_PATH` via `nix-shell` or NixOS options.
|
||||||
|
|
||||||
|
:::{note}
|
||||||
|
We recommend to avoid using search paths and to disable channels by permanently setting `NIX_PATH=` to be empty.
|
||||||
|
:::
|
||||||
|
|
||||||
See {ref}`pinning-nixpkgs` for a tutorial on how to do better.
|
See {ref}`pinning-nixpkgs` for a tutorial on how to do better.
|
||||||
|
|
||||||
|
[1ecc97b6bd]: https://github.com/NixOS/nix/commit/1ecc97b6bdb27e56d832ca48cdafd3dbb5185a04
|
||||||
|
[NIX_PATH]: https://nixos.org/manual/nix/unstable/command-ref/env-common.html?highlight=nix_path#env-NIX_PATH
|
||||||
|
|
||||||
## `attr1 // attr2` merge operator
|
## `attr1 // attr2` merge operator
|
||||||
|
|
||||||
It merges two attribute sets:
|
It merges two attribute sets:
|
||||||
|
|
|
@ -13,15 +13,7 @@ In various Nix examples, you'll often see references to [\<nixpkgs>](https://git
|
||||||
|
|
||||||
This is a **convenient** way to quickly demonstrate a Nix expression and get it working by importing Nix packages.
|
This is a **convenient** way to quickly demonstrate a Nix expression and get it working by importing Nix packages.
|
||||||
|
|
||||||
However, the resulting Nix expression **is not fully reproducible**. The `<nixpkgs>` reference
|
However, <ref-search-path>`the resulting Nix expression is not fully reproducible`.
|
||||||
is set from the **local** `$NIX_PATH` environment variable. In most cases, this is set at the time Nix is installed
|
|
||||||
to the `nixpkgs-unstable` channel, and therefore it is likely to differ from machine to machine.
|
|
||||||
|
|
||||||
:::{note}
|
|
||||||
[Channels](https://nixos.wiki/wiki/Nix_channels) are a way of distributing Nix software, but they are being phased out.
|
|
||||||
Even though they are still used by default, it is recommended to avoid channels
|
|
||||||
and `<nixpkgs>` by always setting `NIX_PATH=` to be empty.
|
|
||||||
:::
|
|
||||||
|
|
||||||
## Pinning packages with URLs inside a Nix expression
|
## Pinning packages with URLs inside a Nix expression
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue