carpalx - keyboard layout optimizer - save your carpals

Carpalx optimizes keyboard layouts to create ones that require less effort and significantly reduced carpal strain!

Download keyboard layouts, or run the code yourself to explore new layouts.

X11 layouts are available! Patches to include Carpalx layouts in xkeyboard-config and kbd have been submitted by Perry Thompson. Meanwhile, many thanks to Sven Hallberg for providing X11 configuration for Carpalx layouts. Richard Gomes contributed an archive of these files for KDE/Gnome users.

Love your coworkers? Switch them to QWKRFY layout or a fully optimized QGMLWY layout.

Hate your coworkers? Switch them to TNWMLC layout. It's the only keyboard layout that has its own fashion line.

Have ideas? Tell me.

18/apr/16 — Carpalx layouts soon to appear in freedesktop (package xkeyboard-config) and kbd. Thanks to Perry Thompson.

9/sep/14 — A new layout—De Correspondent—for the Dutch language in collaboration with De Correspondent.

9/sep/14 — A new layout—De Correspondent—for the Dutch language in collaboration with De Correspondent.

18/may/14 — Updating text — some of the copy needs to be reworked.

17/may/14 — Made the CSS less useless.

16/may/14 — Added evaluation of the Norman layout. This layout modifies 14/26 keys and has statistics similar to Colemak. Detailed statistics are available.

12/feb/14 — Added evaluation of the abKey layout. Its alphabetic layout makes no attempt at ergonomics. Detailed statistics are available.

Evaluating Keyboard Layouts

How Good is a Keyboard Layout?

I evaluate keyboard layouts using my own typing effort model—the better the layout, the lower the typing effort. The model is based on metrics (or figures of merit, FOMs) described here.

Metrics are based on relative usage frequencies (row, finger, hand), row jumps and runs (number of repeated strokes for same row, finger, hand). These metrics can be used to evaluate an existing layout, compare two layouts or to derive an optimized layout. When deriving a layout, the parameters are combined using weights into a single value (typing effort), which is minimized.

hand, finger and row frequency

  • row frequency - the relative frequency at which the top (rowt), home (rowh) and bottom (rowb) rows are hit; layouts which a high value of rowh and low value of rowb are desirable.
  • hand frequency - the relative frequency at which the left (hL) and right (hR) hands are used; layouts for which these two values are close to one another are desirable
  • finger frequency - the relative frequency at which individual fingers are used to hit keys (f0 ... f3, f6 ... f9, with indeces starting at the left pinky and ending at right pinky (indeces 4 and 5 correspond to thumbs, normally not counted); it is desirable to transfer as much of the typing from the weaker fingers (pinky, ring) to the stronger fingers (middle, index)

hand asymmetry

  • hand asymmetry - defined as hL-hR; desirable layouts have a low value for hand asymmetry

hand, finger and row runs

Runs describe how frequently the same row, hand or finger are used N times in a row. The cumulative distribution of runs is best used for this quantity.

Given a value, n, the cumulative distribution of a run (e.g. left hand run) gives the relative number of hand runs shorter or equal in length to n. Row and hand runs are futher categorized by top, home and bottom (for rows) and left and right (for hands). Finger runs are not expressed for individual fingers (e.g. a finger run of 5 indicates one of the fingers was used 5 times in a row).

  • hand run (rhL(n), rhR(n)) - relative frequency of left or right hand runs of length ≤n
  • row run (rrt(n), rrh(n), rrb(n)) - relative frequency of top, home and bottom row runs of length ≤n
  • finger run (rf(n)) - relative frequency of a finger run of length ≤n

Desirable layouts have most of their runs very short, with the exception of the home row runs (rrh(n), i.e. the number of times keys of the home row are hit n times in succession), which should be lengthy.

row jump

The row jump is the total number of rows traversed by typed fingers within a hand run. The row jump distinguishes the case of typing "ttt" (hand run = 3, finger run = 3, row jump = 0) and tbt (hand run = 3, finger run = 3, row jump = 4).

  • row jump (rj(n)) - relative frequency of a total same-hand row jump of length ≤n

Ranking Words by Typing Difficulty

Detailed typing statistics, such as those described above, unambiguously characterize a layout's performance. However, these values can be hard to interpret and translate to typing in practise.

To give a more subjective impression of a layout's fitness, I have ranked words based on the effort (per unit length) required to type them. I have ranked words for QWERTY, Dvorak, Colemak, QGMLWY (fully optimized, Colemak-like), TNWMLC (worst layout for English).