feat(idle): suspend on battery only, cohering with power management
hypridle's suspend listener now runs `nomarchy-on-ac || systemctl suspend`, so a plugged-in machine no longer suspends itself mid-idle (long builds, media, presentations survive). It also fires sooner — 15 min, vs the old fixed 30 — since it now only applies unplugged. Lock and screen-off are unchanged on both power sources, and logind's lid handling stays at its sensible defaults (suspend on lid close, ignore when docked). Closes the idle-cohesion follow-up under the laptop-power roadmap item. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -2,13 +2,23 @@
|
||||
# theme-state.json. One concern, one file: hypridle drives WHEN (idle
|
||||
# lock, display off, suspend, lock-before-sleep), hyprlock is the
|
||||
# themed lock screen itself (also behind the power menu's Lock entry).
|
||||
{ config, lib, ... }:
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
let
|
||||
cfg = config.nomarchy;
|
||||
t = cfg.theme;
|
||||
c = t.colors;
|
||||
inherit (config.nomarchy.lib) rgb;
|
||||
|
||||
# Exits 0 when running on AC: a mains adapter reports `online` 1 (battery
|
||||
# supplies have no `online` node, so they never match). Used as
|
||||
# `${onAc} || <action>` so the action is skipped while plugged in.
|
||||
onAc = pkgs.writeShellScript "nomarchy-on-ac" ''
|
||||
for f in /sys/class/power_supply/*/online; do
|
||||
[ -r "$f" ] && [ "$(cat "$f")" = "1" ] && exit 0
|
||||
done
|
||||
exit 1
|
||||
'';
|
||||
in
|
||||
{
|
||||
config = lib.mkIf cfg.idle.enable {
|
||||
@@ -62,13 +72,20 @@ in
|
||||
after_sleep_cmd = "hyprctl dispatch dpms on";
|
||||
};
|
||||
listener = [
|
||||
# Lock and screen-off are the same on either power source —
|
||||
# they're about privacy and the panel, not battery.
|
||||
{ timeout = 300; on-timeout = "loginctl lock-session"; }
|
||||
{
|
||||
timeout = 600;
|
||||
on-timeout = "hyprctl dispatch dpms off";
|
||||
on-resume = "hyprctl dispatch dpms on";
|
||||
}
|
||||
{ timeout = 1800; on-timeout = "systemctl suspend"; }
|
||||
# Suspend only on battery, and sooner than the old fixed 30 min
|
||||
# (it now only fires unplugged). Plugged in, the machine stays
|
||||
# up — long builds, media, presentations aren't killed mid-idle.
|
||||
# Closing the lid still suspends on AC (logind's default): that's
|
||||
# an explicit "I'm done", distinct from sitting idle.
|
||||
{ timeout = 900; on-timeout = "${onAc} || systemctl suspend"; }
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user