Skip to content

Comprehensive Corne split keyboard guide + QMK keymap (optimised for coding and typing)

License

Notifications You must be signed in to change notification settings

Elil50/crkbd_QMK

Repository files navigation

Elil50 Corne keyboard QMK firmware

This project is subdivided as it follows:

  1. An explanation of my custom firmware, written for the 6 columns Corne keyboard (a 42 keys ortholinear split keyboard), based on QMK framework.
  2. My hardware customization: from printable files for the case and the chair mount in picture, to key switches and keycaps, and even mounting tips for the trackpoint (optional).
  3. My desktop enviroment shortcuts (optional).

Tip

Overall my custom firmware is an easy and fast layout you can start using without gradually approaching ergonomic mechanical keyboards. You can jump directly from your big rectangular keyboard.

The easy firmware steps are:

  1. Follow QMK documentation for setting up your enviroment before flashing it to your keyboard. Note that Corne keyboards are called crkbd in the QMK framework.
  2. Download this repository, excluding the qmk_firmware submodule.
  3. Execute the file ./flash.sh I prepared for you.

If version clashes arise, you just need to download the qmk_firmware submodule and replace your qmk folder with it.

Just a keyboard for show?

I coded, but my hands always felt lost on big keyboards: I couldn't learn touch typing and my eyes hurt each time I took a quick glance at the keyboard.
I coded, but my desk is comically high and I had the habit of pressing my wrists against its edges: my knuckles literally bled for months due to circulation issues. I tried using a comically high chair, but then it was my knees' turn to ache. I bought a footrest, but it didn't change anything.

That's when I went down the ergonomic keyboard rabbit hole and discovered split keyboards. I needed:

  • To mount it to my chair to stop worrying about the desk height.
  • Just the right amount of keys: too few and it would reduce the typing speed, too many and I would lose my hands on it.
  • A split design to easily sit and stand, without moving a big rectangular slab over my legs.
  • A firmware framework to customize the keyboard layout to my heart's content.
  • A built-in pointing device to replace a standalone mouse.
  • Something portable.
  • Something easy to learn and use.

This is the solution I found and I'm learning touch typing for the first time in my life.

1️⃣ Keyboard firmware

When it comes to firmware, there are mainly 2 options: QMK(for wired keyboards) and ZMK(for wireless keyboards). My old laptop has a fried wireless module, so I chose the adaptability of wired over the comfort of wireless.

This was written for Corne V3. If you use a Corne V4 just add the 4 additional keys at the end of ./Elil_50/keymap.c.

I mount a pretty recent qmk version (end of 2025), but versions means nothing if it works. Updates introduce changes that either:

  • solve someone else's issues.
  • solve your issues.
  • create new issues in someone else's code.
  • create new issues in your code.

I have no issues to be solved here, so I don't need to gamble on the chance of having code breaking changes.

QMK layers

QMK is an acronym for Quantum Mechanical Keyboard, but rest assured: it has nothing to do with the quantum world.

It is based on the idea that you have less physical keys than the ones you actually use. This already happens on normal keyboards, where you can switch from lower-case letters like a to upper-case ones like A by clicking the caps lock button, and where you can use the modifiers keys shift, alt, ctrl and fn with regular keys, to enable other features. This is nothing new either: just think of old nokia phones with only 12 physical keys.

In addition to regular modifiers, QMK features new ones called layer switching keys, which change the virtual keys assigned to the physical ones. We can easily represent the keyboard layout with actual layers. Some of them can be applied like a mask and change few keys only, like the automatic mouse layer and the scroll layer described below. This is the most classical behaviour you can expect.

Keyboard layout

This layout was optimized in 1 year, for coding and typing purposes. It works only if you set the OS language input to English(US). The experience is greatly improved by simple and intuitive combos with the layer switching keys (see Override and Combos section).

Layouts like QWERTY, DVORAK, COLEMAK are designed around most used letters in common english sentences in order to reduce finger movement and strain. This is useless when coding and nonsense when typing in multiple languages. In addition, this keyboard is literally designed around your hand, so finger stress is drastically reduced.

