[GUIDE] A more ergonomic keyboard layout (symmetric/staggered QWERTY - US ANSI - Framework 13)

Ahoy there mateys! If you’re looking for better ergonomics with the default keyboard (which IMO is already great tactility-wise) this is for you.

A bit of background

For the past 25+ years I’ve mainly used typical keyboards/layouts, and in the past 10 years, usually a full-size mechanical keyboard and laptop keyboard. However, I wanted to use the Framework 13 keyboard and touchpad as the only input device so I could have the same muscle memory anywhere while traveling/working with the laptop. I’ve worked exclusively on laptops before. It was fine, until I started experiencing wrist/pinky discomfort/pain which I’ve never gotten before. Though, recently I’ve been typing a lot — researching, writing, coding many hours on end, etc. So this keyboard/touchpad sees a ton of use. And it hasn’t been the most ergonomic.

So I went down yet another ergonomic rabbit hole, this time for keyboards. An input cover with a symmetric, perhaps ortholinear keyboard with programmability a la QMK or similar would be great (please Framework team!) But after thinking/experimenting through my problem for a while, I came up with a solution that I’ve been using for about half a year now (for my stock Framework US ANSI keyboard that I’ve had since September 2021). It’s now way more comfortable to use since I can keep my hands/fingers around the home row most of the time and thus there’s less overall weird movements/contortions. My wrist/pinky discomfort/pain has also magically disappeared.

The setup

The critical piece is a keyboard remapper. I’ve been daily driving keyd which has been great. It’s Linux only, but kmonad or kanata will likely work for other operating systems. I haven’t tried.

@DHowett’s GitHub - DHowett/FrameworkHacksPkg tool may also work to remap the keys permanently in firmware (ideal), but I haven’t used it and I’m not sure about certain semi-complicated key combinations (I’d be curious if you have any insight!).

Here’s my keyd config:

click to open
# NOTES:

# Enable service and start:
# `sudo systemctl enable keyd && sudo systemctl start keyd.service`

# Reload config
# `sudo keyd reload`

# Show/debug keypresses
# `sudo keyd monitor`

# Show/debug layers
# `sudo keyd listen`

# IMPORTANT: ordering of certain things matters.

## BEGIN CONFIG ##
[ids]

*

##### GLOBALS #####

[global]

# Turn the capslock light on whenever a layer is active.
#
# Tested working in Gnome. But in SwayWM, toggling capslock correctly toggles
# the led indicator, but toggling other layers doesn't toggle the led correctly
# and instead causes it to briefly flash.
#
# This might be fixed in the next release after wlroots 0.16.2 when it includes
# this fix: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3867
# More info:
# - https://github.com/swaywm/sway/issues/7451
# - https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3550
#
# Fine grained layer indicator feature request:
# https://github.com/rvaiya/keyd/issues/413
layer_indicator = 1

##### MAIN LAYER #####

[main]

# Need to explicitly set rightshift/rightcontrol
# to override the default layers.
# See: https://github.com/rvaiya/keyd/issues/369#issuecomment-1301574908
# Or instead here, need to set rightcontrol layer before layer(control)
# overrides it below (untested theory but this works).

# Swap rightcontrol to alt layer.
rightcontrol = rightcontrol

# Set leftalt to meta
leftalt = layer(meta)
# Set rightalt to surface alt layer.
rightalt = layer(raiselayer)

# Set meta key to alt
# Note: it seems like when leftmeta and leftalt are swapped
# on the Framework laptop, pressing leftmeta+shift+rightalt(raiselayer)
# doesn't trigger raiselayer. Perhaps pressing the physical
# leftalt+rightalt+a third modifer key doesn't work and might this
# may be a firmware issue.
meta = layer(alt)

# Maps capslock to control
capslock = layer(control)

# Clear all set layers when esc is pressed (esc itself is noop).
esc = clearm(esc)

left = layer(leftarrowlayer)

y = -
u = y
i = u
o = i
p = o
[ = p
] = [
\ = ]

h = ;
j = h
k = j
l = k
; = l

n = /
m = n
, = m
. = ,
/ = .

1 = \
2 = 1
3 = 2
4 = 3
5 = 4
6 = 5
7 = =
8 = 6
9 = 7
0 = 8
- = 9
= = 0

##### ALT LAYER #####

[raiselayer]
## left cluster 
z = esc
# Undo
x = C-z
# Redo
c = C-S-z
# Navigation and Tabs
e = S-tab
s = C-S-tab
d = tab
f = C-tab

## right cluster
o = up
k = left
l = down
; = right
i = home
p = end
u = pageup
j = pagedown

