summaryrefslogtreecommitdiffstats
path: root/lib/customisation.nix
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2015-07-28 21:35:17 +0200
committerEelco Dolstra <eelco.dolstra@logicblox.com>2015-07-28 21:42:25 +0200
commitb89b6b2a7b397a087149f01a9fd27876edfc6986 (patch)
tree6d6cbc888e364bea60b445fbf2d5f33f83ced729 /lib/customisation.nix
parent314e8e49ecbfd4136463eff782190035d1b07365 (diff)
Add function callPackagesWith
This is like callPackageWith, except that it expects the supplied function to return a *set* of packages. It will then make the individual packages overridable.
Diffstat (limited to 'lib/customisation.nix')
-rw-r--r--lib/customisation.nix22
1 files changed, 20 insertions, 2 deletions
diff --git a/lib/customisation.nix b/lib/customisation.nix
index b3c73c39be41..eaec46276b2b 100644
--- a/lib/customisation.nix
+++ b/lib/customisation.nix
@@ -1,6 +1,8 @@
let
+
lib = import ./default.nix;
inherit (builtins) attrNames isFunction;
+
in
rec {
@@ -90,12 +92,28 @@ rec {
*/
callPackageWith = autoArgs: fn: args:
let
- f = if builtins.isFunction fn then fn else import fn;
+ f = if builtins.isFunction fn then fn else import fn;
auto = builtins.intersectAttrs (builtins.functionArgs f) autoArgs;
in makeOverridable f (auto // args);
- /* Add attributes to each output of a derivation without changing the derivation itself */
+ /* Like callPackage, but for a function that returns an attribute
+ set of derivations. The override function is added to the
+ individual attributes. */
+ callPackagesWith = autoArgs: fn: args:
+ let
+ f = if builtins.isFunction fn then fn else import fn;
+ auto = builtins.intersectAttrs (builtins.functionArgs f) autoArgs;
+ finalArgs = auto // args;
+ pkgs = f finalArgs;
+ mkAttrOverridable = name: pkg: pkg // {
+ override = newArgs: mkAttrOverridable name (f (finalArgs // newArgs)).${name};
+ };
+ in lib.mapAttrs mkAttrOverridable pkgs;
+
+
+ /* Add attributes to each output of a derivation without changing
+ the derivation itself. */
addPassthru = drv: passthru:
let
outputs = drv.outputs or [ "out" ];