{ pkgs, config, lib, system, ... }: let cfg = config.grimmShared; inherit (lib) optionals optional optionalString concatLines getExe; inherit (config.boot.kernelPackages) x86_energy_perf_policy cpupower; enable_perf_policy = (lib.elem system x86_energy_perf_policy.meta.platforms); powersave = with pkgs; writeShellScriptBin "powersave-mode" (concatLines ([ "${getExe cpupower} frequency-set -g powersave -u 2000000" # clock speed "${getExe pkgs.brightnessctl} s 20%" # display brightness ] ++ optionals enable_perf_policy [ "${getExe x86_energy_perf_policy} 15" # power save preference "${getExe x86_energy_perf_policy} --turbo-enable 0" # disable turbo ] ++ optional cfg.sway.enable "init-screens-min")); performance = pkgs.writeShellScriptBin "performance-mode" (concatLines ([ "${getExe cpupower} frequency-set frequency-set -g performance -u 5000000" # clock speed "${getExe pkgs.brightnessctl} s 100%" # display brightness ] ++ optionals enable_perf_policy [ "${getExe x86_energy_perf_policy} 0" # performance preference "${getExe x86_energy_perf_policy} --turbo-enable 1" # enable turbo ] ++ optional cfg.sway.enable "init-screens-max")); auto = let inherit (pkgs) tlp; in pkgs.writeShellScriptBin "auto-mode" '' ${tlp}/bin/run-on-ac ${getExe performance} ${tlp}/bin/run-on-bat ${getExe powersave} ''; in { config = with cfg; lib.mkIf (enable && laptop_hardware.enable) { environment.systemPackages = with pkgs; [ acpi powertop brightnessctl cpupower powersave performance auto ] ++ optionals graphical [ tlpui ] ++ optional enable_perf_policy x86_energy_perf_policy; services.acpid = { enable = true; acEventCommands = getExe auto; }; powerManagement.scsiLinkPolicy = lib.mkIf (!config.services.tlp.enable) "min_power"; powerManagement.cpuFreqGovernor = lib.mkDefault "normal"; services.power-profiles-daemon.enable = false; services.upower.enable = true; #boot.extraModulePackages = [ # cpupower #] ++ optional enable_perf_policy x86_energy_perf_policy; services.tlp = { enable = true; settings = { USB_AUTOSUSPEND = 1; USB_EXCLUDE_BTUSB = 1; USB_EXCLUDE_PHONE = 1; SOUND_POWER_SAVE_ON_AC = 0; SOUND_POWER_SAVE_ON_BAT = 1; SATA_LINKPWR_ON_AC = "max_performance"; SATA_LINKPWR_ON_BAT = "min_power"; MAX_LOST_WORK_SECS_ON_BAT = 15; CPU_ENERGY_PERF_POLICY_ON_AC = "performance"; CPU_ENERGY_PERF_POLICY_ON_BAT = "power"; CPU_BOOST_ON_AC = 1; CPU_BOOST_ON_BAT = 0; RUNTIME_PM_ON_AC = "on"; RUNTIME_PM_ON_BAT = "auto"; }; }; }; }