about summary refs log tree commit diff
path: root/nix/utils/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nix/utils/default.nix')
-rw-r--r--nix/utils/default.nix16
1 files changed, 16 insertions, 0 deletions
diff --git a/nix/utils/default.nix b/nix/utils/default.nix
index 0c6c88fafd5a..a29f346519b8 100644
--- a/nix/utils/default.nix
+++ b/nix/utils/default.nix
@@ -43,6 +43,21 @@ let
     else builtins.throw "Don't know how to get (base)name of "
       + lib.generators.toPretty { } p;
 
+  /* Retrieves the drvPath attribute from a given derivation, but ensures that
+     the resulting string only depends on the `.drv` file in the nix store and
+     not on its realised outputs as well.
+
+     Type: drv -> string
+  */
+  onlyDrvPath = drv:
+    let
+      inherit (drv) drvPath;
+      unsafeDrvPath = builtins.unsafeDiscardStringContext drvPath;
+    in
+    builtins.appendContext unsafeDrvPath {
+      ${unsafeDrvPath} = { path = true; };
+    };
+
   /* Query the type of a path exposing the same information as would be by
      `builtins.readDir`, but for a single, specific target path.
 
@@ -152,6 +167,7 @@ in
 {
   inherit
     storePathName
+    onlyDrvPath
     pathType
     isDirectory
     isRegularFile