aboutsummaryrefslogtreecommitdiff
path: root/pkgs/top-level/default.nix
diff options
context:
space:
mode:
authorJan Malakhovski <oxij@oxij.org>2019-02-23 00:00:01 +0000
committerdanbst <abcz2.uprola@gmail.com>2019-03-08 11:19:38 +0200
commit4a647dd225571e91d81c1306c69e3473fdd9a8c5 (patch)
treef4380a4ebd94d043b0435d011fa36a018b6ae84b /pkgs/top-level/default.nix
parent570aed4b46916551da969c4daeef0322461ac2fe (diff)
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).
Diffstat (limited to 'pkgs/top-level/default.nix')
-rw-r--r--pkgs/top-level/default.nix27
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