Moonlander Keyboard Review

Gr@ve_Rose
9 min readDec 4, 2020

I recently got my Zsa Moonlander keyboard (https://www.zsa.io/moonlander/) to replace my aging Truly Ergonomic Computer Keyboard (TECK — https://trulyergonomic.com/ergonomic-keyboards/) and I wanted to write about it so that other people could read my review.

First and foremost, let me talk about the TECK. The one you can purchase for pre-order isn’t the one I have; Mine is an earlier version and it’s still a great keyboard. Unfortunately, after years of use the “5” key was starting to go and I lost my F9 cap. While I could live with the missing cap, having a “5” key which would only work intermittently wasn’t going to fly with me. But I digress. Here’s the actual photo of my TECK:

Truly Ergonomic Computer Keyboard (TECK)

As you can see, it’s an ortholinear board and there are some excellent layout changes that I really like and want to share why these, in my opinion, are so good:

  • Having the Control key where the Caps Lock key normally would be is a game changer. Seriously. If you work in any IT profession and even if you don’t purchase a new keyboard, try remapping Control to where your Caps Lock key is. Thank me later.
  • Putting the Enter key on the thumb makes for quicker typing and reduces strain on your pinky finger. This is great when you have to write large reports or are running a lot of commands or programming.
  • The Hyphen in the middle split is another great idea, especially for those of us who have hyphenated last names. :)
  • Having a Backspace key in the middle split is good but, in all honesty, I still found myself using the top-right Backspace key most of the time.
  • I also like how the TECK keys are also arranged in a way that the horizontal row flow follows finger length.
  • The TECK is programmable however I never found the need to modify the layout.

Speaking of modifying layouts, this is actually a small downfall I noticed about the TECK… Due to the ergonomics of the key caps and the rows, it may lose some of the ergonomic design if you move the key caps around.

