mirror of
https://github.com/ilyakooo0/nixpkgs.git
synced 2024-12-28 22:32:58 +03:00
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).
This commit is contained in:
parent
570aed4b46
commit
4a647dd225
51
pkgs/top-level/config.nix
Normal file
51
pkgs/top-level/config.nix
Normal file
@ -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;
|
||||||
|
|
||||||
|
}
|
@ -41,7 +41,7 @@
|
|||||||
} @ args:
|
} @ args:
|
||||||
|
|
||||||
let # Rename the function arguments
|
let # Rename the function arguments
|
||||||
configExpr = config;
|
config0 = config;
|
||||||
crossSystem0 = crossSystem;
|
crossSystem0 = crossSystem;
|
||||||
|
|
||||||
in let
|
in let
|
||||||
@ -50,22 +50,37 @@ in let
|
|||||||
# Allow both:
|
# Allow both:
|
||||||
# { /* the config */ } and
|
# { /* the config */ } and
|
||||||
# { pkgs, ... } : { /* the config */ }
|
# { pkgs, ... } : { /* the config */ }
|
||||||
config =
|
config1 =
|
||||||
if lib.isFunction configExpr
|
if lib.isFunction config0
|
||||||
then configExpr { inherit pkgs; }
|
then config0 { inherit pkgs; }
|
||||||
else configExpr;
|
else config0;
|
||||||
|
|
||||||
# From a minimum of `system` or `config` (actually a target triple, *not*
|
# From a minimum of `system` or `config` (actually a target triple, *not*
|
||||||
# nixpkgs configuration), infer the other one and platform as needed.
|
# nixpkgs configuration), infer the other one and platform as needed.
|
||||||
localSystem = lib.systems.elaborate (
|
localSystem = lib.systems.elaborate (
|
||||||
# Allow setting the platform in the config file. This take precedence over
|
# Allow setting the platform in the config file. This take precedence over
|
||||||
# the inferred platform, but not over an explicitly passed-in one.
|
# the inferred platform, but not over an explicitly passed-in one.
|
||||||
builtins.intersectAttrs { platform = null; } config
|
builtins.intersectAttrs { platform = null; } config1
|
||||||
// args.localSystem);
|
// args.localSystem);
|
||||||
|
|
||||||
crossSystem = if crossSystem0 == null then localSystem
|
crossSystem = if crossSystem0 == null then localSystem
|
||||||
else lib.systems.elaborate crossSystem0;
|
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.
|
# 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
|
# (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
|
# give `all-packages.nix` all the arguments to this function, even ones that
|
||||||
|
Loading…
Reference in New Issue
Block a user