My 38-Key Layout (ZSA Voyager)
I’ve never loved the feel of mechanical keyboards, but my wrists decided it was time for me to give up my beloved Apple Magic Keyboard. Years ago, Frank at Materialize almost talked me into a Ferris Sweep with nice!nanos, but I went down a rabbit-hole of which choc color would feel most like a scissor-switch and never emerged. Then recently, I saw the ZSA Voyager, which was almost perfect1, and impulse bought it2. It arrived last Friday and I figured out my key layout over the weekend. Still taking recs for switches, but currently eyeing either the sunsets or the upcoming silent version of same.
I did all this for the better wrist position of a split keyboard, but I also got excited about putting programming symbols in a better place. Some people are delighted to incrementally tweak a layout forever, but I knew I wanted to get an initial one basically right, and then live with it. Through this process, I discovered some broad preferences:
- No home row mods: anything with this much configuration is not for me.
- No key duplication: minimizing choices is key for staying in my flow state.
- Minimal number of layers: ditto flow state.
- Minimal divergence from qwerty: still use the laptop keyboard sometimes.
As a result of the last, I quickly settled on a primary layer of basically stock qwerty plus a symbol layer. In the weekend I allotted for this project, the most compelling symbol layer inspirations I found were:
- Miryoku: If the Voyager had 6 keys in the thumb cluster, I might have used this basically verbatim.
- BEAKL: I’ve got weird pinkies that are weaker than normal.
- This post on symbol layers
After some initial false starts, I hit on what turned out to be the key insight for where I ended up. The way the shift key works on any keyboard is basically a layer, but one baked into the protocol. I could add one more key that acts like shift, except switching into the symbol layer and be done.
A bit of quick counting helped narrow down my possibility space. Here’s everything that I wanted to find a home for:
- 26 letters (plus shifted capitals)
- 32 symbols
[]{}()<>\/
,.;:?!'"`~
@#$%^&*-+=
_|
- 10 numbers
- 4 arrow keys
- 4 mods: shift, cmd, ctrl, option
- 6 thumb cluster: esc, space, tab, enter, backspace, del
First I had to do something about two of the thumb cluster keys. Basically every 4 thumb key layout agrees on kicking out esc and del, leaving space, tab, enter, backspace as the thumb cluster. I have muscle memory for ctrl-d, so I don’t even need to find a home for the latter, but esc will have to go somewhere.
As mentioned above, I didn’t want to deal with home row mods, but having them as holds on the thumb cluster seemed great. There’s 4 and 4 but I really wanted my symbol layer shift-like to be there, so now we also have to find a home for option.
There are 30 keys I deemed “most easily reachable” for everything else. Was that enough? Unmodified, shifted, and symbol-layer gets me 3 things per key. 26*2 + 32 + 10 + 4 + option + esc = 100
, nope! I had to find 4 more keys to get above 100 (to 102). Sad, but add in some pinky-reach wings on the side and move on, I suppose.
My qwerty goal made 30 of the 34 on the primary layer easy. There’s a block of 3 by 10 that I kept unchanged.
3 symbols per key depends on shift being meaningful, so the last 4 all had to be things that changed when shifted. This meant I had 7 to choose from: []\'`-=
. '-=
are super common and were easy picks, []
wanted to be on the symbol layer, and \`
didn’t seem worth the prime placement. Then I realized I could tap+hold esc+option as the last, perfect!
With the primary layer done, I moved on to the symbol layer. The inputs I used were roughly:
- Arrow keys on the right (primary) hand
- Everything arranged with my estimated frequency (Rust+Slack) corresponding to my estimated reach effort (pinkies are the worst, up is easier than down)
- Numpad-ish shape: I wanted these to be easier to reach than the ones up top on the primary layer. Numbers aren’t super common for me, so I pushed it all the way to the side. I don’t have numpad muscle memory, so I ended up with an atypical shape that puts smaller (more common) numbers on the top row where they’re easier to reach.
!
on the home row- All the paired brackets: no inward rolls, no pairs on the same finger, no
][
on the right hand nonsense to get an outward roll (which would drive me crazy) - I used my 102-100=2 extra keys to duplicate
<>
on the symbol layer so the paired brackets are all here. It’s a small violation of one of my rules up top, but incredibly satisfying.
I threw everything that was going in the symbol layer in Oryx and enlisted my (extremely patient) wife to help with the swaps over coffee one morning. The galaxy-brain double-inverted numpad as well as the all-pointer paired brackets are her contributions. After a lot of thinking about how often I type each symbol and also a lot of miming finger reaches, I ended up sorting the rest into the symbol layer v0 you see here.
I still might permute the thumb cluster3, but it’s survived a week of work, and felt great!
Edit: I’ve discovered that I sometimes need to cmd-click or shift-click, so I need them on the left hand. I considered shuffling the thumb cluster, but ended up deciding to put them as left-hand home row holds on the symbol layer, which is my second bit of duplication.
-
I’ve read their post about wireless, but I have to respectfully disagree! Literally not one of the issues mentioned have been an issue in the 6+ years I’ve used my previous keyboard, and there are real drawbacks to wires that are not marketing hype. <3 ↩
-
Which, every interaction I’ve had with ZSA has been so lovely! The website, Oryx key configurator, packaging, and the keyboard itself all feel thoughtfully designed but unfussy. The (optional) post-purchase survey they sent had insightful questions in a way these sort of things never do. I got a personalized email in response to my survey answers. And I can’t even begin to guess where the idea for Keyboard Yoga, came from, but it’s clearly the sort of thing that only comes out of a small company of enthusiastic people. ↩
-
Apparently I have residual muscle memory from the Kinesis I used for a year about a decade ago, which is wild. I started with the Voyager default ordering, but looks like that has backspace and enter swapped from what I’m expecting. I think the Voyager layout is more logical, so might go with it and try to retrain myself. In the meantime, every time I mis-type a slack message that I’m composing, I try to backspace and immediately send it. 😂 ↩