Fabien Cazenave пре 1 година
родитељ
комит
920ac1507d
13 измењених фајлова са 302 додато и 246 уклоњено
  1. 61 31
      README.md
  2. 50 47
      img/all.svg
  3. BIN
      img/arsenik.png
  4. BIN
      img/arsenik.xcf
  5. 45 0
      img/base_easy.svg
  6. 64 0
      img/base_hrm.svg
  7. 9 5
      img/index.html
  8. 13 15
      img/symbols.svg
  9. 13 13
      kanata/README.md
  10. 11 37
      kanata/arsenik_easy_altgr.kbd
  11. 14 32
      kanata/arsenik_easy_ansi.kbd
  12. 10 36
      kanata/arsenik_altgr.kbd
  13. 12 30
      kanata/arsenik_ansi.kbd

+ 61 - 31
README.md

@@ -15,8 +15,7 @@ A basic [Miryoku][1]-like approach to minimize finger movements:
 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…
+layer, with a numpad, cursor navigation (<kbd>ESDF</kbd>) and one-hand shortcuts.
 
 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
@@ -32,41 +31,74 @@ Main Benefits
 --------------------------------------------------------------------------------
 
 - <kbd>Shift</kbd>, <kbd>Backspace</kbd>, <kbd>Return</kbd> under the thumbs!
-- all programming symbols in the comfortable 3×10 zone
+- all numbers and 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
 
-
-Using Arsenik
---------------------------------------------------------------------------------
-
 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.
 
-[Non-programmable keyboards are supported through kanata.](kanata)
 
-Programmable keyboards should be trivial to configure with QMK, ZMK,
-Kaleidoscope, etc.
+Pick Your Poison!
+--------------------------------------------------------------------------------
 
+Adjusting to compact keyboard layouts isn’t easy, but Arsenik is designed for
+a step-by-step approach.
 
-No numbers? No problem.
---------------------------------------------------------------------------------
+### 1. Supercharge Your Thumbs
+
+If you’re new to mod-taps, we suggest to start with the “easy” variants where
+only the thumbs are affected:
+
+- the left thumb key remains a <kbd>Cmd</kbd> or <kbd>Alt</kbd> key when hold,
+but emits a <kbd>Backspace</kbd> when tapped;
+- the right thumb key brings the <kbd>Symbols</kbd> layer when hold (similar to
+an <kbd>AltGr</kbd> key), and emits <kbd>Return</kbd> when tapped;
+- the spacebar brings the <kbd>Navigation</kbd> layer when when hold.
+
+![alt, navigation and sym layers under the thumbs](img/base_easy.svg)
+
+Having <kbd>Backspace</kbd> and <kbd>Enter</kbd> under the thumbs is enough to
+reduce the pinky fatigue very significantly. And using the <kbd>Symbol</kbd>
+and <kbd>Navigation</kbd> layer further reduces hand and finger movements.
 
-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:
+### 2. Enable the Home-Row Mods
 
-![NumRow layer on a 33-key keyboard](img/numrow.svg)
+When you are familiar with mod-taps, it’s time to enable them on the homerow
+with the “hrm” variants:
 
-- all digits are on the home row, in the order you already know
-- the upper row helps with <kbd>Shift</kbd>-digit shortcuts
-- the lower row has dash, comma, dot and slash signs to help with number / date
-inputs
+- <kbd>FDS</kbd> and <kbd>JKL</kbd> become <kbd>Ctrl</kbd>, <kbd>Alt</kbd>,
+<kbd>Super</kbd> when hold long enough;
+- the left thumb key can now emit a <kbd>Shift</kbd> rather than <kbd>Alt</kbd>
+wen hold.
 
-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.
+![homerow mods on SDF keys](img/base_hrm.svg)
+
+This is a very basic variant of the [Miryoku][1] principle: one layer on each
+thumb key, and symmetrical modifiers on the homerow.
+
+### 3. Spice It Up
+
+- the 300 ms delay before a key becomes a modifier has been chosen to be easy for
+beginners. Once used to mod-taps, you may want to reduce it so keyboard
+shortcuts can be done more quickly;
+- adding new layers should be easy, even without additional thumb keys — check the
+mods to get some ideas;
+- the right thumb key could do something more useful than <kbd>Enter</kbd> —
+like a one-time-shift, for instance.
+
+
+Downloads
+--------------------------------------------------------------------------------
+
+[Non-programmable keyboards are supported through kanata.](kanata)
+
+Other desktop implementations (kmonad, keyd…) would be nice to see as well.
+
+Programmable keyboards should be trivial to configure with QMK, ZMK,
+Kaleidoscope, etc.
 
 
 Related Projects
