{ pkgs, lib, ... }: let batt-gpu = pkgs.writeShellScript "batt-igpu" '' ${pkgs.intel-gpu-tools}/bin/intel_gpu_frequency -e echo "800" > /sys/class/drm/card1/gt_boost_freq_mhz ''; ac-gpu = pkgs.writeShellScript "ac-igpu" '' ${pkgs.intel-gpu-tools}/bin/intel_gpu_frequency -d echo "2350" > /sys/class/drm/card1/gt_boost_freq_mhz ''; in { services.tlp = { enable = true; settings = { # Wireless power saving WIFI_PWR_ON_BAT = "1"; # USB autosuspend USB_AUTOSUSPEND = "1"; # SATA drive power management SATA_LINKPWR_ON_BAT = "min_power"; # PCI Express Active-State Power Management (ASPM) PCIE_ASPM_ON_BAT = "powersupersave"; RUNTIME_PM_ON_AC = "on"; RUNTIME_PM_ON_BAT = "auto"; # Disable Bluetooth on battery # DEVICES_TO_DISABLE_ON_BAT = "bluetooth"; # Restore brightness on battery RESTORE_BRIGHTNESS_ON_BAT = "1"; PCIE_ASPM_ON_AC = "balanced"; DEVICES_TO_DISABLE_ON_BAT_NOT_IN_USE = "bluetooth"; INTEL_GPU_MAX_FREQ_ON_AC = 0; INTEL_GPU_MAX_FREQ_ON_BAT = 800; INTEL_GPU_BOOST_FREQ_ON_AC = 0; INTEL_GPU_BOOST_FREQ_ON_BAT = 800; CPU_MAX_PERF_ON_BAT = 50; PLATFORM_PROFILE_ON_AC = "balanced"; PLATFORM_PROFILE_ON_BAT = "quiet"; START_CHARGE_THRESH_BAT0 = 40; # 40 and below it starts to charge STOP_CHARGE_THRESH_BAT0 = 80; # 80 and above it stops charging }; }; services.thermald.enable = true; services.upower = { enable = true; }; services.auto-cpufreq.enable = true; systemd.targets = { "ac" = { description = "On AC power"; unitConfig = { StopWhenUnneeded = "yes"; }; }; "battery" = { description = "On battery power"; unitConfig = { StopWhenUnneeded = "yes"; }; }; }; services.udev.extraRules = '' SUBSYSTEM=="power_supply",ENV{POWER_SUPPLY_ONLINE}=="0", RUN+="/run/current-system/systemd/bin/systemctl start battery.target" SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_ONLINE}=="1", RUN+="/run/current-system/systemd/bin/systemctl start ac.target" ''; services.auto-cpufreq.settings = { battery = { governor = "powersave"; turbo = "never"; }; charger = { governor = "performance"; turbo = "auto"; }; }; boot.kernelParams = [ # "mem_sleep_default=deep" # "i915.fastboot=1" "pcie_aspm=force" "ahci.mobile_lpm_policy=1" ]; services.logind.settings.Login = { HandleLidSwitch = "suspend"; HandleLidSwitchExternalPower = "suspend"; HandleLidSwitchDocked = "ignore"; }; systemd.sleep.extraConfig = '' HibernateDelaySec=30min SuspendEstimationSec=120 ''; systemd.services.gpu-limit-on-batt = { enable = true; description = "Using rfkill; disable all rf devices before sleeping."; before = [ "battery.target" ]; serviceConfig = { Type = "oneshot"; ExecStart = "${batt-gpu}"; RemainAfterExit = true; }; wantedBy = [ "battery.target" ]; partOf = [ "battery.target" ]; }; systemd.services.gpu-limit-on-ac = { enable = true; description = "Using rfkill; disable all rf devices before sleeping."; before = [ "ac.target" ]; serviceConfig = { Type = "oneshot"; ExecStart = "${ac-gpu}"; RemainAfterExit = true; }; wantedBy = [ "ac.target" ]; partOf = [ "ac.target" ]; }; systemd.services.rfkill-sleep-wake = { enable = true; description = "Using rfkill; disable all rf devices before sleeping."; before = [ "sleep.target" ]; serviceConfig = { Type = "oneshot"; ExecStop = "${pkgs.utillinux}/bin/rfkill unblock all"; ExecStart = "${pkgs.utillinux}/bin/rfkill block all"; RemainAfterExit = true; }; wantedBy = [ "sleep.target" ]; partOf = [ "sleep.target" ]; }; # one of "ignore", "poweroff", "reboot", "halt", "kexec", "suspend", "hibernate", "hybrid-sleep", "suspend-then-hibernate", "lock" powerManagement = { enable = true; # powertop.enable = true; }; }