#!/bin/sh MAP_DIR="${XDG_DATA_HOME}/xkb/compiled" rotate() { current="$(readlink keymap)" for f in *; do [ "$f" = "keymap" ] && continue [ -z "$first" ] && first=$f [ -n "$found" ] && break [ "$f" = "$current" ] && found=1 f= done [ "$f" = "keymap" ] || [ -z "$f" ] && f=$first ln -sf "$f" keymap } setmap() { current=${1:-$(readlink keymap)} xkbcomp "$current" "$DISPLAY" >/dev/null 2>&1 || return 1 xset r rate 300 50 xset -q | grep -q "Caps Lock:\s*on" && xdotool key Caps_Lock killall xcape 2>/dev/null xcape -e 'Super_L=Escape' $notifier -h string:x-dunst-stack-tag:"remaps" \ "󰌌 Keymap set" "Layout: $current" } cd "$MAP_DIR" || return 1 notifier="notify-send" while getopts "rqdls:" opt; do case $opt in d) setmap exit ;; q) notifier=":" ;; s) setmap "$OPTARG" exit ;; l) find . -type f -printf "%f\n" exit ;; *) ;; esac done rotate setmap