#!/bin/bash

layout="$1"
layout="${layout// /}"

lang="$(setxkbmap -query | grep layout &)"
lang="${lang##* }"
button=0

IFS=$'\n'
kbd_lst="/usr/share/X11/xkb/rules/evdev.lst"
n_start=$(sed -n '/! layout/=' $kbd_lst)
n_end=$(sed -n '/! variant/=' $kbd_lst)
((n_start++))
((n_end--))
list=($(cat $kbd_lst | head -n $n_end | tail -n +$n_start | sed 's/^  //g; s/  \+/‖/g'))

if [ -z "$layout" ] || [[ ! ${list[*]} =~ "$layout‖" ]]; then
    button=$"Cancel"
    button2=$"Help"
    [ "$LANGUAGE" != "en" ] && lang_dir="$LANGUAGE" || lang_dir="C"

    k=0
    for l in ${list[@]}; do
	rev1="${l#*‖}"
	rev2="${l%‖*}"
	((n=60-${#rev1}))
	rev[$k]="$(printf "$rev1%${n}s "$rev2)"
	((k++))
    done
    revert=($(echo "${rev[*]}" | sort))

    layout=`yad --center --title=$"Keyboard Layout" --window-icon="/usr/share/icons/hicolor/28x28/apps/onboard.png" --height=50 --width=350 --borders=10 --list --editable --no-headers --column="KbLayout" ${revert[@]} --entry --button="$button":1 --button="$button2":"yelp /usr/share/help/$lang_dir/Starbuntu/starbuntu-apps-details.page#Onboard" --button="OK":0`

    button=$?

    if [ $button -eq 0 ]; then
	layout=${layout##* }
    else
	exit $button
    fi
fi

setxkbmap $layout
onboard 2>/dev/null &
sleep 5
while [[ "$(wmctrl -l)" =~ Onboard ]]; do sleep 1; done
setxkbmap $lang &
del onboard

exit $button