As I mentioned, I stared looking at a replacement for my trusted TECK; The new board needed to be ergonomic, ortholinear and preferably programmable. After searching around for a while, I decided on the Moonlander from Zsa. Zsa makes other keyboards such as the ErgoDox (https://ergodox-ez.com/) and the PlanckEZ (https://ergodox-ez.com/pages/planck) which have all been well received and reviewed. The nice thing about the Moonlander is the ability to dynamically move the thumb clusters which is something the ErgoDox was missing. I ordered the black version with CherryMX Blue key switches and waited patiently.

When it finally arrived, I immediately started planning out my keys since there are no (default) function keys, as an example, which is something I use often enough that I would need them relatively quickly. To understand more of what I’m saying, take a look at the Moonlander itself:

Zsa Moonlander — First Deployment

You’ll see that there are quite a few keys on the left and right of the letter clusters which only have lines on them; They are especially prevalent on the thumb clusters. These keys (and any others) can be programmed to be whatever you want them to.

As an aside, I checked with Zsa who said that they will likely offer units with lined key caps only as well as lined key cap replacements as an aftermarket purchase so that all your keys will be the lined keys. And yes, I will order a package of key caps to replace all my named keys when they are available.

I stared with a full tent physical set up but have since moved to a flattened configuration with the thumb clusters angled upwards slightly. Obviously you should find what works best for you but make sure you play around with the configuration options to see if you may be surprised with a new physical layout.

With all that said, how is my layout configured? Before we get into that, it’s important to know that the Moonlander runs firmware called QMK (https://qmk.fm/) and one fantastic feature is the ability to use Layers to give you more function. For instance, you can have your base layer which is a regular keyboard then, by pressing a specific key, you can be taken to a layer whose sole purpose is keyboard shortcuts for the GIMP. Then have another layer just for video editing shortcuts, one for media controls, one with Vim macros, one for… Well, you get the picture. I’m still adding more to my layers but let me show you what this looks like with an explanation of some of my custom keys.

My Base Layer (0)

This is my basic layer I use all the time (so far). It has a standard QWERTY layout but keeps a few of the TECK enhancements like the Control key on the left where the Caps Lock would normally be. I’ve also kept the Enter, Space and Backspace keys in the thumb clusters and the Hyphen beside the H key on the right-hand side. You’ll also likely see the “HDMI Out” custom key on the left-hand side which is actually a combo key. It’s programmed to send “Control+Alt+>” which is a custom key binding I’ve created in Enlightenment (the window manager I use) to not only enable HDMI output but set the video options I want. I’ve set the base colour of the keyboard to green since it’s my favourite colour and it reminds me of the older VT500 terminals I used to us at DEC. Modifier keys such as Control, Shift and Alt are set to a yellow colour whereas navigation keys are set to blue. The red keys are Backspace and the Delete keys. Take note of the bottom corner keys highlighted in the light blue… These keys are momentary toggles to Layer 1. So long as I have one of these keys pressed down, I can then make calls to keys in Layer 1. It’s a lot like holding down the Shift key to get a capital letter. With that said, let’s examine Layer 1.

My Function Layer (1) — A Continual Work in Progress

There’s a lot to take in here. First off, any key in this layer which does not have a specific designation or assignment will work as if it were Layer 0. As an example, if I pressed the A key while in this Layer, it would just output the letter A. The next thing is that I’ve removed the base colour of the keys so the LEDs will turn off for keys which don’t have any assignment in this Layer; They still work but don’t light up. I’ve used green to highlight my function keys which I’ve mapped to the number row at the top as well as the ` and ~ characters and the updated navigation buttons (Home, End, PgUp and PgDn). I’ve used red for the Control+Alt+Delete sequence as well as the VirtualMachine Control+Alt+Insert equivalent. Purple indicates interactions with Enlightenment such as reloading the window manager (Control+Alt+End), to switch virtual desktops (Control+Alt+Arrows) and to lock the screen (Control+Alt+L). Next are my Vim macro shortcuts for saving (Escape, : w) saving then quitting (Escape, : wq) and finally the force quit without save (Escape, : q!). I then have my web buttons to perform a force reload of a page without cache (Control+F5) which is very handy when performing a WebApp PenTest and the undo close tab (Control+Shift+T) which also doubles as creating a new terminal tab in Terminology and other terminal programs. The bottom-left are mostly for the GIMP however the two Control+Shift+[C/V] also doubles for copying and pasting within terminals. For the few times I’m logged into a Windows environment, I have my WinKey on the left thumb cluster and three common Windows shortcuts on the piano keys to bring up the Run dialog, Windows Explorer and the show desktop shortcuts… They just happen to spell RED as a coincidence. I have Control+Tab and Control+Shift+Tab for in-application tab switching which is handy instead of having to contort my hand to press the latter combination. Finally, the right thumb cluster controls the LEDs of the keyboard to either turn off all the LEDs (on all Layers), turn the animations on, cycle through animation types or just pause the animations. I don’t use the animations but they’re cool to look at and show off with and it’s nice to be able to turn the LEDs off when you’re done with the keyboard for the day.

As I said, there’s a lot to take in and it may seem quite cumbersome but it’s the exact opposite. Imagine that you want to copy text from a terminal window and paste it in another. They key combination of Control+Shift+C followed by Control+Shift+V requires your fingers to create an almost spider-like formation if you’re using one hand or you have to do (small and quick) mental gymnastics on which hand is going to press which buttons. Imagine if you could drop your right pinky or ring finger to where your Right Control used to be and press C/V like a normal copy/paste function but it executed the appropriate key combinations. If you’re in the GIMP and you want to quickly Un-Select All (something I do often enough) you need to press Control+Shift+A whereas I’ve got my keyboard programmed to press my Layer modifier and the letter X and it’s done. Lastly, when I release the Layer modifier button, I am returned to Layer 0 with my basic keyboard layout.

The last Layer I have is my mouse Layer…

Mouse Layer (2)

I set this up for a bit of a laugh but when I actually think about it, this is great for people who may have trouble using a mouse or other pointing device. I can move between Layer 0 and this Layer with either of the two keys in the middle of the middle rows — On each Layer they are also highlighted in the light blue colour.

To create a custom layout, Zsa has a WebUI which stores your configuration (including change revisions) or you can browse other layouts people have created and set to be publicly viewable. Once you’ve created your layout, you download the .bin file to flash your keyboard with the “Wally” tool. The only thing I found a bit of an issue is that you need to run this tool as root or through sudo so make sure you do that or else you may be sitting around for a while wondering why the progress bar isn’t moving. :)

Did I also mention that this entire article was written without me pressing an actual Shift key? In the advanced settings, you can set every alpha-numeric key and special key to Auto-Shift so if you hold the key down for a set amount of time (I’m using the default 175ms) your keyboard will send the shifted character. You’d be surprised how quickly you can adapt to this.

You can also enable audio sounds for every keypress, add multi-lingual keyboard support or just move all your key caps around to support Dvorak or Colemak layouts, program those layouts in the editor and flash with Wally.

The last thing I wanted to bring up is something which you very likely missed as it’s difficult to see: For each layer, I set the LED to white for the number of the layer. If you scroll back up, you’ll see that Layer 0 has the actual 0 key in white; Same for Layers 1 and 2 for the keys 1 and 2 respectively. This way here you can always take a quick glance if you’ve, for some reason, forgotten which Layer you’re currently in.

Should you buy a Moonlander keyboard? I’m just over three weeks in and I’m in love with it. I’m continually adding combos to my Function Layer for quick key presses and will likely end up with more Layers as time goes on. But that’s me and you may be different. Regardless of your decision, please, PLEASE move your Control key to the left of your A key.

--

--

Gr@ve_Rose

CSO, Security Engineer, RedTeamer, PenTester, Creator of https://tcpdump101.com, Packet Monkey