186 lines
No EOL
4.4 KiB
Bash
Executable file
186 lines
No EOL
4.4 KiB
Bash
Executable file
#!/bin/bash
|
|
# written by Tobias Powalowski <tpowa@archlinux.org>
|
|
# adapted for Cinnarch by Alex Filgueira <faidoc@gmail.com>
|
|
# adapted for Manjaro by Philip Müller <philm@manjaro.org>
|
|
|
|
abort()
|
|
{
|
|
DIALOG --yesno "${_abort}" 6 42 || return 0
|
|
[[ -e /tmp/.km ]] && rm -f /tmp/.km
|
|
[[ -e /tmp/.keymap ]] && rm -f /tmp/.keymap
|
|
[[ -e /tmp/.font ]] && rm -f /tmp/.font
|
|
[[ -e /tmp/.km-running ]] && rm /tmp/.km-running
|
|
clear
|
|
exit 1
|
|
}
|
|
|
|
# kernel_cmdline ()
|
|
# {
|
|
# for param in $(/bin/cat /proc/cmdline); do
|
|
# case "${param}" in
|
|
# $1=*) echo "${param##*=}"; return 0 ;;
|
|
# $1) return 0 ;;
|
|
# *) continue ;;
|
|
# esac
|
|
# done
|
|
# [ -n "${2}" ] && echo "${2}"
|
|
# return 1
|
|
# }
|
|
|
|
# DIALOG()
|
|
# an el-cheapo dialog wrapper
|
|
#
|
|
# parameters: see dialog(1)
|
|
# returns: whatever dialog did
|
|
DIALOG() {
|
|
dialog --backtitle "${TITLE}" --aspect 15 "$@"
|
|
return $?
|
|
}
|
|
|
|
error_kmset()
|
|
{
|
|
DIALOG --msgbox "${_error}" 0 0
|
|
}
|
|
|
|
dokeymap() {
|
|
echo "${_scanning}"
|
|
KEYMAPS=
|
|
for i in $(find ${BASEDIR}/keymaps -follow -name "*.gz" | sed 's|^.*/||g' | sort); do
|
|
KEYMAPS="${KEYMAPS} ${i} -"
|
|
done
|
|
CANCEL=""
|
|
DIALOG --menu "${_select}" 22 60 16 ${KEYMAPS} 2>${ANSWER} || CANCEL="1"
|
|
if [[ "${CANCEL}" = "1" ]]; then
|
|
S_NEXTITEM="1"
|
|
return 1
|
|
fi
|
|
keymap=$(cat ${ANSWER})
|
|
echo ${keymap} > /tmp/.keymap
|
|
# backward fix since filesystem 2013.03-1 don't ships vconsole.conf anymore
|
|
echo "KEYMAP=us" > ${DESTDIR}/etc/vconsole.conf
|
|
echo "FONT=" >> ${DESTDIR}/etc/vconsole.conf
|
|
echo "FONT_MAP=" >> ${DESTDIR}/etc/vconsole.conf
|
|
sed -i -e "s/^KEYMAP=.*/KEYMAP=\"$(cat /tmp/.keymap | sed -e 's/\..*//g')\"/g" ${DESTDIR}/etc/vconsole.conf
|
|
if [[ "${keymap}" ]]; then
|
|
DIALOG --infobox "{$_load} ${keymap}" 0 0
|
|
#loadkeys -q ${BASEDIR}/keymaps/${keymap}
|
|
loadkeys -q ${keymap} > /dev/null 2>&1 || error_kmset
|
|
# for openrc
|
|
if [ -e /run/openrc ]; then
|
|
# get keymap without extension (.map.gz)
|
|
KEYMAP=$(echo ${keymap} | cut -f 1 -d ".")
|
|
# get stored keymap
|
|
CKMAP=$(cat ${DESTDIR}/etc/conf.d/keymaps | grep -w keymap= | cut -f 2 -d '"')
|
|
# if stored keymap is different from current selected keymap, replace it
|
|
if [ ! ${CKMAP} == ${KEYMAP} ]; then
|
|
sed -i "s/keymap=\"${CKMAP}\"/keymap=\"${KEYMAP}\"/" ${DESTDIR}/etc/conf.d/keymaps
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# Setup x11 config file
|
|
local KBLAYOUT=$(get_layout)
|
|
local KEYMAP=$(cat /tmp/.keymap | sed -e 's/\..*//g')
|
|
_write_x11_config_file
|
|
|
|
S_NEXTITEM=2
|
|
}
|
|
|
|
|
|
mainmenu() {
|
|
if [[ -n "${S_NEXTITEM}" ]]; then
|
|
DEFAULT="--default-item ${S_NEXTITEM}"
|
|
else
|
|
DEFAULT=""
|
|
fi
|
|
DIALOG ${DEFAULT} --backtitle "${TITLE}" --title "${_menu}" \
|
|
--menu "${_desc}" 17 58 13 \
|
|
"1" "${_keymap}" \
|
|
"2" "${EXIT}" 2>${ANSWER}
|
|
case $(cat ${ANSWER}) in
|
|
"1")
|
|
dokeymap
|
|
;;
|
|
"2")
|
|
[[ -e /tmp/.km-running ]] && rm /tmp/.km-running
|
|
clear
|
|
exit 0 ;;
|
|
*)
|
|
abort ;;
|
|
esac
|
|
}
|
|
|
|
: >/tmp/.keymap
|
|
: >/tmp/.font
|
|
: >/tmp/.km
|
|
|
|
# do UID checking here so someone can at least get usage instructions
|
|
if [ "$EUID" != "0" ]; then
|
|
echo "error: This script must be run as root."
|
|
exit 1
|
|
fi
|
|
|
|
# force to use english
|
|
export LANG=en_US.UTF-8
|
|
export LC_MESSAGES=en_US.UTF-8
|
|
|
|
# Translation
|
|
#source /opt/livecd/functions
|
|
[[ -r /opt/livecd/util-lng.sh ]] && source /opt/livecd/util-lng.sh
|
|
|
|
LOCALE=$(get_country)
|
|
|
|
# English
|
|
source /opt/livecd/km-en.lng
|
|
# Turkish
|
|
if [ "${LOCALE}" = "tr_TR" ]; then
|
|
source /opt/livecd/km-tr.lng
|
|
fi
|
|
|
|
ANSWER="/tmp/.km"
|
|
TITLE="${_title}"
|
|
BASEDIR="/usr/share/kbd"
|
|
|
|
if [[ "${1}" = "--setup" ]]; then
|
|
EXIT="${_return}"
|
|
DESTDIR="/install"
|
|
else
|
|
EXIT="${_exit}"
|
|
DESTDIR=""
|
|
fi
|
|
|
|
if [[ ! -d ${BASEDIR}/keymaps ]]; then
|
|
echo "${_nokeymap} ${BASEDIR}/keymaps" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [[ ! -d ${BASEDIR}/consolefonts ]]; then
|
|
echo "${_nofonts} ${BASEDIR}/consolefonts" >&2
|
|
fi
|
|
|
|
if [[ ! $(which loadkeys) ]]; then
|
|
echo "${_loadkeys}" >&2
|
|
exit 1
|
|
fi
|
|
|
|
|
|
if [[ ! $(which setfont) ]]; then
|
|
echo "${_setfont}" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [[ -e /tmp/.km-running ]]; then
|
|
echo "${_km}"
|
|
echo "${_tmp}"
|
|
exit 1
|
|
fi
|
|
: >/tmp/.km-running
|
|
|
|
while true; do
|
|
mainmenu
|
|
done
|
|
|
|
clear
|
|
exit 0
|
|
|
|
# vim: set ts=4 sw=4 et: |