nixdots/system/roles/laptop/power/default.nix

71 lines
1.7 KiB
Nix
Raw Normal View History

2024-04-13 19:15:25 +00:00
{ pkgs, lib, config, ...}: let
inherit (lib) mkIf mkDefault;
deviceType = config.myOptions.device.roles.type;
acceptedTypes = ["laptop"];
in {
config = mkIf (builtins.elem deviceType acceptedTypes) {
hardware.acpilight.enable = true;
2024-04-13 18:56:51 +00:00
2024-04-13 19:15:25 +00:00
environment.systemPackages = with pkgs; [
acpi
powertop
];
2024-04-13 18:56:51 +00:00
2024-04-13 19:15:25 +00:00
services = {
# handle ACPI events
acpid.enable = true;
2024-04-13 18:56:51 +00:00
2024-04-13 19:15:25 +00:00
# allows changing system behavior based upon user-selected power profiles
power-profiles-daemon.enable = true;
2024-04-13 18:56:51 +00:00
2024-04-13 19:15:25 +00:00
# temperature target on battery
undervolt = {
tempBat = 65; # deg C
package = pkgs.undervolt;
};
2024-04-13 18:56:51 +00:00
2024-04-13 19:15:25 +00:00
# superior power management
auto-cpufreq = {
enable = true;
2024-04-13 18:56:51 +00:00
2024-04-13 19:15:25 +00:00
# define the profiles
# (you can manually switch between profiles using `powerprofilesctl` cmd)
settings = let
MHz = x: x * 1000;
in {
battery = {
governor = "powersave";
scaling_min_freq = mkDefault (MHz 1200);
scaling_max_freq = mkDefault (MHz 1800);
turbo = "never";
};
2024-04-13 18:56:51 +00:00
2024-04-13 19:15:25 +00:00
charger = {
governor = "performance";
scaling_min_freq = mkDefault (MHz 1800);
scaling_max_freq = mkDefault (MHz 3800);
turbo = "auto";
};
2024-04-13 18:56:51 +00:00
};
};
2024-04-13 19:15:25 +00:00
# DBus service that provides power management support to applications
upower = {
enable = true;
percentageLow = 15;
percentageCritical = 5;
percentageAction = 3;
criticalPowerAction = "Hibernate";
};
2024-04-13 18:56:51 +00:00
};
2024-04-13 19:15:25 +00:00
boot = {
kernelModules = ["acpi_call"];
extraModulePackages = with config.boot.kernelPackages; [
acpi_call
cpupower
];
};
2024-04-13 18:56:51 +00:00
};
}