aboutsummaryrefslogtreecommitdiffstats
path: root/xorg-server
diff options
context:
space:
mode:
Diffstat (limited to 'xorg-server')
-rw-r--r--xorg-server/Makefile6
-rwxr-xr-xxorg-server/setkeys154
2 files changed, 160 insertions, 0 deletions
diff --git a/xorg-server/Makefile b/xorg-server/Makefile
index 81bc9d8..29edef7 100644
--- a/xorg-server/Makefile
+++ b/xorg-server/Makefile
@@ -12,9 +12,15 @@ install:
if test ! -L ~/.config/background && test ! -e ~/.config/background; then \
ln -s backgrounds/default ~/.config/background; \
fi
+ $(CHECK_INSTALLED) asroot
+ $(CHECK_INSTALLED) xorg-setxkbmap
+ $(CHECK_INSTALLED) xorg-xmodmap
+ mkdir -p -- ~/.local/bin
+ ln -sf -- ~/.dotfiles/xorg-server/setkeys ~/.local/bin/
uninstall:
-unlink -- ~/.config/backgrounds
-unlink -- ~/.config/background
+ -unlink -- ~/.local/bin/setkeys
.PHONY: install uninstall
diff --git a/xorg-server/setkeys b/xorg-server/setkeys
new file mode 100755
index 0000000..5837607
--- /dev/null
+++ b/xorg-server/setkeys
@@ -0,0 +1,154 @@
+#!/bin/dash
+
+load_layout () {
+ if test -f "${XDG_RUNTIME_DIR}/.setkeys_layout"; then
+ cat "${XDG_RUNTIME_DIR}/.setkeys_layout"
+ fi
+}
+
+save_layout () {
+ printf '%s\n' "$1" > "${XDG_RUNTIME_DIR}/.setkeys_layout"
+}
+
+if test "$1" = "greek"; then
+ layout=gr
+elif test "$1" = "swedish"; then
+ layout=se
+elif test "$1" = "english"; then
+ layout=en_US
+elif test "$1" = "toggle"; then
+ layout="$(load_layout)"
+ if test "$layout" = se; then
+ layout=gr
+ else
+ layout=se
+ fi
+elif test $# = 0; then
+ layout="$(load_layout)"
+else
+ layout="$1"
+fi
+if test -z "$layout"; then
+ layout=se
+fi
+save_layout "$layout"
+
+setxkbmap \
+ -rules evdev \
+ -model pc105 \
+ -layout "$layout" \
+ -variant '' \
+ -option '' \
+ -option terminate:ctrl_alt_bksp,compose:rwin,keypad:future \
+ -types complete \
+ -compat complete \
+ -synch
+
+{
+ # Assign LeftCtrl to CapsLock
+ printf '%s\n' 'keycode 66 = Control_L Control_L Control_L Control_L'
+
+ # Assign LeftHyper to LeftCtrl
+ printf '%s\n' 'keycode 37 = Hyper_L Hyper_L Hyper_L Hyper_L'
+
+ # Assign remove layout switch from LeftShift
+ printf '%s\n' 'keycode 50 = Shift_L Shift_L Shift_L Shift_L'
+
+ if test -z "${NO_UNICOMP}"; then
+ # Unicomp's newer versions of New Model M swapped AltGr and RSuper
+ # making it a torture device for even someone with as big hands as mine
+ if cat /sys/class/input/*/name | grep Unicomp > /dev/null; then
+ # Assign Compose to AltGr
+ printf '%s\n' 'keycode 108 = Multi_key Multi_key Multi_key Multi_key'
+
+ # Assign AltGr to RightSuper
+ printf '%s\n' 'keycode 134 = ISO_Level3_Shift ISO_Level3_Shift ISO_Level3_Shift ISO_Level3_Shift'
+ fi
+ fi
+
+ cat <<EOF
+clear Shift
+clear Lock
+clear Control
+clear mod1
+clear Mod2
+clear Mod3
+clear Mod4
+clear Mod5
+add Shift = Shift_L Shift_R
+add Control = Control_L Control_R
+add Mod1 = Alt_L Meta_L
+add Mod2 = Num_Lock
+add Mod3 = Hyper_L
+add Mod4 = Super_L
+add Mod5 = ISO_Level3_Shift
+EOF
+} | xmodmap -
+
+if cat /sys/class/input/*/name | grep Unicomp > /dev/null; then
+ # Turn off numlock LED
+ input="$(grep Unicomp /sys/class/input/*/name | sed 's|^/sys/class/input/\(.*\)/name:.*$|\1|g' | sed 1q)"
+ if ! echo 0 | sponge "/sys/class/leds/${input}::numlock/brightness" 2>/dev/null; then
+ if isfg; then
+ # TODO do at boot
+ asroot chown ${USER}:${USER} "/sys/class/leds/${input}::numlock/brightness"
+ echo 0 | sponge "/sys/class/leds/${input}::numlock/brightness"
+ fi
+ fi
+fi
+
+# Esc = 9
+# F1…F10 = 67…76
+# F11…F12 = 95…96
+# § = 49
+# 1…9 = 10…18
+# 0+´ = 19…21
+# Backspace = 22
+# Tab = 23
+# qwertyuiopå¨ = 24…35
+# Enter = 36
+# CapsLock = 66
+# asdfghjklöä = 38…48
+# ' = 51
+# LeftShift = 50
+# < = 94
+# zxcvbnm,.- = 52…61
+# RightShift = 62
+# LeftCtrl = 37
+# LeftSuper = 133
+# Alt = 64
+# Space = 65
+# AltGr = 108
+# RightSuper = 134
+# Menu = 135
+# RightCtrl = 105
+# SysReq = 107
+# ScrlLock = 78
+# Break = 127
+# Insert = 118
+# Home = 110
+# PageUp = 112
+# Delete = 119
+# End = 115
+# PageDown = 117
+# Up = 111
+# Left = 113
+# Down = 116
+# Right = 114
+# NumLock = 77
+# Num/ = 106
+# Num* = 63
+# Num- = 82
+# Num7 = 79
+# Num8 = 80
+# Num9 = 81
+# Num+ = 86
+# Num4 = 83
+# Num5 = 84
+# Num6 = 85
+# Num1 = 87
+# Num2 = 88
+# Num3 = 89
+# NumEnter = 104
+# Num0 = 90
+# Num, = 91