diff options
author | Robert Hensing <roberth@users.noreply.github.com> | 2022-03-11 11:56:44 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-11 11:56:44 +0100 |
commit | a15fbdb88f38800c8e554772a12de8031815802a (patch) | |
tree | 3d3ed8c3f71ac476f31fedc6b1aa100c2a9b9149 | |
parent | aff5c571a02d3815d456006c692e76aa2a1c5c24 (diff) | |
parent | 9c2266c03171dcf492b6accdb0cde0cb28e156b5 (diff) | |
download | nixpkgs-a15fbdb88f38800c8e554772a12de8031815802a.tar nixpkgs-a15fbdb88f38800c8e554772a12de8031815802a.tar.gz nixpkgs-a15fbdb88f38800c8e554772a12de8031815802a.tar.bz2 nixpkgs-a15fbdb88f38800c8e554772a12de8031815802a.tar.lz nixpkgs-a15fbdb88f38800c8e554772a12de8031815802a.tar.xz nixpkgs-a15fbdb88f38800c8e554772a12de8031815802a.tar.zst nixpkgs-a15fbdb88f38800c8e554772a12de8031815802a.zip |
Merge pull request #163443 from ncfavier/fix-types-package
lib.types.package: only call toDerivation when necessary
-rw-r--r-- | lib/types.nix | 12 | ||||
-rw-r--r-- | nixos/doc/manual/development/option-types.section.md | 3 | ||||
-rw-r--r-- | nixos/doc/manual/from_md/development/option-types.section.xml | 4 |
3 files changed, 15 insertions, 4 deletions
diff --git a/lib/types.nix b/lib/types.nix index 2e7261f7553..3078615f5dd 100644 --- a/lib/types.nix +++ b/lib/types.nix @@ -368,13 +368,21 @@ rec { emptyValue = { value = {}; }; }; - # derivation is a reserved keyword. + # A package is a top-level store path (/nix/store/hash-name). This includes: + # - derivations + # - more generally, attribute sets with an `outPath` or `__toString` attribute + # pointing to a store path, e.g. flake inputs + # - strings with context, e.g. "${pkgs.foo}" or (toString pkgs.foo) + # - hardcoded store path literals (/nix/store/hash-foo) or strings without context + # ("/nix/store/hash-foo"). These get a context added to them using builtins.storePath. package = mkOptionType { name = "package"; check = x: isDerivation x || isStorePath x; merge = loc: defs: let res = mergeOneOption loc defs; - in if isDerivation res then res else toDerivation res; + in if builtins.isPath res || (builtins.isString res && ! builtins.hasContext res) + then toDerivation res + else res; }; shellPackage = package // { diff --git a/nixos/doc/manual/development/option-types.section.md b/nixos/doc/manual/development/option-types.section.md index c34ac0367c4..00f1d85bdb6 100644 --- a/nixos/doc/manual/development/option-types.section.md +++ b/nixos/doc/manual/development/option-types.section.md @@ -22,7 +22,8 @@ merging is handled. `types.package` -: A derivation or a store path. +: A top-level store path. This can be an attribute set pointing + to a store path, like a derivation or a flake input. `types.anything` diff --git a/nixos/doc/manual/from_md/development/option-types.section.xml b/nixos/doc/manual/from_md/development/option-types.section.xml index e16453df51e..44472929270 100644 --- a/nixos/doc/manual/from_md/development/option-types.section.xml +++ b/nixos/doc/manual/from_md/development/option-types.section.xml @@ -43,7 +43,9 @@ </term> <listitem> <para> - A derivation or a store path. + A top-level store path. This can be an attribute set + pointing to a store path, like a derivation or a flake + input. </para> </listitem> </varlistentry> |