From ac730622e81336f42961cebea0f69bc637127ea4 Mon Sep 17 00:00:00 2001 From: Valentin Gagarin Date: Sat, 9 Mar 2024 18:57:57 +0100 Subject: [PATCH] document where the value of `builtins.nixPath` comes from (#9113) * document default values for `nix-path` also note how it's overridden and note the effect of `restrict-eval` --- src/libexpr/eval-settings.hh | 23 +++++++++++++++++------ src/libexpr/primops.cc | 8 +++----- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/src/libexpr/eval-settings.hh b/src/libexpr/eval-settings.hh index b5783d28f..c5581b9ff 100644 --- a/src/libexpr/eval-settings.hh +++ b/src/libexpr/eval-settings.hh @@ -21,11 +21,24 @@ struct EvalSettings : Config Setting nixPath{ this, getDefaultNixPath(), "nix-path", R"( - List of directories to be searched for `<...>` file references + List of search paths to use for [lookup path](@docroot@/language/constructs/lookup-path.md) resolution. + This setting determines the value of + [`builtins.nixPath`](@docroot@/language/builtin-constants.md#builtins-nixPath) and can be used with [`builtins.findFile`](@docroot@/language/builtin-constants.md#builtins-findFile). - In particular, outside of [pure evaluation mode](#conf-pure-eval), this determines the value of - [`builtins.nixPath`](@docroot@/language/builtin-constants.md#builtins-nixPath). - )"}; + The default value is + + ``` + $HOME/.nix-defexpr/channels + nixpkgs=$NIX_STATE_DIR/profiles/per-user/root/channels/nixpkgs + $NIX_STATE_DIR/profiles/per-user/root/channels + ``` + + It can be overridden with the [`NIX_PATH` environment variable](@docroot@/command-ref/env-common.md#env-NIX_PATH) or the [`-I` command line option](@docroot@/command-ref/opt-common.md#opt-I). + + > **Note** + > + > If [pure evaluation](#conf-pure-eval) is enabled, `nixPath` evaluates to the empty list `[ ]`. + )", {}, false}; Setting currentSystem{ this, "", "eval-system", @@ -55,8 +68,6 @@ struct EvalSettings : Config [`builtins.nixPath`](@docroot@/language/builtin-constants.md#builtins-nixPath), or to URIs outside of [`allowed-uris`](@docroot@/command-ref/conf-file.md#conf-allowed-uris). - - Also the default value for [`nix-path`](#conf-nix-path) is ignored, such that only explicitly set search path entries are taken into account. )"}; Setting pureEval{this, false, "pure-eval", diff --git a/src/libexpr/primops.cc b/src/libexpr/primops.cc index a7687fa06..bc2a70496 100644 --- a/src/libexpr/primops.cc +++ b/src/libexpr/primops.cc @@ -1736,7 +1736,7 @@ static RegisterPrimOp primop_findFile(PrimOp { - If the suffix is found inside that directory, then the entry is a match. The combined absolute path of the directory (now downloaded if need be) and the suffix is returned. - [Lookup path](@docroot@/language/constructs/lookup-path.md) expressions can be [desugared](https://en.wikipedia.org/wiki/Syntactic_sugar) using this and [`builtins.nixPath`](@docroot@/language/builtin-constants.md#builtins-nixPath): + [Lookup path](@docroot@/language/constructs/lookup-path.md) expressions are [desugared](https://en.wikipedia.org/wiki/Syntactic_sugar) using this and [`builtins.nixPath`](@docroot@/language/builtin-constants.md#builtins-nixPath): ```nix @@ -4570,11 +4570,9 @@ void EvalState::createBaseEnv() addConstant("__nixPath", v, { .type = nList, .doc = R"( - List of search path entries used to resolve [lookup paths](@docroot@/language/constructs/lookup-path.md). + The value of the [`nix-path` configuration setting](@docroot@/command-ref/conf-file.md#conf-nix-path): a list of search path entries used to resolve [lookup paths](@docroot@/language/constructs/lookup-path.md). - Lookup path expressions can be - [desugared](https://en.wikipedia.org/wiki/Syntactic_sugar) - using this and + Lookup path expressions are [desugared](https://en.wikipedia.org/wiki/Syntactic_sugar) using this and [`builtins.findFile`](./builtins.html#builtins-findFile): ```nix