Corne Custom Keyboard

Crkbd (aka. Helidox or Corne) is originally designed by @foostan. @foostan has kindly open-sourced the PCB and case design. The gerber and CAD files are available on Github. A default firmware configuration is also open-sourced on QMK.

Wait… for anyone new into this space, this is a lot of information.

What is QMK

QMK is a keyboard firmware based on the tmk_keyboard firmware with some useful features for Atmel AVR and ARM controllers. Very often people deploy QMK firmware on Ardurino Pro Micro controllers. There are many well-known custom keyboards are built on top of QMK, for example, Planck, Ergodox EZ, ClueBoard.


Just like open-source software, open-source hardware designs are also popular in the custom keyboard market. Corne is one of those custom-designed keyboards developed by the community.

Corne keyboard is a split keyboard with 3x6 column staggered keys and 3 thumb keys, based on Helix. Crkbd stands for Corne Keyboard.

Apart from its ergonomic feature, 40% (40 keys) keyboard is portable for travel and extremely customizable based on the QMK firmware features.

The Challenges

Sourcing the PCBs and casing can be a challenge from the UK. Besides, I have specific preferences on how to build this low profile keyboard with a transparent dark casing, limited budget. I had to source varies custom parts from many places, overall around 2-3 months lead time before I started the build:

Part Source Lead time
Main PCB board 4 weeks
Cut Sandwich dark case Alibaba 5 - 6 weeks
Low-profile Switch Alibaba 3 weeks
Low-profile Keycaps Alibaba 3 weeks
Flat head screws Ebay 3 - 4 days
Cheap Pro-Micro Ebay 3 - 4 days
Mill-Max Socket Digikey 1 week
Additional LEDs Alibaba 3 week

There was some poor planning on sourcing items. I didn’t know what exactly is required for putting pieces together, there was a lot of waiting and re-ordering parts. For example, the custom-cut sandwich dark-transparent casing had longer lead time because the manufacturer sent the wrong cut for the first batch.

Soldering the LED can be challenging. With the first 20 soldering, I burnt 10 LEDs. But once I found a technique, soldering 40 with 160 joints was completed in less than an hour.

Custom Keymap

There are only 42 keys available on Corne, how is this even usable? Interestingly, if we look at the standard mobile touch screen keyboard they have a limited set of keys.

Similar to the mobile keyboard layout, QMK offers many features to create layers. Even more, one single key can sometimes create multiple types of inputs via tap v.s. press down the key register.

In QMK, const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] holds multiple layers of keymap information in 16-bit data holding the action code. You can define 32 layers at most.

Keymap: 32 Layers                 Layer: action code matrix
-----------------                 ---------------------
stack of layers                   array_of_action_code[row][column]
       ____________ precedence             _______________________
      /           / | high                / ESC / F1  / F2  / F3   ....
  31 /___________// |                    /-----/-----/-----/-----
  30 /___________// |                   / TAB /  Q  /  W  /  E   ....
  29 /___________/  |                  /-----/-----/-----/-----
   :   _:_:_:_:_:__ |             :   /LCtrl/  A  /  S  /  D   ....
   :  / : : : : : / |             :  /  :     :     :     :
   2 /___________// |             2 `--------------------------
   1 /___________// |             1 `--------------------------
   0 /___________/  V low         0 `--------------------------

This is an illustration of my custom layer and its available on Github repository

Automating QMK firmware building with Github Actions

Building the firmware requires installing many dependencies to create the environment. If the desktop or laptop environment is not available, it would be nice to build a firmware .hex file as releases somehow remotely. Then, re-upload the firmware using QMK Tool in any environment would remove the need for installing unnecessary dependencies.

I created a Github Actions flow to configure the host environment, build the firmware and release it on Github releases page. This is the workflow configuration located under .github/workflows/main.yml

Screenshots of the release artifacts