
Guilty pad gay
askiiart/guilty-pad-gay
a macropad thingy that can magnetically attach to a keyboard and interface with it over serial

One-off wireless split keyboard: 2 knobs, OLED, trackpad, per-key RGB, ZMK
Keygen is an open-source printed circuit board by milindmadhukar, from the milindmadhukar/keygen repository on GitHub. It is a 2-layer board of 362.9 × 126 mm with 240 parts on 188 nets, routed with 3,760 tracks and 786 vias.
It is built around the SK6812MINI-E, AO3401A and AO3400A. Its parts include 134 diodes, 70 switches, 6 resistors, 6 transistors and 4 capacitors. It belongs with the keyboards and input and lEDs and displays boards and the nRF52 and nRF5x boards of this library.
A wireless split ergonomic keyboard with a custom two-layer PCB designed in KiCad 10.

Keygen is a one-off build: 66 keys over two column-staggered halves, a 2 × 2 thumb cluster, a rotary encoder and a 0.96-inch OLED on each half, and per-key RGB lighting. Each half has its own nRF52840 controller hidden on the PCB underside, and an optional printed wedge tents it 13°. The keyboard reaches the host over Bluetooth or USB-C, and the halves talk to each other over Bluetooth.
The schematic, placement and most of the routing are generated by the Python scripts in
tools/, and so are the switch plate and the 3D-printed case.
tools/regen.py keeps every generated file current with its sources. The name and the
silkscreen artwork come from Martin Garrix's track Keygen (STMPD RCRDS); see
Silkscreen artwork.
tools/check_mechanical.py checks the plate, case and component
clearances, including the battery stack at full gasket travel.
To build one, follow INSTRUCTIONS.md.
| Layout | Column-staggered QWERTY, six columns per hand plus an extra bottom row |
| Keys | 66 (33 per half): 52 × 1u, 14 × 1.25u |
| Thumb cluster | 2 × 2 block rotated 30° (two 1u over two 1.25u) plus one 1.25u key per hand |
| Encoders | HongYan EC11H with a 20 mm D shaft on each half, fixed to the top frame and plugged into a pin header on the PCB, with a 17 mm aluminium D-shaft knob, in the key matrix. Left: scroll wheel, press for middle click. Right: volume, press to mute |
| Displays | 0.96 in. 128 × 64 SSD1306 OLED per half (I2C), held in the top frame and plugged into the PCB, showing ZMK's status screen |
| Switches | Akko V3 Lavender Purple Pro (tactile, 5-pin) in Kailh hotswap sockets (CPG151101S11) |
| Keycaps | Blank DSA PBT, smoke translucent |
| Lighting | 33 SK6812MINI-E reverse-mount RGB backlights per half. The LEDs use a switched battery rail and ZMK's addressable RGB driver |
| Controller | nRF52840 SuperMini (nice!nano v2 clone, Pro Micro format), one per half, socketed on the underside |
| Connectivity | Host: USB-C (left half) or Bluetooth, 5 profiles. Halves: Bluetooth split |
| Power | KP-355085 LiPo pouch per half (3.5 × 50 × 85 mm, listed 3000 mAh) with a protection board, JST-PH connector, slide switch driving a P-MOSFET battery switch. Each half charges from its own USB-C |
| PCB | 2 layers, FR-4 1.6 mm, 1 oz copper, HASL, black soldermask with white silkscreen. One half is 160.2 × 126.0 mm |
| Switch plate | Clear polycarbonate 1.5 mm, CNC-routed, with eight gasket tabs per half |
| Case | 3D-printed PETG, gasket-mounted: a bottom shell and a top frame per half, 175.4 × 143.7 × 24.5 mm. The top frame covers the plate round the keycaps and the knob, and holds the OLED and the encoder. Rubber feet, and a steel disc set flush into each floor |
| Tenting | Optional 3D-printed 13° PETG wedge per half, held by four N35 10 × 3 mm magnets to the steel disc, with the feet standing in recesses in its top face |
| Foam | Poron ring switch pads (0.5 mm) on the PCB, EVA plate foam (2 mm) taped under the plate, EVA case foam (5 mm) on the case floor |
| Firmware | ZMK main (Zephyr 4.1): QWERTY base with Nav, Fn and System layers, ZMK Studio |
The lit pictures are Cycles renders of the Blender scene, which is rebuilt from the board and the case on request; the case layers and the PCB come from KiCad.
Both OLEDs booting. A closeup of both screens playing the firmware boot sequence.

