summary refs log tree commit diff
path: root/pkgs/lib/customisation.nix
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2009-11-19 16:43:58 +0000
committerEelco Dolstra <eelco.dolstra@logicblox.com>2009-11-19 16:43:58 +0000
commit519e7870b6b85262d3efc726f337bd0a4e8b8efa (patch)
tree82f9adf92ebb347ec17e901cbbcdbf298800ea2b /pkgs/lib/customisation.nix
parentaa392c3aa7e4743ff50b609009f4998a70ded628 (diff)
downloadnixpkgs-519e7870b6b85262d3efc726f337bd0a4e8b8efa.tar
nixpkgs-519e7870b6b85262d3efc726f337bd0a4e8b8efa.tar.gz
nixpkgs-519e7870b6b85262d3efc726f337bd0a4e8b8efa.tar.bz2
nixpkgs-519e7870b6b85262d3efc726f337bd0a4e8b8efa.tar.lz
nixpkgs-519e7870b6b85262d3efc726f337bd0a4e8b8efa.tar.xz
nixpkgs-519e7870b6b85262d3efc726f337bd0a4e8b8efa.tar.zst
nixpkgs-519e7870b6b85262d3efc726f337bd0a4e8b8efa.zip
* Move `modifyDerivation' from build-support/vm to lib and rename it
  to `overrideDerivation'.

svn path=/nixpkgs/trunk/; revision=18466
Diffstat (limited to 'pkgs/lib/customisation.nix')
-rw-r--r--pkgs/lib/customisation.nix40
1 files changed, 40 insertions, 0 deletions
diff --git a/pkgs/lib/customisation.nix b/pkgs/lib/customisation.nix
new file mode 100644
index 00000000000..889ce04547f
--- /dev/null
+++ b/pkgs/lib/customisation.nix
@@ -0,0 +1,40 @@
+{
+
+
+  /* `overrideDerivation drv f' takes a derivation (i.e., the result
+     of a call to the builtin function `derivation') and returns a new
+     derivation in which the attributes of the original are overriden
+     according to the function `f'.  This function is called with the
+     original derivation attributes.
+
+     `overrideDerivation' allows certain "ad-hoc" customisation
+     scenarios (e.g. in ~/.nixpkgs/config.nix).  For instance, if you
+     want to "patch" the derivation returned by a package function in
+     Nixpkgs to build another version than what the function itself
+     provides, you can do something like this:
+
+       mySed = overrideDerivation pkgs.gnused (oldAttrs: {
+         name = "sed-4.2.2-pre";
+         src = fetchurl {
+           url = ftp://alpha.gnu.org/gnu/sed/sed-4.2.2-pre.tar.bz2;
+           sha256 = "11nq06d131y4wmf3drm0yk502d2xc6n5qy82cg88rb9nqd2lj41k";
+         };
+         patches = [];
+       });
+
+     For another application, see build-support/vm, where this
+     function is used to build arbitrary derivations inside a QEMU
+     virtual machine. */
+     
+  overrideDerivation = drv: f:
+    let
+      # Filter out special attributes.
+      attrs = removeAttrs drv ["meta" "passthru" "outPath" "drvPath"];
+      newDrv = derivation (attrs // (f drv));
+    in newDrv //
+      { meta = if drv ? meta then drv.meta else {};
+        passthru = if drv ? passthru then drv.passthru else {};
+      };
+
+
+}