#!/usr/bin/env zsh # https://thesynack.com/posts/persistent-capslock-behavior/ DEST=${1:-/etc/skel} # xmodmap #cat > ~/.Xmodmap << 'EOF' #! Swap caps lock and escape #remove Lock = Caps_Lock #keysym Escape = Caps_Lock #keysym Caps_Lock = Escape #add Lock = Caps_Lock #EOF # #xmodmap ~/.Xmodmap #cat </dev/null #[Desktop Entry] #Name=Xmodmap #Exec=/usr/bin/xmodmap ${HOME}/.Xmodmap #Terminal=false #Type=Application #X-GNOME-Autostart-enabled=true #EOF # #chmod +x ~/.config/autostart/xmodmap.desktop # Console tty #cat </dev/null #!/usr/bin/env bash setxkbmap -model pc104 -layout gb,us -option caps:swapecape EOF chmod +x ${DEST}/.xinitrc.d/setxkbmap.sh # default keyboard layout is described in /etc/default/keyboard and it is shared between X and the console. # FIXME:man keyboard says to use VARIABLE=VALUE not the space separated below. config_file="/etc/default/keyboard" typeset -A rules rules=( "XKBMODEL" "pc105" "XKBLAYOUT" "extd" "XKBVARIANT" "" "XKBOPTIONS" "caps:swapescape" "BACKSPACE" "guess" ) for rule in "${(@k)rules}"; do regex="s/^#\?\(${rule}\s*\).*$/\1 ${rules[${rule}]}/" # regex="s/^#\?\(${rule}\s*\).*$/\1=${rules[${rule}]}/" sudo sed -i "${regex}" ${config_file}; done sudo udevadm trigger --subsystem-match=input --action=change #cat < /dev/null #Section "InputClass" # Identifier "system-keyboard" # MatchIsKeyboard "on" # Option "XkbLayout" "gb,us" # Option "XkbModel" "pc104" # Option "XkbVariant" "" # Option "XkbOptions" "caps:swapescape" #EndSection #EOF #echo "enlightenment desktop settings-input-keyboard allowd swapping esc with caps."