summary refs log tree commit diff
path: root/lib/types.nix
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2015-08-06 19:55:42 +0200
committerEelco Dolstra <eelco.dolstra@logicblox.com>2015-08-07 03:09:57 +0200
commit214d4fb73cd5c2aab6718a38b35c8b5217f0f200 (patch)
treef78ea308807277211b91f5d692eedce3a842501d /lib/types.nix
parentfa7a0f24a4c8e02789be6b5c9c83c4c3ee6948a5 (diff)
downloadnixpkgs-214d4fb73cd5c2aab6718a38b35c8b5217f0f200.tar
nixpkgs-214d4fb73cd5c2aab6718a38b35c8b5217f0f200.tar.gz
nixpkgs-214d4fb73cd5c2aab6718a38b35c8b5217f0f200.tar.bz2
nixpkgs-214d4fb73cd5c2aab6718a38b35c8b5217f0f200.tar.lz
nixpkgs-214d4fb73cd5c2aab6718a38b35c8b5217f0f200.tar.xz
nixpkgs-214d4fb73cd5c2aab6718a38b35c8b5217f0f200.tar.zst
nixpkgs-214d4fb73cd5c2aab6718a38b35c8b5217f0f200.zip
Allow options with type "package" to be store paths
For example, this allows writing

  nix.package = /nix/store/786mlvhd17xvcp2r4jmmay6jj4wj6b7f-nix-1.10pre4206_896428c;

Also, document types.package in the manual.
Diffstat (limited to 'lib/types.nix')
-rw-r--r--lib/types.nix8
1 files changed, 5 insertions, 3 deletions
diff --git a/lib/types.nix b/lib/types.nix
index 49f24b022de..a7f9bf1946e 100644
--- a/lib/types.nix
+++ b/lib/types.nix
@@ -94,14 +94,16 @@ rec {
     # derivation is a reserved keyword.
     package = mkOptionType {
       name = "derivation";
-      check = isDerivation;
-      merge = mergeOneOption;
+      check = x: isDerivation x || isStorePath x;
+      merge = loc: defs:
+        let res = mergeOneOption loc defs;
+        in if isDerivation res then res else toDerivation res;
     };
 
     path = mkOptionType {
       name = "path";
       # Hacky: there is no ‘isPath’ primop.
-      check = x: builtins.unsafeDiscardStringContext (builtins.substring 0 1 (toString x)) == "/";
+      check = x: builtins.substring 0 1 (toString x) == "/";
       merge = mergeOneOption;
     };