My 38-Key Layout (ZSA Voyager)

voyager symbol layer.png

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:

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:

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:

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.

qwerty 3 by 10.png

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:

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.

  1. 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 

  2. 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. 

  3. 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. 😂 


Now read this

Implementing Column Families in CockroachDB

Originally published at on September 29, 2016. CockroachDB is a scalable SQL database built on top of a transactional key value store. We don’t (yet) expose the kv layer but it’s general purpose enough that we’ve... Continue →