#!/bin/sh
# Filename:      grml-setkeyboard
# Purpose:       set keyboard layout system-wide on grml system
# Authors:       grml-team (grml.org), (c) Michael Prokop <mika@grml.org>
# Bug-Reports:   see http://grml.org/bugs/
# License:       This file is licensed under the GPL v2.
################################################################################

PN="$(basename "$0")"
DIALOG=dialog
CMDLINE=/proc/cmdline

# shellcheck disable=SC1091
. /etc/grml/script-functions

check4root || exit 1

setvalue(){
  [ -n "$2" ] || return 1
  # already present in conffile?
  if grep -q "${1}" "$CONFFILE" ; then
     sed -i "s#^${1}.*#${1}=${2}#" "$CONFFILE"
  else
     echo "$1=${2}" >> "$CONFFILE"
  fi
}

# same for strings
stringinstring(){
  case "$2" in *$1*) return 0;; esac
  return 1
}

# Reread boot command line; echo last parameter's argument or return false.
getbootparam(){
  stringinstring " $1=" "$CMDLINE" || return 1
  result="${CMDLINE##*$1=}"
  result="${result%%[ 	]*}"
  echo "$result"
  return 0
}

# shellcheck disable=SC1091
[ -r /etc/sysconfig/keyboard ] && . /etc/sysconfig/keyboard

[ -n "$KEYTABLE" ] && DEFAULT_KEYBOARD="$KEYTABLE"
if [ -z "$DEFAULT_KEYBOARD" ] ; then
  DEFAULT_KEYBOARD="$(getbootparam lang 2>/dev/null)"
  if [ -z "$DEFAULT_KEYBOARD" ] ; then
    DEFAULT_KEYBOARD=en
  fi
fi

# shellcheck disable=SC1010
{
LANGUAGE=$(LANG=C $DIALOG --stdout --title "$PN" --default-item $DEFAULT_KEYBOARD --radiolist \
"Which keyboard layout do you want to use?

Please notice that this will not really affect your currently running system.
If you want to change keyboard settings temporarily please use grml-lang instead.

Configuration will be written to /etc/sysconfig/keyboard" 0 0 0 \
 at  austrian off \
 be  belgian off \
 bg  bulgarian off \
 cf  "french canadian" off \
 ch  swiss off \
 cn  chinese off \
 cs  czech off \
 cz  czech off \
 da  da off \
 de  german   off \
 dk  dansk off \
 en  "english [us] (default)" on \
 es  spanish off \
 fi  finnish off \
 fr  french off \
 he  hebrew off \
 ie  irish off \
 il  hebrew off \
 it  italian off \
 ja  japanese off \
 nl  dutch off \
 pl  polish off \
 ru  russian off \
 sk  slovak off \
 sl  slovenian off \
 tr  turkish off \
 tw  "chinese (traditional)" off \
 uk  british off \
)
}

retval=$?
case $retval in
    (0)
          # everything ok
          ;;
    (1)   echo "Cancel pressed." ; exit 1 ;;
    (255) echo "ESC pressed."    ; exit 1 ;;
esac

# read in the file where all the $LANGUAGE stuff is defined
# shellcheck disable=SC1091
. /etc/grml/language-functions

cat > /etc/sysconfig/keyboard <<EOF
# File generated by $PN on $(date)
KEYTABLE="$KEYTABLE"
XKEYBOARD="$XKEYBOARD"
KDEKEYBOARD="$KDEKEYBOARD"
KDEKEYBOARDS="$KDEKEYBOARD"
EOF

retval=$?
case $retval in
    (0)
          # everything ok
          LANG=C $DIALOG --stdout --msgbox "Writing keyboard settings ($KEYTABLE) to /etc/sysconfig/keyboard was successful." 0 0
          ;;
    *)
          LANG=C $DIALOG --stdout --msgbox "Error writing settings for $KEYTABLE to /etc/sysconfig/keyboard." 0 0
          ;;
esac

## END OF FILE #################################################################
