scripts/waybar/waybar-keyboard.sh

51 lines
1.5 KiB
Bash
Executable File

#!/bin/bash
# Input name from `swaymsg -t get_inputs`
INPUTNAME="AT Translated Set 2 keyboard"
ACTIVELAYOUT=$(swaymsg -t get_inputs | jq -r ".[] | select(.name==\"$INPUTNAME\") | .xkb_active_layout_name")
mapfile -t AVAILABLELAYOUTS < <( swaymsg -t get_inputs | jq -r ".[] | select(.name==\"$INPUTNAME\") | .xkb_layout_names" | sed 's/[][,]//g' | sed 's/^ *//g' | grep -P '.')
ACTIVEINDEX=0
for i in "${AVAILABLELAYOUTS[@]}"; do
if [[ "$i" == '"'$ACTIVELAYOUT'"' ]]; then
break
else
((ACTIVEINDEX+=1))
fi
done
ACTION=bar
if [ -n $1 ]; then
ACTION=$1
fi
if [[ $ACTION == 'osk' ]]; then
FILE=/home/jpm/.local/state/onscreen-keyboard
if [ -f $FILE ]; then
rm $FILE
busctl call --user sm.puri.OSK0 /sm/puri/OSK0 sm.puri.OSK0 SetVisible b false
else
touch $FILE
busctl call --user sm.puri.OSK0 /sm/puri/OSK0 sm.puri.OSK0 SetVisible b true
fi
elif [[ $ACTION == 'layout' ]]; then
# Simpler just to use 'next' to rotate input layouts
#((ACTIVEINDEX+=1))
#if [[ $ACTIVEINDEX -eq ${#AVAILABLELAYOUTS[@]} ]]; then
#ACTIVEINDEX=0
#fi
#swaymsg input type:keyboard $ACTIVEINDEX
swaymsg input type:keyboard xkb_switch_layout next
$0 bar
else
SHORT=$(echo $ACTIVELAYOUT | sed -r 's/.*\(([[:alpha:]]*)\).*/\1/')
if [[ $ACTIVEINDEX -ne 0 ]]; then
echo '{"text": "⌨  '$SHORT'", "tooltip": "Rotate keyboard layout", "class": "alternate"}'
else
echo '{"text": "⌨  '$SHORT'", "tooltip": "Rotate keyboard layout", "class": "primary"}'
fi
fi