If you want to build small keyboards with commodity parts, the biggest limiting factor are the physical keys, specifically key caps and switches. You simply can’t make it smaller, tenkeyless keyboards or a Kinesis Advantage are about as “optimal” as possible while exposing all commonly used keys. There’s another, well known workaround: layers.
A layer simply maps a different set of symbols to the same keys. So you can re-use physical keys, which get around this limitation. Layers can be activated in different ways; the most common one is holding down another key. As a mental model, it’s useful to think of
Shift as a layer 1. Press it, and you get a different set of symbols (e.g.
Shift + a produces
A, or more complex,
Shift + 4 produces
$). So you’re already using layers every day.
Why not use another layer? We’ve already talked about the benefits of being able to re-use keys. The downsides are re-training your brain, not having matching legends on the key caps, and needing to allocate another key for a layer switch. I think the trade-off is worth it, but be aware.
Let’s say you introduce another key, analogue to
Shift. Often, this is called
Fn. Now you can do away with more keys. It’s common to do away with the function keys, and for example, map
Fn + 1. You can also make combinations that might be difficult to type easier. Layers are pretty much required for 65% keyboards to work, and QMK has excellent layer support, for several layers.
I think this is less interesting for “traditional” keyboards, but more interesting for split keyboards. This is because you can put modifiers on the thumb cluster.
For example, for an keyboard similar to an ErgoDox/Kinesis Advantage, I’m going to try this keymap:
Full disclosure, this keymap is still theoretical. It’s based on my experience with a 65% keyboard. I’ll update this post in future when I know more.
You might notice that this keymap removes the need for the top row, and the outer/pinky columns - the hardest to reach keys. If this works, it will be the basis of a smaller keyboard with less stretching.
I hope this is a good intro to layers, keymaps, and how to come up with keymaps that make your life easier if you have small hands or are just lazy.
Because of the way key codes work, this turns out to be wrong on that level. Luckily, you don’t have to think about this, as QMK will largely handle it e.g. if you assign a shifted key in the keymap, QMK will translate and send this as original key + shift. ↩