The plus side of having a QMK keyboard is that you can endlessly customize it.
The downside of having a QMK keyboard is that you will endlessly customize it.
This layout is geared towards fluid and comfortable typing and coding (with a focus on command-line usage and Vim motions) in both French and English. It is based on a few ideas and assumptions:
Colemak isn’t perfect and there are a lot of newer layouts which improved over it, but it’s not so bad (including for French, even though it’s never been specifically optimised for it) and if you already know it you may be better off tweaking around it than re-learning a whole new layout, especially if you own a programmable keyboard1.
Thumbmaxxing.
Typing the same key twice in a row gets uncomfortable in the long run. Let’s have a Repeat key easily accessible.
Good hand alternation may not always be faster, but it leads to less awkward, scissor-like movements and SFBs (same-finger bigrams, i.e. having to use the same finger twice in a row). Let’s have a magic key to provide alternate positions for common but uncomfortable moves.
The single quote, comma and dot might be the most commonly used punctuation symbols in French and English, which are both heavy users of contractions, and they can combine with a lot of letters. Let’s make sure they don’t break the flow.
Combos (hitting two keys at the same time to produce a different key) can be more comfortable than layers (holding a key to change the function of some other keys) and flow more nicely while not producing many typos if used thoughtfully.
Not all French accentuated characters are created equal, but all diacritics can sometimes land on an uppercase letter. Let’s make sure the most common accentuated lowercase characters flow nicely, and have quick enough access to the other ones, including the uppercase versions.
You don’t need quick access to all bracket-like characters, you only need the opening variants
([{if you have auto-close in your editor. Now, if only there was a way to mimick auto-close on any software, hmmm…A lot of software plus some websites have followed on the Vim tradition and are using HJKL for some type of movements. Anything other than QWERTY wrecks that up, but let’s find a hack around that so we don’t have to remap every keybind in every app.
If this may interest you, let’s get on with it.
Default layer
Tab[C+A] Q F[~] G[Q] P[`] W[^] J L U Mgc È Tab[C+A]
,[LCtl] A[!] R[@] S[#] T[$] D[%] H N[J] E[K] I[L] O[?] .[RCtl]
_ Y X C[Ç] V B K M ↑ É Z |
Fn Win LAlt Water Earth Fire Air ← ↓ →
> X[Y]: acts asXon tap (short press) and asYon long (≥120ms) press or hold (via Tap Dance or MOD_T(…) keys on QMK keyboards
>Mgc: Magic key (via Alt Repeat on QMK keyboards)
>C+A: Control + Alt
>Water,Earth,Fire,Air: See next section
This starts from a Colemak base, modified to adapt it slightly for French without compromising it too much for English:2
W goes to G’s position, which is harder to reach.
In return, G goes to F’s position. W is one of the most uncommon letters in French, and G and W are both roughly equally common in English, so placing G in a more reachable position is a net win.
F goes to where W was. This makes the FR/RF bigrams harder to type, but GR/RG (slightly more frequent in both languages3) are made easier in compensation.
Y is moved to the Z position. Z (rare in both French and English) is moved to the other side of the keyboard. This make YOU (classic Colemak gripe) much easier to type and improves hand alternation throughout the board in English (right hand is classically overused in Colemak).
Q is a rare letter in both French and English but it is often used in shortcuts, so we add an extra, more reachable Q as a long-press on G.
É and È (most used accentuated letters in French) are added to this default layer.
Additionally, H remains in its QWERTY position, and JKL are duplicated as long-press functions (Tap Dance) of NEI, so you can keep using Vim cursor movements almost as on plain old QWERTY. Importantly, holding a key with a Tap Dance repeats the hold function.
You may notice that the comma and dot are on weird positions, as single taps on the Control keys. Don’t fret, we’ll come back to them in the next section.
From this default layer, a few things should be discussed:
Multifunction thumb keys (those
Water,Earth, etc. keys)Combos
Magic key
Extra layers
Multifunction thumb keys
These four do quite a lot, which is why I’ve chosen to identify them with a short evocative name.
They act as Return, Space, Backspace, Left and Right Shift, AltGraph, comma and dot with a twist, and allow to access three specific layers.
Water&Airare both Spacebar, Escape and layer keys: tap either to insert a Space, both of them at the same time for Escape, and hold them to access three layers. There are called “Water layer”, “Air layer” and “Cloud layer”. The first two are accessed by holding the corresponding key, and the Cloud layer is accessed by pressing and holding both keys at the same time. These three will give access to the symbols which aren’t on the default layer, to numbers, and to convenient shortcuts for navigation.Earthis Backspace on tap, Left Shift on holdFireis Return on tap, Right Shift on holdPressing both
EarthandFireat the same time is AltGraph (combo)
Then the part about dot and comma:
Water(hold) then tapAiris dot + Space (macro)Water(hold) then tapFireis dot + Return (macro)Air(hold) then tapWateris comma + Space (macro)Air(hold) then tapEarthis comma + Return (macro)
The rationale is that when you type a dot or comma, you are extremely likely to insert a space or a newline right after. This applies to French, English, and most programming languages. The regular keys remain accessible on the default layer for when you specifically want either but without a space immediately after, or if you use an app that uses, say, Ctrl+. as a shortcut.
This may sound like a lot to take in, but it means that a lot of very frequently used keys sit right beneath your thumbs, with very minimal movement to do, and with good hand alternation since both hands have access to the Spacebar and Shift keys.
Combos
These are all two-finger combos, used only on the default layer. Here is the general structure:
Dead keys for accents on the left hand (as most vowels are on the right hand)
Symbols on the right hand
Common symbols that can combine with basically any character available on both hands (symmetrical combos)
To limit the risk of triggering these by mistake when typing fast, setting the COMBO_TERM (time out period for combos in QMK) to a low 30ms works well for me.
Left hand combos
They all land on the home row:
S+T (index+middle) → grave accent (◌̀)
R+S (ring+middle) → acute accent (◌́)
R+T (ring+index) → circumflex (◌̂)
A+T (pinky+index) → diaeresis (tréma) (◌̈)
I implement them via a Compose key (using AltGr for this effect) and some QMK macros. On Linux that’s a setting you can access natively with most Desktop Managers. On Windows you can install WinCompose. On OSX there are options too but I’m not familiar with it.
But if you don’t need the full versatility of a Compose key, the good news is you don’t need to set anything up. The standard Colemak layout (available on all OSes) already has you covered: it includes out-of-the-box some AltGr-based combos for the above accents and some more.
On Windows: The standard Windows Colemak layout has the same problem than all other International keyboard layouts on Windows: AltGr and Ctrl+Alt are considered the exact same and thus in some apps your Ctrl+Alt+xxx shortcuts won’t work anymore. This is why on Windows I just use a QWERTY (US) layout along with WinCompose, and emulate everything in QMK.
Right hand combos
They use the home row as much as possible:
N+E (index+middle) →
-(dash/hyphen/minus)E+I (middle+ring) →
+N+I (index+ring) →
=N+O (index+pinky) →
:(Vim wants fast access to it!)L+N (index on both home & upper row) →
(U+E (middle on both home & upper row) →
[J+H(index on left column, both home & upper row) →{N+M (index on both home & lower row) →
<I+
É→ (ring on both home & lower row) →>M+E (index on bottom row + middle) →
/E+
É(middle on home row + ring on bottom row) →\
Yes, no closing variants for (, [ and {. Don’t panic, that’s normal. You’ll see that’s the job of the Mgc key.
The same finger combos are what requires a column-staggered or ortholinear keyboard. I didn’t try on a usual row-staggered keyboard, but I suspect it wouldn’t be as convenient…
Symmetrical combos
The single and double quote get special treatment:
F+G or U+
Mgc(middle+ring on upper row on any hand) →’G+P or L+U (index+middle on upper row on any hand) →
”X+C or ↑+É (index+middle or lower row on any hand) →
;C+V or M+↑ (middle+ring on lower row on any hand) →
_
These are omnipresent when using the command line, and combine with basically any character when typing text. That’s why we have them on both hands. Additionally, underscore and semicolon are extensively used in programming and can benefit from fast symmetric access too (though YMMV depending on which language you use).
Two-hand combo
As we mentioned earlier, tapping both Water and Air at the same time does Escape. It is the only combo that uses the two hands at the same time.
Magic key
In QMK, you can set a key to Alt Repeat, which changes function depending on what key was pressed last. I use this mostly to improve hand alternation and remove some SFBs:
By default, it acts like A. A is the only vowel on the left hand in Colemak, and it’s an extremely common letter, used in common one syllable words which lie entirely on the left hand. Having a second option to type an A on the right hand makes words like “was”, “war”, “far”, “fact”, “gap”, “grasp”, “cat”, “bat”, “rat” etc. much more comfortable to type.
After A, it acts like Y (i.e. in this case, Y “goes back” to its usual Colemak position)
After P → T
After T, S, or L → repeat that key (those are very frenquently doubled consonants in both languages)
After E → U (breaks the “EU” SFB in French)
After U → E
After N → M (to remove the SFB on “enviroNMent”, “goverNMent”, etc)
After O → Ù (as the only word containing a “ù” in French is “où”, but it’s a common one)
And the auto-close magic:
After
(,[,{,<,’,”,`,_,*→ corresponding closing symbol, then left arrow (macro).
Extra layers
So are we covered? Not quite. There are a few keys that we don’t have access to yet.
Fn keys
After Fn is hit, the home row keys (A to O) change to F1 to F10. P changes to F11 and L to F12. The layer is deactivated after the first keypress, or you can hold the key so it remains active (OSL(…) in QMK).
If you have a 6x4 keyboard you can instead change the number row (or have this row be Fn keys by default).
PageUp/Down, Home, End
Tap ←, ↓, → at the same time to change arrow keys to PageUp, Home, PageDown, End. Tap the same three keys again to deactivate (takes up two combos). This is useful for quick text navigation in the browser or if you are not using Vim.
Water layer
This layer has 2D mouse scrolling and navigation on the left, and symbols on the right:
Left side:
Mouse4 Mouse3 Mouse2 ScrollUp Mouse1 Mouse5
ø Rpt ScrollLeft ScrollDown ScrollRight Alt+Sft+Esc
CapsLock ø Ctrl+Sft+Tab Ctrl+T[Ctrl+W]* Ctrl+Tab ø
ø ø ø ø ø
> ø: the key is unchanged.
>Rpt: Repeat key on QMK keyboards* Additionally, this key acts as Ctrl+Shift+T (re-open last closed tab) on double-tap. I don’t otherwise use Tap Dance double-taps or tap-and-holds, as the firmware has to introduce a delay before it can be sure a tap is doubled or not, and that leads to awkward typing. Also, avoiding double-taps is… well… the whole purpose of using a Repeat key at the first place. But in this case (opening & closing browser tabs) this slight delay is okay, and the three functions (open, close, re-open) fit naturally on one key.
Scroll keys are useful if you have a touchpad or trackball on the right side. Even if your touchpad has two-finger scrolling, that means more direct access and fewer fingers to move4. And if you use an actual mouse, it still provides convenient access to 2D mouse scrolling and switching windows5 and browser tabs.
Right side:
} ) ] "ion" Ê ø
/ * = : ? "..."
ø - + ; ø \
".<Ret>" ". " ø ø øThat’s where the missing closing brackets are (right where their opening counterpart combos are on the default layer) for when you need a more direct access to them.
This layer introduces Rpt (Repeat last key or key combo), which is useful for characters which often get doubled when coding (like == or ++), and is easy to access when typing text (left thumb then left pinky, both on their rest positions). You would use it to repeat a character on the right hand.
Where Mgc is on the default layer, we here have a "ion" macro, as this trigram is extremely common in both French and English.
Air layer
This layer has symbols on the left side and caret movement on the right:
ø "qu'" ~ "qu" ` ^ ø BkSpc ↑[PageUp] Del ø ø
ø ! @ # $ % Alt+Esc ←[Home] ↓[PageDown] →[End] Rpt ø
ø À & Ç | ø ø ø ø ø ø ø
ø ø ø ", " ",<Ret>" ø ø ø ø øThe left side duplicates the long-press functions already present on the default layer. This is useful for two reasons:
Having to do a long press can break the flow, you may prefer to be faster at the cost of an extra key to hold.
Some of these symbols need sometimes be repeated (for instance
#or ` in Markdown) and the QMK Repeat key repeats the whole Tap Dance, meaning the Repeat key needs to be held too. Accessing them via a layer which also provides Rpt is faster.
Small twist though: where Q is a long-press function on the default layer (on the G key), here we have instead a macro that does “qu” instead. In both French and English Q is almost always followed by a U, and especially in French that bigram is very common.
The right side features “adaptive” arrows: tap to move the caret by one character, hold to move by a bigger amount. Backspace and Del have here alternate positions right next to arrows, for when you need some quick surgical deletions.
Rpt is also present here, at the same place (right thumb then right pinky on rest position), which here is useful for Markdown (### This is a title) or boolean operators (&& and ||), and also to repeat characters on the left side, though Mgc provides a more direct way to repeat the most commonly doubled letters from the left hand (S and T).
Cloud layer
Reminder: This layer is accessed by holding both
WaterandAirtogether.
This is where the numeric keys are, along with alternate positions for characters that often combine with numbers:
ø E C A 8 ø ø 9 B D F ø
, 6 4 2 0 ø H 1 3 5 7 .
LSft Space X / - € K + * ( ) RSft
BkSpc Home Del ø ø ø ø Left End RightThis is so you can type usual numerical expressions (including, yes, hexadecimal numbers) without leaving that layer. I’m using even/odd separation so that the smallest digits (which are more common) remain close to the center.
How to use it?
Here is the Vial JSON layout, though to load it directly in Vial you may need to own a SoflePlus2 too. It additionally has a “gaming” layer (press Fn+Win+Alt at the same time) that switches everything back to QWERTY, but with a twist: left hand keys are shifted one column to the right, so WASD land right under the rest position (especially useful on a column-staggered keyboard).
How to learn it?
This layout will obviously be quicker to pick up by people who already know Colemak.
Whatever background you have, the usual recommendation: do not label your keys. The goal is to be able to touch-type, and remembering where each key is is not the difficult part anyway.
I advise you to learn the default layer first without paying attention to Rpt and Mgc.
Try as much as possible to use your memory. If it takes you 5 seconds to remember where a key is, that’s fine. Avoid fiddling around to find the key you want, work your memory as much as possible, and if you just can’t remember, then look it up. The more you force yourself into this, the shortest that part will be. We’re starting to build up muscle memory, the “I want that key → I do that move” part.
Once you are able to remember the position of each key, only then start using the Rpt and Mgc keys. I don’t mean typing with fluidity, I mean no longer having to think for more than a second to find the key you want. Once you get to that stage, refrain from double-tapping to type doubled letters, or from using an awkward move that the Mgc key aims at preventing, even if this feels unnatural at that stage. That is normal, using Repeat/AltRepeat keys is not usual, but double-taps and to some lower extent same-finger bigrams (SFBs) are a source of strain: they are fast deceleration/acceleration movements that don’t let your muscles rest before using them again immediately. But everyone is different, so the key metric here is focus on what’s more comfortable, not on what is faster. Pay attention to how much effort your hand is doing when, say, double tapping an M vs. tapping M then Rpt, even in those differences seem minuscule at first, because they compound over a long typing session. The less you feel your muscles are used the better, even if that’s just by a tiny amount.
Pay attention to the keys that are available on both sides: besides the usual Space, Control and Shift, you also get Tab (duplicated on the right because it’s overused in CLI interaction), single/double quotes, underscore and semicolon (the symmetrical combos), as well as comma and dot via the thumb keys on the layers6.
Use the side opposite the key you just pressed, or opposite the key that comes right after (ideally both, but that’s not always possible). For instance:
if you want to type “we’ll”, use the single quote combo on the left side.
for anything with “'s”, use the one on the right side, to avoid the SFB with the S.
for “don’t”, do whatever feels best. Single quotes combos are where they are specifically so they remain usable in combination with N, T, L or A7 even on the same side.
for “you’re”… ehhhh… take a small break. You don’t have to be all high-WPM all the time.
Alternate fingerings
In Colemak, it is already recommended to type “kn” slightly differently: instead of typing both letters with the index, move your right hand slightly to the left so that your can press K with the index and N with the middle finger.
You now have another option: long-press E (so it’s a K), then N. Similarly. you can more comfortably type “lk” (“talk”, “walk”…) by tapping L, then holding E.
To do “tw” you have a similar dance: move your left hand slightly to the right so your can press T with the middle finger and W with the index.
But if I want to be truly honest, the main reason to base myself off Colemak is that I know it, and it already took me some two or three months to get efficient with it on a split, column-staggered keyboard. But you could still pick up some interesting ideas from this post to apply to your preferred, newer keyboard layout (Gallium, Graphite, Canary, Focal, etc. or even one which already takes French into account like Ergo-L and Ergopti). I tried them a bit but didn’t see major reasons to switch knowing it meant starting from scratch. My main gripes with Colemak (positions of Y and G, hand imbalance) have been fixed by the mods I presented in this article. And I personally really like inward rolls (moves that go pinky, ring, middle, index; by opposition to outward rolls) and newer layouts have less of a focus on that (though at the benefit of other metrics).
Actually, even for plain English I do find these alterations more comfortable than regular Colemak. Also, notice I’m not using the common Mod-DH. Surprisingly, the classic issue about the position of the H in Colemak is not one I share. I’m not too bothered by the lateral stretch needed to type “he”. Plus H is not super common in French. Whatever I did not have problems with I did not change, but you could still additionally swap H & M, and possibly D & P or D & V.
Yes, even though “FR” is ironically part of “French”, don’t be afraid, it is frankly not that frequent. Stay fresh, frivolous starfish. Chill. Freeze, even.
I originally got a SoflePlus2 partly because it has an integrated multipoint touchpad with tap-to-click (so… basically what you expect from any touchpad these days), and yet now I’m barely using it for anything else besides strict cursor movement. Even clicking I do with the keys. By the way, setting your OS or window manager to auto-focus on hover (i.e. not requiring a click to focus a window) is super convenient in that setup.
I use Alt+(Shift+)Escape instead of Alt+(Shift+)Tab because the former gives instantaneous window switch on Windows (without a pop-up).
Remember that after a comma or a dot, Mgc does a Space, so you don’t have to double-tap a thumb key.
The letter A often follows a single quote in French due to contractions (“j’ai”, “n’a”, “l’a”…).