Thus, I chose QWERTY to reduce the learning curve and improve compatibility with other devices.
For the same reasons, I avoided strange key combinations - like D+F=TAB - which may help you reduce the number of keys at the cost of increasing the keyboard complexity. To type fast, you need a good mechanical memory. To achieve that memory, you need to spend a lot of time. We can reduce that time by making simple and effective layouts you can easily view in your mind. I found that this keyboard has nearly the minimum number of keys to type fast without resorting to weird tricks.

Indeed, the alphabetical layer - later called layer 0 - cannot be reduced anymore without using such combinations. On the other hand, the numerical one has so much space I filled it with unicode, which I sometimes use when chatting with people.

Tip

For a more detailed explanation and for alternative layouts, read the Layouts in detail section written below.

In the following, I use the key GUI to refer to all the other aliases like meta, command, windows, super.

Note

Activating layer 0 with the right hand and layer 1 with the left may seem counterintuitive if you think of numbers left to right. In practice, the ergonomics outweigh the mental friction — especially once you realize it’s just a naming issue. Think of it this way: the right hand triggers the alphabetic layer, the left hand the numeric layer. Problem solved.

  • Disabling Trackpoint and Unicode

The trackpoint can be disabled by turning false the flag MY_TRACKPOINT_ENABLE in ./Elil_50/rules.mk.
This option will not affect any other functionality.

Unicode symbols can be disabled by turning false the flag MY_UNICODE_ENABLE in ./Elil_50/rules.mk.
This option will not affect any other functionality.

Unicode support depends on both OS and software used: most recent Linux and Mac OS do support it by default, but you need to install Wincompose for Windows (another reason to avoid it). I use gedit as text editor: I switched from Kate because it doesn't recognise unicode really well.
The keymap I wrote does an automatic OS detection to use the right unicode input method.

  • Automatic Mouse Layer

Enabled if MY_TRACKPOINT_ENABLE in ./Elil_50/rules.mk is enabled. Highlighted in blue in the keyboard layout.

Whenever you move the trackpoint and for 500ms after, this layer is activated. You can change this time by changing the number of AUTO_MOUSE_TIME at line 28 of ./Elil_50/config.h.
The layer switching key △ or ▢ deactivates it, even before AUTO_MOUSE_TIME.

  • Scroll Layer

If you double click the key Ctrl you activate the scroll layer, highlighted in red in the keyboard layout. It replaces arrows with scroll movements, adds the key AC - which can be found by default in layer 1 - and mouse keys - some of which can be found in the automatic mouse layer.
If you double click the key Ctrl again or single click the layer switching key △ or ▢, the layer is deactivated.

If you toggle the key AC you change the scroll speed between fast and slow. You can change them by changing the numbers of the two MK_W_OFFSET in ./Elil_50/config.h.

  • Overrides and combos

Let us consider a key click: first you press it, then you release it. If enough time has passed between the press and the release, the firmware will recognise you held it down.

Override is the QMK term which refers to the usual action of holding down a modifier key like alt or shift and then clicking a key to get a new output.

Combo is the QMK term which refers to the action of just clicking two keys together (i.e. at the same time) to get a new output.

I like to match combo and override outputs to increase my typing speed. Thus, in addition to holding down shift and then pressing a to get a capital A, you can just click them together. By the way, if you double click shift you toggle caps lock.

I found out that if you hold down the layer switching key △ to temporarily activate layer 1, you need to wait too much time before you can press a combo: if you don't wait enough, the firmware will recognise your combo as if you are still on layer 0. To overcome this issue - which received no answer from QMK developers - I just defined additional combos which involve the layer switching keys △ and ▢. They work so well, I'm glad they didn't know how to solve this issue:

  • If you make a make a combo with △ and another key (or another combo), the firmware will understand you want that key (or that combo) from layer 1. This action will not modify your current active layer.
    If you make it with ▢, it's the same as before, but from layer 0.

Note

I assigned new click behaviours to the modifiers ctrl, shift and alt - only meant to be coupled to other keys with overrides and combos - to give a purpose to the action of just clicking their physical key. I chose intuitive click behaviours, to avoid increasing the keymap complexity. For two clicks to be recognised as a double click, they need to be at most 175ms apart.

