Pchr8board - a mirrored left-hand keyboard layout for Dvorak
Pchr8board
Pchr8board is a keyboard layout for Linux based on Randall Munroe’s Mirrorboard idea and implements it in Linux for the Dvorak keyboard layout.
It looks like this:
If you are not familiar with Dvorak, it’s basically a better keyboard layout than Qwerty for a variety of reasons, and if you invest 2-3 months it can dramatically improve your typing speed 1. The idea is that you can use your left hand to type the letters that usually the right hand types. It’s much easier for the brain if the location is mirrored.
This is an implementation of that idea for Dvorak, along with a number of small modifications. I use something very similar for my keyboard layout, but with a number of small modifications (like umlauts in place of some of the mirrored keys).
Keys without a legend don’t have any changes from the usual Dvorak layout.
The labels are to be read like this:
The layout uses left Alt as a Latch key, that, when pressed with left thumb, switches the letters to their corresponding right-hand letters, as per original Mirrorboard.
Other important changed keys are highlighted.
- Enter and BackSpace are on the Tilde (“~”) key.
- The Tab key allows to type forward slashes (“/”), mostly for searching, and diaereses (ümläüts) on the letter immediately following Shift+Latch+Tab (awkward at first, but not more so than the typical compose key approach).
The layout is usable as a typical Dvorak one, and I wanted to add a couple of more keys that I miss.
- On the right-hand side, I’ve added arrow keys and another backspace (light-orange on the picture).
I sorely needed both of those, since they required too much movement in a traditional layout. What’s also nice is that all the keyboard shortcuts still work, that is for the OS it doesn’t make much difference. Selecting words word-by-word using Ctrl+Shift+right_arrow as Ctrl+Shift+Latch+n still works, for example. In practice such chords are much less complicated and easier to get used to than they seem.
At first, I wanted to add the arrow keys to the left hand, but didn’t find a not-awkward way to do this.
Installation instructions:
- Copy to your key definitions folder (usually
/usr/share/X11/xkb/symbols/
) - Either just
setxkbmap left3
or integrate it in whatever you are using (e.g.setxkbmap -option 'grp:rshift_toggle, compose:rctrl' left3,ru,ua)
- In case you want to edit it, you may have to save it under a new name. Arch used to cache it somehow, and I needed either a reboot, or a new name. Now I don’t have this problem anymore but someone might have.Or during editing do
xkbcomp mirrorboard.xkb $DISPLAY 2>/dev/null
as recommended in the original post, maybe removing the last part to see any errors.
The layout is on Github., copied here:
// Pchr8board, formerly known Dvorak MirrorBoard (v3), based on MirrorBoard one-hand keymapping
// Original keymap: https://blog.xkcd.com/2007/08/14/mirrorboard-a-one-handed-keyboard-layout-for-the-lazy/
// Changes and details: https://serhii.net/
default partial alphanumeric_keys modifier_keys
xkb_symbols "dvorak-mirrorboard" {
// Using L-Alt as modifier instead of Caps lock.
// Additionally, it's a Latch key, not a Shift one, so pressing it once activates the group.
key <LALT> { type[Group1] = "ONE_LEVEL", symbols[Group1] = [ ISO_Level3_Latch ] };
// Mod+Space is return
// Tilde is Backspace by itself,
// Mod+Tilde is Return
key <SPCE> { [ space, space, Return ] };
key <TLDE> { [ BackSpace, asciitilde, Return, asciitilde ] };
// Mod+Tab gives a slash, which I use often (searching etc.)
// Mod+Shift+Tab gives an umlaut on the next character
key <TAB> { [ Tab, ISO_Left_Tab, slash, dead_diaeresis] };
key <AD01> { [ apostrophe, quotedbl, l, L] };
key <AD02> { [ comma, less, r, R] };
key <AD03> { [ period, greater, c, C] };
key <AD04> { [ p, P, g, G ] };
key <AD05> { [ y, Y, f, F ] };
key <AC01> { [ a, A, s, S ] };
key <AC02> { [ o, O, n, N ] };
key <AC03> { [ e, E, t, T ] };
key <AC04> { [ u, U, h, H ] };
key <AC05> { [ i, I, d, D ] };
key <AB01> { [ semicolon, colon,z, Z] };
key <AB02> { [ q, Q, v, V ] };
key <AB03> { [ j, J, w, W ] };
key <AB04> { [ k, K, m, M ] };
key <AB05> { [ x, X, b, B ] };
key <AE01> { [ 1, exclam, 0, parenleft ] };
key <AE02> { [ 2, at, 9, parenright ] };
key <AE03> { [ 3, numbersign, 8, asterisk ] };
key <AE04> { [ 4, dollar, 7, ampersand ] };
key <AE05> { [ 5, percent, 6, asciicircum ] };
// Backspace and arrow keys
key <AD08> { [ c, C, Up, Up ] };
key <AD09> { [ r, R, BackSpace, BackSpace ] };
key <AC07> { [ h, H, Left, Left ] };
key <AC08> { [ t, T, Down, Down ] };
key <AC09> { [ n, N, Right, Right ] };
key <AD06> { [ f, F ] };
key <AD07> { [ g, G ] };
key <AD10> { [ l, L ] };
key <AD11> { [ slash, question ] };
key <AD12> { [ equal, plus ] };
key <AC06> { [ d, D ] };
key <AC10> { [ s, S ] };
key <AC11> { [ minus, underscore ] };
key <AB06> { [ b, B ] };
key <AB07> { [ m, M ] };
key <AB08> { [ w, W ] };
key <AB09> { [ v, V ] };
key <AB10> { [ z, Z ] };
key <BKSL> { [ backslash, bar ] };
key <AE06> { [ 6, asciicircum ] };
key <AE07> { [ 7, ampersand ] };
key <AE08> { [ 8, asterisk ] };
key <AE09> { [ 9, parenleft ] };
key <AE10> { [ 0, parenright ] };
key <AE11> { [ bracketleft, braceleft ] };
key <AE12> { [ bracketright, braceright ] };
};
This layout is available on Github.
The following resources helped me:
- Creating custom keyboard layouts
- The legendary Arch Linux wiki! It has a couple of other ideas I should play with, for example for multiple layouts. Would be cleaner than setxkbmap?
(Y)
-SH.
-
For typing practice, I recommend aoeu.eu and typingclub.com. ↩︎