diff options
Diffstat (limited to 'pkgs/top-level/default.nix')
-rw-r--r-- | pkgs/top-level/default.nix | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/pkgs/top-level/default.nix b/pkgs/top-level/default.nix index f2de6d6f81d4..4afea6d7fdff 100644 --- a/pkgs/top-level/default.nix +++ b/pkgs/top-level/default.nix @@ -41,7 +41,7 @@ } @ args: let # Rename the function arguments - configExpr = config; + config0 = config; crossSystem0 = crossSystem; in let @@ -50,22 +50,37 @@ in let # Allow both: # { /* the config */ } and # { pkgs, ... } : { /* the config */ } - config = - if lib.isFunction configExpr - then configExpr { inherit pkgs; } - else configExpr; + config1 = + if lib.isFunction config0 + then config0 { inherit pkgs; } + else config0; # From a minimum of `system` or `config` (actually a target triple, *not* # nixpkgs configuration), infer the other one and platform as needed. localSystem = lib.systems.elaborate ( # Allow setting the platform in the config file. This take precedence over # the inferred platform, but not over an explicitly passed-in one. - builtins.intersectAttrs { platform = null; } config + builtins.intersectAttrs { platform = null; } config1 // args.localSystem); crossSystem = if crossSystem0 == null then localSystem else lib.systems.elaborate crossSystem0; + configEval = lib.evalModules { + modules = [ + ./config.nix + ({ options, ... }: { + _file = "nixpkgs.config"; + # filter-out known options, FIXME: remove this eventually + config = builtins.intersectAttrs options config1; + }) + ]; + }; + + # take all the rest as-is + config = lib.showWarnings configEval.config.warnings + (config1 // builtins.removeAttrs configEval.config [ "_module" ]); + # A few packages make a new package set to draw their dependencies from. # (Currently to get a cross tool chain, or forced-i686 package.) Rather than # give `all-packages.nix` all the arguments to this function, even ones that |