summaryrefslogtreecommitdiff
path: root/modules/power/sleep.nix
diff options
context:
space:
mode:
authorMike Vink <59492084+ivi-vink@users.noreply.github.com>2025-01-16 22:22:34 +0100
committerGitHub <noreply@github.com>2025-01-16 22:22:34 +0100
commit8e7bd91f353caacc0bc4105f573eb3e17f09e03a (patch)
treec5059edcbebd9644290cad7c653c49a36d593021 /modules/power/sleep.nix
parent6bd39d420578aacf7c0bab7de3e7027b952115ae (diff)
parentbd921223ba7cdac346477d7ea5204d6f4736fcc6 (diff)
Merge branch 'LnL7:master' into masterHEADmaster
Diffstat (limited to 'modules/power/sleep.nix')
-rw-r--r--modules/power/sleep.nix80
1 files changed, 80 insertions, 0 deletions
diff --git a/modules/power/sleep.nix b/modules/power/sleep.nix
new file mode 100644
index 0000000..ab5862c
--- /dev/null
+++ b/modules/power/sleep.nix
@@ -0,0 +1,80 @@
+{ config, lib, ... }:
+
+let
+ cfg = config.power.sleep;
+
+ types = lib.types;
+
+ onOff = cond: if cond then "on" else "off";
+in
+
+{
+ options = {
+ power.sleep.computer = lib.mkOption {
+ type = types.nullOr (types.either types.ints.positive (types.enum ["never"]));
+ default = null;
+ example = "never";
+ description = ''
+ Amount of idle time (in minutes) until the computer sleeps.
+
+ `"never"` disables computer sleeping.
+
+ The system might not be considered idle before connected displays sleep, as
+ per the `power.sleep.display` option.
+ '';
+ };
+
+ power.sleep.display = lib.mkOption {
+ type = types.nullOr (types.either types.ints.positive (types.enum ["never"]));
+ default = null;
+ example = "never";
+ description = ''
+ Amount of idle time (in minutes) until displays sleep.
+
+ `"never"` disables display sleeping.
+ '';
+ };
+
+ power.sleep.harddisk = lib.mkOption {
+ type = types.nullOr (types.either types.ints.positive (types.enum ["never"]));
+ default = null;
+ example = "never";
+ description = ''
+ Amount of idle time (in minutes) until hard disks sleep.
+
+ `"never"` disables hard disk sleeping.
+ '';
+ };
+
+ power.sleep.allowSleepByPowerButton = lib.mkOption {
+ type = types.nullOr types.bool;
+ default = null;
+ description = ''
+ Whether the power button can sleep the computer.
+ '';
+ };
+ };
+
+ config = {
+
+ system.activationScripts.power.text = lib.mkAfter ''
+ ${lib.optionalString (cfg.computer != null) ''
+ systemsetup -setComputerSleep '${toString cfg.computer}' &> /dev/null
+ ''}
+
+ ${lib.optionalString (cfg.display != null) ''
+ systemsetup -setDisplaySleep '${toString cfg.display}' &> /dev/null
+ ''}
+
+ ${lib.optionalString (cfg.harddisk != null) ''
+ systemsetup -setHardDiskSleep '${toString cfg.harddisk}' &> /dev/null
+ ''}
+
+ ${lib.optionalString (cfg.allowSleepByPowerButton != null) ''
+ systemsetup -setAllowPowerButtonToSleepComputer \
+ '${onOff cfg.allowSleepByPowerButton}' &> /dev/null
+ ''}
+ '';
+
+ };
+}