From ed93a047ee35041b5d7504016f8e32ffc914aefc Mon Sep 17 00:00:00 2001 From: Iqbal Attila Date: Tue, 19 May 2026 14:42:13 +0700 Subject: [PATCH] Fix power profile race on plug/unplug events (#5898) The udev power_supply rule fires before sysfs `online` is updated on some laptops (notably Lenovo Yoga Pro 7 14IAH10 with USB-C charging). The autodetect branch reads the stale value and sets the wrong profile, so the system stays on `performance` after unplug (or vice versa). A single plug/unplug typically fires 3-4 udev events within ~1s (ACAD + each USB-C port). With `systemd-run --unit=omarchy-power-profile --collect`, duplicate invocations against the same unit name can be dropped while the first is still running, so the surviving event isn't guaranteed to be the latest one. This adds a 0.3s settle delay at the top of the autodetect branch only. Explicit `ac` and `battery` invocations remain instant. Tested on Lenovo Yoga Pro 7 14IAH10 (Intel Core Ultra 9 285H, Omarchy 3.8.1). Co-authored-by: Iqbal Attila --- bin/omarchy-powerprofiles-set | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/bin/omarchy-powerprofiles-set b/bin/omarchy-powerprofiles-set index a7dd623d..bebd18d2 100755 --- a/bin/omarchy-powerprofiles-set +++ b/bin/omarchy-powerprofiles-set @@ -11,6 +11,11 @@ action="${1-}" # events, and also avoids false negatives from per-port USB-C devices # that are present-but-empty (online=0) while another port supplies power. if [[ -z $action || $action == "autodetect" ]]; then + # On plug/unplug, udev fires the rule before sysfs `online` is updated + # on some laptops (notably Lenovo Yoga Pro 7 with USB-C charging). A + # short settle delay lets the kernel update before we read state. + sleep 0.3 + action=battery for ps in /sys/class/power_supply/*; do [[ -r $ps/online && -r $ps/type ]] || continue