#!/bin/bash # Auto-disable touchpad when an external mouse is connected, re-enable when removed. # Watches Hyprland socket for device add/remove events. TOUCHPAD="pixa3854:00-093a:0274-touchpad" STATE_FILE="${XDG_RUNTIME_DIR:-/tmp}/touchpad-state" has_external_mouse() { hyprctl devices -j | jq -e '[.mice[] | select(.name != "'"$TOUCHPAD"'" and .name != "pixa3854:00-093a:0274-mouse" and (.name | test("frmw") | not))] | length > 0' >/dev/null 2>&1 } set_touchpad() { hyprctl keyword "device[$TOUCHPAD]:enabled" "$1" >/dev/null if [ "$1" = "true" ]; then echo "enabled" > "$STATE_FILE" else echo "disabled" > "$STATE_FILE" fi # Refresh the waybar indicator (custom/touchpad listens on signal 9). pkill -RTMIN+9 waybar 2>/dev/null } # Set initial state if has_external_mouse; then set_touchpad false else set_touchpad true fi # BT mice may auto-reconnect after boot — recheck after delay (sleep 10 && if has_external_mouse; then set_touchpad false; fi) & # Watch for device events socat -u "UNIX-CONNECT:$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock" - | while read -r line; do case "$line" in mouseadded\>\>*|mouseremoved\>\>*) sleep 0.5 if has_external_mouse; then set_touchpad false else set_touchpad true fi ;; configreloaded\>\>*) sleep 0.5 if has_external_mouse; then set_touchpad false else set_touchpad true fi ;; esac done