diff --git a/system/assertion.nix b/system/assertion.nix new file mode 100644 index 00000000000..36eb36cb903 --- /dev/null +++ b/system/assertion.nix @@ -0,0 +1,25 @@ +{pkgs, config, ...}: + +let + inherit (pkgs.lib) mkOption filter concatMap concatStringsSep; + failed = map (x : x.message) (filter (x: ! x.assertion) config.assertions); +in + +{ + + assertions = mkOption { + default = []; + example = [{ assertion = false; msg = "you can't enable this for that reason"; }]; + merge = pkgs.lib.mergeListOption; + description = '' + Add something like this + assertions = mkAlways [ { assertion = false; message = "false should have been true"; } ]; + to your upstart-job. + ''; + }; + + environment = { + # extraPackages are evaluated always. Thus the assertions are checked as well. hacky! + extraPackages = if [] == failed then [] else throw "\n!! failed assertions: !!\n${concatStringsSep "\n" (map (x: "- ${x}") failed)}"; + }; +} diff --git a/system/options.nix b/system/options.nix index 16269905633..5d39beb64b4 100644 --- a/system/options.nix +++ b/system/options.nix @@ -379,6 +379,9 @@ in }; require = [ + + (import ../system/assertion.nix) + # boot (is it the right place ?) (import ../system/kernel.nix) (import ../boot/boot-stage-2.nix)