#!/usr/bin/env bash function set_layout() { echo "Setting layout to $1" xkbcomp ~/.xkb/$1.xkb $DISPLAY echo $1 > ~/.cache/xkb-curr-$DISPLAY } layouts=(insert normal) current_layout=$(cat ~/.cache/xkb-curr-$DISPLAY || echo "") if [[ $current_layout == "" ]]; then echo "No current layout found!" set_layout ${layouts[0]} fi i=0 while [[ $i -lt ${#layouts[@]} ]]; do if [[ $current_layout == ${layouts[$i]} ]]; then new_idx=$(($i+1)) if [[ $new_idx -eq ${#layouts[@]} ]]; then set_layout ${layouts[0]} else set_layout ${layouts[$new_idx]} fi exit fi ((i++)) done echo "Current Layout doesn't exist!" set_layout ${layouts[0]}