aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/dot_config/sway/executable_display-toggle.sh
diff options
context:
space:
mode:
authorLibravatar sommerfeld <sommerfeld@sommerfeld.dev>2026-04-21 01:23:18 +0100
committerLibravatar sommerfeld <sommerfeld@sommerfeld.dev>2026-04-21 01:23:18 +0100
commitd00bf2cb2d5087164fa509a4f20a2be62a519044 (patch)
treee788986ca341fa7a9d7327b48c58d2e0c0c43115 /dot_config/sway/executable_display-toggle.sh
parent9b2af4dd6c73ea57cc921f41120db7a2700e806d (diff)
downloaddotfiles-d00bf2cb2d5087164fa509a4f20a2be62a519044.tar.gz
dotfiles-d00bf2cb2d5087164fa509a4f20a2be62a519044.tar.bz2
dotfiles-d00bf2cb2d5087164fa509a4f20a2be62a519044.zip
refactor: restructure to chezmoi source state
Rename home/ contents to chezmoi naming conventions: - dot_ prefix for dotfiles and dot-dirs - private_dot_ for .gnupg and .ssh directories - private_ for 0600 files (nym.pub) - executable_ for scripts in .local/bin and display-toggle.sh - symlink_ for mimeapps.list symlink
Diffstat (limited to 'dot_config/sway/executable_display-toggle.sh')
-rwxr-xr-xdot_config/sway/executable_display-toggle.sh45
1 files changed, 45 insertions, 0 deletions
diff --git a/dot_config/sway/executable_display-toggle.sh b/dot_config/sway/executable_display-toggle.sh
new file mode 100755
index 0000000..f39bf9b
--- /dev/null
+++ b/dot_config/sway/executable_display-toggle.sh
@@ -0,0 +1,45 @@
+#!/bin/sh
+# Toggle display mode: laptop-off ↔ side-by-side
+# Bound to F7 in sway config; also runs at startup with "init"
+
+STATE_FILE="${XDG_RUNTIME_DIR:-/tmp}/display-mode"
+
+OUTPUTS=$(swaymsg -t get_outputs -r)
+LAPTOP=$(echo "$OUTPUTS" | jq -r '[.[] | select(.name | test("^eDP")) | .name] | first // empty')
+EXTERNAL=$(echo "$OUTPUTS" | jq -r '[.[] | select(.name | test("^eDP") | not) | .name] | first // empty')
+
+if [ -z "$EXTERNAL" ]; then
+ [ -z "$1" ] && notify-send "Display" "No external display connected"
+ exit 0
+fi
+
+[ -z "$LAPTOP" ] && exit 0
+
+LAPTOP_WIDTH=$(echo "$OUTPUTS" | jq -r ".[] | select(.name == \"$LAPTOP\") | .current_mode.width // .modes[0].width")
+[ -z "$LAPTOP_WIDTH" ] && LAPTOP_WIDTH=1920
+
+if [ "$1" = "init" ]; then
+ NEXT="laptop-off"
+else
+ CURRENT=$(cat "$STATE_FILE" 2>/dev/null || echo "laptop-off")
+ case "$CURRENT" in
+ laptop-off) NEXT="side-by-side" ;;
+ *) NEXT="laptop-off" ;;
+ esac
+fi
+
+case "$NEXT" in
+ laptop-off)
+ swaymsg output "$LAPTOP" disable || true
+ swaymsg output "$EXTERNAL" enable || true
+ swaymsg workspace number 1 || true
+ echo "laptop-off" > "$STATE_FILE"
+ [ -z "$1" ] && notify-send "Display" "Laptop screen off"
+ ;;
+ side-by-side)
+ swaymsg output "$LAPTOP" enable pos 0 0 || true
+ swaymsg output "$EXTERNAL" enable pos "$LAPTOP_WIDTH" 0 || true
+ echo "side-by-side" > "$STATE_FILE"
+ [ -z "$1" ] && notify-send "Display" "Side by side"
+ ;;
+esac