diff --git a/hyprland/.config/hypr/env.lua b/hyprland/.config/hypr/env.lua index ca4f03d..303bdbb 100644 --- a/hyprland/.config/hypr/env.lua +++ b/hyprland/.config/hypr/env.lua @@ -2,3 +2,7 @@ hl.env("XCURSOR_SIZE", "24") hl.env("QT_QPA_PLATFORMTHEME", "qt5ct") -- change to qt6ct if you have that hl.env("SUDO_ASKPASS", os.getenv("HOME") .. "/.local/bin/sudo-askpass.sh") +-- Prepend ~/.local/bin so `hyprlock` (and other user scripts) resolve to the +-- crash-guard wrapper instead of /usr/bin/hyprlock. Hyprland's exec/keybind +-- PATH is otherwise the system PATH and misses user-local binaries. +hl.env("PATH", os.getenv("HOME") .. "/.local/bin:" .. (os.getenv("PATH") or "/usr/bin:/bin")) diff --git a/hyprland/.config/hypr/hypridle.conf b/hyprland/.config/hypr/hypridle.conf index 51e950a..652bd70 100644 --- a/hyprland/.config/hypr/hypridle.conf +++ b/hyprland/.config/hypr/hypridle.conf @@ -23,14 +23,26 @@ listener { on-timeout = loginctl lock-session # lock screen when timeout has passed } +# The dpms-off and suspend listeners ignore idle inhibitors (Steam, browsers, +# etc. hold them) so the screen still blanks and the machine still suspends +# after the screen is locked -- otherwise a held inhibitor would keep the +# locked screen on forever. `condition_cmd` gates them on the lock screen +# actually running, so inhibitors keep working as intended while unlocked +# (e.g. a video keeps the screen awake). listener { timeout = 330 # 5.5min + ignore_inhibit = true # fire even while apps hold idle inhibitors + condition_cmd = pidof hyprlock > /dev/null # ...but only once the session is locked + condition_retry = 30 # if not locked yet, re-check every 30s while idle on-timeout = hyprctl dispatch dpms off # screen off when timeout has passed on-resume = hyprctl dispatch dpms on && brightnessctl -r # screen on when activity is detected after timeout has fired. } listener { timeout = 1800 # 30min + ignore_inhibit = true # fire even while apps hold idle inhibitors + condition_cmd = pidof hyprlock > /dev/null # ...but only while the session is locked + condition_retry = 60 # if not locked yet, re-check every 60s while idle on-timeout = systemctl suspend # suspend pc } diff --git a/hyprland/.config/hypr/hyprland.lua b/hyprland/.config/hypr/hyprland.lua index 62cb745..ec0e98d 100644 --- a/hyprland/.config/hypr/hyprland.lua +++ b/hyprland/.config/hypr/hyprland.lua @@ -94,6 +94,9 @@ hl.config({ mouse_move_focuses_monitor = false, -- Skip drawing the Hyprland logo in the corner of empty workspaces. disable_hyprland_logo = true, + -- Allow a new hyprlock to take over the lock after a crash; without this a + -- dead lock client leaves the session permanently locked (no lockscreen). + allow_session_lock_restore = true, }, }) @@ -103,5 +106,8 @@ hl.config({ hl.config({ debug = { vfr = true, + -- Temporarily on to diagnose the mystery re-lock (disable_logs=true + -- default hides dispatch exec lines from hyprland.log). + disable_logs = false, }, })