Both overrides and combos are written in .\Elil_50\keymap.c, just follow the comments. You can change them as you like.

  • Layouts in detail

What COLEMAK does is understanding that the most used letters in English sentences are A, E, I, N, O, R, S, T and the most used combinations are Ctrl+C and Ctrl+V. You can see from the heatmap that those 8 letters are placed on the home row.

When you use other dictionaries, for example french, you ideally need to change your layout as well: that's why AZERTY is the most common layout in France.
What I ask you to think is: what is the dictionary you use when coding? I find myself using arrows, enter, space, delete and tab a lot. Both COLEMAK and DVORAK forbid me to place the arrows in an easily accessible place, that's why I chose to stick to a QWERTY-like layout. For the layout enjoyers out there: I created a new one called ELILAK - inspired by COLEMAK - which takes into consideration all these factors for an english programmer.

If you are unsure whether trying different layouts, let me offer you some wise words like other people did with me: the secret of layout switching is to use different layouts on physically different keyboards. I doubt anyone commonly uses a Corne keyboard, so this is your playground.

Important

Out of the box you can choose between the QWERTY-like layout depicted above, and the following two:

RGB Light

keyboard_animation.mp4

I tried reducing the chromatic aberration, but my phone constrains me. Try it with your very eyes. At the end of the video I show the how keys react when pressed.

Initially I was reluctant, but then I understood that LED consumption is completely neglectable, and that even complex animations don't decrease the performance of keyboard microcontrollers. That's why I made an overly complex one by modifying and merging digital_rain, typing_heatmap and some crazyness. I called it starry_night, taking inspiration from the ideas and color palette of that famous Van Gogh painting.

The three RGB related keys are RGB on/off, which turns the RGB feature on and off, RGB brightness +/-, which adjusts the overall brightness with 5 different levels, Clear EEPROM, which clears the RGB cache and could be useful when trying a lot of different animations.

Starry_night parameters are defined as macros in ./Elil_50/rgb_matrix_user.inc. You can redefine them in ./Elil_50/config.h, or tweak the default values directly in that file.

User files and changes to qmk_firmware

The main selling point of flashable keyboards is the layout customization, so get comfy with writing in the last part of ./Elil_50/keymap.c (which contains the layout implementation) and flashing it: it's really easy.

Instead of remapping softwares and videogames, new layers can be added and linked to layer 2, which is activated by clicking △ and ▢ together. If you want to return to layer 0 or 1 you just need to click ▢ or △ respectively.

I've left undefined XXXXXXX buttons in layer 2 which can be replaced with anything you want, especially with the toggle layer key TG(n) where n is the number of your additional layer.

This layout already has two gaming layer examples: you can understand the logic just by reading their implementation.

  • Executables

qmk_file_inject.sh: injects user files and changes (described below) in qmk_firmware. If you download my submodule qmk_firmware, they are already there.

flash_qwerty.sh: executes qmk_file_inject.sh and qmk flash in the user keyboard folder.

flash_azerty.sh: executes qmk_file_inject.sh, applies the AZERTY layout patch, and qmk flash in the user keyboard folder.

flash_elilak.sh: executes qmk_file_inject.sh, applies the ELILAK layout patch, and qmk flash in the user keyboard folder.

commit_all.sh: commits all changes on your github, both of qmk_firmware submodule and crkbd_QMK module.

Follow QMK documentation for setting up your enviroment before flashing it to your keyboard. Note that Corne keyboards are called crkbd in the QMK framework.

Tip

All the following actions are automatically performed by running ./qmk_file_inject.sh.

Before running a program, remember to change its execution permissions. For example, on Linux you run chmod +x program_name.sh.

  • Keymap.c, rules.mk, config.h, animation file

Add the folder ./Elil_50 in ./qmk_firmware/keyboards/crkbd/keymaps.

  • PS/2 Driver Trackpoint (optional)

