#!/bin/bash # caffeine.sh — toggle caffeine mode by killing/restarting swayidle # When ON: kill swayidle (no idle lock/screen-off) # When OFF: restart swayidle with the same timeouts as the Sway session # # The "restart" path calls start-swayidle.sh, which is the SAME script # Sway's config uses (`exec $HOME/.config/sway/start-swayidle.sh`). # Single source of truth: if you change timeouts, change them in # start-swayidle.sh and both the session start AND the toggle share them. # (Earlier this script hardcoded the swayidle command itself, and it # drifted out of sync with sway/config — toggling caffeine off would # silently change your lock command and timeout values.) # # At top: source restore-wayland-env.sh to inherit WAYLAND_DISPLAY (and # friends) from a running Wayland client. waybar's on-click context # strips these, so without this: # - notify-send writes to D-Bus (exits 0) but mako can't display # (no Wayland socket to render on) # - the click appears to silently do nothing # This is the SAME bug start-swayidle.sh had for swayidle itself — # fixed in both places via the shared helper. # shellcheck source=restore-wayland-env.sh source "$HOME/.config/sway/restore-wayland-env.sh" FLAG="/tmp/caffeine-inhibit" if [ -f "$FLAG" ]; then # Turn OFF caffeine — restart swayidle rm -f "$FLAG" killall swayidle 2>/dev/null "$HOME/.config/sway/start-swayidle.sh" & # No -t flag → mako's `default-timeout` (currently 5000ms) controls duration. # Earlier this used -t 2000 (2 seconds) but that vanished faster than the # user could see it — the click "appeared to do nothing" because the # notification popped and self-cleared in 2s. mako config owns the timeout. notify-send "☕ Caffeine OFF" "Idle sleep enabled" 2>/dev/null else # Turn ON caffeine — kill swayidle touch "$FLAG" killall swayidle 2>/dev/null notify-send "☕ Caffeine ON" "Idle sleep disabled" 2>/dev/null fi