about summary refs log tree commit diff
path: root/nix/emptyDerivation/emptyDerivation.nix
diff options
context:
space:
mode:
authorProfpatsch <mail@profpatsch.de>2020-06-28T00·30+0200
committerProfpatsch <mail@profpatsch.de>2020-06-28T17·59+0000
commitcdfae7de48051b3230044f9bfb81b341608e85f4 (patch)
tree76915f17b38da3a65f2f1bd2a14c7a2f48350d54 /nix/emptyDerivation/emptyDerivation.nix
parent98a990c6a60c56920c0748f459af06a3aed25242 (diff)
feat(nix/emptyDerivation) add emptyDerivation r/1108
The most trivial of all derivations. It is more useful than it looks.

Can be used to bind nix expressions (e.g. test suites) to a
derivation, so that `nix-build` does not crap itself.

Change-Id: I61c24d8c129c9505733161207f3c30e820f5b15e
Reviewed-on: https://cl.tvl.fyi/c/depot/+/665
Reviewed-by: tazjin <mail@tazj.in>
Diffstat (limited to 'nix/emptyDerivation/emptyDerivation.nix')
-rw-r--r--nix/emptyDerivation/emptyDerivation.nix34
1 files changed, 34 insertions, 0 deletions
diff --git a/nix/emptyDerivation/emptyDerivation.nix b/nix/emptyDerivation/emptyDerivation.nix
new file mode 100644
index 000000000000..5e84abe2d505
--- /dev/null
+++ b/nix/emptyDerivation/emptyDerivation.nix
@@ -0,0 +1,34 @@
+{ stdenv, pkgs, getBins }:
+
+# The empty derivation. All it does is touch $out.
+# Basically the unit value for derivations.
+#
+# In addition to simple test situations which require
+# a derivation, we set __functor, so you can call it
+# as a function and pass an attrset. The set you pass
+# is `//`-merged with the attrset before calling derivation,
+# so you can use this to add more fields.
+
+let
+  bins = getBins pkgs.s6-portable-utils [ "s6-touch" ]
+      // getBins pkgs.execline [ "importas" "exec" ];
+
+  emptiness = {
+    name = "empty-derivation";
+
+    # TODO(Profpatsch): can we get system from tvl?
+    inherit (stdenv) system;
+
+    builder = bins.exec;
+    args = [
+      bins.importas "out" "out"
+      bins.s6-touch "$out"
+    ];
+  };
+
+in (derivation emptiness) // {
+  # This allows us to call the empty derivation
+  # like a function and override fields/add new fields.
+  __functor = _: overrides:
+    derivation (emptiness // overrides);
+}