The host needs pull-up resistors on PS/2 DATA and CLK lines. The built-in pullup resistors from the host 4k to 100k are acceptable.
In conclusion, you need to add those pull-up resistors (I didn't), or apply the patch written in ./PS2_patches/ps2_vendor.diff.

The PS/2 section of QMK is quite a mess. The best route is to integrate it with the existing pointing device framework. To do that I patched this old pull request into ./PS2_patches/ps2_pointing_device.diff. Note that now you can use pointing device functions.



2️⃣ Keyboard Hardware

The main components are:

  • 2 PCB: Helidox Corne V3/V4, 6 columns
  • 2 Microcontrollers: Elite-Pi
  • 2 FR4 plate and 2 FR4 bottom: they sandwich the PCB, so you never touch it directly
  • 1 TRRS cable: connects the two halves
  • 1 USB cable: connect the master side to the PC
  • 42/46 key switches and keycaps
  • 2 Cases (optional): they wrap the FR4 sandwich
  • 1 Trackpoint (optional): SK8707-01-002(3.3V) Integrated

In order of price you can:

  1. Order a fully soldered Corne keyboard from a seller.
  2. Order a DIY kit you need to solder yourself from a seller.
  3. Buy and/or print unassembled pieces from Aliexpress or other big tech stores, 3D printing services, PCB printing services like JLCPCB. This option requires a clear understanding of what you need, because you won't pay other people to do it for you. Shipping costs are usually cheaper.
  4. Buy a fully soldered Aliexpress Corne and (probably) succumb to VIAL graphical configurator. If you buy a keyboard without a reset key, the only way you can flash this repository is by adding a QK_BOOT key by VIAL to your keyboard, and to my keymap as well. I never tried it. Usually you cannot easily desolder and replace the microcontrollers: they tend to solder the MCU chip directly onto the PCB, not on a daughterboard.

You can always consult free online guides and even what sellers would offer, in order to pick all the required pieces.
I spent 150+€ for a DIY kit from UK, while a person I met spent just 30€ by buying/printing all the pieces himself, without middlemen. I omit key switches and keycaps in the pricing because they are always sold by other specialised sellers (which often have an aliexpress store too).

Tip

You want hotswappable key switches. This way you solder on the PCB a little guy, which lets you plug and unplug the key switch, instead of soldering the key switch itself.

In my personal opinion the OLED of Corne V3 is useless: the keymap I wrote doesn't need a display to remind you which layers is active, and I want to focus my eyes on my screen, not my hands. Corne V4 replaced it with 2 additional keys, but you need to stretch your hand a little to reach them. In conclusion, I didn't mount it and covered the microcontroller with a black acrylic. You can always mount it for aesthetic purposes.

External shell (optional)

I 3D printed this case and designed for portability purposes the light grey interlocking "case wall" depicted above. Note that you don't need to unplug the TRRS cable from the keyboard (the less mechanical stress, the longer the life span). You can find its file in ./stl_files/eiga-wall-Elil50.stl.

These files were made for Corne V3, which is not compatible with Corne V4. You can still port the ideas.

Chair mount and other ideas (optional)

The community is wild when trying to find the ergonomic sweet spot and you could join the cool guys community too.

Split keyboards are, well... split. It's only natural to try mounting them on your legs.

After some attempts, I discovered the underneath of my leg - called semitendinous muscle - didn't like even the lightest tension. The leg mount idea was the reason for printing a keyboard case with holes. You can see a thin red rope I left attached to one of them: if necessity arises I can still tie them (I had old pictures without the trackpoint, so I'll just use them).

I even added some sponge to increase the leg grip and keyboard stability.

Some people mount them below their desk, but that would ruin my precious chair-rocking sessions. I needed a chair mount and I hated armrests: those two things are complementary, and not incompatible.

The rest of this section is useful if you can solder metal, know someone who can do it for you, or can 3D print with some tough materials. Otherwise it's just to give you a general idea.

First, you need to cut/print a slab with holes in the right place and screw it under your chair. This obviously depends on your chair.

The measures I found comfortable are the following.

You can see I used cylinders: they are helpful for changing their relative angles with ease. I soldered two of these "circles" together, to make screwable joints. Here, screwable means that if I screw hard enough - even without any hole in the metal cylinder - I lock stuff in place: it works, and you can see the little adjustments scratch away the black paint.

