about summary refs log tree commit diff
path: root/pkgs/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/default.nix')
-rw-r--r--pkgs/default.nix20
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 {