summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorDaiderd Jordan <daiderd@gmail.com>2017-01-08 13:11:02 +0100
committerDaiderd Jordan <daiderd@gmail.com>2017-01-08 13:11:02 +0100
commit4c7f6b61bcae4ae846b9e8c14f01ce89ec8825c1 (patch)
tree76e8d8c3f2d075bdac89a44b0f74f83208c34299 /modules
parent4a49c48c5da868345f3909c9a015024cb3163574 (diff)
add support for assertions and warnings
Diffstat (limited to 'modules')
-rw-r--r--modules/system/default.nix33
1 files changed, 31 insertions, 2 deletions
diff --git a/modules/system/default.nix b/modules/system/default.nix
index 8b4a699..efc6511 100644
--- a/modules/system/default.nix
+++ b/modules/system/default.nix
@@ -8,6 +8,12 @@ let
cfg = config.system;
+ failedAssertions = map (x: x.message) (filter (x: !x.assertion) config.assertions);
+
+
+ throwAssertions = res: if (failedAssertions != []) then throw "\nFailed assertions:\n${concatStringsSep "\n" (map (x: "- ${x}") failedAssertions)}" else res;
+ showWarnings = res: fold (w: x: builtins.trace "warning: ${w}" x) res config.warnings;
+
in
{
@@ -42,11 +48,34 @@ in
default = pkgs.lib.nixpkgsVersion;
};
+ assertions = mkOption {
+ type = types.listOf types.unspecified;
+ internal = true;
+ default = [];
+ example = [ { assertion = false; message = "you can't enable this for that reason"; } ];
+ description = ''
+ This option allows modules to express conditions that must
+ hold for the evaluation of the system configuration to
+ succeed, along with associated error messages for the user.
+ '';
+ };
+
+ warnings = mkOption {
+ internal = true;
+ default = [];
+ type = types.listOf types.str;
+ example = [ "The `foo' service is deprecated and will go away soon!" ];
+ description = ''
+ This option allows modules to show warnings to users during
+ the evaluation of the system configuration.
+ '';
+ };
+
};
config = {
- system.build.toplevel = stdenvNoCC.mkDerivation {
+ system.build.toplevel = throwAssertions (showWarnings (stdenvNoCC.mkDerivation {
name = "darwin-system-${cfg.darwinLabel}";
preferLocalBuild = true;
@@ -80,7 +109,7 @@ in
echo -n "$darwinLabel" > $out/darwin-version
echo -n "$system" > $out/system
'';
- };
+ }));
};
}