You need a slab under your keyboard too.

And it's done: now you just need to adjust relative distances and angles to your liking.

This setup doesn't prevent you to move around and place your keyboard wherever you want, maybe with some light to impress people. This setup is useful if you mainly write in one specific place.

Key Switches and Keycaps

The world of key switches is really big. The important keywords you need to know are: low-profile(choc), standard profile (MX), tactile, linear, clicky, silent, lubed. I built a MX compatible one for aesthetics (most artisanal keycaps are cherry (MX) ) and bought tactile silent switches. However I forgot to check if they were pre-lubed: they were not and they feel scratchy as hell. I won't complain as I'm not building this keyboard for the mechanical switch pleasure, even though I admit the linear gateron of a friend of mine feel like heaven.

Keycaps have an equally vast range of options: I'll show some in the image below. I bought DSA profile keycaps from Aliexpress and scratched the home rows with sandpaper (1 minute at most of handwork).

Trackpoint (optional)

I've placed the trackpoint on the left side of the keyboard because, as a right-handed person, I need the arrows on the right side: when coding and typing I find them far more useful than mouse movements.
I suggest to buy a standalone controller for gaming sessions with a lot of cursor movements.

In the following image you can see the back of the left side of the keyboard PCB with the pinout setup. The PCB already has a mounting hole we conveniently repurpose for the trackpoint stem.

More informations about the trackpoint can be found in the official datasheet; you can ask it to Sprintek directly.

  • Trackpoint stem

Caution

My 3D printed trackpoint stem just broke. I suggest to use metal. I tried a cheek piercer and glued it, but it didn't work well. I'll try with a square metal microtube, I will update this section when it works.

Most of the guides I've read use wrong voltages (5V) or gloss over stem mounting, for the sole exception of this detailed repo. I hope to shed some light on this topic here, once and for all.

If your PCB has big enough holes (>4mm) - I increased the diameter with a drill on mine - you can safely go down the 3D printing route described by that repository. After having a 3D printed stem broken in half, I went down the metal route. Anyway, I feel like your first attempt should be buying the SK8707-01-005(3.3V) prototypes from Sprintek: they have a little screw that can be extended with M1.6 countersunk (flathead) screws. There is no such item on their site, you just need to send them an email.

You can find a printable Corne case with an integrated trackpoint mount here. If you are unsure about your PCB (for example with a Corne V4) or you already have a case, you can manually drill and screw, or glue the trackpoint to it. For example I glued it to a metal plate that came with the DIY kit, screwed underneath the case mentioned in the previous sections. Just be sure to start by using some removable adhesive tape when placing the trackpoint. After a few attempts you find the right position: you don't want the stem to touch - or be too close to - the edges of the PCB hole. You can glue everything now.



3️⃣ Desktop Enviroment (KDE Plasma) (optional)

In KDE_Plasma folder you can find both monitor overview (which stores the widget positions) and keyboard shortcuts files. This is totally optional and it's more related to my typing experience than the keyboard. The two files are independent of each other.

  • Replace ./KDE_Plasma/overview.page in .local/share/plasma-systemmonitor/overview.page.

  • Replace ./KDE_Plasma/kglobalshortcutsrc in .config/kglobalshortcutsrc.

The customized OS Shortcuts are the following:

  • Hold GUI + arrows = Switch Windows

  • Hold GUI + click F/D = Toggle Windows Grid (In addition to F and D, once pressed this combo you can even use arrows to navigate between the different windows inside the grid)

  • Hold GUI + Shift + arrows = Switch Desktop

  • GUI + N = Open Text Editor (Gedit)

  • GUI + R = Open Terminal (Konsol)



🌟 Thanks

I thank the whole open source ergonomic mechanical keyboard community for the projects they pushed out in the world and QMK developers for their support over their discord server. A special thanks to my friend Luca which helped me mounting and soldering the trackpoint, and gave me valuable github insight.

About

Comprehensive Corne split keyboard guide + QMK keymap (optimised for coding and typing)

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published