Skip to content

Commit

Permalink
upower: Support Suspend and Ignore CriticalPowerActions
Browse files Browse the repository at this point in the history
  • Loading branch information
benjamb committed Nov 22, 2024
1 parent 41b082d commit 789bb45
Showing 1 changed file with 40 additions and 3 deletions.
43 changes: 40 additions & 3 deletions nixos/modules/services/hardware/upower.nix
Original file line number Diff line number Diff line change
Expand Up @@ -179,24 +179,60 @@ in
'';
};

allowRiskyCriticalPowerAction = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Enable the risky critical power actions "Suspend" and "Ignore".
'';
};

criticalPowerAction = lib.mkOption {
type = lib.types.enum [ "PowerOff" "Hibernate" "HybridSleep" ];
type = lib.types.enum [
"PowerOff"
"Hibernate"
"HybridSleep"
"Suspend"
"Ignore"
];
default = "HybridSleep";
description = ''
The action to take when `timeAction` or
`percentageAction` has been reached for the batteries
(UPS or laptop batteries) supplying the computer
(UPS or laptop batteries) supplying the computer.
When set to `Suspend` or `Ignore`,
{option}`services.upower.allowRiskyCriticalPowerAction` must be set
to `true`.
'';
};

};

};


###### implementation

config = lib.mkIf cfg.enable {
assertions = [
{
assertion =
let
inherit (builtins) elem;
riskyActions = [
"Suspend"
"Ignore"
];
riskyActionEnabled = elem cfg.criticalPowerAction riskyActions;
in
riskyActionEnabled -> cfg.allowRiskyCriticalPowerAction;
message = ''
services.upower.allowRiskyCriticalPowerAction must be true if
services.upower.criticalPowerAction is set to
'${cfg.criticalPowerAction}'.
'';
}
];

environment.systemPackages = [ cfg.package ];

Expand All @@ -218,6 +254,7 @@ in
TimeLow = cfg.timeLow;
TimeCritical = cfg.timeCritical;
TimeAction = cfg.timeAction;
AllowRiskyCriticalPowerAction = cfg.allowRiskyCriticalPowerAction;
CriticalPowerAction = cfg.criticalPowerAction;
};
};
Expand Down

0 comments on commit 789bb45

Please sign in to comment.