summaryrefslogtreecommitdiffstats
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
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).
-rw-r--r--pkgs/top-level/config.nix51
-rw-r--r--pkgs/top-level/default.nix27
2 files changed, 72 insertions, 6 deletions
diff --git a/pkgs/top-level/config.nix b/pkgs/top-level/config.nix
new file mode 100644
index 000000000000..62e4bebe4497
--- /dev/null
+++ b/pkgs/top-level/config.nix
@@ -0,0 +1,51 @@
+# This file defines the structure of the `config` nixpkgs option.
+
+{ lib, config, ... }:
+
+with lib;
+
+let
+
+ mkMeta = args: mkOption (builtins.removeAttrs args [ "feature" ] // {
+ type = args.type or (types.uniq types.bool);
+ default = args.default or false;
+ description = args.description or ''
+ Whether to ${args.feature} while evaluating nixpkgs.
+ '' + ''
+ Changing the default will not cause any rebuilds.
+ '';
+ });
+
+ mkMassRebuild = args: mkOption (builtins.removeAttrs args [ "feature" ] // {
+ type = args.type or (types.uniq types.bool);
+ default = args.default or false;
+ description = (args.description or ''
+ Whether to ${args.feature} while building nixpkgs packages.
+ '') + ''
+ Changing the default will cause a mass rebuild.
+ '';
+ });
+
+ options = {
+
+ /* Internal stuff */
+
+ warnings = mkOption {
+ type = types.listOf types.str;
+ default = [];
+ internal = true;
+ };
+
+ /* Config options */
+
+ doCheckByDefault = mkMassRebuild {
+ feature = "run <literal>checkPhase</literal> by default";
+ };
+
+ };
+
+in {
+
+ inherit options;
+
+}
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