#!/bin/bash # toggle-dropdown.sh — toggle the dropdown foot terminal # Writes debug info to /tmp/sway-f12.log so we can diagnose from SSH LOG=/tmp/sway-f12.log echo "=== $(date) F12/Super+grave pressed ===" >> "$LOG" echo "WAYLAND_DISPLAY=$WAYLAND_DISPLAY" >> "$LOG" echo "USER=$USER XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR" >> "$LOG" # Find the sway socket SOCK=$(ls -t /run/user/$(id -u)/sway-ipc.*.sock 2>/dev/null | head -1) echo "SOCK=$SOCK" >> "$LOG" if [ -z "$SOCK" ]; then echo "ERROR: no sway socket found" >> "$LOG" notify-send -t 2000 "sway: no IPC socket" 2>>"$LOG" || true exit 1 fi # Check if a foot window is in the scratchpad (hidden) HIDDEN=$(SWAYSOCK=$SOCK swaymsg -t get_tree 2>>"$LOG" | python3 -c " import sys, json try: tree = json.load(sys.stdin) def find_app(node, app_id): if node.get('app_id') == app_id and node.get('name', '').startswith('__i3'): return node for c in node.get('nodes', []) + node.get('floating_nodes', []): r = find_app(c, app_id) if r is not None: return r return None dd = find_app(tree, 'foot') print('hidden' if dd is not None else 'none') except Exception as e: print(f'err:{e}') " 2>>"$LOG") echo "HIDDEN=$HIDDEN" >> "$LOG" if [ "$HIDDEN" = "hidden" ]; then SWAYSOCK=$SOCK swaymsg '[app_id="foot"] scratchpad show' >>"$LOG" 2>&1 echo "toggled: scratchpad show" >> "$LOG" else # Spawn a new foot. Pass through WAYLAND_DISPLAY explicitly. if [ -n "$WAYLAND_DISPLAY" ]; then WAYLAND_DISPLAY=$WAYLAND_DISPLAY foot >>"$LOG" 2>&1 & else # try to find wayland-1 socket if [ -S "/run/user/$(id -u)/wayland-1" ]; then WAYLAND_DISPLAY=wayland-1 foot >>"$LOG" 2>&1 & else foot >>"$LOG" 2>&1 & fi fi echo "spawned foot" >> "$LOG" fi echo "=== done ===" >> "$LOG"