automate/020_kmonad-conf_print.sh

457 lines
16 KiB
Bash

#!/usr/bin/env bash
# create a template for the dell d830
# split into header, deflayer, defcfg and defsrc to allow composition.
# This is sourced by 020_kmonad.sh
# NB 'Fn', Vol up', 'Vol down' and 'Mute' do not give keycodes.
# The Fn key is intercepted by the Embedded Controller ("EC") of your laptop.
# It doesn't produce a normal key symbol
# /usr/bin/acpi_listen
# button/volumedown VOLDN 00000080 00000000 K
# button/volumeup VOLUP 00000080 00000000 K
# button/mute MUTE 00000080 00000000 K
# button/suspend SUSP 00000080 00000000 K
# button/battery BAT 00000080 00000000 K
# Fn F7 == video/switchmode VMOD 00000080 00000000 K
#
# UK ISO Layout
# https://www.toptal.com/developersvdcode
# /usr/bin/xev - for x events
# xev | grep -A2 --line-buffered '^KeyRelease' \
# | sed -n '/keycode /s/^.*keycode \([0-9]*\).* (.*, \(.*\)).*$/\1 \2/p'
# Once you have the keycode you don't need the Fn to map the key.
#
# /usr/bin/showkey -S - for kernel level (multimedia keys)
# /usr/bin/xkeycaps - for keymaps and events.
#
# /usr/share/X11/locale/en_US.UTF-8/Compose gives all the available characters
# available through AltGr
## numbersign Non-US Hash key : 1 numbersign/51 asciitilde
#
# * HID Usage ID: 0x070031 (Usage Page 0x07 = Keyboard, Usage ID 0x31 for Keyboard 3 and #)
# * Linux keycode: 51 (maps to KEY_3 or KEY_HASH)
# * USB HID code: Backslash (via event.code, us position for \ key)
# * X11 keysym: numbersign
# * Unicode: U+0023 (#)
# * Location: On UK/ISO keyboards, left of the enter key.
## backslash Non-US Back Slash : 94 backslash/4 bar
#
# * HID Usage ID: 0x070064 (Usage Page 0x07 = Keyboard, Usage ID 0x64)
# * Linux keycode: 94 (maps to KEY_102ND or KEY_BACKSLASH)
# * USB HID code: IntlBackslash (via event.code)
# * X11 keysym: backslash
# * Unicode: U+005C (character \)
# * Location: 102nd key on ISO keyboards (between Left Shift and Z)
## sterling £ rather than # for shift 3 : 12 3/12 sterling
#
# * Linux keycode: 12 (on UK ISO layout, maps to KEY_3)
# * USB HID code: Digit3 (via event.code)
# * X11 keysym: sterling (when layout is set to gb)
# * HID Usage ID: 0x070031 (Keyboard 3 and #, interpreted as £ via layout mapping)
# * Unicode: U+00A3 (British pound sign)
## EuroSign key as third key on 4 : 3 4/13 dollar/13 EuroSign
#
# * Linux keycode: 13 (maps to KEY_4 on most layouts)
# * USB HID code: Digit4 (via event.code)
# * X11 keysym: EuroSign
# * HID Usage ID: 0x070034 (Keyboard 4 and Dollar)
# * Unicode: U+20AC (€)
# ## Fn key in blue
# # Moon - Fn F1 ==
# * Linux keycode: 213
# * X11 keysym: XF86Suspend | 0x1008ffa7
# # Battery Fn F3
# * Linux keycode: 244
# * X11 keysym: XF86Battery | 0x1008ff93
# # Screen = Fn F7
# * Linux keycode:
# * X11 keysym:
# * ACPI: video/switchmode VMOD 00000080 00000000 K
# # CRT/LCD = Fn F8
# * Linux keycode:
# * X11 keysym:
# * ACPI: video/switchmode VMOD 00000080 00000000
# # SysRq = Fn Prnt Scrn
# * Linux keycode:
# * X11 keysym:
# * ACPI:
# # Scroll Lk = Fn Num Lk
# * Linux keycode:
# * X11 keysym:
# * ACPI:
# # Break = Fn Pause
# * Linux keycode:
# * X11 keysym:
# * ACPI:
# # Auto Brightness = Fn Left Arrow
# * Linux keycode: 248 should be 244
# * X11 keysym: NoSymbol should be
# * ACPI:
# # Keyboard Light = Fn Right Arrow
# * Linux keycode:
# * X11 keysym:
# * ACPI: conf_print_dell_d830_template_header() {
# # Brightness Up = Fn Up Arrow
# * Linux keycode: 233
# * X11 keysym: XF86MonBrightnessUp
# * ACPI: video/brightnessup BRTUP 00000086 00000000 K
# # Brightness Down = Fn Down Arrow
# * Linux keycode: 232
# * X11 keysym: XF86MonBrightnessDown
# * ACPI: video/brightnessdown BRTDN 00000087 00000000 K
# # Plus = Fn /
# * Linux keycode: 86
# * X11 keysym: KP_Add
# * 77 Num_Lock: KP_Add
# # Minus = Fn ;
# * Linux keycode: 82
# * X11 keysym: KP_Subtract
# * 77 Num_Lock: KP_Subtract:
# # DOT = Fn .
# * Linux keycode: 91
# * X11 keysym: KP_Decimal
# * 77 Num_Lock: KP_Decimal
# # Multiply = Fn P
# * Linux keycode: 63
# * X11 keysym: KP_Multiply
# * 77 Num_Lock: KP_Multiply
# # Divide = Fn 0
# * Linux keycode: 106
# * X11 keysym: KP_Divide
# * 77 Num_Lock: : KP_Divide
# Numbers
# # Zero = Fn M
# * Linux keycode: 90
# * X11 keysym: KP_Insert
# * 77 Num_Lock: KP_0
# # One = Fn J
# * Linux keycode: 87
# * X11 keysym: KP_End
# * 77 Num_Lock: KP_1
# # Two = Fn K
# * Linux keycode: 88
# * X11 keysym: KP_Down
# * 77 Num_Lock: KP_2
# # Three = Fn L
# * Linux keycode: 89
# * X11 keysym: KP_Next
# * 77 Num_Lock: LP_3
# # Four = Fn U
# * Linux keycode: 83
# * X11 keysym: KP_Left
# * 77 Num_Lock: KP_4
# # Five = Fn I
# * Linux keycode: 84
# * X11 keysym: KP_Begin
# * 77 Num_Lock: KP_5
# # Six = Fn O
# * Linux keycode: 85
# * X11 keysym: KP_Right
# * 77 Num_Lock: KP_6
# # Seven = Fn 7
# * Linux keycode: 79
# * X11 keysym: KP_Home
# * 77 Num_Lock: KP_7
# # Eight = Fn 8
# * Linux keycode: 80
# * X11 keysym: KP_Up
# * 77 Num_Lock: KP_8
# # Nine = Fn 9
# * Linux keycode: 81
# * X11 keysym: KP_Prior
# * 77 Num_Lock: KP_9
conf_print_dell_d830_template_header() {
cat <<EOF
#| --------------------------------------------------------------------------
KMonad: ISO Dell D830 Template
This file contains UK and 'defsrc' configurations for a Dell D830
with an ISO keyboard. Copy out the 'defsrc' layer to start your own
keyboard configuration. Copy out the 'deflayer' template to easily start
a new layer with matching 'transparent' buttons.
-------------------------------------------------------------------------- |#
EOF
}
# conf_print_dell_d830_template_header | tee ${DEST}/.config/kmonad/keymap/template/dell_D830_iso.kbd
conf_print_dell_d830_template_header_generic() {
cat <<EOF
#| --------------------------------------------------------------------------
KMonad: ISO Dell D830 Template
This file contains UK and 'defsrc' configurations for a Dell D830
with an ISO keyboard. Copy out the 'defsrc' layer to start your own
keyboard configuration. Copy out the 'deflayer' template to easily start
a new layer with matching 'transparent' buttons.
EOF
}
# conf_print_dell_d830_template_header_generic | tee ${DEST}/.config/kmonad/keymap/template/dell_D830_iso.kbd
conf_print_dell_d830_template_deflayer_empty_generic() {
cat <<EOF
(deflayer empty
_ _ _ _ _ _ _ _ _ _apt-cache search
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _
_ _ _
)
-------------------------------------------------------------------------- |#
EOF
}
# conf_print_dell_d830_template_deflayer_empty_generic | tee -a ${DEST}/.config/kmonad/keymap/template/dell_D830_iso.kbd
conf_print_dell_d830_template_deflayer_empty() {
cat <<EOF
(deflayer empty
_ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _
_ _ _
)
EOF
}
# conf_print_dell_d830_template_deflayer_empty | tee -a ${DEST}/.config/kmonad/keymap/template/dell_D830_iso.kbd
conf_print_dell_d830_template_defcfg_generic() {
cat <<EOF
(defcfg
;; ** For Linux **
;;input (device-file "/dev/input/by-id/usb-Dell_Dell_USB_Keyboard-event-kbd")
input (device-file "/dev/input/by-path/platform-i8042-serio-0-event-kbd")
output (uinput-sink "KMonad seniply-iso-wide")
;; ** For Windows **
;; input (low-level-hook)
;; output (send-event-sink)
;; ** For MacOS **
;; input (iokit-name "my-keyboard-product-string")
;; output (kext)
fallthrough true
)
EOF
}
#conf_print_dell_d830_template_defcfg_generic | tee -a ${DEST}/.config/kmonad/keymap/template/dell_D830_iso.kbd
conf_print_dell_d830_template_defcfg() {
cat <<EOF
(defcfg
input (device-file "/dev/input/by-path/platform-i8042-serio-0-event-kbd")
output (uinput-sink "Kmonad kbd")
"/run/current-system/sw/bin/sleep 1 && /run/current-system/sw/bin/setxkbmap -option caps:swapescape,compose:ralt")
cmp-seq 'ralt' ;; Set the compose key to 'RightAlt'
comp-seq-delay '5' ;; 5ms delay between each compose-key sequence press
fallthrough 'true' ;; Set to true to emit unhandled events
allow-cmd 'false' ;; Set to false to disable command execution in KMonad
)
EOF
}
# conf_print_dell_d830_template_defcfg | tee -a ${DEST}/.config/kmonad/keymap/template/dell_D830_iso.kbd
conf_print_dell_d830_template_defsrc() {
cat <<EOF
(defsrc
vold volu mute gui kprt nlck pause ins home pgup
esc f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 del end pgdn
grv 1 2 3 4 5 6 7 8 9 0 - = bspc
tab q w e r t y u i o p [ ]
caps a s d f g h j k l ; ' \# ret
lsft z x c v b n m , . / rsft
lctl fn lmet lalt spc ralt rctl up
left down rght
)
EOF
}
#conf_print_dell_d830_template_defsrc | tee -a ${DEST}/.config/kmonad/keymap/template/dell_D830_iso.kbd
conf_print_dell_d830_template_defalias_extend() {
cat <<EOF
(defalias
ext (layer-toggle extend) ;; Bind 'ext' to the Extend Layer
)
EOF
}
conf_print_dell_d830_template_defalias_extend | tee -a ${DEST}/.config/kmonad/keymap/template/dell_D830_iso.kbd
conf_print_dell_d830_template_defalias() {
cat <<EOF
(defalias
o
cpy C-c
pst C-v
cut C-x
udo C-z
all C-a
fnd C-f
bk Back
fw Forward
)
EOF
}
#conf_print_dell_d830_template_defalias | tee -a ${DEST}/.config/kmonad/keymap/template/dell_D830_iso.kbd
# Using this as tje first layer after the defsrc preserves querty as the default
conf_print_dell_d830_template_deflayer_querty() {
cat <<EOF
(deflayer querty
vold volu mute gui kprt nlck pause ins home pgup
esc f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 del end pgdn
grv 1 2 3 4 5 6 7 8 9 0 - = bspc
tab q w e r t y u i o p [ ]
caps a s d f g h j k l ; ' \# ret
lsft z x c v b n m , . / rsft
lctl fn lmet lalt spc ralt rctl up
left down rght
)
EOF
}
#conf_print_dell_d830_template_deflayer_querty | tee -a ${DEST}/.config/kmonad/keymap/template/dell_D830_iso.kbd
conf_print_dell_d830_template_deflayer_colemak_dh() {
cat <<EOF
(deflayer colemak-dh
_ _ _ _ _ _ _ _ _ _
esc f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 _ _ _
grv 1 2 3 4 5 6 7 8 9 0 - = bspc
tab q w f p b j l u y ; [ ]
@ext a r s t g m n e i o ' \\ ret
lsft z x c d v 102d k h , . / rsft
lctl _ lmet lalt spc ralt rmet _
_ _ _
)
EOF
}
#conf_print_dell_d830_template_deflayer_colemak_dh | tee -a ${DEST}/.config/kmonad/keymap/template/dell_D830_iso.kbd
conf_print_dell_d830_template_deflayer_colemak_dhk() {
cat <<EOF
(deflayer colemak-dhk
_ _ _ _ _ _ _ _ _ _
esc f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 _ _ _
grv 1 2 3 4 5 6 7 8 9 0 - = bspc
tab q w f p b j l u y ; [ ]
@ext a r s t g k n e i o ' \\ ret
lsft z x c d v 102d m h , . / rsft
lctl _ lmet lalt spc ralt rmet _
_ _ _
)
EOF
}
#conf_print_dell_d830_template_deflayer_colemak_dhk | tee -a ${DEST}/.config/kmonad/keymap/template/dell_D830_iso.kbd
conf_print_dell_d830_template_deflayer_extend() {
cat <<EOF
(deflayer extend
_ _ _ _ _ _ _ _ _ _
_ play rewind previoussong nextsong ejectcd refresh brdn brup www mail prog1 prog2
_ f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 _ _ _
_ esc @bk @fnd @fw ins pgup home up end menu prnt slck
_ lalt lmet lsft lctl ralt pgdn lft down rght del caps _ _
_ @udo @cut @cpy tab @pst _ pgdn bks lsft lctl comp _
_ _ _ _ ret _ _ _
_ _ _
)
EOF
}
#conf_print_dell_d830_template_deflayer_extend | tee -a ${DEST}/.config/kmonad/keymap/template/dell_D830_iso.kbd
conf_print_dell_d830_template_deflayer_fn() {
cat <<EOF
;; Fn SysRq == sysrq a legacy key shared with the Print Screen key
;; Fn Scroll Lk == slck shared with Num Lk
;; Fn Break == shared with Pause, a Break signal (e.g., for debugging or interrupting code)
;; Fn F1 moon == ssrq sleep/hibernate
;; Fn F3 battery == battery charging on or off (not on linux)
;; Fn F7 screen == display options
;; Fn F8 battery CRT/LCD == toggle between display modes (e.g., laptop screen, external monitor, dual display).
;; Fn 7 == kp7 numpad
;; Fn 8 == kp8 numpad
;; Fn 9 == kp9 numpad
;; Fn 0 == kp/ numpad
;; Fn U == kp4 numpad
;; Fn I == kp5 numpad
;; Fn O == kp6 numpad
;; Fn P == kp* numpad
;; Fn J == kp1 numpad
;; Fn K == kp2 numpad
;; Fn L == kp3 numpad
;; Fn ; == kp- numpad
;; Fn M == kp0 numpad
;; Fn . == kp. numpad
;; Fn / == kp+ numpad
;; Fn <- left == screen brightness auto
;; Fn -> right == keyboard light (missing)
;; Fn ↑ up == increase screen brightness
;; Fn ↓ down == increase screen brightness
(deflayer fn
;; vold volu mute - syrq slck pause - - -
- ssrq - f3 - - - f7 f8 - - - - - - -
- - - - - - - kp7 kp8 kp9 kp/ - - -
- - - - - - - kp4 kp5 kp6 kp* - -
- - - - - - - kp1 kp2 kp3 kp- - - -
- - - - - - - - kp0 - kp. kp+ -
- - - - - - - up
left down rght
)
EOF
}
#conf_print_dell_d830_template_deflayer_fn | tee -a ${DEST}/.config/kmonad/keymap/template/dell_D830_iso.kbd
conf_print_dell_d830_template_deflayer_empty() {
cat <<EOF
(deflayer empty
_ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _
_ _ _
)
EOF
}
#conf_print_dell_d830_template_deflayer_empty | tee -a ${DEST}/.config/kmonad/keymap/template/dell_D830_iso.kbd