Skip to content

Commit

Permalink
Merge pull request NixOS#163443 from ncfavier/fix-types-package
Browse files Browse the repository at this point in the history
lib.types.package: only call toDerivation when necessary
  • Loading branch information
roberth authored Mar 11, 2022
2 parents aff5c57 + 9c2266c commit a15fbdb
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 4 deletions.
12 changes: 10 additions & 2 deletions lib/types.nix
Original file line number Diff line number Diff line change
Expand Up @@ -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 // {
Expand Down
3 changes: 2 additions & 1 deletion nixos/doc/manual/development/option-types.section.md
Original file line number Diff line number Diff line change
Expand Up @@ -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`

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down

0 comments on commit a15fbdb

Please sign in to comment.