## Function keys
2 = f1
3 = f2
4 = f3
5 = f4
6 = f5
8 = f6
9 = f7
0 = f8
- = f9
= = f10
y = f11
7 = f12

[leftarrowlayer]
k = A-left
; = A-right

# Media
[ = playpause
] = volumedown
\ = volumeup
, = mute
q = brightnessdown
w = brightnessup

## compose macros
y = macro(compose ---)
c = macro(compose o c)
d = macro(compose o o)
r = macro(compose o r)
t = macro(compose t m)

# Ctrl+Shift+Alt+raiselayer doesn't work (maybe because of key rollover?) so
# we're going to map it to ijkl (remapped to qwerty okl;)
[control+shift+alt]
o = C-S-A-up
k = C-S-A-left
l = C-S-A-down
; = C-S-A-right

##### DOUBLE SHIFT HOME SYM LAYER #####

[shift]
leftshift = layer(homesym)
rightshift = layer(homesym)
backspace = delete
backspace = S-delete

##### VSCODE SHORTCUTS #####
# TODO: use per app configurations 
# see `man keyd`

[control+alt]
# VSCode Bookmarks
e = S-A-f8
s = S-A-f5
d = A-f8
f = A-f5

# VSCode A-f5 next change, A-f8 next problem 
i =  noop
j =  C-A-j
k =  C-A-k
l =  C-A-l

# Smart select grow/shrink
[ = macro(A-S-left)
] = macro(A-S-right)

Here’s an overview of most of the changes and their explanation as an image (click to zoom in):

I noticed that the default US ANSI layout has numbers/letters shifted over to the left by ~1 inch with the home row. You can easily see this from how the space bar is shifted a bit left from the center of the input cover, compared to the touchpad.

So after some in-depth research, I basically came up/settled on something like the Katana60, akin to a staggered and symmetric keyboard like the Atreus. Also heavily inspired by the Kinesis Advantage 2. Some more useful/interesting references:

An ortholinear option would be nice too (which I don’t have experience with and I think may affect muscle memory when needing to type on staggered keyboards), but the key ideas implemented here were:

  1. symmetry, since a keyboard that’s slightly shifted left resulted in my body/posture being misaligned (noticeable after long periods) and
  2. less to no movement of the wrist and fingers into odd finger contortions/wrist positions from key combinations.

So through trial, error, experimenting, and testing, I remapped my keys and then switched the key caps. Switching the key caps is unnecessary, but helped in learning the new layout/when I forgot. There’s a risk to breaking the switch/key cap mounts when taking them off, so doing that is at your own risk. That being said, there is a way to do it safely, like 99% of the time.

Shifting the right half over one key

The letters on the right half of the keyboard have been shifted over one key, resulting in symmetry. To do this, I needed to move some punctuation keys to the middle of the keyboard. I chose to keep the '/" key to the right of the L key and instead moved the ;/: key to the center so that I could continue using my pinky to type '/". I think my index finger requires more use since it now also covers some punctuation, and it might slow down my typing a bit. Maybe the only downside I see, and there are other ways. But overall I think there’s been an increase in total efficiency, it still works well, and I’ve grown accustomed to it.

Movement (arrow keys, page up, page down, home, end)

I no longer use the arrow keys at the bottom left corner as…the arrow keys as constantly moving my hand there when navigating text resulted in a lot of strain. So instead, I now use the Alt key right of the space bar instead as a “thumb modifier”. When I press the key with my thumb, it raises a key layer, like how Shift works.

The IJKL cluster is now my arrow layer (akin to WASD) and that area is for micro movements (e.g. moving around text). For example, if I press Thumb modifier with I, J, K, L it results in Up, Left, Down, Right.

Y and H are Page up and Page down, and U and O are Home and End.

I’ve found that I can navigate/edit faster now as using the Thumb modifier surprisingly has become second nature (took me maybe a few weeks to adjust) and I don’t have to constantly move my hand/fingers down to the arrow cluster. This configuration/movement pattern is great since it works everywhere, so I don’t need Vim keybindings or similar.

I also use the left WASD cluster/area is for macro movements (e.g. moving around tabs/windows/fields).

For example, for switching between tabs:

  • Thumb modifier+S is Ctrl+Shift+Tab
  • Thumb modifier+F is Ctrl+Tab

For tabbing through inputs:

  • Thumb modifier+E is Shift+Tab
  • Thumb modifier+D is Tab

These are just examples as I have many more combinations to move around (particularly with SwayWM). Essentially my entire desktop is “Vim-like” and can be navigated around quickly without needing to switch between modes (although they can help in SwayWM, because of modifier keys + layers. I do still use my touchpad (mostly reaching down with my thumb or + my index finger), keeping my fingers on the home row) when needed or for fast/precise movement/clicks. Thumb and index finger to pinch and zoom, up/down to scroll, and left/right for backward/forward.

