45 lines
948 B
Nix
45 lines
948 B
Nix
{ lib, pkgs, ... }:
|
|||
let
|
|||
preSwitchCheckScript =
|
|||
set:
|
|||
lib.concatLines (
|
|||
lib.mapAttrsToList (name: text: ''
|
|||
# pre-switch check ${name}
|
|||
(
|
|||
${text}
|
|||
)
|
|||
if [[ $? != 0 ]]; then
|
|||
echo "Pre-switch check '${name}' failed"
|
|||
exit 1
|
|||
fi
|
|||
'') set
|
|||
);
|
|||
in
|
|||
{
|
|||
options.system.preSwitchChecks = lib.mkOption {
|
|||
default = { };
|
|||
example = lib.literalExpression ''
|
|||
{ failsEveryTime =
|
|||
'''
|
|||
false
|
|||
''';
|
|||
}
|
|||
'';
|
|||
|
|||
description = ''
|
|||
A set of shell script fragments that are executed before the switch to a
|
|||
new NixOS system configuration. A failure in any of these fragments will
|
|||
cause the switch to fail and exit early.
|
|||
'';
|
|||
|
|||
type = lib.types.attrsOf lib.types.str;
|
|||
|
|||
apply =
|
|||
set:
|
|||
set
|
|||
// {
|
|||
script = pkgs.writeShellScript "pre-switch-checks" (preSwitchCheckScript set);
|
|||
};
|
|||
};
|
|||
}
|