# load the keyboard definitions LAYOUT=us OPTS=(madduck:group2_intl madduck:caps_mod4) is_thinkpad() { case "${(%):-%m}" in lapse) return 0;; *) return 1;; esac } load_keymap() { local xkbdir; xkbdir=$HOME/.xkb local model; model="$1"; shift local layout; layout="$1"; shift local args; args="-I -I$xkbdir -model $model -layout $layout -option" args="$args -option ${(j: -option :)@}" info "running setxkbmap with args: $args" local tmpfile; tmpfile="$(tempfile -p kbmap)" trap "rm -f $tmpfile" EXIT eval setxkbmap $args -print >| "$tmpfile" info keymap setting follows: cat "$tmpfile" >&2 xkbcomp -I$HOME/.xkb "$tmpfile" ${DISPLAY%%.*} } if is_thinkpad; then info "loading keymap for thinkpad…" load_keymap thinkpad us ${(z)OPTS} else info "loading pc104 keymap…" load_keymap pc104 us ${(z)OPTS} fi unset OPTS unset LAYOUT # vim:ft=zsh