#!/bin/bash

# quickly switch between a list of keyboard layouts

KEYCONF="$HOME/.config/instantos/keylayoutlist"
TMPPATH=/tmp/instantos/"$(whoami)"/keyindex

if ! [ -e "$KEYCONF" ]; then
    notify-send 'no keyboard list defined'
    exit 1
fi

if ! [ -e "$TMPPATH" ]; then
    mkdir -p /tmp/instantos/"$(whoami)" &>/dev/null
    # Detect index from current layout
    CURLAYOUT="$(setxkbmap -query | grep layout | grep -o '[^ ]*$')"
    echo "detected layout $CURLAYOUT"
    TMPINDEX="$(grep -n "$CURLAYOUT" "$KEYCONF" | grep -o '^[^:]*')"
    echo "$TMPINDEX" >"$TMPPATH"
else
    TMPINDEX="$(cat "$TMPPATH")"
fi

if ! [ "$TMPINDEX" -eq "$TMPINDEX" ]; then
    TMPINDEX=0
fi

LAYOUTCOUNT="$(wc -l <"$KEYCONF")"

if [ "$LAYOUTCOUNT" -eq 1 ]; then
    notify-send 'only one layout'
    exit
fi

TMPINDEX="$((TMPINDEX + 1))"

if [ "$TMPINDEX" -gt "$LAYOUTCOUNT" ]; then
    TMPINDEX=1
fi

NEWLAYOUT="$(sed -n "${TMPINDEX}p" "$KEYCONF")"

SL=(${NEWLAYOUT//:/ })
{
    setxkbmap -layout "${SL[0]}" -variant "${SL[1]}" || notify-send 'failed setting the layout'
} &

MSG=$'Keyboard layout: \n'
[[ ${SL[1]} ]] && (imenu -t "${MSG} "${SL[0]}" ("${SL[1]}")") || (imenu -t "${MSG} "${SL[0]}"")

# save index
echo "$TMPINDEX" >"$TMPPATH"
