neo-layout/linux/bin/asdf

121 lines
3.1 KiB
Bash
Executable File

#!/bin/sh
# Copyright 2008 Bernd Steinhauser <berniyh@exherbo.org>
# Copyright 2008 Benjamin Kellermann
# Copyright 2008 Pascal Hauck
# Copyright 2008 Erik Streb del Toro
# Distributed under the terms of the GNU General Public License v3
if [ -f "${NEO_CONFIG}" ]; then
. "${NEO_CONFIG}" || die "Failed to source ${NEO_CONFIG}"
elif [ -f "${HOME}"/.neorc ]; then
. "${HOME}"/.neorc || die "Failed to source ${HOME}/.neorc"
elif [ -f /etc/neo.conf ]; then
. /etc/neo.conf || die "Failed to source /etc/neo.conf"
else
echo "No configuration file found. Using default values, this might fail!"
fi
# Default paths
PATH_XMODMAP=${PATH_XMODMAP:-/usr/bin/xmodmap}
PATH_SETXKBMAP=${PATH_SETXKBMAP:-/usr/bin/setxkbmap}
PATH_LOADKEYS=${PATH_LOADKEYS:-/usr/bin/loadkeys}
PATH_SUDO=${PATH_SUDO:-/usr/bin/sudo}
PATH_SETLEDS=${PATH_SETLEDS:-/usr/bin/setleds}
PATH_NUMLOCKX=${PATH_NUMLOCKX:-/usr/bin/numlockx}
PATH_XSET=${PATH_XSET:-/usr/bin/xset}
# Default values
NEO_X_VARIANTE=${NEO_X_VARIANTE:-xkbmap}
NEO_XKBMAP=${NEO_XKBMAP:-de}
NEO_XKBVARIANT=${NEO_XKBVARIANT:-neo}
NEO_XMODMAP="${NEO_XMODMAP:-/usr/share/neo-layout/xmodmap/neo_de.xmodmap}"
NEO_CONSOLE_KEYMAP="${NEO_CONSOLE_KEYMAP:-/usr/share/keymaps/i386/neo/neo.map}"
die() {
echo "$@" >&2
exit 1
}
set_xmodmap() {
if [ -e "${PATH_XMODMAP}" ]; then
if [ -f "$@" ]; then
"${PATH_XMODMAP}" "$@" || die "Failed to set xmodmap $@."
else
die "Cannot use $@ for xmodmap."
fi
else
die "xmodmap not found, cannot set xmodmap."
fi
}
set_xkbmap() {
if [ -e "${PATH_SETXKBMAP}" ]; then
"${PATH_SETXKBMAP}" "$@" || die "Failed to select xkbmap $@."
else
die "setxkbmap not found, cannot set xkbmap."
fi
}
set_keymap() {
if [ -e "${PATH_LOADKEYS}" ]; then
if [ -f "$@" ]; then
if [ "${EUID}" = 0 ]; then
"${PATH_LOADKEYS}" "$@" || die "Failed to set keymap $@."
elif [ -e "${PATH_SUDO}" ]; then
"${PATH_SUDO}" "${PATH_LOADKEYS}" "$@" || die "Failed to set keymap using sudo."
else
die "You need root priviliges to change the keymap."
fi
else
die "keymap file $@ does not exist."
fi
else
die "loadkeys not found, cannot set keymap."
fi
}
if [ -n "$SSH_CONNECTION" ]; then
die "Cannot set keybord layout in a ssh session."
fi
if [ -z ${DISPLAY} ]; then
set_keymap "${NEO_CONSOLE_KEYMAP}"
if [ -e "${PATH_SETLEDS}" ]; then
"${PATH_SETLEDS}" +num || die "Failed to set NUM status."
else
die "setleds does not exist, cannot set NUM status."
fi
else
if [ -e "${PATH_NUMLOCKX}" ]; then
"${PATH_NUMLOCKX}" off || die "Failed to turn off Numlock."
else
die "numlockx not found, cannot turn off Numlock."
fi
if [ -e "${PATH_XSET}" ]; then
for modifier in 51 94; do
"${PATH_XSET}" -r ${modifier} || die "Failed to unset repeat for modifier ${modifier}."
done
for deadkey in 21 35 49; do
"${PATH_XSET}" -r ${deadkey} || die "Failed to unset repeat for deadkey ${deakey}."
done
else
die "xset not found, cannot set modifiers and dead keys."
fi
case "${NEO_X_VARIANTE}" in
xkbmap)
set_xkbmap "${NEO_XKBMAP}" "${NEO_XKBVARIANT}"
;;
xmodmap)
set_xkbmap ie
set_xmodmap "${NEO_XMODMAP}"
;;
*)
die "Unknown Neo X variant ${NEO_X_VARIANTE}."
;;
esac
fi