@@ -77,20 +109,18 @@ Related Projects
 - [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*.
+blatantly taken *as is*;
+- [Extend][4], [Neo][5], [Shaka34][6] for the <kbd>Navigation</kbd> layer.
 
-### Alternatives
+### Alternative Symbol Layers
 
-- [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
+- [Neo][5]
+- [Pascal Getreuer’s][7]
 
 ### Non-Goals
 
 - 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][5]’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]…).
@@ -100,13 +130,13 @@ AltGr layer at all (e.g. QWERTY, Colemak, Workman…), or an optimized AltGr lay
 [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/
+[6]: https://github.com/lobre/shaka34
+[7]: https://getreuer.info/posts/keyboards/symbol-layer/
 
 
 TODO
 --------------------------------------------------------------------------------
 
-- NumPad layer?
 - angle mods!
 - KMonad / Karabiner support
 - sample QMK / ZMK implementations for common keyboards

+ 50 - 47
img/all.svg

@@ -21,10 +21,12 @@
     .left   { transform: translate(-15px, 0); }
     .right  { transform: translate(+15px, 0); }
 
-    .shortcut { font-size: smaller; }
+    .shortcut { font-size: 10px; transform: translate(-3px,  -1px); }
     .layerSym { font-weight: normal; }
     .layerMod { font-weight: bold; font-size: 14px; }
-    .layerNav { font-weight: bold; transform: translateY(-22.6px); }
+    .layerNav { font-weight: bold; }
+    .layerNav { font-weight: bold; }
+    .right .layerNav { font-weight: normal; }
 
     .layerMod, .colorMod { fill: #333; }
     .layerSym, .colorSym { fill: blue; }
@@ -45,29 +47,31 @@
       <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="20.6" class="layerNav">⇥</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"/>
         <text x="12.8" y="20.6" class="level2">W</text>
-        <text x="38.0" y="43.4" class="layerNav shortcut">^w</text>
-        <text x="38.0" y="43.4" class="layerSym">[</text>
+        <text x="38.0" y="20.6" class="layerNav">⇱</text>
+        <text x="38.0" y="43.4" class="layerSym">&lt;</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="layerNav">⎗</text>
-        <text x="38.0" y="43.4" class="layerSym">]</text>
+        <text x="38.0" y="20.6" class="layerNav">↑</text>
+        <text x="38.0" y="43.4" class="layerSym">&gt;</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="layerNav">⎘</text>
+        <text x="38.0" y="20.6" class="layerNav">⇲</text>
         <text x="38.0" y="43.4" class="layerSym">$</text>
       </g>
       <g transform="translate(330)">
         <rect width="52" height="52" rx="5" ry="5"/>
         <text x="12.8" y="20.6" class="level2">T</text>
+        <text x="38.0" y="20.6" class="layerNav">⇞</text>
         <text x="38.0" y="43.4" class="layerSym">%</text>
       </g>
     </g>
@@ -75,25 +79,25 @@
       <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="layerNav">⇱</text>
+        <text x="38.0" y="20.6" class="layerNav">/</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"/>
         <text x="12.8" y="20.6" class="level2">U</text>
-        <text x="38.0" y="43.4" class="layerNav">⇟</text>
+        <text x="38.0" y="20.6" class="layerNav">7</text>
         <text x="38.0" y="43.4" class="layerSym">&amp;</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="layerNav">⇞</text>
-        <text x="38.0" y="43.4" class="layerSym">"</text>
+        <text x="38.0" y="20.6" class="layerNav">8</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"/>
         <text x="12.8" y="20.6" class="level2">O</text>
-        <text x="38.0" y="43.4" class="layerNav">⇲</text>
+        <text x="38.0" y="20.6" class="layerNav">9</text>
         <text x="38.0" y="43.4" class="layerSym">'</text>
       </g>
       <g transform="translate(630)">
@@ -109,7 +113,7 @@
       <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="layerNav shortcut">^a</text>
+        <text x="38.0" y="20.6" class="layerNav shortcut">all</text>
         <text x="38.0" y="43.4" class="layerSym">{</text>
       </g>
       <g transform="translate(150)">
@@ -117,7 +121,7 @@
         <rect width="26" height="26" rx="2" ry="2" class="dualKey"/>
         <text x="12.8" y="20.6" class="level2">S</text>
         <text x="12.8" y="43.4" class="layerMod">⌘</text>
-        <text x="38.0" y="43.4" class="layerNav shortcut">^s</text>
+        <text x="38.0" y="20.6" class="layerNav">←</text>
         <text x="38.0" y="43.4" class="layerSym">(</text>
       </g>
       <g transform="translate(210)">
@@ -125,7 +129,7 @@
         <rect width="26" height="26" rx="2" ry="2" class="dualKey"/>
         <text x="12.8" y="20.6" class="level2">D</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="20.6" class="layerNav">↓</text>
         <text x="38.0" y="43.4" class="layerSym">)</text>
       </g>
       <g transform="translate(270)">
@@ -133,28 +137,29 @@
         <rect width="26" height="26" rx="2" ry="2" class="dualKey"/>
         <text x="12.8" y="20.6" class="level2">F</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="20.6" class="layerNav">→</text>
         <text x="38.0" y="43.4" class="layerSym">}</text>
       </g>
       <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="20.6" class="layerNav">⇟</text>
+        <text x="38.0" y="43.4" class="layerSym"> = </text>
       </g>
     </g>
     <g class="right">
       <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="layerNav">←</text>
-        <text x="38.0" y="43.4" class="layerSym">|</text>
+        <text x="38.0" y="20.6" class="layerNav">-</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"/>
         <rect width="26" height="26" rx="2" ry="2" class="dualKey"/>
         <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="20.6" class="layerNav">4</text>
         <text x="38.0" y="43.4" class="layerSym">+</text>
       </g>
       <g transform="translate(510)">
@@ -162,7 +167,7 @@
         <rect width="26" height="26" rx="2" ry="2" class="dualKey"/>
         <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="20.6" class="layerNav">5</text>
         <text x="38.0" y="43.4" class="layerSym">-</text>
       </g>
       <g transform="translate(570)">
@@ -170,13 +175,14 @@
         <rect width="26" height="26" rx="2" ry="2" class="dualKey"/>
         <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">*</text>
+        <text x="38.0" y="20.6" class="layerNav">6</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="20.6" class="layerNav">0</text>
         <text x="38.0" y="43.4" class="layerSym">!</text>
       </g>
     </g>
@@ -188,7 +194,7 @@
         <rect width="52" height="52" rx="5" ry="5"/>
         <g>
           <text x="12.8" y="20.6" class="level2">Z</text>
-          <text x="38.0" y="43.4" class="layerNav shortcut">^z</text>
+          <text x="38.0" y="20.6" class="layerNav shortcut">undo</text>
           <text x="38.0" y="43.4" class="layerSym">~</text>
         </g>
       </g>
@@ -196,30 +202,31 @@
         <rect width="52" height="52" rx="5" ry="5"/>
         <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">&lt;</text>
+          <text x="38.0" y="20.6" class="layerNav shortcut">cut</text>
+          <text x="38.0" y="43.4" class="layerSym">[</text>
         </g>
       </g>
       <g transform="translate(210)">
         <rect width="52" height="52" rx="5" ry="5"/>
         <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">&gt;</text>
+          <text x="38.0" y="20.6" class="layerNav shortcut">copy</text>
+          <text x="38.0" y="43.4" class="layerSym">]</text>
         </g>
       </g>
       <g transform="translate(270)">
         <rect width="52" height="52" rx="5" ry="5"/>
         <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="20.6" class="layerNav shortcut">paste</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="20.6" class="layerNav">⇤</text>
           <text x="38.0" y="43.4" class="layerSym">#</text>
         </g>
       </g>
@@ -228,36 +235,33 @@
       <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="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="20.6" class="layerNav">,</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"/>
         <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="20.6" class="layerNav">1</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"/>
         <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="layerNav">🖰</text>
-        <text x="42.0" y="43.4" class="layerNav">↑</text>
+        <text x="38.0" y="20.6" class="layerNav">2</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"/>
         <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="layerNav">🖰</text>
-        <text x="38.0" y="43.4" class="layerNav">→</text>
+        <text x="38.0" y="20.6" class="layerNav">3</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="20.6" class="level2">?</text>
+        <text x="38.0" y="20.6" class="layerNav">.</text>
         <text x="38.0" y="43.4" class="layerSym">?</text>
       </g>
     </g>
@@ -267,21 +271,20 @@
     <g transform="translate(180)">
       <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 shortcut">shift</text>
-      <text x="61.5" y="42.8" class="layerMod shortcut colorSym">num</text>
-      <text x="61.5" y="42.8" class="layerNav" style="font-size: 14px;">⌦</text>
+      <text x="20.5" y="42.8" class="layerMod">shift</text>
+      <text x="61.5" y="20.6" class="layerNav" style="font-size: 14px;">⌦</text>
       <text x="20.5" y="20.6" class="level2" style="font-size: 14px;">⌫</text>
     </g>
     <g transform="translate(270)">
       <rect width="232" height="52" rx="5" ry="5"/>
-      <rect width="116" height="26" rx="2" ry="2" class="dualKey"/>
-      <text x="58.0" y="42.8" class="layerMod colorNav shortcut">navigation</text>
+      <rect width="41" height="26" rx="2" ry="2" class="dualKey"/>
+      <text x="20.5" y="42.8" class="layerMod colorNav">nav</text>
     </g>
     <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">sym</text>
-      <text x="61.5" y="42.8" class="layerNav">⎋</text>
+      <text x="20.5" y="42.8" class="layerMod colorSym">sym</text>
+      <text x="61.5" y="20.6" class="layerNav" style="font-weight: normal;">⎋</text>
       <text x="20.5" y="22.6" class="level2">⏎</text>
     </g>
   </g>



+ 45 - 0
img/base_easy.svg

@@ -0,0 +1,45 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="26 -4 720 60">
+
+  <style>
+    rect, path {
+      fill: #f8f8f8;
+      stroke: #666;
+      stroke-width: .5px;
+    }
+    text {
+      fill: #999;
+      font: normal 20px sans-serif;
+      text-align: center;
+    }
+    .layer {
+      font-size: 14px;
+      font-weight: bold;
+      text-anchor: middle;
+      fill: #333;
+    }
+
+    @media (prefers-color-scheme: dark) {
+      text       { fill: #888; }
+      rect, path { fill: #444; }
+      .layer     { fill: #eee; }
+    }
+  </style>
+
+  <g id="row_AA">
+    <g transform="translate(180)">
+      <rect width="82" height="52" rx="5" ry="5"/>
+      <text x="12.8" y="20.6" style="font-size: 14px;">⌫</text>
+      <text x="41.0" y="42.8" class="layer">Alt</text>
+    </g>
+    <g class="homeKey" transform="translate(270)">
+      <rect width="232" height="52" rx="5" ry="5"/>
+      <text x="116.0" y="42.8" class="layer" style="fill: #e83;">Navigation</text>
+    </g>
+    <g transform="translate(510)">
+      <rect width="82" height="52" rx="5" ry="5"/>
+      <text x="12.8" y="23.6">⏎</text>
+      <text x="41.0" y="42.8" class="layer" style="fill: #66d;">Symbols</text>
+    </g>
+  </g>
+
+</svg>

+ 64 - 0
img/base_hrm.svg

@@ -0,0 +1,64 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="-120 -4 720 60">
+
+  <style>
+    rect, path {
+      fill: #f8f8f8;
+      stroke: #666;
+      stroke-width: .5px;
+    }
+    text {
+      fill: #999;
+      font: normal 20px sans-serif;
+      text-align: center;
+    }
+    .layer {
+      font-size: 14px;
+      font-weight: bold;
+      text-anchor: middle;
+      fill: #333;
+    }
+
+    @media (prefers-color-scheme: dark) {
+      text       { fill: #888; }
+      rect, path { fill: #444; }
+      .layer     { fill: #eee; }
+    }
+  </style>
+
+  <g id="row_AC" text-anchor="middle">
+    <g transform="translate(90)">
+      <rect width="52" height="52" rx="5" ry="5"/>
+      <g class="key">
+        <text x="12.8" y="20.6">A</text>
+      </g>
+    </g>
+    <g transform="translate(150)">
+      <rect width="52" height="52" rx="5" ry="5"/>
+      <g class="key">
+        <text x="12.8" y="20.6">S</text>
+        <text x="26.0" y="43.4" class="layer">Super</text>
+      </g>
+    </g>
+    <g transform="translate(210)">
+      <rect width="52" height="52" rx="5" ry="5"/>
+      <g class="key">
+        <text x="12.8" y="20.6">D</text>
+        <text x="26.0" y="43.4" class="layer">Alt</text>
+      </g>
+    </g>
+    <g transform="translate(270)">
+      <rect width="52" height="52" rx="5" ry="5"/>
+      <g class="key">
+        <text x="12.8" y="20.6">F</text>
+        <text x="26.0" y="43.4" class="layer">Ctrl</text>
+      </g>
+    </g>
+    <g transform="translate(330)">
+      <rect width="52" height="52" rx="5" ry="5"/>
+      <g class="key">
+        <text x="12.8" y="20.6">G</text>
+      </g>
+    </g>
+  </g>
+
+</svg>

+ 9 - 5
img/index.html

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

+ 13 - 15
img/symbols.svg

@@ -45,14 +45,14 @@
         <rect width="52" height="52" rx="5" ry="5"/>
         <g class="key" text-anchor="middle">
           <text x="12.8" y="20.6" class="level2">W</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">E</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)">
@@ -89,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)">
@@ -143,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>
@@ -152,7 +152,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">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)">
@@ -173,7 +173,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">L</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)">
@@ -181,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>
@@ -200,21 +200,21 @@
         <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">&lt;</text>
+          <text x="38.0" y="43.4" class="layerSym">[</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">&gt;</text>
+          <text x="38.0" y="43.4" class="layerSym">]</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)">
@@ -230,14 +230,14 @@
         <rect width="52" height="52" rx="5" ry="5"/>
         <g class="key" text-anchor="middle">
           <text x="12.8" y="20.6" class="level2">N</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">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)">
@@ -270,15 +270,13 @@
   <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="42.8" class="layer layerNum">num</text>
+      <text x="20.5" y="20.6" class="level2" style="font-size: 14px;">⌫</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="layerSym"/>
-      <!-- <text x="20.5" y="23.6" class="level2">⏎</text> -->
       <text x="20.5" y="42.8" class="layer">sym</text>
     </g>
   </g>

+ 13 - 13
kanata/README.md

@@ -2,29 +2,29 @@ kanata
 ================================================================================
 
 
-Pick Your Poison
+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]…  |
+| type  | without homerow-mods        | with homerow-mods          | suitable layouts                  |
+| ----- | --------------------------- | -------------------------- | --------------------------------- |
+| ANSI  | [arsenik_easy_ansi.kbd][1]  | [arsenik_hrm_ansi.kbd][3]  | QWERTY, Dvorak, Colemak, Workman… |
+| AltGr | [arsenik_easy_altgr.kbd][2] | [arsenik_hrm_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
+[1]: arsenik_easy_ansi.kbd
+[2]: arsenik_easy_altgr.kbd
+[3]: arsenik_hrm_ansi.kbd
+[4]: arsenik_hrm_altgr.kbd
 
+- “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.
 - 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

+ 11 - 37
kanata/arsenik_easy_altgr.kbd

@@ -12,57 +12,31 @@
   _    _    _    _    _    _    _    _    _    _
   _    _    _    _    _    _    _    _    _    _
   _    _    _    _    _    _    _    _    _    _
-       @sft           @nav           @sym
+       @alt           @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
+;;  - left: arrows, Tab/Shift-Tab, one-hand shortcuts (Ctrl-AZXCV)
+;;  - right: numpad
+(deflayer numnav
+  tab  home up   end  pgup    /  7  8  9  XX
+  C-a  lft  down rght pgdn    -  4  5  6  0
+  C-z  C-x  C-c  C-v  S-tab   ,  1  2  3  .
+       del            _             esc
 )
 
 ;; 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))
+  nav (tap-hold 200 300 spc (layer-toggle numnav))
 
   ;; 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)
+  alt (tap-hold-press 200 200 bspc lalt)
+  sym (tap-hold-press 200 200 ret ralt)
 )
 
 ;; vim: set ft=lisp

+ 14 - 32
kanata/arsenik_easy_ansi.kbd

@@ -12,33 +12,25 @@
   _    _    _    _    _    _    _    _    _    _
   _    _    _    _    _    _    _    _    _    _
   _    _    _    _    _    _    _    _    _    _
-       @sft           @nav           @sym
+       @alt           @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
+;;  - left: arrows, Tab/Shift-Tab, one-hand shortcuts (Ctrl-AZXCV)
+;;  - right: numpad
+(deflayer numnav
+  tab  home up   end  pgup    /  7  8  9  XX
+  C-a  lft  down rght pgdn    -  4  5  6  0
+  C-z  C-x  C-c  C-v  S-tab   ,  1  2  3  .
+       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
+  S-2  S-,  S-.  S-4  S-5  S-6  S-7  S-8  '    grv
+  S-[  S-9  S-0  S-]  =    \    S-=  -    /    S-'
+  @tld [    ]    S--  S-3  S-\  S-1  ;    S-;  S-/
+       bspc           spc            _
 )
 
 ;; Special key aliases
@@ -47,24 +39,14 @@
 
   ;; 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))