Although I also use (Left Alt+Thumb modifier+J/L) as (Alt+Left/Right) to go backward/forward.

Caps Lock as Ctrl

This one’s a given and quite common. I set Caps Lock to just Ctrl. I tried also to set Caps Lock to Esc on short press and to Ctrl on long press for key combinations, but I ended up not using that since the short/long press threshold was tricky and it also interfered with key combinations like Shift+Esc as well as quick typing.

My left pinky also doesn’t need to reach the bottom Left Ctrl key for combinations (something that I’ve had no issues with because of gaming, but I’ve found that Caps Lock as Ctrl is actually more comfortable there, too). I’ve gotten used to pressing Caps Lock (now Ctrl)+Left Shift with just my pinky when I need to press Left Ctrl+Left Shift at the same time.

Number keys

Shifting the number keys to the right is a bit jarring (especially with my WASD gaming muscle memory), but I’ve gotten used to it since I primarily need to be more of an efficient typer/coder, not gamer, heh. Instead of reaching slightly to the left when I need to type numbers, I just need to reach up and in. Up and in slightly to the right with my left hand, and conversely up and in slightly to the left with my right hand. After learning this, I can touch type numbers with both hands at a lower error rate.

No longer needing to use/reach the top row

Numbers as Function keys

I have the number row (1-10) act as F1-F10 (and -/+ as F11/F12) when pressed with the Thumb modifier.

It’s oh so nice when e.g. I just need to press Thumb modifier+2 (for F2) to rename a file without my hand leaving the home row.

Other top row keys

I also have:

  • Shift+Backspace work as Delete
  • Thumb modifier+Z work as Esc

So now I rarely need to use/reach for the very top row of keys (I haven’t remapped Print screen yet).

My fingers don’t need to stretch as much to press Delete, since I can also use Shift+Backspace. Shift+Delete can be accomplished by pressing both Shift keys + Backspace (Left Shift+Right Shift+Backspace).

For Esc, I can press Thumb modifier+Z.

The keys on the top row still work and function the same as before.

Miscellaneous

I have a few other handy modifiers, such as media, brightness, VSCode shortcuts, some special characters (using Compose key combinations), etc. These are shown in the keyd config/picture above.

It took a while to get used to, but now I’m just as fast or faster in most things. Movement is definitely much faster as I no longer have to constantly move my hand down to the arrow cluster when I need to move around (a problem that Vim keybindings solve). I grew up learning to type in very quick bursts from AIM (AOL Instant Messenger)/mouse and keyboard gaming (FPSes with WASD)/etc. so I didn’t really use the home row and developed my own unique “hovering” typing style. My left hand would be on the WASD cluster, right hand on the mouse :smiley: for most of my life. I could type comfortably at 100+WPM, but since I’ve been typing significantly more than gaming due to work, I invested in relearning some habits/muscle memory and adopted the home row (shoutout to the friendly speed typing community that I’ve learned a lot from). The slight difference has helped ergonomics/posture/strain.

I considered getting the Japanese JIS layout for the ability to have extra “thumb modifiers”/more keys/a slightly different layout:

but my current setup has worked great and seems to be all I need. It’s convenient since it just sits on top of a normal US ANSI layout. However, switching between the shifted and regular QWERTY layout can be a slight struggle when touch typing as I have to remember to consciously shift my hands 1 inch, and then my old muscle can memory fill in the rest. If it doesn’t, I regress to looking at the keyboard. It hasn’t affected my muscle memory typing on a phone (with 2 thumbs).

As an added bonus, because I can keep my hands on home row and perform most/all key combinations, I don’t need to move my arms. This means that when I’m in an odd position like in bed or slumped on a couch, it’s much easier to use and fine for extended periods. I also no longer rely on the mouse (unless it’s needed for e.g. mouse heavy applications like gaming/photo/video editing). Though the overview image above was completely edited, comfortably, with my Framework 13 keyboard and touchpad. No mouse.


I’m putting this out there so others may experiment/benefit or perhaps Framework releases an ergonomic layout or the ability to remap keys in firmware for the 13. It was a bit of effort to configure/learn, and initially a bit complicated, but in the end it’s become quite simple. Muscle memory takes over and the ergonomic/increased productivity have been well worth it. If you’re curious, I encourage you to experiment with my layout and customize it to what works for you! Especially if you come from a gaming background and/or muscle memory comes easily for you, as my laptop usage is now like playing a game (an easy one) or a piano with two hands for various combinations. It’s strikingly enjoyable.

If anything, I look forward to some more universal, ergonomic layouts available in the mainstream!

10 Likes