diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2009-11-19 16:43:58 +0000 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2009-11-19 16:43:58 +0000 |
commit | 519e7870b6b85262d3efc726f337bd0a4e8b8efa (patch) | |
tree | 82f9adf92ebb347ec17e901cbbcdbf298800ea2b /pkgs/lib/customisation.nix | |
parent | aa392c3aa7e4743ff50b609009f4998a70ded628 (diff) | |
download | nixpkgs-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.nix | 40 |
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 {}; + }; + + +} |