Ver código fonte

kanata configurations (#3)

Fabien Cazenave 1 ano atrás
pai
commit
dc8ff6ef8e
12 arquivos alterados com 424 adições e 146 exclusões
  1. 67 41
      README.md
  2. 18 17
      img/all.svg
  3. 3 3
      img/base.svg
  4. 5 5
      img/index.html
  5. 33 35
      img/navigation.svg
  6. 5 7
      img/numrow.svg
  7. 20 22
      img/symbols.svg
  8. 39 0
      kanata/README.md
  9. 16 16
      kanata.kbd
  10. 80 0
      kanata/arsenik_ansi.kbd
  11. 68 0
      kanata/arsenik_easy_altgr.kbd
  12. 70 0
      kanata/arsenik_easy_ansi.kbd

+ 67 - 41
README.md

@@ -1,60 +1,62 @@
-Selenium33
+Arsenik
 ================================================================================
 
-A basic [Miryoku](https://github.com/manna-harbour/miryoku)-like approach to
-minimize finger movements on any keyboard:
+A basic [Miryoku][1]-like approach to minimize finger movements:
 
 - 3 home-row mods per hand for <kbd>Ctrl</kbd>, <kbd>Alt</kbd>, <kbd>Super</kbd>
-- 3 layer-tap keys under the thumbs: <kbd>Shift</kbd>/<kbd>Backspace</kbd>, <kbd>Navigation</kbd>/<kbd>Space</kbd>, <kbd>Prog</kbd>/<kbd>Return</kbd>
+- 3 layer-tap keys under the thumbs: <kbd>Shift</kbd>/<kbd>Backspace</kbd>,
+<kbd>Navigation</kbd>/<kbd>Space</kbd>, <kbd>Symbol</kbd>/<kbd>Return</kbd>
 
-![base, navigation and prog layers on a 33-key keyboard](img/all.svg)
+![base, navigation and sym layers on a 33-key keyboard](img/all.svg)
 
-A long press on the <kbd>Return</kbd> key brings up the Prog layer, where all
-programming symbols are arranged for comfort.
+**Bring the keys to your fingers, rather than moving your fingers to the keys!**
 
-A long press on the <kbd>Space</kbd> bar brings up the Navigation layer, with
-easy one-hand shortcuts (<kbd>Ctrl</kbd>-<kbd>WASZXCV</kbd>), Vim-like
-navigation (<kbd>HJKL</kbd>) and more…
+- A long press on the <kbd>Return</kbd> key brings up the <kbd>Symbol</kbd>
+layer, where all programming symbols are arranged for comfort and efficiency,
+Dvorak-like.
+- A long press on the <kbd>Space</kbd> bar brings up the <kbd>Navigation</kbd>
+layer, with easy one-hand shortcuts (<kbd>Ctrl</kbd>-<kbd>WASZXCV</kbd>),
+Vim-like navigation (<kbd>HJKL</kbd>) and more…
 
-The idea behind these layers is to **bring the characters to the fingers, rather
-than moving the fingers to the keys**. This approach is what makes those 34-key
-keyboards so comfortable, and the goal here is to get a comparable experience
-with any other keyboard — including your laptop’s.
+This is how modern ergonomic keyboards work — e.g. [Planck][47], [Atreus][44],
+[Corne][42], [Ferris][34]… The goal here is to propose an approach that works
+with any keyboard, including your laptop’s.
+
+[47]: https://olkb.com/collections/planck
+[44]: https://atreus.technomancy.us
+[42]: https://github.com/foostan/crkbd
+[34]: https://github.com/pierrechevalier83/ferris
 
 
 Main Benefits
 --------------------------------------------------------------------------------
 
 - <kbd>Shift</kbd>, <kbd>Backspace</kbd>, <kbd>Return</kbd> under the thumbs!
-- all programming symbols are moved to the comfortable 3×10 zone
+- all programming symbols in the comfortable 3×10 zone
 - symmetrical modifiers on the home row
 - Vim-like navigation in all apps
 - easier left-hand shortcuts
 - works with any keyboard
 
 
-Suitable for *all* keyboards
+Using Arsenik
 --------------------------------------------------------------------------------
 
-… well, all keyboards that have at least 3×10 finger keys and 3 thumb keys. So
-yes, pretty much every computer keyboard out there.
+Unlike Miryoku which requires 6 thumb keys, Arsenik has been designed to work
+with standard ANSI/ISO/laptop keyboards, leveraging the spacebar and the two
+Alt/Cmd keys.
 
-Miryoku requires 6 thumb keys, which tends to limit its use to ergonomic
-keyboards. Selenium works with 3, which means it’s usable with any standard ANSI
-or ISO keyboard (spacebar + Alt/Cmd keys), even non-programmable ones thanks to
-[kanata](https://github.com/jtroo/kanata); and it also works with minimalist
-keyboards like the [Ferris](https://github.com/pierrechevalier83/ferris) (only 4
-thumb keys).
+[Non-programmable keyboards are supported through kanata.](kanata)
 
-Of course, Selenium can be implemented in programmable keyboards with QMK, ZMK,
+Programmable keyboards should be trivial to configure with QMK, ZMK,
 Kaleidoscope, etc.
 
 
 No numbers? No problem.
 --------------------------------------------------------------------------------
 
-If your keyboard has no number row, we got you covered! From <kbd>Prog</kbd>
-mode, pressing the <kbd>Num</kbd> key brings up the NumRow layer:
+If your keyboard has no number row, we got you covered! In <kbd>Symbol</kbd>
+mode, pressing the left thumb key brings up the <kbd>NumRow</kbd> layer:
 
 ![NumRow layer on a 33-key keyboard](img/numrow.svg)
 
@@ -63,25 +65,49 @@ mode, pressing the <kbd>Num</kbd> key brings up the NumRow layer:
 - the lower row has dash, comma, dot and slash signs to help with number / date
 inputs
 
+Even on keyboards that *do* have a number row, this <kbd>NumRow</kbd> layer can
+be interesting to use in order to minimize finger movements a bit more.
 
-TODO
+
+Related Projects
 --------------------------------------------------------------------------------
 
-The main idea is settled (3 home-row mods + 3 layer-taps), but Selenium is still
-a work in progress in an early stage. Expect refinements.
+### Inspiration
 
-- NumPad layer
-- macOS support (KMonad / Karabiner)
-- sample QMK / ZMK implementations for common keyboards
-- variants for specific keyboard layouts
+- [Miryoku][1] for the main idea of using modifiers on the homerow and layer
+shifters under the thumbs;
+- [Lafayette][2] and [Ergo-L][3] for the <kbd>Symbol</kbd> layer, which has been
+blatantly taken *as is*.
 
+### Alternatives
 
-Why the name?
---------------------------------------------------------------------------------
+- [Extend][4] for the <kbd>Navigation</kbd> layer
+- [Neo][5] for the <kbd>Navigation</kbd> and <kbd>Symbol</kbd> layers
+- [Pascal Getreuer][6] for the <kbd>Symbol</kbd> layer
+
+### Non-Goals
 
-I believe 34-key keyboards like the [Ferris](https://github.com/pierrechevalier83/ferris)
-are the end game of ergonomic keyboards, and 34 is selenium’s atomic number. All
-other keyboards I’ve tried feel like unstable isotopes of the Ferris experience.
+- being the most efficient 3×5 layout — [Miryoku][1] is probably the most
+advanced approach for that, at least on custom 36-key keyboards;
+- being the most intuitive 3×5 layout — [Neo][4]’s navigation-and-numpad layer
+would be an easier alternative, but a more Vim-like approach has been preferred;
+- fitting any OS layout — Arsenik works best if your OS layout has either no
+AltGr layer at all (e.g. QWERTY, Colemak, Workman…), or an optimized AltGr layer
+([Lafayette][2], [Ergo-L][3]…).
 
-[Other cultural biases](https://en.wikipedia.org/wiki/Evolution_(2001_film))
-might have been involved as well, though this remains to be proven. :-)
+[1]: https://github.com/manna-harbour/miryoku
+[2]: https://qwerty-lafayette.org/42
+[3]: https://ergol.org
+[4]: https://dreymar.colemak.org/layers-extend.html
+[5]: https://www.neo-layout.org/
+[6]: https://getreuer.info/posts/keyboards/symbol-layer/
+
+
+TODO
+--------------------------------------------------------------------------------
+
+- NumPad layer?
+- angle mods!
+- KMonad / Karabiner support
+- sample QMK / ZMK implementations for common keyboards
+- variants for specific OS layouts

+ 18 - 17
img/all.svg

@@ -36,6 +36,7 @@
       .dualKey             { fill: #666; }
       .layerMod, .colorMod { fill: #eee; }
       .layerSym, .colorSym { fill: #99f; }
+      .layerNav, .colorNav { fill: #e83; }
     }
   </style>
 
@@ -44,7 +45,7 @@
       <g transform="translate(90)">
         <rect width="52" height="52" rx="5" ry="5"/>
         <text x="12.8" y="20.6" class="level2">Q</text>
-        <text x="38.0" y="43.4" class="layerSym">1</text>
+        <text x="38.0" y="43.4" class="layerSym">@</text>
       </g>
       <g transform="translate(150)">
         <rect width="52" height="52" rx="5" ry="5"/>
@@ -87,7 +88,7 @@
         <rect width="52" height="52" rx="5" ry="5"/>
         <text x="12.8" y="20.6" class="level2">I</text>
         <text x="38.0" y="43.4" class="layerNav">⇞</text>
-        <text x="38.0" y="43.4" class="layerSym">*</text>
+        <text x="38.0" y="43.4" class="layerSym">"</text>
       </g>
       <g transform="translate(570)">
         <rect width="52" height="52" rx="5" ry="5"/>
@@ -98,7 +99,7 @@
       <g transform="translate(630)">
         <rect width="52" height="52" rx="5" ry="5"/>
         <text x="12.8" y="20.6" class="level2">P</text>
-        <text x="38.0" y="43.4" class="layerSym">0</text>
+        <text x="38.0" y="43.4" class="layerSym">`</text>
       </g>
     </g>
   </g>
@@ -138,7 +139,7 @@
       <g transform="translate(330)">
         <rect width="52" height="52" rx="5" ry="5"/>
         <text x="12.8" y="20.6" class="level2">G</text>
-        <text x="38.0" y="43.4" class="layerSym">=</text>
+        <text x="38.0" y="43.4" class="layerSym">_</text>
       </g>
     </g>
     <g class="right">
@@ -146,7 +147,7 @@
         <rect width="52" height="52" rx="5" ry="5"/>
         <text x="12.8" y="20.6" class="level2">H</text>
         <text x="38.0" y="43.4" class="layerNav">←</text>
-        <text x="38.0" y="43.4" class="layerSym">+</text>
+        <text x="38.0" y="43.4" class="layerSym">|</text>
       </g>
       <g transform="translate(450)">
         <rect width="52" height="52" rx="5" ry="5"/>
@@ -154,7 +155,7 @@
         <text x="12.8" y="20.6" class="level2">J</text>
         <text x="12.8" y="43.4" class="layerMod">⌃</text>
         <text x="38.0" y="43.4" class="layerNav">↓</text>
-        <text x="38.0" y="43.4" class="layerSym">-</text>
+        <text x="38.0" y="43.4" class="layerSym">+</text>
       </g>
       <g transform="translate(510)">
         <rect width="52" height="52" rx="5" ry="5"/>
@@ -162,7 +163,7 @@
         <text x="12.8" y="20.6" class="level2">K</text>
         <text x="12.8" y="43.4" class="layerMod">⌥</text>
         <text x="38.0" y="43.4" class="layerNav">↑</text>
-        <text x="38.0" y="43.4" class="layerSym">&lt;</text>
+        <text x="38.0" y="43.4" class="layerSym">-</text>
       </g>
       <g transform="translate(570)">
         <rect width="52" height="52" rx="5" ry="5"/>
@@ -170,13 +171,13 @@
         <text x="12.8" y="20.6" class="level2">L</text>
         <text x="12.8" y="43.4" class="layerMod">⌘</text>
         <text x="38.0" y="43.4" class="layerNav">→</text>
-        <text x="38.0" y="43.4" class="layerSym">&gt;</text>
+        <text x="38.0" y="43.4" class="layerSym">*</text>
       </g>
       <g transform="translate(630)">
         <rect width="52" height="52" rx="5" ry="5"/>
         <text x="12.8" y="43.4" class="level1">;</text>
         <text x="12.8" y="20.6" class="level2">:</text>
-        <text x="38.0" y="43.4" class="layerSym">"</text>
+        <text x="38.0" y="43.4" class="layerSym">!</text>
       </g>
     </g>
   </g>
@@ -196,7 +197,7 @@
         <g>
           <text x="12.8" y="20.6" class="level2">X</text>
           <text x="38.0" y="43.4" class="layerNav shortcut">^x</text>
-          <text x="38.0" y="43.4" class="layerSym">`</text>
+          <text x="38.0" y="43.4" class="layerSym">&lt;</text>
         </g>
       </g>
       <g transform="translate(210)">
@@ -204,7 +205,7 @@
         <g>
           <text x="12.8" y="20.6" class="level2">C</text>
           <text x="38.0" y="43.4" class="layerNav shortcut">^c</text>
-          <text x="38.0" y="43.4" class="layerSym">|</text>
+          <text x="38.0" y="43.4" class="layerSym">&gt;</text>
         </g>
       </g>
       <g transform="translate(270)">
@@ -212,14 +213,14 @@
         <g>
           <text x="12.8" y="20.6" class="level2">V</text>
           <text x="38.0" y="43.4" class="layerNav shortcut">^v</text>
-          <text x="38.0" y="43.4" class="layerSym">_</text>
+          <text x="38.0" y="43.4" class="layerSym"> = </text>
         </g>
       </g>
       <g transform="translate(330)">
         <rect width="52" height="52" rx="5" ry="5"/>
         <g>
           <text x="12.8" y="20.6" class="level2">B</text>
-          <text x="38.0" y="43.4" class="layerSym">/</text>
+          <text x="38.0" y="43.4" class="layerSym">#</text>
         </g>
       </g>
     </g>
@@ -236,7 +237,7 @@
         <text x="12.8" y="20.6" class="level2">M</text>
         <text x="30.0" y="43.4" class="layerNav">🖰</text>
         <text x="42.0" y="43.4" class="layerNav">↓</text>
-        <text x="38.0" y="43.4" class="layerSym">@</text>
+        <text x="38.0" y="43.4" class="layerSym">/</text>
       </g>
       <g transform="translate(510)">
         <rect width="52" height="52" rx="5" ry="5"/>
@@ -244,7 +245,7 @@
         <text x="12.8" y="20.6" class="level2">&lt;</text>
         <text x="30.0" y="43.4" class="layerNav">🖰</text>
         <text x="42.0" y="43.4" class="layerNav">↑</text>
-        <text x="38.0" y="43.4" class="layerSym">#</text>
+        <text x="38.0" y="43.4" class="layerSym">;</text>
       </g>
       <g transform="translate(570)">
         <rect width="52" height="52" rx="5" ry="5"/>
@@ -252,7 +253,7 @@
         <text x="12.8" y="20.6" class="level2">&gt;</text>
         <text x="30.0" y="43.4" class="layerNav">🖰</text>
         <text x="38.0" y="43.4" class="layerNav">→</text>
-        <text x="38.0" y="43.4" class="layerSym">!</text>
+        <text x="38.0" y="43.4" class="layerSym">:</text>
       </g>
       <g transform="translate(630)">
         <rect width="52" height="52" rx="5" ry="5"/>
@@ -279,7 +280,7 @@
     <g transform="translate(510)">
       <rect width="82" height="52" rx="5" ry="5"/>
       <rect width="41" height="26" rx="2" ry="2" class="dualKey"/>
-      <text x="20.5" y="42.8" class="layerMod colorSym shortcut">prog</text>
+      <text x="20.5" y="42.8" class="layerMod colorSym shortcut">sym</text>
       <text x="61.5" y="42.8" class="layerNav">⎋</text>
       <text x="20.5" y="22.6" class="level2">⏎</text>
     </g>

+ 3 - 3
img/base.svg

@@ -2,12 +2,12 @@
 
   <style>
     rect, path {
+      fill: #f8f8f8;
       stroke: #666;
       stroke-width: .5px;
-      fill: #fff;
     }
     text {
-      fill: #ccc;
+      fill: #999;
       font: normal 20px sans-serif;
       text-align: center;
     }
@@ -27,7 +27,7 @@
 
     @media (prefers-color-scheme: dark) {
       text       { fill: #888; }
-      rect, path { fill: #555; }
+      rect, path { fill: #444; }
       .layer     { fill: #eee; }
     }
   </style>

+ 5 - 5
img/index.html

@@ -16,15 +16,15 @@
   </style>
 </head>
 <body>
-	<h1> Selenium33
+  <h1> Arsenik
   <img src="all.svg">
-  <h2> Base Layer
+  <h2> Base
   <img src="base.svg">
-  <h2> Prog Layer
+  <h2> Symbols
   <img src="symbols.svg">
-  <h2> Navigation Layer
+  <h2> Navigation
   <img src="navigation.svg">
-  <h2> NumRow Layer
+  <h2> NumRow
   <img src="numrow.svg">
 </body>
 </html>

+ 33 - 35
img/navigation.svg

@@ -20,15 +20,13 @@
     .left   { transform: translate(-15px, 0); }
     .right  { transform: translate(+15px, 0); }
 
-    .layer    { font-size: 14px; }
+    .layer    { font-size: 14px; font-weight: bold; }
+    .layerNav { fill: #e83; font-weight: bold; }
     .shortcut { font-size: smaller; }
-    .level3 { fill: #e83; font-weight: bold; }
-    .active { fill: #ddd; }
 
     @media (prefers-color-scheme: dark) {
       text    { fill: #888; }
       rect    { fill: #444; }
-      .active { fill: #666; }
     }
   </style>
 
@@ -41,17 +39,17 @@
       <g transform="translate(150)">
         <rect width="52" height="52" rx="5" ry="5"/>
         <text x="12.8" y="20.6" class="level2">W</text>
-        <text x="38.0" y="43.4" class="level3 shortcut">^w</text>
+        <text x="38.0" y="43.4" class="layerNav shortcut">^w</text>
       </g>
       <g transform="translate(210)">
         <rect width="52" height="52" rx="5" ry="5"/>
         <text x="12.8" y="20.6" class="level2">E</text>
-        <text x="38.0" y="43.4" class="level3">⎗</text>
+        <text x="38.0" y="43.4" class="layerNav">⎗</text>
       </g>
       <g transform="translate(270)">
         <rect width="52" height="52" rx="5" ry="5"/>
         <text x="12.8" y="20.6" class="level2">R</text>
-        <text x="38.0" y="43.4" class="level3">⎘</text>
+        <text x="38.0" y="43.4" class="layerNav">⎘</text>
       </g>
       <g transform="translate(330)">
         <rect width="52" height="52" rx="5" ry="5"/>
@@ -62,22 +60,22 @@
       <g transform="translate(390)">
         <rect width="52" height="52" rx="5" ry="5"/>
         <text x="12.8" y="20.6" class="level2">Y</text>
-        <text x="38.0" y="43.4" class="level3">⇱</text>
+        <text x="38.0" y="43.4" class="layerNav">⇱</text>
       </g>
       <g transform="translate(450)">
         <rect width="52" height="52" rx="5" ry="5"/>
         <text x="12.8" y="20.6" class="level2">U</text>
-        <text x="38.0" y="43.4" class="level3">⇟</text>
+        <text x="38.0" y="43.4" class="layerNav">⇟</text>
       </g>
       <g transform="translate(510)">
         <rect width="52" height="52" rx="5" ry="5"/>
         <text x="12.8" y="20.6" class="level2">I</text>
-        <text x="38.0" y="43.4" class="level3">⇞</text>
+        <text x="38.0" y="43.4" class="layerNav">⇞</text>
       </g>
       <g transform="translate(570)">
         <rect width="52" height="52" rx="5" ry="5"/>
         <text x="12.8" y="20.6" class="level2">O</text>
-        <text x="38.0" y="43.4" class="level3">⇲</text>
+        <text x="38.0" y="43.4" class="layerNav">⇲</text>
       </g>
       <g transform="translate(630)">
         <rect width="52" height="52" rx="5" ry="5"/>
@@ -91,22 +89,22 @@
       <g transform="translate(90)">
         <rect width="52" height="52" rx="5" ry="5"/>
         <text x="12.8" y="20.6" class="level2">A</text>
-        <text x="38.0" y="43.4" class="level3 shortcut">^a</text>
+        <text x="38.0" y="43.4" class="layerNav shortcut">^a</text>
       </g>
       <g transform="translate(150)">
         <rect width="52" height="52" rx="5" ry="5"/>
         <text x="12.8" y="20.6" class="level2">S</text>
-        <text x="38.0" y="43.4" class="level3 shortcut">^s</text>
+        <text x="38.0" y="43.4" class="layerNav shortcut">^s</text>
       </g>
       <g transform="translate(210)">
         <rect width="52" height="52" rx="5" ry="5"/>
         <text x="12.8" y="20.6" class="level2">D</text>
-        <text x="38.0" y="43.4" class="level3">⇤</text>
+        <text x="38.0" y="43.4" class="layerNav">⇤</text>
       </g>
       <g transform="translate(270)">
         <rect width="52" height="52" rx="5" ry="5"/>
         <text x="12.8" y="20.6" class="level2">F</text>
-        <text x="38.0" y="43.4" class="level3">⇥</text>
+        <text x="38.0" y="43.4" class="layerNav">⇥</text>
       </g>
       <g transform="translate(330)">
         <rect width="52" height="52" rx="5" ry="5"/>
@@ -117,22 +115,22 @@
       <g transform="translate(390)">
         <rect width="52" height="52" rx="5" ry="5"/>
         <text x="12.8" y="20.6" class="level2">H</text>
-        <text x="38.0" y="43.4" class="level3">←</text>
+        <text x="38.0" y="43.4" class="layerNav">←</text>
       </g>
       <g transform="translate(450)">
         <rect width="52" height="52" rx="5" ry="5"/>
         <text x="12.8" y="20.6" class="level2">J</text>
-        <text x="38.0" y="43.4" class="level3">↓</text>
+        <text x="38.0" y="43.4" class="layerNav">↓</text>
       </g>
       <g transform="translate(510)">
         <rect width="52" height="52" rx="5" ry="5"/>
         <text x="12.8" y="20.6" class="level2">K</text>
-        <text x="38.0" y="43.4" class="level3">↑</text>
+        <text x="38.0" y="43.4" class="layerNav">↑</text>
       </g>
       <g transform="translate(570)">
         <rect width="52" height="52" rx="5" ry="5"/>
         <text x="12.8" y="20.6" class="level2">L</text>
-        <text x="38.0" y="43.4" class="level3">→</text>
+        <text x="38.0" y="43.4" class="layerNav">→</text>
       </g>
       <g transform="translate(630)">
         <rect width="52" height="52" rx="5" ry="5"/>
@@ -147,22 +145,22 @@
       <g transform="translate(90)">
         <rect width="52" height="52" rx="5" ry="5"/>
         <text x="12.8" y="20.6" class="level2">Z</text>
-        <text x="38.0" y="43.4" class="level3 shortcut">^z</text>
+        <text x="38.0" y="43.4" class="layerNav shortcut">^z</text>
       </g>
       <g transform="translate(150)">
         <rect width="52" height="52" rx="5" ry="5"/>
         <text x="12.8" y="20.6" class="level2">X</text>
-        <text x="38.0" y="43.4" class="level3 shortcut">^x</text>
+        <text x="38.0" y="43.4" class="layerNav shortcut">^x</text>
       </g>
       <g transform="translate(210)">
         <rect width="52" height="52" rx="5" ry="5"/>
         <text x="12.8" y="20.6" class="level2">C</text>
-        <text x="38.0" y="43.4" class="level3 shortcut">^c</text>
+        <text x="38.0" y="43.4" class="layerNav shortcut">^c</text>
       </g>
       <g transform="translate(270)">
         <rect width="52" height="52" rx="5" ry="5"/>
         <text x="12.8" y="20.6" class="level2">V</text>
-        <text x="38.0" y="43.4" class="level3 shortcut">^v</text>
+        <text x="38.0" y="43.4" class="layerNav shortcut">^v</text>
       </g>
       <g transform="translate(330)">
         <rect width="52" height="52" rx="5" ry="5"/>
@@ -173,28 +171,28 @@
       <g transform="translate(390)">
         <rect width="52" height="52" rx="5" ry="5"/>
         <text x="12.8" y="20.6" class="level2">N</text>
-        <text x="30.0" y="43.4" class="level3">🖰</text>
-        <text x="38.0" y="43.4" class="level3">←</text>
+        <text x="30.0" y="43.4" class="layerNav">🖰</text>
+        <text x="38.0" y="43.4" class="layerNav">←</text>
       </g>
       <g transform="translate(450)">
         <rect width="52" height="52" rx="5" ry="5"/>
         <text x="12.8" y="20.6" class="level2">M</text>
-        <text x="30.0" y="43.4" class="level3">🖰</text>
-        <text x="42.0" y="43.4" class="level3">↓</text>
+        <text x="30.0" y="43.4" class="layerNav">🖰</text>
+        <text x="42.0" y="43.4" class="layerNav">↓</text>
       </g>
       <g transform="translate(510)">
         <rect width="52" height="52" rx="5" ry="5"/>
         <text x="12.8" y="43.4" class="level1">,</text>
         <text x="12.8" y="20.6" class="level2">&lt;</text>
-        <text x="30.0" y="43.4" class="level3">🖰</text>
-        <text x="42.0" y="43.4" class="level3">↑</text>
+        <text x="30.0" y="43.4" class="layerNav">🖰</text>
+        <text x="42.0" y="43.4" class="layerNav">↑</text>
       </g>
       <g transform="translate(570)">
         <rect width="52" height="52" rx="5" ry="5"/>
         <text x="12.8" y="43.4" class="level1">.</text>
         <text x="12.8" y="20.6" class="level2">&gt;</text>
-        <text x="30.0" y="43.4" class="level3">🖰</text>
-        <text x="38.0" y="43.4" class="level3">→</text>
+        <text x="30.0" y="43.4" class="layerNav">🖰</text>
+        <text x="38.0" y="43.4" class="layerNav">→</text>
       </g>
       <g transform="translate(630)">
         <rect width="52" height="52" rx="5" ry="5"/>
@@ -208,16 +206,16 @@
     <g transform="translate(180)">
       <rect width="82" height="52" rx="5" ry="5"/>
       <text x="12.8" y="20.6" class="level2" style="font-size: 14px;">⌫</text>
-      <text x="64.8" y="42.8" class="level3" style="font-size: 14px;">⌦</text>
+      <text x="64.8" y="42.8" class="layerNav" style="font-size: 14px;">⌦</text>
     </g>
     <g class="homeKey" transform="translate(270)">
-      <rect width="232" height="52" rx="5" ry="5" class="active"/>
-      <text x="58.0" y="42.8" class="layer level3">navigation</text>
+      <rect width="232" height="52" rx="5" ry="5" class="layerNav"/>
+      <text x="58.0" y="42.8" class="layer">navigation</text>
     </g>
     <g transform="translate(510)">
       <rect width="82" height="52" rx="5" ry="5"/>
       <text x="12.8" y="23.6" class="level2">⏎</text>
-      <text x="64.8" y="42.8" class="level3">⎋</text>
+      <text x="64.8" y="42.8" class="layerNav">⎋</text>
     </g>
   </g>
 

+ 5 - 7
img/numrow.svg

@@ -23,12 +23,10 @@
     .layer  { font-size: 14px; font-weight: bold; }
     .layerNum { fill: green; }
     .layerSym { fill: blue; }
-    .active   { fill: #ddd; }
 
     @media (prefers-color-scheme: dark) {
       text      { fill: #888; }
       rect      { fill: #444; }
-      .active   { fill: #666; }
       .layerNum { fill: #6d6; }
       .layerSym { fill: #99f; }
     }
@@ -205,17 +203,17 @@
 
   <g id="row_AA">
     <g transform="translate(180)">
-      <rect width="82" height="52" rx="5" ry="5" class="active"/>
-      <text x="20.5" y="20.6" class="level2" style="font-size: 14px;">⌫</text>
-      <text x="20.5" y="42.8" class="layer layerNum">num</text>
+      <rect width="82" height="52" rx="5" ry="5" class="layerNum"/>
+      <!-- <text x="20.5" y="20.6" class="level2" style="font-size: 14px;">⌫</text> -->
+      <text x="20.5" y="42.8" class="layer">num</text>
     </g>
     <g transform="translate(270)">
       <rect width="232" height="52" rx="5" ry="5"/>
     </g>
     <g transform="translate(510)">
       <rect width="82" height="52" rx="5" ry="5"/>
-      <text x="20.5" y="23.6" class="level2">⏎</text>
-      <text x="20.5" y="42.8" class="layer layerSym">prog</text>
+      <!-- <text x="20.5" y="23.6" class="level2">⏎</text> -->
+      <text x="20.5" y="42.8" class="layer layerSym">sym</text>
     </g>
   </g>
 

+ 20 - 22
img/symbols.svg

@@ -23,12 +23,10 @@
     .layer  { font-size: 14px; font-weight: bold; }
     .layerNum { fill: green; }
     .layerSym { fill: blue; }
-    .active   { fill: #ddd; }
 
     @media (prefers-color-scheme: dark) {
       text      { fill: #888; }
       rect      { fill: #444; }
-      .active   { fill: #666; }
       .layerNum { fill: #6d6; }
       .layerSym { fill: #99f; }
     }
@@ -40,7 +38,7 @@
         <rect width="52" height="52" rx="5" ry="5"/>
         <g class="key" text-anchor="middle">
           <text x="12.8" y="20.6" class="level2">Q</text>
-          <text x="38.0" y="43.4" class="layerSym">1</text>
+          <text x="38.0" y="43.4" class="layerSym">@</text>
         </g>
       </g>
       <g transform="translate(150)">
@@ -91,7 +89,7 @@
         <rect width="52" height="52" rx="5" ry="5"/>
         <g class="key" text-anchor="middle">
           <text x="12.8" y="20.6" class="level2">I</text>
-          <text x="38.0" y="43.4" class="layerSym">*</text>
+          <text x="38.0" y="43.4" class="layerSym">"</text>
         </g>
       </g>
       <g transform="translate(570)">
@@ -105,7 +103,7 @@
         <rect width="52" height="52" rx="5" ry="5"/>
         <g class="key" text-anchor="middle">
           <text x="12.8" y="20.6" class="level2">P</text>
-          <text x="38.0" y="43.4" class="layerSym">0</text>
+          <text x="38.0" y="43.4" class="layerSym">`</text>
         </g>
       </g>
     </g>
@@ -145,7 +143,7 @@
         <rect width="52" height="52" rx="5" ry="5"/>
         <g class="key" text-anchor="middle">
           <text x="12.8" y="20.6" class="level2">G</text>
-          <text x="38.0" y="43.4" class="layerSym">=</text>
+          <text x="38.0" y="43.4" class="layerSym">_</text>
         </g>
       </g>
     </g>
@@ -154,28 +152,28 @@
         <rect width="52" height="52" rx="5" ry="5"/>
         <g class="key" text-anchor="middle">
           <text x="12.8" y="20.6" class="level2">H</text>
-          <text x="38.0" y="43.4" class="layerSym">+</text>
+          <text x="38.0" y="43.4" class="layerSym">|</text>
         </g>
       </g>
       <g transform="translate(450)">
         <rect width="52" height="52" rx="5" ry="5"/>
         <g class="key" text-anchor="middle">
           <text x="12.8" y="20.6" class="level2">J</text>
-          <text x="38.0" y="43.4" class="layerSym">-</text>
+          <text x="38.0" y="43.4" class="layerSym">+</text>
         </g>
       </g>
       <g transform="translate(510)">
         <rect width="52" height="52" rx="5" ry="5"/>
         <g class="key" text-anchor="middle">
           <text x="12.8" y="20.6" class="level2">K</text>
-          <text x="38.0" y="43.4" class="layerSym">&lt;</text>
+          <text x="38.0" y="43.4" class="layerSym">-</text>
         </g>
       </g>
       <g transform="translate(570)">
         <rect width="52" height="52" rx="5" ry="5"/>
         <g class="key" text-anchor="middle">
           <text x="12.8" y="20.6" class="level2">L</text>
-          <text x="38.0" y="43.4" class="layerSym">&gt;</text>
+          <text x="38.0" y="43.4" class="layerSym">*</text>
         </g>
       </g>
       <g transform="translate(630)">
@@ -183,7 +181,7 @@
         <g class="key" text-anchor="middle">
           <text x="12.8" y="43.4" class="level1">;</text>
           <text x="12.8" y="20.6" class="level2">:</text>
-          <text x="38.0" y="43.4" class="layerSym">"</text>
+          <text x="38.0" y="43.4" class="layerSym">!</text>
         </g>
       </g>
     </g>
@@ -202,28 +200,28 @@
         <rect width="52" height="52" rx="5" ry="5"/>
         <g class="key" text-anchor="middle">
           <text x="12.8" y="20.6" class="level2">X</text>
-          <text x="38.0" y="43.4" class="layerSym">`</text>
+          <text x="38.0" y="43.4" class="layerSym">&lt;</text>
         </g>
       </g>
       <g transform="translate(210)">
         <rect width="52" height="52" rx="5" ry="5"/>
         <g class="key" text-anchor="middle">
           <text x="12.8" y="20.6" class="level2">C</text>
-          <text x="38.0" y="43.4" class="layerSym">|</text>
+          <text x="38.0" y="43.4" class="layerSym">&gt;</text>
         </g>
       </g>
       <g transform="translate(270)">
         <rect width="52" height="52" rx="5" ry="5"/>
         <g class="key" text-anchor="middle">
           <text x="12.8" y="20.6" class="level2">V</text>
-          <text x="38.0" y="43.4" class="layerSym">_</text>
+          <text x="38.0" y="43.4" class="layerSym"> = </text>
         </g>
       </g>
       <g transform="translate(330)">
         <rect width="52" height="52" rx="5" ry="5"/>
         <g class="key" text-anchor="middle">
           <text x="12.8" y="20.6" class="level2">B</text>
-          <text x="38.0" y="43.4" class="layerSym">/</text>
+          <text x="38.0" y="43.4" class="layerSym">#</text>
         </g>
       </g>
     </g>
@@ -239,7 +237,7 @@
         <rect width="52" height="52" rx="5" ry="5"/>
         <g class="key" text-anchor="middle">
           <text x="12.8" y="20.6" class="level2">M</text>
-          <text x="38.0" y="43.4" class="layerSym">@</text>
+          <text x="38.0" y="43.4" class="layerSym">/</text>
         </g>
       </g>
       <g transform="translate(510)">
@@ -247,7 +245,7 @@
         <g class="key" text-anchor="middle">
           <text x="12.8" y="43.4" class="level1">,</text>
           <text x="12.8" y="20.6" class="level2">&lt;</text>
-          <text x="38.0" y="43.4" class="layerSym">#</text>
+          <text x="38.0" y="43.4" class="layerSym">;</text>
         </g>
       </g>
       <g transform="translate(570)">
@@ -255,7 +253,7 @@
         <g class="key" text-anchor="middle">
           <text x="12.8" y="43.4" class="level1">.</text>
           <text x="12.8" y="20.6" class="level2">&gt;</text>
-          <text x="38.0" y="43.4" class="layerSym">!</text>
+          <text x="38.0" y="43.4" class="layerSym">:</text>
         </g>
       </g>
       <g transform="translate(630)">
@@ -272,16 +270,16 @@
   <g id="row_AA">
     <g transform="translate(180)">
       <rect width="82" height="52" rx="5" ry="5"/>
-      <text x="20.5" y="20.6" class="level2" style="font-size: 14px;">⌫</text>
+      <!-- <text x="20.5" y="20.6" class="level2" style="font-size: 14px;">⌫</text> -->
       <text x="20.5" y="42.8" class="layer layerNum">num</text>
     </g>
     <g transform="translate(270)">
       <rect width="232" height="52" rx="5" ry="5"/>
     </g>
     <g transform="translate(510)">
-      <rect width="82" height="52" rx="5" ry="5" class="active"/>
-      <text x="20.5" y="23.6" class="level2">⏎</text>
-      <text x="20.5" y="42.8" class="layer layerSym">prog</text>
+      <rect width="82" height="52" rx="5" ry="5" class="layerSym"/>
+      <!-- <text x="20.5" y="23.6" class="level2">⏎</text> -->
+      <text x="20.5" y="42.8" class="layer">sym</text>
     </g>
   </g>
 

+ 39 - 0
kanata/README.md

@@ -0,0 +1,39 @@
+kanata
+================================================================================
+
+
+Pick Your Poison
+--------------------------------------------------------------------------------
+
+| type  | with homerow-mods      | without homerow-mods        | suitable layouts                  |
+| ----- | ---------------------- | --------------------------- | --------------------------------- |
+| ANSI  | [arsenik_ansi.kbd][1]  | [arsenik_easy_ansi.kbd][3]  | QWERTY, Dvorak, Colemak, Workman… |
+| AltGr | [arsenik_altgr.kbd][2] | [arsenik_easy_altgr.kbd][4] | [Lafayette42][10], [Ergo-L][11]…  |
+
+[1]: arsenik_ansi.kbd
+[2]: arsenik_altgr.kbd
+[3]: arsenik_easy_ansi.kbd
+[4]: arsenik_easy_altgr.kbd
+
+- ANSI variants assume all symbols in your keyboard layout are in their
+QWERTY-ANSI positions: works fine with most US layouts but Dvorak users will get
+a slightly different <kbd>Prog</kbd> layer.
+- AltGr variants use your layout’s AltGr layer instead of the <kbd>Prog</kbd>
+layer: perfect for layouts that already have an optimized AltGr layer, such as
+[QWERTY-Lafayette][10] and [Ergo-L][11].
+- “Easy” variants don’t use any homerow-mods and leave the left thumb key
+modifier unchanged — but they still use a <kbd>Prog</kbd> layer and put the
+<kbd>Backspace</kbd> and <kbd>Return</kbd> keys under the thumbs. A good
+starting point if you’re new to dual keys.
+
+[10]: https://qwerty-lafayette.org/42
+[11]: https://ergol.org
+
+Note that kanata can also use the laptop’s trackpoint buttons (e.g. ThinkPad)
+as two additional thumb keys. :-)
+
+
+Installation
+--------------------------------------------------------------------------------
+
+TBD — see [kanata](https://github.com/jtroo/kanata).

+ 16 - 16
kanata.kbd

@@ -20,33 +20,33 @@
 ;;  - right: Vim-like arrows on HJKL, home/end page up/down, mouse scroll
 ;;  - left: one-hand shortcuts (Ctrl-WASZXCV), Tab/Shift-Tab, prev/next
 (deflayer vimnav
-  lrld C-w  bck  fwd  _    home pgdn pgup end  _
-  C-a  C-s S-tab tab  _    lft  down up   rght _
-  C-z  C-x  C-c  C-v  _    @mwl @mwd @mwu @mwr _
+  lrld C-w  bck  fwd  XX   home pgdn pgup end  XX
+  C-a  C-s S-tab tab  XX   lft  down up   rght XX
+  C-z  C-x  C-c  C-v  XX   @mwl @mwd @mwu @mwr XX
        del            _              esc
 )
 
-;; Symbol layer (just an AltGr layer for now)
+;; Symbol layer (= AltGr except for the left thumb key)
 (deflayer symbols
   RA-q RA-w RA-e RA-r RA-t RA-y RA-u RA-i RA-o RA-p
   RA-a RA-s RA-d RA-f RA-g RA-h RA-j RA-k RA-l RA-;
   RA-z RA-x RA-c RA-v RA-b RA-n RA-m RA-, RA-. RA-/
-       @num           spc            -
+       @num           spc            _
 )
 
 ;; Numrow layer
 (deflayer numrow
   S-1  S-2  S-3  S-4  S-5  S-6  S-7  S-8  S-9  S-0
   1    2    3    4    5    6    7    8    9    0
-  _    _    _    _    _    _    -    ,    .    /
-       @sft           S-spc          @alt
+  XX   XX   XX   XX   XX   S--  -    ,    .    /
+       @sft           S-spc          @sym
 )
 
 ;; Special key aliases
 (defalias
   ;; Main mod-tap: VimNav layer when hold, Space when tapped.
-  ;; The space key must be hold long enough (200ms) to become a layer shift.
-  nav (tap-hold 200 200 spc (layer-toggle vimnav))
+  ;; The space key must be hold long enough (300ms) to become a layer shift.
+  nav (tap-hold 200 300 spc (layer-toggle vimnav))
 
   ;; Space-cadet thumb keys: Shift/BackSpace, AltGr/Return
   ;;  - acts as a modifier by default, or as BS/Ret when tapped separately;
@@ -60,13 +60,13 @@
   num (layer-toggle numrow)
 
   ;; Home-row mods
-  ;; Must be hold long enough (200ms) to become a modifier.
-  ss (tap-hold 200 200 s lmet)
-  dd (tap-hold 200 200 d lalt)
-  ff (tap-hold 200 200 f lctl)
-  jj (tap-hold 200 200 j rctl)
-  kk (tap-hold 200 200 k lalt)
-  ll (tap-hold 200 200 l rmet)
+  ;; Must be hold long enough (300ms) to become a modifier.
+  ss (tap-hold 200 300 s lmet)
+  dd (tap-hold 200 300 d lalt)
+  ff (tap-hold 200 300 f lctl)
+  jj (tap-hold 200 300 j rctl)
+  kk (tap-hold 200 300 k lalt)
+  ll (tap-hold 200 300 l rmet)
 
   ;; Mouse wheel emulation
   mwu (mwheel-up    50 120)

+ 80 - 0
kanata/arsenik_ansi.kbd

@@ -0,0 +1,80 @@
+;; ANSI sub-layer (let kanata ignore all other keys)
+(defsrc
+  q    w    e    r    t    y    u    i    o    p
+  a    s    d    f    g    h    j    k    l    ;
+  z    x    c    v    b    n    m    ,    .    /
+       lalt           spc            ralt
+)
+
+;; Base layer (active by default when kanata starts up):
+;;  - home-row mods on SDF and JKL
+;;  - the 3 main thumb keys become mod/taps
+(deflayer qwerty
+  _    _    _    _    _    _    _    _    _    _
+  _    @ss  @dd  @ff  _    _    @jj  @kk  @ll  _
+  _    _    _    _    _    _    _    _    _    _
+       @sft           @nav           @sym
+)
+
+;; Navigation layer:
+;;  - right: Vim-like arrows on HJKL, home/end page up/down, mouse scroll
+;;  - left: one-hand shortcuts (Ctrl-WASZXCV), Tab/Shift-Tab, prev/next
+(deflayer vimnav
+  lrld C-w  bck  fwd  XX   home pgdn pgup end  XX
+  C-a  C-s S-tab tab  XX   lft  down up   rght XX
+  C-z  C-x  C-c  C-v  XX   @mwl @mwd @mwu @mwr XX
+       del            _              esc
+)
+
+;; Symbol layer
+(deflayer symbols
+  1    [    ]    S-4  S-5  S-6  S-7  S-8  '    0
+  S-[  S-9  S-0  S-]  =    S-=  -    S-,  S-.  S-'
+  @tld grv  S-\  S--  /    \    S-2  S-3  S-1  S-/
+       @num           spc            @alt
+)
+
+;; Numrow layer
+(deflayer numrow
+  S-1  S-2  S-3  S-4  S-5  S-6  S-7  S-8  S-9  S-0
+  1    2    3    4    5    6    7    8    9    0
+  XX   XX   XX   XX   XX   S--  -    ,    .    /
+       @sft           S-spc          @sym
+)
+
+;; Special key aliases
+(defalias
+  tld S-grv
+
+  ;; Main mod-tap: VimNav layer when hold, Space when tapped.
+  ;; The space key must be hold long enough (300ms) to become a layer shift.
+  nav (tap-hold 200 300 spc (layer-toggle vimnav))
+
+  ;; Space-cadet thumb keys: Shift/BackSpace, AltGr/Return
+  ;;  - acts as a modifier by default, or as BS/Ret when tapped separately;
+ ;;  - works great with Qwerty-Lafayette and Ergo-L keyboard layouts, where
+  ;;    neither Shift nor AltGr are used outside of the 3×10 main alpha keys.
+  sft (tap-hold-press 200 200 bspc lsft)
+  alt (tap-hold-press 200 200 ret ralt)
+  sym (tap-hold-press 200 200 ret (layer-toggle symbols))
+
+  ;; NumRow layer shifter
+  num (layer-toggle numrow)
+
+  ;; Home-row mods
+  ;; Must be hold long enough (300ms) to become a modifier.
+  ss (tap-hold 200 300 s lmet)
+  dd (tap-hold 200 300 d lalt)
+  ff (tap-hold 200 300 f lctl)
+  jj (tap-hold 200 300 j rctl)
+  kk (tap-hold 200 300 k ralt)
+  ll (tap-hold 200 300 l rmet)
+
+  ;; Mouse wheel emulation
+  mwu (mwheel-up    50 120)
+  mwd (mwheel-down  50 120)
+  mwl (mwheel-left  50 120)
+  mwr (mwheel-right 50 120)
+)
+
+;; vim: set ft=lisp

+ 68 - 0
kanata/arsenik_easy_altgr.kbd

@@ -0,0 +1,68 @@
+;; ANSI sub-layer (let kanata ignore all other keys)
+(defsrc
+  q    w    e    r    t    y    u    i    o    p
+  a    s    d    f    g    h    j    k    l    ;
+  z    x    c    v    b    n    m    ,    .    /
+       lalt           spc            ralt
+)
+
+;; Base layer (active by default when kanata starts up):
+;;  - the 3 main thumb keys become mod/taps
+(deflayer qwerty
+  _    _    _    _    _    _    _    _    _    _
+  _    _    _    _    _    _    _    _    _    _
+  _    _    _    _    _    _    _    _    _    _
+       @sft           @nav           @sym
+)
+
+;; Navigation layer:
+;;  - right: Vim-like arrows on HJKL, home/end page up/down, mouse scroll
+;;  - left: one-hand shortcuts (Ctrl-WASZXCV), Tab/Shift-Tab, prev/next
+(deflayer vimnav
+  lrld C-w  bck  fwd  XX   home pgdn pgup end  XX
+  C-a  C-s S-tab tab  XX   lft  down up   rght XX
+  C-z  C-x  C-c  C-v  XX   @mwl @mwd @mwu @mwr XX
+       del            _              esc
+)
+
+;; Symbol layer (= AltGr except for the left thumb key)
+(deflayer symbols
+  RA-q RA-w RA-e RA-r RA-t RA-y RA-u RA-i RA-o RA-p
+  RA-a RA-s RA-d RA-f RA-g RA-h RA-j RA-k RA-l RA-;
+  RA-z RA-x RA-c RA-v RA-b RA-n RA-m RA-, RA-. RA-/
+       @num           spc            _
+)
+
+;; Numrow layer
+(deflayer numrow
+  S-1  S-2  S-3  S-4  S-5  S-6  S-7  S-8  S-9  S-0
+  1    2    3    4    5    6    7    8    9    0
+  XX   XX   XX   XX   XX   S--  -    ,    .    /
+       @sft           S-spc          @sym
+)
+
+;; Special key aliases
+(defalias
+  ;; Main mod-tap: VimNav layer when hold, Space when tapped.
+  ;; The space key must be hold long enough (300ms) to become a layer shift.
+  nav (tap-hold 200 300 spc (layer-toggle vimnav))
+
+  ;; Space-cadet thumb keys: Shift/BackSpace, AltGr/Return
+  ;;  - acts as a modifier by default, or as BS/Ret when tapped separately;
+  ;;  - works great with Qwerty-Lafayette and Ergo-L keyboard layouts, where
+  ;;    neither Shift nor AltGr are used outside of the 3×10 main alpha keys.
+  sft (tap-hold-press 200 200 bspc lsft)
+  alt (tap-hold-press 200 200 ret ralt)
+  sym (tap-hold-press 200 200 ret (layer-toggle symbols))
+
+  ;; NumRow layer shifter
+  num (layer-toggle numrow)
+
+  ;; Mouse wheel emulation
+  mwu (mwheel-up    50 120)
+  mwd (mwheel-down  50 120)
+  mwl (mwheel-left  50 120)
+  mwr (mwheel-right 50 120)
+)
+
+;; vim: set ft=lisp

+ 70 - 0
kanata/arsenik_easy_ansi.kbd

@@ -0,0 +1,70 @@
+;; ANSI sub-layer (let kanata ignore all other keys)
+(defsrc
+  q    w    e    r    t    y    u    i    o    p
+  a    s    d    f    g    h    j    k    l    ;
+  z    x    c    v    b    n    m    ,    .    /
+       lalt           spc            ralt
+)
+
+;; Base layer (active by default when kanata starts up):
+;;  - the 3 main thumb keys become mod/taps
+(deflayer qwerty
+  _    _    _    _    _    _    _    _    _    _
+  _    _    _    _    _    _    _    _    _    _
+  _    _    _    _    _    _    _    _    _    _
+       @sft           @nav           @sym
+)
+
+;; Navigation layer:
+;;  - right: Vim-like arrows on HJKL, home/end page up/down, mouse scroll
+;;  - left: one-hand shortcuts (Ctrl-WASZXCV), Tab/Shift-Tab, prev/next
+(deflayer vimnav
+  lrld C-w  bck  fwd  XX   home pgdn pgup end  XX
+  C-a  C-s S-tab tab  XX   lft  down up   rght XX
+  C-z  C-x  C-c  C-v  XX   @mwl @mwd @mwu @mwr XX
+       del            _              esc
+)
+
+;; Symbol layer
+(deflayer symbols
+  1    [    ]    S-4  S-5  S-6  S-7  S-8  '    0
+  S-[  S-9  S-0  S-]  =    S-=  -    S-,  S-.  S-'
+  @tld grv  S-\  S--  /    \    S-2  S-3  S-1  S-/
+  _    @num           spc            @alt _    _
+)
+
+;; Numrow layer
+(deflayer numrow
+  S-1  S-2  S-3  S-4  S-5  S-6  S-7  S-8  S-9  S-0
+  1    2    3    4    5    6    7    8    9    0
+  XX   XX   XX   XX   XX   S--  -    ,    .    /
+       @sft           S-spc          @sym
+)
+
+;; Special key aliases
+(defalias
+  tld S-grv
+
+  ;; Main mod-tap: VimNav layer when hold, Space when tapped.
+  ;; The space key must be hold long enough (300ms) to become a layer shift.
+  nav (tap-hold 200 300 spc (layer-toggle vimnav))
+
+  ;; Space-cadet thumb keys: Shift/BackSpace, AltGr/Return
+  ;;  - acts as a modifier by default, or as BS/Ret when tapped separately;
+  ;;  - works great with Qwerty-Lafayette and Ergo-L keyboard layouts, where
+  ;;    neither Shift nor AltGr are used outside of the 3×10 main alpha keys.
+  sft (tap-hold-press 200 200 bspc lsft)
+  alt (tap-hold-press 200 200 ret ralt)
+  sym (tap-hold-press 200 200 ret (layer-toggle symbols))
+
+  ;; NumRow layer shifter
+  num (layer-toggle numrow)
+
+  ;; Mouse wheel emulation
+  mwu (mwheel-up    50 120)
+  mwd (mwheel-down  50 120)
+  mwl (mwheel-left  50 120)
+  mwr (mwheel-right 50 120)
+)
+
+;; vim: set ft=lisp