diff options
| author | sommerfeld <sommerfeld@sommerfeld.dev> | 2026-08-14 14:21:04 +0100 |
|---|---|---|
| committer | sommerfeld <sommerfeld@sommerfeld.dev> | 2026-08-14 14:21:04 +0100 |
| commit | c678c19a30f61ab9736e206457b14b26843ae18f (patch) | |
| tree | 46d4d907f9209daba8bced7855cf5f37003e71d5 /dot_config/sway | |
| parent | 0c602b7c6b273b9a5ab7f602bd34da8b63cd8d44 (diff) | |
| download | dotfiles-c678c19a30f61ab9736e206457b14b26843ae18f.tar.gz dotfiles-c678c19a30f61ab9736e206457b14b26843ae18f.tar.bz2 dotfiles-c678c19a30f61ab9736e206457b14b26843ae18f.zip | |
Improve Sway display recovery
Diffstat (limited to 'dot_config/sway')
| -rw-r--r-- | dot_config/sway/config | 1 | ||||
| -rw-r--r-- | dot_config/sway/executable_display-recover.sh | 47 | ||||
| -rw-r--r-- | dot_config/sway/executable_display-wake.sh | 8 |
3 files changed, 56 insertions, 0 deletions
diff --git a/dot_config/sway/config b/dot_config/sway/config index bfdfed1..6490001 100644 --- a/dot_config/sway/config +++ b/dot_config/sway/config @@ -204,6 +204,7 @@ bindsym $mod+period exec ~/.config/sway/emoji-picker.sh # Display mode switching bindsym --no-repeat XF86Display exec ~/.config/sway/display-toggle.sh +bindsym --locked --no-repeat XF86Display exec ~/.config/sway/display-recover.sh # Multimedia hardware keys (uncommon) bindsym XF86Tools exec $term --class=floating -e pulsemixer diff --git a/dot_config/sway/executable_display-recover.sh b/dot_config/sway/executable_display-recover.sh new file mode 100644 index 0000000..5ebb70a --- /dev/null +++ b/dot_config/sway/executable_display-recover.sh @@ -0,0 +1,47 @@ +#!/usr/bin/env dash +set -u + +log="${XDG_RUNTIME_DIR:-/tmp}/display-recover.log" + +outputs_json() { + swaymsg -t get_outputs -r 2>/dev/null || printf '[]\n' +} + +first_laptop() { + jq -r '[.[] | select(.name | test("^eDP")) | .name] | first // empty' +} + +externals() { + jq -r '.[] | select(.name | test("^eDP") | not) | .name' +} + +laptop_width() { + jq -r --arg name "$1" '.[] | select(.name == $name) | .current_mode.width // .modes[0].width // 1920' +} + +{ + printf '\n[%s] display recovery\n' "$(date -Is)" + + "$HOME/.config/sway/display-wake.sh" || true + + outputs=$(outputs_json) + laptop=$(printf '%s\n' "$outputs" | first_laptop) + width=1920 + + if [ -n "$laptop" ]; then + width=$(printf '%s\n' "$outputs" | laptop_width "$laptop") + swaymsg output "$laptop" enable pos 0 0 || true + fi + + printf '%s\n' "$outputs" | externals | while read -r output; do + [ -n "$output" ] || continue + swaymsg output "$output" power on || true + sleep 0.2 + swaymsg output "$output" disable || true + sleep 0.5 + swaymsg output "$output" enable pos "$width" 0 || true + done + + swaymsg 'output * power on' || true + brightnessctl -r || true +} >>"$log" 2>&1 diff --git a/dot_config/sway/executable_display-wake.sh b/dot_config/sway/executable_display-wake.sh new file mode 100644 index 0000000..11137cb --- /dev/null +++ b/dot_config/sway/executable_display-wake.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env dash +set -u + +brightnessctl -r >/dev/null 2>&1 || true +swaymsg 'output * power on' >/dev/null 2>&1 || true +sleep 0.2 + +"$HOME/.config/sway/display-toggle.sh" apply >/dev/null 2>&1 || true |
