]> git.rmz.io Git - dotfiles.git/blobdiff - bin/xkbload
xprofile: reload xkb layout on usb connection
[dotfiles.git] / bin / xkbload
diff --git a/bin/xkbload b/bin/xkbload
new file mode 100755 (executable)
index 0000000..607385b
--- /dev/null
@@ -0,0 +1,43 @@
+#!/usr/bin/env bash
+
+# This script is meant to be called by inputplug when a new input device event happened.
+
+xkb_config=$XDG_CONFIG_HOME/xkb
+xkb_file=$xkb_config/default.xkb
+[[ -f $xkb_config/$(hostname).xkb ]] && xkb_file=$(hostname)
+
+XIDeviceEnabled()
+{
+    kinadv2="Kinesis Advantage2 Keyboard"
+    if [[ "$device_name" == "$kinadv2" ]]; then
+        # HACK: if I don't sleep, capslock is enabled on reconnect
+        sleep 0.1
+        echo "xkbcomp default.xkb"
+        xkbcomp -w0 -I$xkb_config $xkb_file $DISPLAY -i $device_id
+    fi
+}
+
+call_event_handler()
+{
+    case $(type -t $event_type) in
+        function) $event_type ;;
+        *) echo "No handler for event '$event_type'" ;;
+    esac
+}
+
+if [[ $# -eq 4 ]]; then
+    # See inputplug(1)
+    event_type=$1
+    device_id=$2
+    device_type=$3
+    device_name=$4
+    call_event_handler
+else
+    # if not called with four args, loop over all devices
+    event_type=XIDeviceEnabled
+    for device_id in $(xinput list --id-only); do
+        device_name="$(xinput list --name-only $device_id)"
+        device_type="UnknownTODO"  # don't know how to get this easily
+        call_event_handler
+    done
+fi