Colemak Mod-DH vs standard Colemak
Colemak Mod-DH moves D and H off the centre columns onto the index fingers. What changes, who should switch, and how to enable colemak_dh on Linux.
What Colemak Mod-DH changes
Colemak Mod-DH is standard Colemak with six letters moved. D and H come down out of the two centre columns and land under the index fingers, and G, B, V and M take the keys they leave behind. Every other key, including the home keys you learn first, stays exactly where standard Colemak puts it.
The name of the variant is the change. In standard Colemak, D sits on the key labelled G and H sits on the key labelled H. Those two keys are the centre columns of the board. An index finger only gets there by pulling the whole hand sideways, so the Mod-DH project treated them as the weakest point of an otherwise good layout and moved both letters one row down.
If you are still learning a layout, take Mod-DH and stop reading comparisons. If you already type standard Colemak without thinking about it, you are looking at several weeks of slower typing in exchange for a comfort gain that no speed test will show you. This guide gives you the exact change first, then the Linux side: the variant name to ask for, and what to do when your system does not have it.
The two layouts, side by side
Standard Colemak, letters only:
q w f p g j l u y ;
a r s t d h n e i o
z x c v b k m , . /Colemak Mod-DH, letters only:
q w f p b j l u y ;
a r s t g m n e i o
z x c d v k h , . /Six letters differ. It reads more easily as four moves on the left hand and one swap on the right. On the left: D drops from the home row to the bottom row, G drops from the top row into the centre column D has left, B moves up into the top row where G was, and V slides one key right into the key B has left. On the right: H and M change places, which puts H under the index finger and M in the centre column.
Read those diagrams as ten columns per row, which is how a matrix (ortholinear) keyboard is built. On a normal staggered keyboard the bottom left corner of Mod-DH has a second arrangement, and that is covered further down.
Why is D such a problem in standard Colemak?
Your index fingers rest on two home keys: the key labelled F on the left, which types T in both layouts, and the key labelled J on the right, which types N in both layouts. Each index finger also owns the column beside it, the keys labelled G and H. No hand covers both columns without moving, because the finger is not long enough, so the hand shifts sideways and the other three fingers come off their home keys with it. That lateral move is the most expensive motion in touch typing, and it is the one Mod-DH exists to remove.
Standard Colemak puts D on the key labelled G and H on the key labelled H, so both centre-column keys carry a common letter. Mod-DH puts D on the key labelled V and H on the key labelled M instead, using the arrangement in the diagram above. Each of those keys sits about half a key width to the right of its index finger's home key on a staggered board, so the finger curls down inside its own column and the hand stays put. The letters that inherit the centre columns are G on the left and M on the right.
The whole argument stands or falls on how often each letter is typed.
The data behind this chart
[
{
"label": "H",
"frequency_pct": 6.1
},
{
"label": "D",
"frequency_pct": 4.3
},
{
"label": "M",
"frequency_pct": 2.4
},
{
"label": "G",
"frequency_pct": 2.0
},
{
"label": "B",
"frequency_pct": 1.5
},
{
"label": "V",
"frequency_pct": 1.0
}
]These are typical published figures for ordinary English text, and they shift by a few tenths of a point depending on which corpus you count. The ranking is stable. H is 6.1 percent of the letters you type and D is 4.3 percent, while M is 2.4 percent, G is 2.0 percent and V is 1.0 percent. Mod-DH does not remove the lateral reach. It spends that reach on rare letters instead of common ones, and it takes 6 letter moves to do it.
What stays the same?
- The home keys A R S T on the left and N E I O on the right do not move. Those eight keys carry the largest share of your typing, and they are the part of Colemak you learned first.
- The top row is identical apart from one key: Q W F P on the left, and J L U Y with the semicolon on the right.
- The punctuation keys on the right hand do not move.
- The number row and the modifier keys are untouched.
- Games bound to WASD behave the same in both layouts, because those four physical keys carry the same letters in each.
One thing does not survive the change. Standard Colemak keeps Z, X, C and V on their QWERTY keys, so Ctrl+Z, Ctrl+X, Ctrl+C and Ctrl+V stay under the fingers that have typed them since your first computer. Mod-DH needs the bottom left row for D, so that cluster has to give way.
Two arrangements of that corner are in circulation, and the diagram above is only one of them. The plain arrangement keeps Z, X and C on the keys labelled Z, X and C, and pushes V one key right onto the key labelled B. The angle mod slides the whole group one key to the left instead, so the left index finger curls into D rather than reaching down and to the right for it. An ISO keyboard has a spare key between the left Shift and Z, and the angle mod uses it. An ANSI keyboard has no such key, so the ANSI version has to relocate Z, which is tolerable because Z is the rarest letter in English.
That is why the packaged variant names carry a board type. Pick the one that matches the keyboard in front of you, then press the key labelled Z. What comes out tells you which arrangement you have, and which of your editing shortcuts just moved.
Should you switch from standard Colemak?
- You are still learning, or still on QWERTY: take Mod-DH. It is no harder to learn than standard Colemak, and you never have to think about this page again. If you have not settled on Colemak at all, that is the earlier question, and how Colemak compares with Dvorak and QWERTY is where to settle it.
- You type standard Colemak fluently: the gain is real and small, and the cost is weeks. Six letters is enough to break automatic typing, and the two that matter most belong to the index fingers, which appear in a large share of English words. People who have done the switch describe a few days of painfully slow typing and a few weeks before their old speed returns.
- You already own a programmable keyboard: this is the cheap case. The change is one firmware build and reverting is another. Try it for a month and keep whichever you prefer.
- You type another language most of the day: the frequency figures above are English. Check your own language before you accept the argument, because D, H, G and M do not carry the same weight everywhere.
- Your hands hurt: a layout is one input among several, along with desk height, chair, board and the hours you sit there. Do not expect a letter swap to fix a problem the rest of the setup is causing.
How do you type Colemak Mod-DH on Linux?
Ask your system what it already has. As of August 2026 the Mod-DH variants ship inside xkeyboard-config, the keyboard database every desktop Linux uses.
localectl list-x11-keymap-variants us | grep colemakA current system lists colemak plus the Mod-DH entries. colemak_dh is the ANSI version, colemak_dh_iso is the ISO version, colemak_dh_ortho is for matrix keyboards, and colemak_dh_wide and colemak_dh_wide_iso are the wide versions, which move the right hand one column outward. The UK layout carries a Mod-DH variant too, so run the same command against gb if you use a UK board. If grep prints nothing, your xkeyboard-config predates these variants and the next section is for you.
Try it in an X session before committing to anything.
setxkbmap -layout us -variant colemak_dh
setxkbmap -querysetxkbmap -query prints the layout and variant now in force, so you can confirm the change took effect. Type a few sentences, then return with setxkbmap -layout us. If the variant does not exist on your machine, the command fails with Error loading new keyboard description and the layout stays as it was.
Note what that command does not do. It affects the running X session only, it is gone at logout, and it does nothing under Wayland, where the compositor owns the keymap. Making a layout permanent is a different job on each desktop and it is already written up: setting Colemak permanently across the console, X11 and Wayland. Every step there applies to this variant. Write colemak_dh wherever that guide writes colemak.
What if your system has no colemak_dh variant?
Three ways to get the layout, and they stop working in different places.
A custom xkb variant. You write the key definitions into a symbols file and register the variant, then use it by name like a packaged one. It is the same mechanism, so it behaves identically, and it covers both X11 and Wayland sessions. The cost is upkeep: a file you edit under /usr/share/X11/xkb belongs to the xkeyboard-config package, so an upgrade can replace it, and you have to install it again on every machine you touch.
A userspace remapper. keyd reads the keyboard through evdev (the kernel input layer) and writes the remapped keys back through uinput (the kernel's input injection device). The swap happens before any display server sees the key, so one file covers an X session, a Wayland session and a bare text console. The map goes in /etc/keyd/default.conf:
[ids]
*
[main]
e = f
r = p
t = b
y = j
u = l
i = u
o = y
s = r
d = s
f = t
h = m
j = n
k = e
l = i
v = d
b = v
n = k
m = hEach line says that the physical key named on the left now sends the key named on the right, and keys that do not change are left out. The semicolon key changes in both directions and is missing above on purpose: run keyd list-keys to get the name your build uses for it, then add those two lines. Load the config and watch it work:
sudo systemctl enable --now keyd
sudo keyd reload
keyd monitorkeyd monitor prints every key as keyd sees it, which is how you catch a key being remapped twice. Set the system layout back to plain US QWERTY before you enable keyd, because keyd's output is still interpreted by whatever layout is configured, and two remaps in series produce letters that match no layout at all.
Keyboard firmware. QMK, ZMK and Vial put the layout inside the keyboard. The board sends the letter you want, and the host never learns that anything was remapped. With QMK the loop is a build and a flash:
qmk setup
qmk list-keyboards
qmk compile -kb planck/rev6 -km default
qmk flash -kb planck/rev6 -km defaultThe keyboard and keymap names above are an example. Replace planck/rev6 with whatever qmk list-keyboards prints for your board, and default with the name of the keymap directory holding your Mod-DH layout.
Vial and VIA do the same through a graphical editor over USB, if your board's firmware supports them, so you can move a key without a compiler.
Which method survives a text console?
Only the firmware follows you everywhere. An xkb variant belongs to one session on one machine. keyd belongs to one machine and needs root on it. The keyboard belongs to you: plug it into a rescue shell, a UEFI setup screen, a freshly installed system or a serial console, and it types Mod-DH, because nothing at the other end has to know.
This matters less for remote work than people expect, and more for local consoles. When you SSH into a VPS the server never sees your layout at all: your terminal turns key presses into characters and sends characters, so the remote machine's keymap is irrelevant. The place it bites is a console you sit in front of, such as a rescue shell after a failed boot, or a permanent workbench you keep on a spare TTY. The Linux virtual console has its own keymap system, separate from xkb, and your desktop settings do not touch it.
On Debian and Ubuntu the console keymap is generated from the xkb data by ckbcomp, so the console can follow the same variant name:
ckbcomp us colemak_dh | sudo loadkeys -That lasts until the next reboot. To keep it, set XKBLAYOUT and XKBVARIANT in /etc/default/keyboard and run sudo setupcon. On distributions without console-setup you are limited to the keymaps that ship with kbd, and those are mostly QWERTY: check with localectl list-keymaps | grep -i colemak before assuming a Colemak-DH map exists. Where it does not, keyd is the shorter path, because one file covers the console and the graphical session together.
What breaks after you switch?
Two layers of remapping. A board flashed with Mod-DH plus a host set to colemak_dh gives you letters from neither layout, because the two maps compose. Press the key labelled S: the board sends R, the host layout reads that as the key R and prints P. Do the mapping in one place only.
The wrong bottom row for your board. Picking colemak_dh on an ISO keyboard, or colemak_dh_iso on an ANSI one, misplaces the letters near the bottom left. Press the key labelled Z first thing after switching, because that corner is where the two arrangements differ.
The login screen. GDM and SDDM keep their own keyboard configuration, so a password prompt can still be QWERTY when your session is not. keyd and firmware avoid this, because both are in place before the greeter draws anything.
Caps Lock. Colemak's published layout also turns Caps Lock into Backspace, and implementations disagree about whether to include that. Check that key right after you switch. Finding out mid-sentence is unpleasant.
Speed, for a while. Expect the first two days to be bad enough that you consider going back. That is normal, and it is the same for anyone changing a layout.
FAQ
Is Colemak Mod-DH worth switching to if I already type standard Colemak?
If your typing is already automatic, the honest answer is usually no. Six letters change, two of them are common index-finger letters, and that is enough to break the reflex you spent months building. People who switched describe a few days of very slow typing and a few weeks before their old speed comes back. The gain is comfort rather than speed: D and H stop requiring a sideways hand movement. Switch if your index fingers bother you, or if you own a programmable keyboard where reverting costs one flash.
Does Colemak Mod-DH break Ctrl+Z, Ctrl+X, Ctrl+C and Ctrl+V?
It breaks part of that cluster, and standard Colemak does not. Standard Colemak leaves Z, X, C and V on their QWERTY keys, so all four shortcuts stay where your hand expects them. Mod-DH needs the bottom left row for D, so something has to move. In the plain arrangement Z, X and C stay put and V moves one key to the right. In the angle mod arrangement the group slides one key left and Z is relocated. Press the key labelled Z after switching to see which one your implementation ships.
How do I check whether my Linux system has the colemak_dh variant?
Run localectl list-x11-keymap-variants us | grep colemak. Anything listed there can be selected by name. Test it in an X session with setxkbmap -layout us -variant colemak_dh and confirm with setxkbmap -query. If the variant is missing, setxkbmap prints Error loading new keyboard description and the layout does not change. In that case your options are a custom xkb variant, the keyd remapper, or keyboard firmware.
Does Colemak Mod-DH work in the Linux text console?
Not on its own. The virtual console has its own keymap, loaded by loadkeys, and it does not read your desktop's xkb settings. On Debian and Ubuntu, ckbcomp us colemak_dh | sudo loadkeys - converts the xkb variant into a console keymap for the current boot, and setting XKBVARIANT in /etc/default/keyboard followed by sudo setupcon makes it survive a reboot. keyd works in the console on any distribution, because it remaps at the kernel input layer. Firmware works there too and needs nothing installed on the machine.
Which Mod-DH variant should I pick for my keyboard?
Match it to the physical board. colemak_dh is for ANSI keyboards, the ones with a wide flat Enter key and a long left Shift. colemak_dh_iso is for ISO keyboards, which have a tall Enter key and an extra key between the left Shift and Z. colemak_dh_ortho is for matrix keyboards with straight columns. The wide variants move the right hand one column outward and only make sense if you have decided you want that. If letters near the bottom left come out wrong, you picked the wrong one.