#!/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")"

IFS=: read -r -a SL <<<"$NEWLAYOUT"
{
    setxkbmap -layout "${SL[0]}" -variant "${SL[1]}" || notify-send 'failed setting the layout'
} &

MSG=$'Keyboard layout: \n'
if [[ ${SL[1]} ]]; then
    ins menu toast "${MSG}${SL[0]} (${SL[1]})"
else
    ins menu toast "${MSG}${SL[0]}"
fi

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