#!/bin/sh

MAP_DIR="${XDG_DATA_HOME}/xkb/compiled"

rotate() {
	current="$(readlink keymap)"
	for f in *; do
		readlink "$f" >/dev/null && continue
		[ -z "$first" ] && first=$f
		[ -n "$found" ] && break
		[ "$f" = "$current" ] && found=1
		f=
	done
	[ -h "$f" ] || [ -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