diff --git a/system/roles/laptop/power/acpi.nix b/system/roles/laptop/power/acpi.nix new file mode 100644 index 0000000..795cb57 --- /dev/null +++ b/system/roles/laptop/power/acpi.nix @@ -0,0 +1,23 @@ +{ pkgs, lib, config, ...}: let + inherit (lib) mkIf; + deviceType = config.myOptions.device.roles.type; + acceptedTypes = ["laptop"]; +in { + config = mkIf (builtins.elem deviceType acceptedTypes) { + hardware.acpilight.enable = true; + + environment.systemPackages = with pkgs; [ acpi ]; + + # handle ACPI events + services.acpid.enable = true; + + boot = { + kernelModules = ["acpi_call"]; + extraModulePackages = with config.boot.kernelPackages; [ + acpi_call + cpupower + ]; + }; + }; +} + diff --git a/system/roles/laptop/power/auto-cpufreq/default.nix b/system/roles/laptop/power/auto-cpufreq/default.nix deleted file mode 100644 index 9f70597..0000000 --- a/system/roles/laptop/power/auto-cpufreq/default.nix +++ /dev/null @@ -1,47 +0,0 @@ -# This sets up power management using auto-cpufreq, -# alongside with upower and power-profiles-daemon. -# Together, this provides a complete alternative to TLP -{ pkgs, lib, config, ...}: let - inherit (lib) mkIf mkDefault; - deviceType = config.myOptions.device.roles.type; - acceptedTypes = ["laptop"]; -in { - imports = [ - ./power-profiles-daemon - ]; - - config = mkIf (builtins.elem deviceType acceptedTypes) { - services = { - # superior power management - auto-cpufreq = { - enable = true; - settings = let - MHz = x: x * 1000; - in { - battery = { - governor = "powersave"; - scaling_min_freq = mkDefault (MHz 1200); - scaling_max_freq = mkDefault (MHz 1800); - turbo = "never"; - }; - - charger = { - governor = "performance"; - scaling_min_freq = mkDefault (MHz 1800); - scaling_max_freq = mkDefault (MHz 3800); - turbo = "auto"; - }; - }; - }; - - # DBus service that provides power management support to applications - upower = { - enable = true; - percentageLow = 15; - percentageCritical = 5; - percentageAction = 3; - criticalPowerAction = "Hibernate"; - }; - }; - }; -} diff --git a/system/roles/laptop/power/default.nix b/system/roles/laptop/power/default.nix index f122c22..6ffaf07 100644 --- a/system/roles/laptop/power/default.nix +++ b/system/roles/laptop/power/default.nix @@ -1,37 +1,15 @@ { pkgs, lib, config, ...}: let - inherit (lib) mkIf mkDefault; + inherit (lib) mkIf; deviceType = config.myOptions.device.roles.type; acceptedTypes = ["laptop"]; in { imports = [ - ./auto-cpufreq + ./power-profiles-daemon + ./upower.nix + ./acpi.nix ]; config = mkIf (builtins.elem deviceType acceptedTypes) { - hardware.acpilight.enable = true; - - environment.systemPackages = with pkgs; [ - acpi - powertop - ]; - - services = { - # handle ACPI events - acpid.enable = true; - - # temperature target on battery - undervolt = { - tempBat = 65; # deg C - package = pkgs.undervolt; - }; - }; - - boot = { - kernelModules = ["acpi_call"]; - extraModulePackages = with config.boot.kernelPackages; [ - acpi_call - cpupower - ]; - }; + environment.systemPackages = with pkgs; [ powertop ]; }; } diff --git a/system/roles/laptop/power/auto-cpufreq/power-profiles-daemon/default.nix b/system/roles/laptop/power/power-profiles-daemon/default.nix similarity index 100% rename from system/roles/laptop/power/auto-cpufreq/power-profiles-daemon/default.nix rename to system/roles/laptop/power/power-profiles-daemon/default.nix diff --git a/system/roles/laptop/power/auto-cpufreq/power-profiles-daemon/scripts/power_monitor.sh b/system/roles/laptop/power/power-profiles-daemon/scripts/power_monitor.sh similarity index 100% rename from system/roles/laptop/power/auto-cpufreq/power-profiles-daemon/scripts/power_monitor.sh rename to system/roles/laptop/power/power-profiles-daemon/scripts/power_monitor.sh diff --git a/system/roles/laptop/power/upower.nix b/system/roles/laptop/power/upower.nix new file mode 100644 index 0000000..2e59b30 --- /dev/null +++ b/system/roles/laptop/power/upower.nix @@ -0,0 +1,19 @@ +{ pkgs, lib, config, ...}: let + inherit (lib) mkIf; + deviceType = config.myOptions.device.roles.type; + acceptedTypes = ["laptop"]; +in { + config = mkIf (builtins.elem deviceType acceptedTypes) { + services = { + # DBus service that provides power management support to applications + upower = { + enable = true; + percentageLow = 15; + percentageCritical = 5; + percentageAction = 3; + criticalPowerAction = "Hibernate"; + }; + }; + }; +} +