blob: 830a8f2db867b81fb8ec8a7aca0a635fe51b6b48 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
#!/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
|