Colemak-Steno Hybrid in QMK

by Noah Frederick |
Photograph of a Planck keyboard with steel plate, green milled bottom, and black and white XDA-profile key caps
Planck keyboard with steel plate, milled aluminum bottom, and modded XDA-profile key caps

QMK Firmware

The Planck (pictured above) is a 40% mechanical keyboard with an ortholinear layout (the keys are arranged in columns rather than being staggered as on a traditional typewriter keyboard). The keys are laid out in a 4 × 12 grid. You can find out more about the rationale and the physical properties of the board on the OLKB website and this early writeup on my layout.

The board’s microcontroller is programmed through the free/libre QMK firmware, which allows for a great deal of flexibility in implementing keyboard layouts. QMK has some interesting features including the relatively new Combo feature:

The Combo feature is a chording type solution for adding custom actions. It lets you hit multiple keys at once and produce a different effect. For instance, hitting A and S within the tapping term would hit ESC instead, or have it perform even more complex tasks.

To enable this feature, [you] need to add COMBO_ENABLE = yes to your rules.mk.

Having dabbled a bit in stenography via Plover, this feature immediately caught my attention. Could one develop a hybrid input method that was typing-centric but allowed for common words to be stroked as if on a steno keyboard?

Stenographic Combos

B+C T+I L+D M+K Y+U F A S T ! because this would make you fast!

I started out with a list of common words in English and chose chords (strokes) that felt most intuitive to me. I also took some cues from Plover steno theory, but it was impossible to imitate steno very closely because of the nature of keyboard layouts such as QWERTY, which were not designed with this sort of thing in mind. In my implementation each combo triggers SEND_STRING in order to output a word (or word affix) followed by a space:

Combo Translation
A+B about
A+N and
A+T @
B+C because
E+G e.g.,
H+V have
I+E i.e.,
I+O tion (suffix)
L+D would
M+K make
M+T ment (suffix)
T+H the
T+I this
T+L until
U+R you're
W+A what
W+C which
W+I with
W+L will
Y+R your
Y+U you

Note that what I came up with is specifically tailored to the Colemak layout, but one could just as easily adapt this idea to QWERTY, Dvorak, and others. This was only a first pass—I expect to revise and expand this system over time.

Challenges & Limitations

Layout — Colemak (or QWERTY etc.) was not designed with chording in mind, unlike a steno layout. That constrains the number of chords with good mnemonics somewhat, since certain potentially useful chords require two or more keys on the same finger.

CapitalizationI haven’t found a good way to output capitalized variants of words. All my combos are defined in lowercase, meaning that I can’t use any of my chords at the beginning of a sentence, for example. Update: I got around to making the macros produce alternate output when the Shift key is held. For example, the versus The and http:// versus HTTP.

OverlappingDue to a limitation of the combo feature’s current implementation, if you define a combo as a subset of another combo, chording the bigger combo triggers both combos. This precludes doing something clever like H+Vhave and H+V+Ghaving (you would wind up with have having). Update: This limitation was eliminated thanks to work done on QMK’s combo implementation.


You can find the latest version of my keymaps at https://codeberg.org/noahfrederick/qmk-keymaps, and you can find the version that was current at the time of this writing here.