+  nav (tap-hold 200 300 spc (layer-toggle numnav))
 
   ;; 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)
+  alt (tap-hold-press 200 200 ret lalt)
   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

+ 10 - 36
kanata/arsenik_altgr.kbd

@@ -13,40 +13,24 @@
   _    _    _    _    _    _    _    _    _    _
   _    @ss  @dd  @ff  _    _    @jj  @kk  @ll  _
   _    _    _    _    _    _    _    _    _    _
-       @sft           @nav           @sym
+       @sft           @nav           @alt
 )
 
 ;; 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
+;;  - left: arrows, Tab/Shift-Tab, one-hand shortcuts (Ctrl-AZXCV)
+;;  - right: numpad
+(deflayer numnav
+  tab  home up   end  pgup    /  7  8  9  XX
+  C-a  lft  down rght pgdn    -  4  5  6  0
+  C-z  C-x  C-c  C-v  S-tab   ,  1  2  3  .
+       del            _             esc
 )
 
 ;; Special key aliases
 (defalias
-  ;; Main mod-tap: VimNav layer when hold, Space when tapped.
+  ;; Main mod-tap: NumNav 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))
+  nav (tap-hold 200 300 spc (layer-toggle numnav))
 
   ;; Space-cadet thumb keys: Shift/BackSpace, AltGr/Return
   ;;  - acts as a modifier by default, or as BS/Ret when tapped separately;
