{ config, lib, pkgs, ... }: let cfg = config.nomarchy.system.laptop; hib = config.nomarchy.system.hibernation; lidAction = if hib.enable then "suspend-then-hibernate" else "suspend"; in { config = lib.mkIf cfg.enable { services.tlp = { enable = lib.mkDefault true; settings = { CPU_SCALING_GOVERNOR_ON_AC = lib.mkDefault "performance"; CPU_SCALING_GOVERNOR_ON_BAT = lib.mkDefault "powersave"; CPU_BOOST_ON_BAT = lib.mkDefault 0; PLATFORM_PROFILE_ON_AC = lib.mkDefault "balanced"; PLATFORM_PROFILE_ON_BAT = lib.mkDefault "low-power"; # Charge thresholds only honored on supported hardware (ThinkPad, # some ASUS); a harmless warning is logged elsewhere. START_CHARGE_THRESH_BAT0 = lib.mkDefault 75; STOP_CHARGE_THRESH_BAT0 = lib.mkDefault 80; }; }; # TLP and power-profiles-daemon both arbitrate CPU/EPP — NixOS asserts # mutual exclusion. Opt out of the preset entirely to use PPD instead. services.power-profiles-daemon.enable = lib.mkForce false; services.upower.enable = lib.mkDefault true; services.thermald.enable = lib.mkDefault cfg.thermald; # Backlight write access for the `video` group, so the existing # nomarchy-brightness-{display,keyboard} scripts run without root. services.udev.packages = [ pkgs.brightnessctl ]; services.logind.settings.Login = { HandleLidSwitch = lib.mkDefault lidAction; HandleLidSwitchExternalPower = lib.mkDefault "suspend"; HandleLidSwitchDocked = lib.mkDefault "ignore"; }; }; }