Sofle keymap
The Eyelash Sofle split keyboard’s layers, with
every key labelled by what it does on these machines rather than what it
sends: NAV’s Super+Shift+K is drawn as Mon ↑ because
binds.kdl
binds it to focus-monitor-up. The firmware and its own key-by-key reference
live in rdlu/sofleii; this page joins that
keymap to the configs in this repo.
Hover or focus a key for what it sends, what that does, and the line it comes from. Printable version: sofle-keymap.pdf (A4, one page of basics and every layer).
Generated by tools/gen-docs.py from a snapshot of the sofleii keymap in
tools/sofle/ (refresh it with mise run docs-sofle-sync) and the live
niri and tmux configs, so a rebind in binds.kdl shows up here on the next
build.
Mod) · ⌃ Ctrl · ⌥ Alt · ⇧ ShiftBASE
Always on. The joystick (centre column) and the left encoder are media keys; the thumbs hold the other layers.
- key
- ` · position 0
- sends
- `
- zmk
- &kp GRAVE
- key
- 1 · position 1
- sends
- 1
- zmk
- &kp N1
- key
- 2 · position 2
- sends
- 2
- zmk
- &kp N2
- key
- 3 · position 3
- sends
- 3
- zmk
- &kp N3
- key
- 4 · position 4
- sends
- 4
- zmk
- &kp N4
- key
- 5 · position 5
- sends
- 5
- zmk
- &kp N5
- key
- joystick ↑ · position 6
- sends
- XF86AudioRaiseVolume
- does
- Vol + (wpctl)
- bind
- niri: spawn "wpctl" "set-volume" "-l" "1.0" "@DEFAULT_AUDIO_SINK@" "5%+"
- from
- niri/dot-config/niri/binds.kdl:56
- zmk
- &kp C_VOL_UP
- key
- 6 · position 7
- sends
- 6
- zmk
- &kp N6
- key
- 7 · position 8
- sends
- 7
- zmk
- &kp N7
- key
- 8 · position 9
- sends
- 8
- zmk
- &kp N8
- key
- 9 · position 10
- sends
- 9
- zmk
- &kp N9
- key
- 0 · position 11
- sends
- 0
- zmk
- &kp N0
- key
- - · position 12
- sends
- -
- zmk
- &kp MINUS
- key
- Tab · position 13
- sends
- Tab
- zmk
- &kp TAB
- key
- Q · position 14
- sends
- Q
- zmk
- &kp Q
- key
- W · position 15
- sends
- W
- zmk
- &kp W
- key
- E · position 16
- sends
- E
- zmk
- &kp E
- key
- R · position 17
- sends
- R
- zmk
- &kp R
- key
- T · position 18
- sends
- T
- zmk
- &kp T
- key
- joystick ↓ · position 19
- sends
- XF86AudioLowerVolume
- does
- Vol − (wpctl)
- bind
- niri: spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "5%-"
- from
- niri/dot-config/niri/binds.kdl:57
- zmk
- &kp C_VOL_DN
- key
- Y · position 20
- sends
- Y
- zmk
- &kp Y
- key
- U · position 21
- sends
- U
- zmk
- &kp U
- key
- I · position 22
- sends
- I
- zmk
- &kp I
- key
- O · position 23
- sends
- O
- zmk
- &kp O
- key
- P · position 24
- sends
- P
- zmk
- &kp P
- key
- = · position 25
- sends
- =
- zmk
- &kp EQUAL
- key
- Esc · position 26
- sends
- Escape
- zmk
- &kp ESC
- key
- A · position 27
- sends
- A
- zmk
- &kp A
- key
- S · position 28
- sends
- S
- hold
- Alt
- zmk
- &hml LALT S
- key
- D · position 29
- sends
- D
- hold
- Ctrl
- zmk
- &hml LCTRL D
- key
- F · position 30
- sends
- F
- hold
- Shift
- zmk
- &hml_idx LSHFT F
- key
- G · position 31
- sends
- G
- zmk
- &kp G
- key
- joystick ← · position 32
- sends
- XF86AudioPlay
- does
- Play / pause (playerctl)
- bind
- niri: spawn-sh "playerctl play-pause"
- from
- niri/dot-config/niri/binds.kdl:68
- zmk
- &kp C_PP
- key
- H · position 33
- sends
- H
- zmk
- &kp H
- key
- J · position 34
- sends
- J
- hold
- Shift
- zmk
- &hmr_idx RSHFT J
- key
- K · position 35
- sends
- K
- hold
- Ctrl
- zmk
- &hmr RCTRL K
- key
- L · position 36
- sends
- L
- hold
- Alt
- zmk
- &hmr LALT L
- key
- ; · position 37
- sends
- ;
- zmk
- &kp SEMI
- key
- ' · position 38
- sends
- '
- zmk
- &kp APOS
- key
- \ · position 39
- sends
- \
- zmk
- &kp BSLH
- key
- Z · position 40
- sends
- Z
- zmk
- &kp Z
- key
- X · position 41
- sends
- X
- zmk
- &kp X
- key
- C · position 42
- sends
- C
- zmk
- &kp C
- key
- V · position 43
- sends
- V
- zmk
- &kp V
- key
- B · position 44
- sends
- B
- zmk
- &kp B
- key
- joystick → · position 45
- sends
- XF86AudioNext
- does
- Next (playerctl)
- bind
- niri: spawn-sh "playerctl next"
- from
- niri/dot-config/niri/binds.kdl:66
- zmk
- &kp C_NEXT
- key
- N · position 46
- sends
- N
- zmk
- &kp N
- key
- M · position 47
- sends
- M
- zmk
- &kp M
- key
- , · position 48
- sends
- ,
- zmk
- &kp COMMA
- key
- . · position 49
- sends
- .
- zmk
- &kp DOT
- key
- / · position 50
- sends
- /
- zmk
- &kp FSLH
- key
- ⏎ · position 51
- sends
- Enter
- zmk
- &kp RET
- key
- encoder press · position 52
- sends
- XF86AudioMute
- does
- Mute (wpctl)
- bind
- niri: spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"
- from
- niri/dot-config/niri/binds.kdl:58
- zmk
- &kp C_MUTE
- key
- SYS|NUM · position 53
- does
- hold for layer 4 (SYS|NUM)
- zmk
- &mo 4
- key
- F11 · position 54
- sends
- F11
- zmk
- &kp F11
- key
- ◆ · position 55
- sends
- Super
- zmk
- &kp LGUI
- key
- NAV · position 56
- does
- hold for layer 1 (NAV)
- zmk
- &mo 1
- key
- ⌫ · position 57
- sends
- Backspace
- zmk
- &kp BSPC
- key
- joystick press · position 58
- sends
- XF86AudioMute
- does
- Mute (wpctl)
- bind
- niri: spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"
- from
- niri/dot-config/niri/binds.kdl:58
- zmk
- &kp C_MUTE
- key
- Space · position 59
- sends
- Space
- zmk
- &kp SPACE
- key
- CODE · position 60
- does
- hold for layer 2 (CODE)
- zmk
- &mo 2
- key
- CapsWd · position 61
- does
- Caps Word: the next word in capitals
- zmk
- &caps_word
- key
- F12 · position 62
- sends
- F12
- does
- tmux: toggle nested OFF mode (pass keys to an inner tmux)
- hold
- AltGr (third level: the usbr layout's ã õ ç …)
- bind
- tmux: bind -T root F12
- from
- terminal/dot-tmux.conf:11
- zmk
- &ralt_mt RALT F12
- key
- MEDIA · position 63
- does
- hold for layer 3 (MEDIA)
- zmk
- &mo 3
NAV
Hold the left thumb’s NAV key. The left half drives niri: workspaces on Tab/Q, monitors on the home row, moving the column on the bottom row, plus the screenshot column on the inner edge. S and D stay Alt and Ctrl when held.
- key
- ` · position 0
- sends
- F12
- does
- tmux: toggle nested OFF mode (pass keys to an inner tmux)
- bind
- tmux: bind -T root F12
- from
- terminal/dot-tmux.conf:11
- zmk
- &kp F12
- key
- 1 · position 1
- sends
- F1
- zmk
- &kp F1
- key
- 2 · position 2
- sends
- F2
- zmk
- &kp F2
- key
- 3 · position 3
- sends
- F3
- zmk
- &kp F3
- key
- 4 · position 4
- sends
- F4
- zmk
- &kp F4
- key
- 5 · position 5
- sends
- F5
- zmk
- &kp F5
- key
- joystick ↑ · position 6
- sends
- Up
- zmk
- &kp UP_ARROW
- key
- 6 · position 7
- sends
- F6
- zmk
- &kp F6
- key
- 7 · position 8
- sends
- F7
- zmk
- &kp F7
- key
- 8 · position 9
- sends
- F8
- zmk
- &kp F8
- key
- 9 · position 10
- sends
- F9
- zmk
- &kp F9
- key
- 0 · position 11
- sends
- F10
- zmk
- &kp F10
- key
- - · position 12
- sends
- F11
- zmk
- &kp F11
- key
- Tab · position 13
- sends
- Super+U
- does
- Focus workspace down
- bind
- niri: focus-workspace-down
- from
- niri/dot-config/niri/binds.kdl:143
- zmk
- &kp LG(U)
- key
- Q · position 14
- sends
- Super+I
- does
- Focus workspace up
- bind
- niri: focus-workspace-up
- from
- niri/dot-config/niri/binds.kdl:144
- zmk
- &kp LG(I)
- key
- W · position 15
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- E · position 16
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- R · position 17
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- T · position 18
- sends
- Ctrl+Print
- does
- Screenshot monitor
- bind
- niri: screenshot-screen
- from
- niri/dot-config/niri/binds.kdl:290
- zmk
- &kp LC(PSCRN)
- key
- joystick ↓ · position 19
- sends
- Down
- zmk
- &kp DOWN_ARROW
- key
- Y · position 20
- sends
- Home
- zmk
- &kp HOME
- key
- U · position 21
- sends
- Page Down
- zmk
- &kp PG_DN
- key
- I · position 22
- sends
- Page Up
- zmk
- &kp PG_UP
- key
- O · position 23
- sends
- End
- zmk
- &kp END
- key
- P · position 24
- sends
- Insert
- zmk
- &kp INS
- key
- = · position 25
- sends
- does
- Screenshot region
- bind
- niri: screenshot
- from
- niri/dot-config/niri/binds.kdl:289
- zmk
- &kp PRINTSCREEN
- key
- Esc · position 26
- sends
- Super+Shift+H
- does
- Focus monitor left
- bind
- niri: focus-monitor-left
- from
- niri/dot-config/niri/binds.kdl:112
- zmk
- &kp LG(LS(H))
- key
- A · position 27
- sends
- Super+Shift+J
- does
- Focus monitor down
- bind
- niri: focus-monitor-down
- from
- niri/dot-config/niri/binds.kdl:113
- zmk
- &kp LG(LS(J))
- key
- S · position 28
- sends
- Super+Shift+K
- does
- Focus monitor up
- hold
- Alt
- bind
- niri: focus-monitor-up
- from
- niri/dot-config/niri/binds.kdl:114
- zmk
- &hml LALT LG(LS(K))
- key
- D · position 29
- sends
- Super+Shift+L
- does
- Focus monitor right
- hold
- Ctrl
- bind
- niri: focus-monitor-right
- from
- niri/dot-config/niri/binds.kdl:115
- zmk
- &hml LCTRL LG(LS(L))
- key
- F · position 30
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- G · position 31
- sends
- Alt+Print
- does
- Screenshot window
- bind
- niri: screenshot-window
- from
- niri/dot-config/niri/binds.kdl:292
- zmk
- &kp LA(PSCRN)
- key
- joystick ← · position 32
- sends
- Left
- zmk
- &kp LEFT_ARROW
- key
- H · position 33
- sends
- Left
- zmk
- &kp LEFT
- key
- J · position 34
- sends
- Down
- zmk
- &kp DOWN
- key
- K · position 35
- sends
- Up
- zmk
- &kp UP
- key
- L · position 36
- sends
- Right
- zmk
- &kp RIGHT
- key
- ; · position 37
- sends
- Delete
- zmk
- &kp DEL
- key
- ' · position 38
- sends
- Pause
- zmk
- &kp PAUSE_BREAK
- key
- \ · position 39
- sends
- Super+Ctrl+U
- does
- Move column to workspace down
- bind
- niri: move-column-to-workspace-down
- from
- niri/dot-config/niri/binds.kdl:147
- zmk
- &kp LG(LC(U))
- key
- Z · position 40
- sends
- Super+Ctrl+I
- does
- Move column to workspace up
- bind
- niri: move-column-to-workspace-up
- from
- niri/dot-config/niri/binds.kdl:148
- zmk
- &kp LG(LC(I))
- key
- X · position 41
- sends
- Super+Ctrl+Shift+H
- does
- Move column to monitor left
- bind
- niri: move-column-to-monitor-left
- from
- niri/dot-config/niri/binds.kdl:121
- zmk
- &kp LG(LS(LC(H)))
- key
- C · position 42
- sends
- Super+Ctrl+Shift+L
- does
- Move column to monitor right
- bind
- niri: move-column-to-monitor-right
- from
- niri/dot-config/niri/binds.kdl:124
- zmk
- &kp LG(LS(LC(L)))
- key
- V · position 43
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- B · position 44
- sends
- Shift+Print
- does
- Screenshot and annotate
- bind
- niri: spawn "noctalia" "msg" "screenshot-annotate"
- from
- niri/dot-config/niri/binds.kdl:291
- zmk
- &kp LS(PSCRN)
- key
- joystick → · position 45
- sends
- Right
- zmk
- &kp RIGHT_ARROW
- key
- N · position 46
- sends
- Super+1
- does
- Focus workspace 1
- bind
- niri: focus-workspace 1
- from
- niri/dot-config/niri/binds.kdl:199
- zmk
- &kp LG(N1)
- key
- M · position 47
- sends
- Super+U
- does
- Focus workspace down
- bind
- niri: focus-workspace-down
- from
- niri/dot-config/niri/binds.kdl:143
- zmk
- &kp LG(U)
- key
- , · position 48
- sends
- Super+I
- does
- Focus workspace up
- bind
- niri: focus-workspace-up
- from
- niri/dot-config/niri/binds.kdl:144
- zmk
- &kp LG(I)
- key
- . · position 49
- sends
- Super+9
- does
- Focus workspace 9
- bind
- niri: focus-workspace 9
- from
- niri/dot-config/niri/binds.kdl:207
- zmk
- &kp LG(N9)
- key
- / · position 50
- sends
- Super+Shift+H
- does
- Focus monitor left
- bind
- niri: focus-monitor-left
- from
- niri/dot-config/niri/binds.kdl:112
- zmk
- &kp LG(LS(H))
- key
- ⏎ · position 51
- sends
- Super+Shift+L
- does
- Focus monitor right
- bind
- niri: focus-monitor-right
- from
- niri/dot-config/niri/binds.kdl:115
- zmk
- &kp LG(LS(L))
- key
- encoder press · position 52
- does
- transparent: falls through to the layer below (Mute (wpctl))
- zmk
- &trans
- key
- SYS|NUM · position 53
- does
- transparent: falls through to the layer below (hold for layer 4 (SYS|NUM))
- zmk
- &trans
- key
- F11 · position 54
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- ◆ · position 55
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- NAV · position 56
- does
- held to be on this layer
- zmk
- &trans
- key
- ⌫ · position 57
- sends
- Delete
- zmk
- &kp DEL
- key
- joystick press · position 58
- sends
- Enter
- zmk
- &kp ENTER
- key
- Space · position 59
- sends
- Menu (context menu)
- zmk
- &kp K_APP
- key
- CODE · position 60
- sends
- Ctrl
- zmk
- &kp LCTRL
- key
- CapsWd · position 61
- sends
- Left
- zmk
- &kp LEFT
- key
- F12 · position 62
- sends
- Right
- zmk
- &kp RIGHT
- key
- MEDIA · position 63
- does
- transparent: falls through to the layer below (hold for layer 3 (MEDIA))
- zmk
- &trans
CODE
Hold the right thumb’s CODE key. Digraphs and snippets typed as one key; ▏ marks where the cursor ends up.
- key
- ` · position 0
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- 1 · position 1
- does
- types '~s()', cursor at ▏
- bind
- macro M_SIGS
- zmk
- &M_SIGS
- key
- 2 · position 2
- does
- types '~w()', cursor at ▏
- bind
- macro M_SIGW
- zmk
- &M_SIGW
- key
- 3 · position 3
- does
- types '~r//', cursor at ▏
- bind
- macro M_SIGR
- zmk
- &M_SIGR
- key
- 4 · position 4
- does
- types '~D[]', cursor at ▏
- bind
- macro M_SIGD
- zmk
- &M_SIGD
- key
- 5 · position 5
- does
- types '<>'
- bind
- macro M_CONCAT
- zmk
- &M_CONCAT
- key
- joystick ↑ · position 6
- does
- transparent: falls through to the layer below (Vol + (wpctl))
- zmk
- &trans
- key
- 6 · position 7
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- 7 · position 8
- does
- types '{ }', cursor at ▏
- bind
- macro M_HEEXI
- zmk
- &M_HEEXI
- key
- 8 · position 9
- does
- types '<% %>', cursor at ▏
- bind
- macro M_HEEXNP
- zmk
- &M_HEEXNP
- key
- 9 · position 10
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- 0 · position 11
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- - · position 12
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- Tab · position 13
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- Q · position 14
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- W · position 15
- does
- types '<-'
- bind
- macro M_LARROW
- zmk
- &M_LARROW
- key
- E · position 16
- does
- types '|>'
- bind
- macro M_PIPE
- zmk
- &M_PIPE
- key
- R · position 17
- does
- types '->'
- bind
- macro M_ARROW
- zmk
- &M_ARROW
- key
- T · position 18
- does
- types '=>'
- bind
- macro M_FARROW
- zmk
- &M_FARROW
- key
- joystick ↓ · position 19
- does
- transparent: falls through to the layer below (Vol − (wpctl))
- zmk
- &trans
- key
- Y · position 20
- does
- types '::'
- bind
- macro M_DCOLON
- zmk
- &M_DCOLON
- key
- U · position 21
- does
- types '|_|'
- bind
- macro M_CLOSURE
- zmk
- &M_CLOSURE
- key
- I · position 22
- does
- types 'dbg!()', cursor at ▏
- bind
- macro M_DBG
- zmk
- &M_DBG
- key
- O · position 23
- does
- types 'todo!()', cursor at ▏
- bind
- macro M_TODO
- zmk
- &M_TODO
- key
- P · position 24
- does
- types '::<>', cursor at ▏
- bind
- macro M_TFISH
- zmk
- &M_TFISH
- key
- = · position 25
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- Esc · position 26
- sends
- `
- zmk
- &kp GRAVE
- key
- A · position 27
- sends
- {
- zmk
- &kp LBRC
- key
- S · position 28
- sends
- }
- hold
- Alt
- zmk
- &mt LALT RBRC
- key
- D · position 29
- sends
- [
- hold
- Ctrl
- zmk
- &mt LCTRL LBKT
- key
- F · position 30
- sends
- ]
- hold
- Shift
- zmk
- &mt LSHFT RBKT
- key
- G · position 31
- sends
- +
- zmk
- &kp PLUS
- key
- joystick ← · position 32
- does
- transparent: falls through to the layer below (Play / pause (playerctl))
- zmk
- &trans
- key
- H · position 33
- does
- types '()', cursor at ▏
- bind
- macro M_PAREN
- zmk
- &M_PAREN
- key
- J · position 34
- does
- types '[]', cursor at ▏
- bind
- macro M_BRKT
- zmk
- &M_BRKT
- key
- K · position 35
- does
- types '{}', cursor at ▏
- bind
- macro M_BRACE
- zmk
- &M_BRACE
- key
- L · position 36
- does
- types '""', cursor at ▏
- bind
- macro M_DQUO
- zmk
- &M_DQUO
- key
- ; · position 37
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- ' · position 38
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- \ · position 39
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- Z · position 40
- sends
- -
- zmk
- &kp MINUS
- key
- X · position 41
- sends
- _
- zmk
- &kp UNDER
- key
- C · position 42
- sends
- (
- zmk
- &kp LPAR
- key
- V · position 43
- sends
- )
- zmk
- &kp RPAR
- key
- B · position 44
- sends
- =
- zmk
- &kp EQUAL
- key
- joystick → · position 45
- does
- transparent: falls through to the layer below (Next (playerctl))
- zmk
- &trans
- key
- N · position 46
- does
- types '=='
- bind
- macro M_EQEQ
- zmk
- &M_EQEQ
- key
- M · position 47
- does
- types '!='
- bind
- macro M_NEQ
- zmk
- &M_NEQ
- key
- , · position 48
- does
- types '<='
- bind
- macro M_LEQ
- zmk
- &M_LEQ
- key
- . · position 49
- does
- types '>='
- bind
- macro M_GEQ
- zmk
- &M_GEQ
- key
- / · position 50
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- ⏎ · position 51
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- encoder press · position 52
- does
- transparent: falls through to the layer below (Mute (wpctl))
- zmk
- &trans
- key
- SYS|NUM · position 53
- does
- transparent: falls through to the layer below (hold for layer 4 (SYS|NUM))
- zmk
- &trans
- key
- F11 · position 54
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- ◆ · position 55
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- NAV · position 56
- does
- transparent: falls through to the layer below (hold for layer 1 (NAV))
- zmk
- &trans
- key
- ⌫ · position 57
- sends
- Delete
- zmk
- &kp DEL
- key
- joystick press · position 58
- does
- transparent: falls through to the layer below (Mute (wpctl))
- zmk
- &trans
- key
- Space · position 59
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- CODE · position 60
- does
- held to be on this layer
- zmk
- &trans
- key
- CapsWd · position 61
- does
- transparent: falls through to the layer below (Caps Word: the next word in capitals)
- zmk
- &trans
- key
- F12 · position 62
- does
- transparent: falls through to the layer below (tmux: toggle nested OFF mode (pass keys to an inner tmux))
- zmk
- &trans
- key
- MEDIA · position 63
- does
- transparent: falls through to the layer below (hold for layer 3 (MEDIA))
- zmk
- &trans
MEDIA
Hold the right thumb’s outer key. Volume and playback through wpctl and
playerctl; F20 is XF86AudioMicMute in xkb, so it toggles the microphone.
E and D are the laptop panel’s brightness, W and S an external monitor’s
(ext-brightness, DDC/CI).
The number row and T send F14–F19 and F24, and B sends F21: keys kept for
host binds. xkb names most of the upper F-keys, so binds.kdl uses those
names:
| Key | Sent | xkb keysym | Bound to |
|---|---|---|---|
| ` | F14 | XF86Launch5 | caffeine on/off |
| 1 | F15 | XF86Launch6 | do not disturb on/off |
| 2 | F16 | XF86Launch7 | Bluetooth on/off (rfkill) |
| 3 | F17 | XF86Launch8 | Noctalia control center |
| 4 | F18 | XF86Launch9 | emoji picker |
| 5 | F19 | F19 | clipboard history |
| T | F24 | F24 | power menu |
| B | F21 | XF86TouchpadToggle | touchpad on/off (touchpad-toggle) |
| N | F20 | XF86AudioMicMute | mic mute |
| (game layers) | F13 | XF86Tools | push-to-talk in games; kept unbound desktop-wide |
| (none) | F22 / F23 | XF86TouchpadOn / XF86TouchpadOff | touchpad on / off |
- key
- ` · position 0
- sends
- F14→XF86Launch5
- does
- Caffeine on/off
- bind
- niri: spawn "~/.local/bin/caffeine"
- from
- niri/dot-config/niri/binds.kdl:318
- zmk
- &kp F14
- key
- 1 · position 1
- sends
- F15→XF86Launch6
- does
- Do not disturb on/off
- bind
- niri: spawn "noctalia" "msg" "notification-dnd-toggle"
- from
- niri/dot-config/niri/binds.kdl:319
- zmk
- &kp F15
- key
- 2 · position 2
- sends
- F16→XF86Launch7
- does
- Bluetooth on/off
- bind
- niri: spawn "rfkill" "toggle" "bluetooth"
- from
- niri/dot-config/niri/binds.kdl:320
- zmk
- &kp F16
- key
- 3 · position 3
- sends
- F17→XF86Launch8
- does
- Control center
- bind
- niri: spawn "noctalia" "msg" "panel-toggle" "control-center"
- from
- niri/dot-config/niri/binds.kdl:321
- zmk
- &kp F17
- key
- 4 · position 4
- sends
- F18→XF86Launch9
- does
- Emoji picker
- bind
- niri: spawn "noctalia" "msg" "panel-toggle" "launcher" "/emo"
- from
- niri/dot-config/niri/binds.kdl:322
- zmk
- &kp F18
- key
- 5 · position 5
- sends
- F19
- does
- Clipboard history
- bind
- niri: spawn "noctalia" "msg" "panel-toggle" "clipboard"
- from
- niri/dot-config/niri/binds.kdl:323
- zmk
- &kp F19
- key
- joystick ↑ · position 6
- sends
- XF86AudioRaiseVolume
- does
- Vol + (wpctl)
- bind
- niri: spawn "wpctl" "set-volume" "-l" "1.0" "@DEFAULT_AUDIO_SINK@" "5%+"
- from
- niri/dot-config/niri/binds.kdl:56
- zmk
- &kp C_VOL_UP
- key
- 6 · position 7
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- 7 · position 8
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- 8 · position 9
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- 9 · position 10
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- 0 · position 11
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- - · position 12
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- Tab · position 13
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- Q · position 14
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- W · position 15
- sends
- Super+XF86MonBrightnessUp
- does
- External monitor brightness up
- bind
- niri: spawn "~/.local/bin/ext-brightness" "+10" · works on the lock screen
- from
- niri/dot-config/niri/binds.kdl:64
- zmk
- &kp LG(C_BRI_UP)
- key
- E · position 16
- sends
- XF86MonBrightnessUp
- does
- Bright + (brightnessctl)
- bind
- niri: spawn "brightnessctl" "-q" "-c" "backlight" "set" "5%+"
- from
- niri/dot-config/niri/binds.kdl:61
- zmk
- &kp C_BRI_UP
- key
- R · position 17
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- T · position 18
- sends
- F24
- does
- Menu Power
- bind
- niri: spawn "~/.local/bin/rodii-power-menu"
- from
- niri/dot-config/niri/binds.kdl:324
- zmk
- &kp F24
- key
- joystick ↓ · position 19
- sends
- XF86AudioLowerVolume
- does
- Vol − (wpctl)
- bind
- niri: spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "5%-"
- from
- niri/dot-config/niri/binds.kdl:57
- zmk
- &kp C_VOL_DN
- key
- Y · position 20
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- U · position 21
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- I · position 22
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- O · position 23
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- P · position 24
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- = · position 25
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- Esc · position 26
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- A · position 27
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- S · position 28
- sends
- Super+XF86MonBrightnessDown
- does
- External monitor brightness down
- bind
- niri: spawn "~/.local/bin/ext-brightness" "-10" · works on the lock screen
- from
- niri/dot-config/niri/binds.kdl:65
- zmk
- &kp LG(C_BRI_DN)
- key
- D · position 29
- sends
- XF86MonBrightnessDown
- does
- Bright − (brightnessctl)
- bind
- niri: spawn "brightnessctl" "-q" "-c" "backlight" "--min-value=1%" "set" "5%-"
- from
- niri/dot-config/niri/binds.kdl:62
- zmk
- &kp C_BRI_DN
- key
- F · position 30
- sends
- Delete
- zmk
- &kp DEL
- key
- G · position 31
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- joystick ← · position 32
- sends
- XF86AudioPlay
- does
- Play / pause (playerctl)
- bind
- niri: spawn-sh "playerctl play-pause"
- from
- niri/dot-config/niri/binds.kdl:68
- zmk
- &kp C_PP
- key
- H · position 33
- sends
- XF86AudioLowerVolume
- does
- Vol − (wpctl)
- bind
- niri: spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "5%-"
- from
- niri/dot-config/niri/binds.kdl:57
- zmk
- &kp C_VOL_DN
- key
- J · position 34
- sends
- XF86AudioRaiseVolume
- does
- Vol + (wpctl)
- bind
- niri: spawn "wpctl" "set-volume" "-l" "1.0" "@DEFAULT_AUDIO_SINK@" "5%+"
- from
- niri/dot-config/niri/binds.kdl:56
- zmk
- &kp C_VOL_UP
- key
- K · position 35
- sends
- XF86AudioPlay
- does
- Play / pause (playerctl)
- bind
- niri: spawn-sh "playerctl play-pause"
- from
- niri/dot-config/niri/binds.kdl:68
- zmk
- &kp C_PP
- key
- L · position 36
- sends
- XF86AudioStop
- zmk
- &kp C_STOP
- key
- ; · position 37
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- ' · position 38
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- \ · position 39
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- Z · position 40
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- X · position 41
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- C · position 42
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- V · position 43
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- B · position 44
- sends
- F21→XF86TouchpadToggle
- does
- Touchpad on/off
- bind
- niri: spawn "~/.local/bin/touchpad-toggle" · works on the lock screen
- from
- niri/dot-config/niri/binds.kdl:302
- zmk
- &kp F21
- key
- joystick → · position 45
- sends
- XF86AudioNext
- does
- Next (playerctl)
- bind
- niri: spawn-sh "playerctl next"
- from
- niri/dot-config/niri/binds.kdl:66
- zmk
- &kp C_NEXT
- key
- N · position 46
- sends
- F20→XF86AudioMicMute
- does
- Mic mute (wpctl)
- bind
- niri: spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"
- from
- niri/dot-config/niri/binds.kdl:59
- zmk
- &kp F20
- key
- M · position 47
- sends
- XF86AudioMute
- does
- Mute (wpctl)
- bind
- niri: spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"
- from
- niri/dot-config/niri/binds.kdl:58
- zmk
- &kp C_MUTE
- key
- , · position 48
- sends
- XF86AudioPrev
- does
- Prev (playerctl)
- bind
- niri: spawn-sh "playerctl previous"
- from
- niri/dot-config/niri/binds.kdl:69
- zmk
- &kp C_PREV
- key
- . · position 49
- sends
- XF86AudioNext
- does
- Next (playerctl)
- bind
- niri: spawn-sh "playerctl next"
- from
- niri/dot-config/niri/binds.kdl:66
- zmk
- &kp C_NEXT
- key
- / · position 50
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- ⏎ · position 51
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- encoder press · position 52
- does
- transparent: falls through to the layer below (Mute (wpctl))
- zmk
- &trans
- key
- SYS|NUM · position 53
- does
- transparent: falls through to the layer below (hold for layer 4 (SYS|NUM))
- zmk
- &trans
- key
- F11 · position 54
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- ◆ · position 55
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- NAV · position 56
- does
- transparent: falls through to the layer below (hold for layer 1 (NAV))
- zmk
- &trans
- key
- ⌫ · position 57
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- joystick press · position 58
- sends
- XF86AudioMute
- does
- Mute (wpctl)
- bind
- niri: spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"
- from
- niri/dot-config/niri/binds.kdl:58
- zmk
- &kp C_MUTE
- key
- Space · position 59
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- CODE · position 60
- does
- transparent: falls through to the layer below (hold for layer 2 (CODE))
- zmk
- &trans
- key
- CapsWd · position 61
- does
- transparent: falls through to the layer below (Caps Word: the next word in capitals)
- zmk
- &trans
- key
- F12 · position 62
- does
- transparent: falls through to the layer below (tmux: toggle nested OFF mode (pass keys to an inner tmux))
- zmk
- &trans
- key
- MEDIA · position 63
- does
- held to be on this layer
- zmk
- &trans
SYS|NUM
Hold the left thumb’s outer key. Bluetooth profiles, underglow and the
mouse on the left, a numpad on the right. Three keys reach the host: B locks
the screen (Super+Alt+L, loginctl lock-session), the top-right key sends
XF86Calculator (GNOME Calculator), and the key under it is Magic SysRq.
SysRq holds Alt while you hold it, and Linux reads PrintScreen as SysRq, so
holding it and tapping a letter sends a kernel SysRq command (R E I S U B
and friends). Which ones run is kernel.sysrq’s bitmask: both notebooks
have the systemd default, 16, which allows only S (sync) and refuses
reboot, kill and power-off. Raising it is a deliberate local choice
(/etc/sysctl.d/), not something this repo sets. NAV’s Alt+PrtSc
(screenshot window) is the same chord, but as a single tap.
- key
- ` · position 0
- does
- forget the selected Bluetooth profile's host
- zmk
- &bt BT_CLR
- key
- 1 · position 1
- does
- select Bluetooth profile 1
- zmk
- &bt BT_SEL 0
- key
- 2 · position 2
- does
- select Bluetooth profile 2
- zmk
- &bt BT_SEL 1
- key
- 3 · position 3
- does
- select Bluetooth profile 3
- zmk
- &bt BT_SEL 2
- key
- 4 · position 4
- does
- select Bluetooth profile 4
- zmk
- &bt BT_SEL 3
- key
- 5 · position 5
- does
- select Bluetooth profile 5
- zmk
- &bt BT_SEL 4
- key
- joystick ↑ · position 6
- does
- move the mouse pointer
- zmk
- &mmv MOVE_UP
- key
- 6 · position 7
- sends
- Num Lock
- zmk
- &kp KP_NUM
- key
- 7 · position 8
- sends
- keypad 7
- zmk
- &kp KP_N7
- key
- 8 · position 9
- sends
- keypad 8
- zmk
- &kp KP_N8
- key
- 9 · position 10
- sends
- keypad 9
- zmk
- &kp KP_N9
- key
- 0 · position 11
- sends
- keypad -
- zmk
- &kp KP_MINUS
- key
- - · position 12
- sends
- XF86Calculator
- does
- Calculator
- bind
- niri: spawn "gnome-calculator"
- from
- niri/dot-config/niri/binds.kdl:297
- zmk
- &kp C_AL_CALC
- key
- Tab · position 13
- does
- brightness up (+8, max 60) (zmk-rgb-layer, not the keymap)
- zmk
- &none
- key
- Q · position 14
- does
- underglow: RGB_SAI
- zmk
- &rgb_ug RGB_SAI
- key
- W · position 15
- does
- underglow: RGB_HUI
- zmk
- &rgb_ug RGB_HUI
- key
- E · position 16
- does
- underglow: RGB_EFF
- zmk
- &rgb_ug RGB_EFF
- key
- R · position 17
- does
- mouse button MB4
- zmk
- &mkp MB4
- key
- T · position 18
- does
- mouse button MB5
- zmk
- &mkp MB5
- key
- joystick ↓ · position 19
- does
- move the mouse pointer
- zmk
- &mmv MOVE_DOWN
- key
- Y · position 20
- sends
- keypad /
- zmk
- &kp KP_SLASH
- key
- U · position 21
- sends
- keypad 4
- zmk
- &kp KP_N4
- key
- I · position 22
- sends
- keypad 5
- zmk
- &kp KP_N5
- key
- O · position 23
- sends
- keypad 6
- zmk
- &kp KP_N6
- key
- P · position 24
- sends
- keypad +
- zmk
- &kp KP_PLUS
- key
- = · position 25
- sends
- Alt+SysRq, Alt held
- does
- kernel Magic SysRq: keep holding, tap a command letter; kernel.sysrq decides which work (16, the systemd default: S, sync, only)
- bind
- macro SYSRQ
- zmk
- &SYSRQ
- key
- Esc · position 26
- does
- brightness down (−8, min 4) (zmk-rgb-layer, not the keymap)
- zmk
- &none
- key
- A · position 27
- does
- underglow: RGB_SAD
- zmk
- &rgb_ug RGB_SAD
- key
- S · position 28
- does
- underglow: RGB_HUD
- zmk
- &rgb_ug RGB_HUD
- key
- D · position 29
- does
- underglow: RGB_EFR
- zmk
- &rgb_ug RGB_EFR
- key
- F · position 30
- does
- mouse button LCLK
- zmk
- &mkp LCLK
- key
- G · position 31
- does
- mouse button RCLK
- zmk
- &mkp RCLK
- key
- joystick ← · position 32
- does
- move the mouse pointer
- zmk
- &mmv MOVE_LEFT
- key
- H · position 33
- sends
- keypad *
- zmk
- &kp KP_ASTERISK
- key
- J · position 34
- sends
- keypad 1
- zmk
- &kp KP_N1
- key
- K · position 35
- sends
- keypad 2
- zmk
- &kp KP_N2
- key
- L · position 36
- sends
- keypad 3
- zmk
- &kp KP_N3
- key
- ; · position 37
- sends
- keypad Enter
- zmk
- &kp KP_ENTER
- key
- ' · position 38
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- \ · position 39
- does
- underglow: RGB_TOG
- zmk
- &rgb_ug RGB_TOG
- key
- Z · position 40
- does
- BASE mood: underglow off (zmk-rgb-layer, not the keymap)
- zmk
- &none
- key
- X · position 41
- does
- BASE mood: solid dim teal (zmk-rgb-layer, not the keymap)
- zmk
- &none
- key
- C · position 42
- does
- BASE mood: step through breathe, spectrum, swirl (zmk-rgb-layer, not the keymap)
- zmk
- &none
- key
- V · position 43
- does
- mouse button MCLK
- zmk
- &mkp MCLK
- key
- B · position 44
- sends
- Super+Alt+L
- does
- Lock the Screen
- bind
- niri: spawn "loginctl" "lock-session"
- from
- niri/dot-config/niri/binds.kdl:21
- zmk
- &kp LG(LA(L))
- key
- joystick → · position 45
- does
- move the mouse pointer
- zmk
- &mmv MOVE_RIGHT
- key
- N · position 46
- sends
- keypad =
- zmk
- &kp KP_EQUAL
- key
- M · position 47
- sends
- keypad 0
- zmk
- &kp KP_N0
- key
- , · position 48
- sends
- ,
- zmk
- &kp COMMA
- key
- . · position 49
- sends
- keypad .
- zmk
- &kp KP_DOT
- key
- / · position 50
- sends
- %
- zmk
- &kp PERCENT
- key
- ⏎ · position 51
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- encoder press · position 52
- does
- transparent: falls through to the layer below (Mute (wpctl))
- zmk
- &trans
- key
- SYS|NUM · position 53
- does
- held to be on this layer
- zmk
- &trans
- key
- F11 · position 54
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- ◆ · position 55
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- NAV · position 56
- does
- transparent: falls through to the layer below (hold for layer 1 (NAV))
- zmk
- &trans
- key
- ⌫ · position 57
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- joystick press · position 58
- does
- mouse button LCLK
- zmk
- &mkp LCLK
- key
- Space · position 59
- does
- transparent: falls through to the layer below
- zmk
- &trans
- key
- CODE · position 60
- does
- transparent: falls through to the layer below (hold for layer 2 (CODE))
- zmk
- &trans
- key
- CapsWd · position 61
- does
- transparent: falls through to the layer below (Caps Word: the next word in capitals)
- zmk
- &trans
- key
- F12 · position 62
- does
- transparent: falls through to the layer below (tmux: toggle nested OFF mode (pass keys to an inner tmux))
- zmk
- &trans
- key
- MEDIA · position 63
- does
- switch to layer 5 (GAME?)
- zmk
- &to 5
Every command
The keys above that do more than type their legend, by layer.
BASE
| Keys sent | Sofle key | Does |
|---|---|---|
XF86AudioRaiseVolume | joystick ↑ | Vol + (wpctl) |
XF86AudioLowerVolume | joystick ↓ | Vol − (wpctl) |
XF86AudioPlay | joystick ← | Play / pause (playerctl) |
XF86AudioNext | joystick → | Next (playerctl) |
XF86AudioMute | encoder press | Mute (wpctl) |
XF86AudioMute | joystick press | Mute (wpctl) |
F12 | F12 | tmux: toggle nested OFF mode (pass keys to an inner tmux) |
NAV
| Keys sent | Sofle key | Does |
|---|---|---|
F12 | ` | tmux: toggle nested OFF mode (pass keys to an inner tmux) |
Super+U | Tab | Focus workspace down |
Super+I | Q | Focus workspace up |
Ctrl+Print | T | Screenshot monitor |
Print | = | Screenshot region |
Super+Shift+H | Esc | Focus monitor left |
Super+Shift+J | A | Focus monitor down |
Super+Shift+K | S | Focus monitor up |
Super+Shift+L | D | Focus monitor right |
Alt+Print | G | Screenshot window |
Super+Ctrl+U | \ | Move column to workspace down |
Super+Ctrl+I | Z | Move column to workspace up |
Super+Ctrl+Shift+H | X | Move column to monitor left |
Super+Ctrl+Shift+L | C | Move column to monitor right |
Shift+Print | B | Screenshot and annotate |
Super+1 | N | Focus workspace 1 |
Super+U | M | Focus workspace down |
Super+I | , | Focus workspace up |
Super+9 | . | Focus workspace 9 |
Super+Shift+H | / | Focus monitor left |
Super+Shift+L | ⏎ | Focus monitor right |
CODE
| Sofle key | Types (▏ = cursor) |
|---|---|
| 1 | ~s(▏) |
| 2 | ~w(▏) |
| 3 | ~r/▏/ |
| 4 | ~D[▏] |
| 5 | <> |
| 7 | { ▏ } |
| 8 | <% ▏ %> |
| W | <- |
| E | |> |
| R | -> |
| T | => |
| Y | :: |
| U | |_| |
| I | dbg!(▏) |
| O | todo!(▏) |
| P | ::<▏> |
| H | (▏) |
| J | [▏] |
| K | {▏} |
| L | "▏" |
| N | == |
| M | != |
| , | <= |
| . | >= |
MEDIA
| Keys sent | Sofle key | Does |
|---|---|---|
F14→XF86Launch5 | ` | Caffeine on/off |
F15→XF86Launch6 | 1 | Do not disturb on/off |
F16→XF86Launch7 | 2 | Bluetooth on/off |
F17→XF86Launch8 | 3 | Control center |
F18→XF86Launch9 | 4 | Emoji picker |
F19 | 5 | Clipboard history |
XF86AudioRaiseVolume | joystick ↑ | Vol + (wpctl) |
Super+XF86MonBrightnessUp | W | External monitor brightness up |
XF86MonBrightnessUp | E | Bright + (brightnessctl) |
F24 | T | Menu Power |
XF86AudioLowerVolume | joystick ↓ | Vol − (wpctl) |
Super+XF86MonBrightnessDown | S | External monitor brightness down |
XF86MonBrightnessDown | D | Bright − (brightnessctl) |
XF86AudioPlay | joystick ← | Play / pause (playerctl) |
XF86AudioLowerVolume | H | Vol − (wpctl) |
XF86AudioRaiseVolume | J | Vol + (wpctl) |
XF86AudioPlay | K | Play / pause (playerctl) |
F21→XF86TouchpadToggle | B | Touchpad on/off |
XF86AudioNext | joystick → | Next (playerctl) |
F20→XF86AudioMicMute | N | Mic mute (wpctl) |
XF86AudioMute | M | Mute (wpctl) |
XF86AudioPrev | , | Prev (playerctl) |
XF86AudioNext | . | Next (playerctl) |
XF86AudioMute | joystick press | Mute (wpctl) |
SYS|NUM
| Keys sent | Sofle key | Does |
|---|---|---|
XF86Calculator | - | Calculator |
Super+Alt+L | B | Lock the Screen |
| Sofle key | Label | Does (in the firmware) |
|---|---|---|
| ` | BT clr | forget the selected Bluetooth profile’s host |
| 1 | BT 1 | select Bluetooth profile 1 |
| 2 | BT 2 | select Bluetooth profile 2 |
| 3 | BT 3 | select Bluetooth profile 3 |
| 4 | BT 4 | select Bluetooth profile 4 |
| 5 | BT 5 | select Bluetooth profile 5 |
| joystick ↑ | Ptr ↑ | move the mouse pointer |
| Tab | Bri+ | brightness up (+8, max 60) (zmk-rgb-layer, not the keymap) |
| Q | Sat+ | underglow: RGB_SAI |
| W | Hue+ | underglow: RGB_HUI |
| E | FX+ | underglow: RGB_EFF |
| R | Back | mouse button MB4 |
| T | Fwd | mouse button MB5 |
| joystick ↓ | Ptr ↓ | move the mouse pointer |
| = | SysRq | kernel Magic SysRq: keep holding, tap a command letter; kernel.sysrq decides which work (16, the systemd default: S, sync, only) |
| Esc | Bri− | brightness down (−8, min 4) (zmk-rgb-layer, not the keymap) |
| A | Sat− | underglow: RGB_SAD |
| S | Hue− | underglow: RGB_HUD |
| D | FX− | underglow: RGB_EFR |
| F | L click | mouse button LCLK |
| G | R click | mouse button RCLK |
| joystick ← | Ptr ← | move the mouse pointer |
| \ | RGB ⏻ | underglow: RGB_TOG |
| Z | Dark | BASE mood: underglow off (zmk-rgb-layer, not the keymap) |
| X | Dim | BASE mood: solid dim teal (zmk-rgb-layer, not the keymap) |
| C | FX | BASE mood: step through breathe, spectrum, swirl (zmk-rgb-layer, not the keymap) |
| V | M click | mouse button MCLK |
| joystick → | Ptr → | move the mouse pointer |
| joystick press | L click | mouse button LCLK |