#!/bin/bash
#assign layout switch key to Ctrl+Shift+1 for first layot and Ctrl+Shift+2 for second, …
#USAGE: just save and execute by ordinary user
item="/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom"
key="org.gnome.settings-daemon.plugins.media-keys"
layouts=($(gsettings get org.gnome.desktop.input-sources sources | grep -o "\b\w\w\b"))
current=$(gsettings get $key custom-keybindings)
new=${current##*[[:alpha:]]}
#Better to check before
for mediakey in $(echo "$current" | tr -d "][\'\",") ; do
case $(gsettings get $key.custom-keybinding:$mediakey binding) in
*<Primary><Shift>[0-9]*)
echo "Bind key combination is assigned already"
gsettings list-recursively $key.custom-keybinding:$mediakey
exit 1 ;;
esac
done
if [ "$new" == "[]" -o -z "$new"] ; then
new=0
gsettings set $key custom-keybindings "['${item}0/', '${item}1/', '${item}2/']"
else
new=$((${new%/*}+1))
gsettings set $key custom-keybindings "${current%]}, '$item$new/', '$item$((new+1))/', '$item$((new+2))/']"
fi
for i in 0 1 2 ; do
gsettings set $key.custom-keybinding:$item$((new+i))/ name "Switch to ${layouts[i]}"
gsettings set $key.custom-keybinding:$item$((new+i))/ command "gsettings set org.gnome.desktop.input-sources current 'uint32 $i'"
gsettings set $key.custom-keybinding:$item$((new+i))/ binding "<Primary><Shift>$((i+1))"
done