summary refs log tree commit diff
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)
downloadnixpkgs-4a647dd225571e91d81c1306c69e3473fdd9a8c5.tar
nixpkgs-4a647dd225571e91d81c1306c69e3473fdd9a8c5.tar.gz
nixpkgs-4a647dd225571e91d81c1306c69e3473fdd9a8c5.tar.bz2
nixpkgs-4a647dd225571e91d81c1306c69e3473fdd9a8c5.tar.lz
nixpkgs-4a647dd225571e91d81c1306c69e3473fdd9a8c5.tar.xz
nixpkgs-4a647dd225571e91d81c1306c69e3473fdd9a8c5.tar.zst
nixpkgs-4a647dd225571e91d81c1306c69e3473fdd9a8c5.zip
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 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