@@ -54,10 +38,6 @@
   ;;    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.
@@ -67,12 +47,6 @@
   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)
-  mwd (mwheel-down  50 120)
-  mwl (mwheel-left  50 120)
-  mwr (mwheel-right 50 120)
 )
 
 ;; vim: set ft=lisp

+ 12 - 30
kanata/arsenik_ansi.kbd

@@ -17,29 +17,21 @@
 )
 
 ;; 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
+;;  - left: arrows, Tab/Shift-Tab, one-hand shortcuts (Ctrl-AZXCV)
+;;  - right: numpad
+(deflayer numnav
+  tab  home up   end  pgup    /  7  8  9  XX
+  C-a  lft  down rght pgdn    -  4  5  6  0
+  C-z  C-x  C-c  C-v  S-tab   ,  1  2  3  .
+       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
+  S-2  S-,  S-.  S-4  S-5  S-6  S-7  S-8  '    grv
+  S-[  S-9  S-0  S-]  =    \    S-=  -    /    S-'
+  @tld [    ]    S--  S-3  S-\  S-1  ;    S-;  S-/
+       bspc           spc            _
 )
 
 ;; Special key aliases
@@ -48,19 +40,15 @@
 
   ;; 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))
+  nav (tap-hold 200 300 spc (layer-toggle numnav))
 
   ;; 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)
@@ -69,12 +57,6 @@
   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