caffeine.sh click was silently breaking idle lock. Two bugs that
compounded:
1. caffeine.sh inlined its own swayidle command (with swaylock -f -i
, not lock-fancy.sh), drifted out of sync with sway/config
which used lock-fancy.sh. Toggle off would restart swayidle with a
different lock command than the rest of the session.
2. WAYLAND_DISPLAY isn't set in waybar's on-click context. When
caffeine.sh called 'swaymsg output * power off' (part of the
restart command) and later called swaylock / grim (via lock-fancy),
those failed silently. swayidle itself can run without
WAYLAND_DISPLAY but it can't actually monitor input/output, so it
exits immediately. Result: user clicks caffeine off, flag clears,
icon goes back to 'inactive', but auto-lock is silently dead.
The user thinks they turned caffeine off. They didn't. They're
just unprotected.
Fix:
- new start-swayidle.sh holds the canonical swayidle command
- sway/config: exec $HOME/.config/sway/start-swayidle.sh
- caffeine.sh: killall swayidle; start-swayidle.sh &
- start-swayidle.sh probes /proc/*/environ for a Wayland client's
env (mako always has it) and exports WAYLAND_DISPLAY /
DBUS_SESSION_BUS_ADDRESS / XDG_RUNTIME_DIR / DISPLAY if missing
before exec'ing swayidle
Single source of truth + env restoration = click works on every box
that has the same Wayland-capable process tree (mako, swaybar, etc.),
no matter who/what is calling the script.
Verified on tadbit: pre-fix toggle off killed swayidle permanently.
Post-fix: toggle off restarts swayidle successfully, env inherited
from mako's /proc/PID/environ.
New opt-in feature for x86_64 desktops: sway + wofi + foot + swaybg +
swaylock + swayidle + grim + slurp + waybar + wl-clipboard. mako on
arch, dunst on debian (mako isn't packaged for debian).
Files:
- .chezmoi.yaml.tmpl: added data.sway flag (true on miche/byte/kaiser,
false on Pis). Override per host with ~/.config/chezmoi/features/sway
or ~/.config/chezmoi/features/no-sway marker files.
- run_once_40-install-sway.sh.tmpl: installs packages if .sway=true,
exits 0 otherwise. Sets up the marker file.
- dot_config/{sway,foot,wofi,waybar,mako}/: existing configs from miche.
Per-host toggle workflow:
# On any box, enable sway:
touch ~/.config/chezmoi/features/sway
chezmoi apply
# On a sway-enabled box, disable it:
touch ~/.config/chezmoi/features/no-sway
rm ~/.config/chezmoi/features/sway
chezmoi apply
Currently sway packages are already installed on miche (existed before
this commit). Byte will get them via the new run_once_40 script.
Pis (rye, crouton) are unaffected — install script early-returns.