Files
nixpkgs/nixos/modules/misc/assertions.nix
Eelco Dolstra d5047faede Remove uses of the "merge" option attribute
It's redundant because you can (and should) specify an option type, or
an apply function.
2013-10-28 22:45:56 +01:00

1.3 KiB

{ config, pkgs, ... }:
 
with pkgs.lib;
 
let
 
failed = map (x: x.message) (filter (x: !x.assertion) config.assertions);
 
showWarnings = res: fold (w: x: builtins.trace "warning: ${w}" x) res config.warnings;
 
in
 
{
 
options = {
 
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.string;
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 = {
 
# This option is evaluated always. Thus the assertions are checked
# as well. Hacky!
environment.systemPackages = showWarnings (
if [] == failed then []
else throw "\nFailed assertions:\n${concatStringsSep "\n" (map (x: "- ${x}") failed)}");
 
};
 
}