diff options
Diffstat (limited to 'pkgs/default.nix')
-rw-r--r-- | pkgs/default.nix | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/pkgs/default.nix b/pkgs/default.nix index 5bb1316d..8b6050c7 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -1,17 +1,33 @@ { pkgs ? import (import ../nixpkgs-path.nix) {} }: let - inherit (pkgs.lib) callPackageWith; + inherit (pkgs.lib) callPackageWith isFunction; callPackage = callPackageWith (pkgs // self.vuizvui); callPackage_i686 = callPackageWith (pkgs.pkgsi686Linux // self.vuizvui); callPackageScope = fn: let + f = if isFunction fn then fn else import fn; + toplevel = pkgs // self.vuizvui; toplevel_i686 = pkgs.pkgsi686Linux // self.vuizvui; - super = callPackageWith toplevel fn { + + autoArgs = toplevel // { callPackage = callPackageWith (toplevel // super); callPackage_i686 = callPackageWith (toplevel_i686 // super); }; + args = builtins.intersectAttrs (builtins.functionArgs f) autoArgs; + + mkOverridable = overrideFun: origArgs: let + superSet = overrideFun origArgs; + overrideWith = newArgs: let + overridden = if isFunction newArgs then newArgs origArgs else newArgs; + in origArgs // overridden; + in superSet // { + override = newArgs: mkOverridable overrideFun (overrideWith newArgs); + }; + + super = mkOverridable f args; + in pkgs.recurseIntoAttrs super; self.vuizvui = pkgs.recurseIntoAttrs { |