Per-key lighting. The SK6812MINI-E LEDs shine up through the switches' clear tops and the smoke translucent caps. The logic audit records the current and voltage limits that still need a powered prototype test before brightness or battery life can be promised.

All round.

From above. The top frame's deck round the keycaps, the OLED window and the knob.

From the side. The back edge of each half, with its USB-C port and power switch.

Underneath. The bottom shells, with the counterbored case screws and the reset pinhole.

Tenting. Each half on its wedge, and the wedges' top faces: four recesses for the rubber feet, and four pockets for the magnets under the steel disc.


Knob and thumb cluster.
![]()
Status screen. ZMK's status screen on the left OLED: Bluetooth profile, battery and layer. The
Keygen screens, with their boot animation and lighting menu, are in
firmware/README.md.

Case layers. Bottom shell, case foam, PCB, switch pads, plate foam, gasket strips under and over the plate tabs, plate and top frame.

Bare PCB. Black soldermask with white silkscreen artwork on both sides; see Silkscreen artwork.



PCB underside, assembled. The controllers, power switches, battery connectors and reset buttons sit on the back.

Renders of the case parts, the plate and the routing are in the media release.
| Document | What it covers |
|---|---|
| Build guide | Parts list, what to order and when, what goes on which side, one section per part with close-ups, flashing, closing the case, troubleshooting |
| Hardware reference | Electronics, PCB rules, plate, case, foam and the silkscreen artwork |
| Building from source | Requirements, the schematic and PCB pipeline, the plate and case, the Blender scene, every generated file |
| Firmware | ZMK configuration: keymap, OLED screens, hardware support, building and flashing |
| Design notes | The Obsidian design notes: layout, controller, PCB, case, final design, datasheet audit |
| Encoder mount | The encoder boss, knob clearance, the plate and PCB openings, the cable and a printable test coupon |
| Build plan | Layout drawing, connectivity, parts, pin budget and checklist. Open it in a browser |
| Schematic (PDF) | A top sheet with left (refs 1xx) and right (refs 2xx) sub-sheets |
| KiCad project | Schematic and PCB, KiCad 10. Both halves are in one board file as two separate outlines |
| Build files | The PCB and plate Gerbers, case and wedge STLs and STEPs, foam cut files and plate print PDFs, as a release |
| Ordering notes | PCB order-form settings and what to check in the DFM report |
| Plate ordering notes | The DXFs for routing the switch plates from polycarbonate sheet, and the Gerbers for an FR-4 plate from a PCB fab |
| Assembly BOM | Every part's references per half, with quantities and soldering notes |
| Parts and sources | Shopping list with Indian and import sources (from bom/bom.csv) |
| Shopping checklist | What to buy, from which store, with links and prices, to tick off |
| Datasheets | Every part's datasheet, with the page each design fact comes from |
Keygen runs ZMK, one build per half on the nice!nano v2 target, with the left half as
the central. The configuration builds; it has not yet run on the boards. GitHub Actions builds the
UF2s on every push that changes firmware/. The keymap, the build and the flashing steps are in
firmware/README.md.
keygen/
├── INSTRUCTIONS.md Build guide
├── pcb/ KiCad 10 project: schematic (generated), PCB, plate, project footprints and 3D models
├── tools/ Python scripts that generate, route, check and export the design
├── fab/ Assembly BOMs and ordering notes (the Gerbers are in the build release)
├── case/ Plate ordering notes (the case, wedge, plate and foam files are in the build release)
├── bom/ Bill of materials with sources (bom.csv) and the shopping checklist
├── plan/ Build plan and parts list as HTML
├── docs/ Datasheet index (the PDFs are in the datasheets release)
├── assets/ Keymap pictures (the renders are in the media release)
├── blender/ Blender studio scene with the materials and the lit LEDs; it links the generated parts
├── notes/ Design notes, hardware reference and build pipeline (Obsidian Markdown)
├── firmware/ ZMK configuration: shield, keymap, builds
└── lib/ Git submodules: marbastlib and Keebio-Parts footprint libraries, KeyV2 keycapspcb/lib/keygen.3dshapes/NOTICE.md.datasheets release belong to their manufacturers.| Qty | Value | Footprint | References |
|---|---|---|---|
| 68 | 1N4148 | Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal | D101, D102, D103, D104, D105, D106, D107, D108, D109, D110, D111, D112, D113, D114, D115, D116 +52 |
| 66 | SK6812MINI-E | LED_SMD:LED_SK6812MINI-E_3.2x2.8mm_P1.5mm_ReverseMount | LED101, LED102, LED103, LED104, LED105, LED106, LED107, LED108, LED109, LED110, LED111, LED112, LED113, LED114, LED115, LED116 +50 |
| 10 | M2 | MountingHole:MountingHole_2.2mm_M2 | H101, H102, H103, H104, H105, H201, H202, H203, H204, H205 |
| 4 | 100k | Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder | R102, R103, R202, R203 |
| 4 | AO3401A | Package_TO_SOT_SMD:SOT-23 | Q101, Q102, Q201, Q202 |
| 2 | 100nF | Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder | C102, C202 |
| 2 | 10uF | Capacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolder | C101, C201 |
| 2 | 1M | Resistor_SMD:R_1206_3216Metric_Pad1.30x1.75mm_HandSolder | R101, R201 |
| 2 | AO3400A | Package_TO_SOT_SMD:SOT-23 | Q103, Q203 |
| 2 | Alt | keygen:SW_MX_HS_CPG151101S11_1u | SW120, SW220 |
| 2 | Ctrl | keygen:SW_MX_HS_CPG151101S11_1u | SW127, SW227 |
| 2 | EC11 | keygen:EC11_Case_Mount | ENC101, ENC201 |
| 2 | Encoder lead, 1x5 right angle | Connector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_Horizontal | J102, J202 |
| 2 | LiPo 3.7V 3000mAh | Connector_JST:JST_PH_S2B-PH-K_1x02_P2.00mm_Horizontal | BT101, BT201 |
| 2 | OLED 0.96in I2C | Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical | J101, J201 |
| 2 | Reset | Button_Switch_THT:SW_PUSH_6mm_H5mm | SW191, SW291 |
| 2 | SK12D07VG5 power | keygen:SW_SK12D07VG5 | SW190, SW290 |
| 2 | Shift | keygen:SW_MX_HS_CPG151101S11_1.25u | SW121, SW221 |
| 2 | nRF52840 Pro Micro | keygen:nice_nano_H_USBup | U101, U201 |
| 1 | ' | keygen:SW_MX_HS_CPG151101S11_1.25u | SW214 |
| 1 | , | keygen:SW_MX_HS_CPG151101S11_1u | SW224 |
| 1 | - | keygen:SW_MX_HS_CPG151101S11_1.25u | SW201 |
| 1 | . | keygen:SW_MX_HS_CPG151101S11_1u | SW223 |
| 1 | / | keygen:SW_MX_HS_CPG151101S11_1u | SW222 |
| 1 | 0 | keygen:SW_MX_HS_CPG151101S11_1u | SW202 |
| 1 | 1 | keygen:SW_MX_HS_CPG151101S11_1u | SW102 |
| 1 | 2 | keygen:SW_MX_HS_CPG151101S11_1u | SW103 |
| 1 | 3 | keygen:SW_MX_HS_CPG151101S11_1u | SW104 |
| 1 | 4 | keygen:SW_MX_HS_CPG151101S11_1u | SW105 |
| 1 | 5 | keygen:SW_MX_HS_CPG151101S11_1u | SW106 |
| 1 | 6 | keygen:SW_MX_HS_CPG151101S11_1u | SW206 |
| 1 | 7 | keygen:SW_MX_HS_CPG151101S11_1u | SW205 |
| 1 | 8 | keygen:SW_MX_HS_CPG151101S11_1u | SW204 |
| 1 | 9 | keygen:SW_MX_HS_CPG151101S11_1u | SW203 |
| 1 | ; | keygen:SW_MX_HS_CPG151101S11_1u | SW215 |
| 1 | = | keygen:SW_MX_HS_CPG151101S11_1.25u | SW101 |
| 1 | A | keygen:SW_MX_HS_CPG151101S11_1u | SW115 |
| 1 | B | keygen:SW_MX_HS_CPG151101S11_1u | SW126 |
| 1 | Bksp | keygen:SW_MX_HS_CPG151101S11_1.25u | SW133 |
| 1 | C | keygen:SW_MX_HS_CPG151101S11_1u | SW124 |
| 1 | Caps | keygen:SW_MX_HS_CPG151101S11_1u | SW129 |
| 1 | D | keygen:SW_MX_HS_CPG151101S11_1u | SW117 |
| 1 | Del | keygen:SW_MX_HS_CPG151101S11_1.25u | SW134 |
| 1 | Down | keygen:SW_MX_HS_CPG151101S11_1u | SW230 |
| 1 | E | keygen:SW_MX_HS_CPG151101S11_1u | SW111 |
| 1 | Enter | keygen:SW_MX_HS_CPG151101S11_1.25u | SW234 |
| 1 | Esc | keygen:SW_MX_HS_CPG151101S11_1.25u | SW114 |
| 1 | F | keygen:SW_MX_HS_CPG151101S11_1u | SW118 |
| 1 | Fn | keygen:SW_MX_HS_CPG151101S11_1.25u | SW232 |
| 1 | G | keygen:SW_MX_HS_CPG151101S11_1u | SW119 |
| 1 | H | keygen:SW_MX_HS_CPG151101S11_1u | SW219 |
| 1 | I | keygen:SW_MX_HS_CPG151101S11_1u | SW211 |
| 1 | J | keygen:SW_MX_HS_CPG151101S11_1u | SW218 |
| 1 | K | keygen:SW_MX_HS_CPG151101S11_1u | SW217 |
| 1 | L | keygen:SW_MX_HS_CPG151101S11_1u | SW216 |
| 1 | Left | keygen:SW_MX_HS_CPG151101S11_1u | SW130 |
| 1 | M | keygen:SW_MX_HS_CPG151101S11_1u | SW225 |
| 1 | N | keygen:SW_MX_HS_CPG151101S11_1u | SW226 |
| 1 | O | keygen:SW_MX_HS_CPG151101S11_1u | SW210 |
| 1 | P | keygen:SW_MX_HS_CPG151101S11_1u | SW209 |
| 1 | Q | keygen:SW_MX_HS_CPG151101S11_1u | SW109 |
| 1 | R | keygen:SW_MX_HS_CPG151101S11_1u | SW112 |
| 1 | Right | keygen:SW_MX_HS_CPG151101S11_1u | SW131 |
| 1 | S | keygen:SW_MX_HS_CPG151101S11_1u | SW116 |
| 1 | Space | keygen:SW_MX_HS_CPG151101S11_1.25u | SW233 |
| 1 | Super | keygen:SW_MX_HS_CPG151101S11_1.25u | SW132 |
| 1 | T | keygen:SW_MX_HS_CPG151101S11_1u | SW113 |
| 1 | Tab | keygen:SW_MX_HS_CPG151101S11_1.25u | SW108 |
| 1 | U | keygen:SW_MX_HS_CPG151101S11_1u | SW212 |
| 1 | Up | keygen:SW_MX_HS_CPG151101S11_1u | SW231 |
| 1 | V | keygen:SW_MX_HS_CPG151101S11_1u | SW125 |
| 1 | W | keygen:SW_MX_HS_CPG151101S11_1u | SW110 |
| 1 | X | keygen:SW_MX_HS_CPG151101S11_1u | SW123 |
| 1 | Y | keygen:SW_MX_HS_CPG151101S11_1u | SW213 |
| 1 | Z | keygen:SW_MX_HS_CPG151101S11_1u | SW122 |
| 1 | [ | keygen:SW_MX_HS_CPG151101S11_1u | SW229 |
| 1 | \ | keygen:SW_MX_HS_CPG151101S11_1.25u | SW208 |
| 1 | ] | keygen:SW_MX_HS_CPG151101S11_1u | SW228 |
| 1 | ` | keygen:SW_MX_HS_CPG151101S11_1u | SW128 |

askiiart/guilty-pad-gay
a macropad thingy that can magnetically attach to a keyboard and interface with it over serial

h3ll5ur7er/TokenBoard
You wouldn't vibe code a keyboard.. or would you? uses konnect to interact with KiCad and CADence to model the case

mcskny/wireless-he-macropad
A wireless, 12-key Hall-effect macropad built around a custom PCB, an ESP32-C6 sender, an ESP32-S3 USB receiver, and a native macOS companion app.

KarlK90/yaemk-split-kb
5x8 Split keyboard with thumb-clusters, rotary encoders and oleds.

andreapiccini/spaghettilab-community
SpaghettiLab is an open modular hardware and software ecosystem for rapid prototyping, embedded systems development, and product innovation.



It measures 362.9 × 126 mm and has 2 copper layers, 1.6 mm thick.
240 parts, built around the SK6812MINI-E, AO3401A and AO3400A. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
From the milindmadhukar/keygen repository on GitHub, at the commit this page was made from: the board is pcb/keygen.kicad_pcb and its schematic pcb/keygen.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask milindmadhukar before reusing the design.