Skip to content

Instantly share code, notes, and snippets.

@andywarburton
Created September 8, 2025 07:31
Show Gist options
  • Save andywarburton/1eb65b0a55627690353722d9f37f890f to your computer and use it in GitHub Desktop.
Save andywarburton/1eb65b0a55627690353722d9f37f890f to your computer and use it in GitHub Desktop.
Simple KMK split keyboard example
print("Starting Hex Split")from kmk.kmk_keyboard import KMKKeyboard
from kmk.keys import KC
from kmk.scanners import DiodeOrientation
from kmk.modules.split import Split, SplitSide, SplitType
from kmk.extensions.media_keys import MediaKeys
from kmk.modules.holdtap import HoldTap
from kmk.modules.layers import Layers
from kmk.extensions.statusled import statusLED
from kmk.extensions.stringy_keymaps import StringyKeymaps
from kmk.modules.mouse_keys import MouseKeys
from kmk.modules.cg_swap import CgSwap
from kmk.modules.macros import Macros,Press, Release, Tap
from kmk.modules.tapdance import TapDance
from storage import getmount
import board
keyboard = KMKKeyboard()
side = SplitSide.RIGHT if str(getmount('/').label)[-1] == 'R' else SplitSide.LEFT
if side == SplitSide.LEFT:
print("======== LEFT SIDE ========")
split = Split(
split_flip=False,
split_side=SplitSide.LEFT,
split_type=SplitType.UART,
split_target_left=True,
uart_interval=10,
data_pin=board.GP1,
data_pin2=board.GP0,
uart_flip=False,
use_pio=False,
)
else:
print("======== MR RIGHT SIDE ========")
split = Split(
split_flip=False,
split_side=SplitSide.RIGHT,
split_type=SplitType.UART,
split_target_left=True,
uart_interval=10,
data_pin=board.GP1,
data_pin2=board.GP0,
uart_flip=False,
use_pio=False,
)
holdtap = HoldTap()
statusLED = statusLED(
led_pins=[board.GP27,board.GP26],
brightness=100,
brightness_step=5,
brightness_limit=100,
)
# cg_swap disabled on startup
cg_swap = CgSwap()
macros = Macros()
tapdance = TapDance()
keyboard.modules.append(tapdance)
keyboard.modules.append(Macros())
keyboard.modules.append(macros)
keyboard.modules.append(cg_swap)
stringyKeymaps = StringyKeymaps()
keyboard.extensions.append(stringyKeymaps)
keyboard.extensions.append(statusLED)
keyboard.modules.append(split)
keyboard.extensions.append(MediaKeys())
keyboard.modules.append(holdtap)
keyboard.modules.append(Layers())
keyboard.row_pins = (board.GP15,board.GP14,board.GP13,board.GP12,board.GP11,)
keyboard.col_pins = (board.GP10,board.GP9,board.GP8,board.GP7,board.GP6,board.GP5,board.GP4)
keyboard.diode_orientation = DiodeOrientation.COL2ROW
keyboard.coord_mapping = [
0, 1, 2, 3, 4, 5, 6, 35, 36, 37, 38, 39, 40, 41,
7, 8, 9, 10, 11, 12, 13, 42, 43, 44, 45, 46, 47, 48,
14, 15, 16, 17, 18, 19, 20, 49, 50, 51, 52, 53, 54, 55,
22, 23, 24, 25, 26, 27, 56, 57, 58, 59, 60, 61,
29, 30, 31, 32, 33, 64, 65, 66, 67, 68
]
XXX = KC.NO
___ = KC.TRNS
RSFT = KC.HT(KC.ENT, KC.RSFT)
SPC = KC.HT(KC.SPACE, KC.MO(1), tap_time=800)
CTOG = KC.CG_TOGG
LAY1 = KC.MO(1)
LAY2 = KC.MO(2)
keyboard.keymap = [
[
'PSCREEN' , 'ESC' , 'N1' , 'N2' , 'N3' , 'N4' , 'N5' , 'N6' , 'N7' , 'N8' , 'N9' , 'N0' , 'BSPC' , 'VOLU',
___ , 'TAB' , 'Q' , 'W' , 'E' , 'R' , 'T' , 'Y' , 'U' , 'I' , 'O' , 'P' , 'MINS' , 'MUTE',
___ , 'LBRC' , 'A' , 'S' , 'D' , 'F' , 'G' , 'H' , 'J' , 'K' , 'L' , 'SCLN' , 'QUOT' , 'VOLD',
'LSFT' , 'Z' , 'X' , 'C' , 'V' , 'B' , 'N' , 'M' , 'COMM' , 'DOT' , 'SLSH' , RSFT ,
'LCTL' , 'LALT' , 'LGUI' , 'LGUI' , SPC , SPC , 'LEFT' , 'DOWN' , 'RGHT' , 'UP' ,
],
[
___ , 'GRAVE' , 'F1' , 'F2' , 'F3' , 'F4' , 'F5' , 'F6' , 'F7' , 'F8' , 'F9' , 'F10' , 'EQL' , 'DEL',
___ , 'TILD' , ___ , 'UP' , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___,
___ , 'RBRC' , 'LEFT' , 'DOWN' , 'RIGHT' , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___,
___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , 'LBRC' , 'RBRC' , 'BSLS' , ___ ,
___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ , ___ ,
],
]
if __name__ == '__main__':
keyboard.go()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment