From 4a647dd225571e91d81c1306c69e3473fdd9a8c5 Mon Sep 17 00:00:00 2001 From: Jan Malakhovski Date: Sat, 23 Feb 2019 00:00:01 +0000 Subject: pkgs/top-level: check types of `nixpkgs.config` This patch simply introduces a plain simple NixOS module and passes `nixpkgs.config` through it via `evalModules` (with some temporary hackery to passthru undefined options). --- pkgs/top-level/default.nix | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) (limited to 'pkgs/top-level/default.nix') diff --git a/pkgs/top-level/default.nix b/pkgs/top-level/default.nix index f2de6d6f81d..4afea6d7fdf 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 -- cgit 1.4.1