49 lines
2.7 KiB
Nix
49 lines
2.7 KiB
Nix
{ pkgs, ... }: {
|
|
# ─────────────────────── Power & thermal ───────────────────────
|
|
# Snapdragon 7c (sc7180) on a tablet form factor: aim for battery life. `schedutil` is the
|
|
# right modern cpufreq governor on ARM (responsive + power-aware); use it instead of
|
|
# `powersave` to avoid pinning the CPU at minimum frequency under interactive load.
|
|
powerManagement.cpuFreqGovernor = "schedutil";
|
|
powerManagement.enable = true;
|
|
|
|
# ─────────────────────── logind: lid & power button ───────────────────────
|
|
# Tablet form factor: lid close = suspend (even on AC), short power-press = suspend, long
|
|
# power-press = poweroff. Niri's own power-key handler must stay disabled — see the
|
|
# `input.disable-power-key-handling` flag in `_private/touch-tablet.nix` — otherwise niri's
|
|
# `block` inhibitor on `handle-power-key` pre-empts logind and turns the wake-from-suspend
|
|
# press (which the EC re-delivers as KEY_POWER) into an immediate re-suspend loop
|
|
# (https://github.com/niri-wm/niri/issues/2233).
|
|
services.logind.settings.Login = {
|
|
HandleLidSwitch = "suspend";
|
|
HandleLidSwitchExternalPower = "suspend";
|
|
HandleLidSwitchDocked = "ignore";
|
|
HandlePowerKey = "suspend";
|
|
HandlePowerKeyLongPress = "poweroff";
|
|
};
|
|
|
|
# ─────────────────────── Idle / suspend tuning ───────────────────────
|
|
# Allow suspend-to-RAM but disable hibernate (ARM swap-resume is unreliable, and we don't
|
|
# have a swap device by default anyway).
|
|
systemd.sleep.settings.Sleep = {
|
|
AllowHibernation = "no";
|
|
AllowHybridSleep = "no";
|
|
AllowSuspendThenHibernate = "no";
|
|
};
|
|
|
|
# upower picks the right battery percentages for low/critical out of the box; just make
|
|
# sure the action on critical is hibernate-then-poweroff fallback (we disabled hibernate
|
|
# so it'll go straight to poweroff). DMS reads upower for the bar widget.
|
|
services.upower = {
|
|
enable = true;
|
|
criticalPowerAction = "PowerOff";
|
|
percentageLow = 15;
|
|
percentageCritical = 7;
|
|
percentageAction = 3;
|
|
};
|
|
|
|
# ─────────────────────── Bluetooth audio quality of life ───────────────────────
|
|
# Duet has limited mic/speaker hw — keep wpa_supplicant power-save off so audio doesn't crackle
|
|
# over Bluetooth when CPU is idle. (Wi-Fi + BT share the chip; aggressive power-save = stutter.)
|
|
networking.networkmanager.wifi.powersave = false;
|
|
}
|