-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathindex.html
More file actions
635 lines (616 loc) · 30.2 KB
/
index.html
File metadata and controls
635 lines (616 loc) · 30.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
<!DOCTYPE html>
<html>
<head>
<meta charset="utf8">
<title>Selenium</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="A configurable Arsenik variant for split keyboards.">
<meta property="og:type" content="website">
<meta property="og:url" content="https://onedeadkey.github.io/selenium/">
<meta property="og:image" content="https://onedeadkey.github.io/selenium/selenium-og.png">
<meta property="og:title" content="Selenium: a flexible Arsenik variant for split keyboards.">
<meta property="og:description"
content="Selenium is a 34/36/42-key configuration with home row mods that just work. Beginner-friendly, flexible and reliable at high typing speeds.">
<link type="image/svg+xml" rel="icon" href="favicon.svg" sizes="any">
<link rel="stylesheet" href="style.css">
<link rel="stylesheet" href="keeb.css">
<script src="select.js" defer></script>
<script src="keeb.js"></script>
<svg style="display: none;">
<defs>
<path class="symbol" transform="scale(0.4) translate(-24, -30)" id="glyph_backspace" d="M22,19l10,10 M22,29l10-10 M6,24l10,13h26v-26h-26z"/>
<path class="symbol" transform="scale(0.4) translate(-24, -30)" id="glyph_delete" d="M16,19l10,10 M16,29l10-10 M42,24l-10,13h-26v-26h26z"/>
<path class="symbol" transform="scale(0.4) translate(-24, -30)" id="glyph_return" d="M42,13V27H6 m8-8l-8,8l8,8"/>
<path class="symbol" transform="scale(0.4) translate(-24, -30)" id="glyph_space" d="M42,24V32H6V24"/>
<path class="symbol" transform="scale(0.4) translate(-24, -30)" id="glyph_escape" d="M24,24l-18-18 m0,10v-10h10 M24,6A18,18,0,1,1,6,24"/>
<path class="symbol" transform="scale(0.4) translate(-24, -30)" id="glyph_tab" d="M6,24h27 m-6-8l8,8l-8,8 M42,12V36"/>
<path class="symbol" transform="scale(0.4) translate(-24, -30)" id="glyph_btab" d="M42,24h-27 m6-8l-8,8l8,8 M6,12V36"/>
<path class="symbol" transform="scale(0.4) translate(-24, -30)" id="glyph_shift" d="M23,7l14,20h-7v16h-14v-16h-7l14,-20"/>
<path class="symbol" transform="scale(0.4) translate(-24, -30)" id="glyph_caps" d="M24,7l14,20h-7v6h-14v-6h-7l14,-20 M31,38v5h-14v-5z"/>
<g class="thumb" id="sticky-shift">
<rect/>
<rect class="colorMod sticky"/>
<text class="colorMod sticky pc">shift</text>
<use class="layerVim" href="#glyph_caps"/>
<text class="layerSym pc">num</text>
</g>
<g class="thumb" id="sticky-sym">
<rect/>
<rect class="colorSym sticky"/>
<text class="colorSym sticky pc">sym</text>
<text class="layerNav shortcut">altgr</text>
</g>
<g class="thumb" id="nav-left">
<rect/>
<rect class="holdTap colorNav"/>
<text class="level1 colorNav pc">nav</text>
<use class="level2" href="#glyph_backspace"/>
<use class="layerNav" href="#glyph_delete"/>
<use class="layerSym" href="#glyph_space"/>
</g>
<g class="thumb" id="nav-right">
<rect/>
<rect class="holdTap borderNav tap-pref"/>
<text class="level1 borderNav pc">nav</text>
<use class="level2" href="#glyph_space"/>
<text class="layerNav shortcut">fn</text>
</g>
</defs>
</svg>
</head>
<body>
<header>
<nav><a href="https://onedeadkey.github.io">⮝ OneDeadKey</a></nav>
<h1>Selenium</h1>
<p>A configurable <a href="https://github.com/OneDeadKey/arsenik">Arsenik</a>
variant for split keyboards.</p>
<form>
<div>
<span>
<input type="checkbox" name="vim" id="option-vim" value="vim">
<label for="option-vim">Vim variant</label>
</span>
<span>
<select name="layout">
<option>QWERTY</option>
<option>Colemak</option>
<option>Sturdy</option>
<option>Ergol</option>
</select>
<select name="geometry">
<option value="ortho" selected>Ortho</option>
<option value="flex">Quacken</option>
</select>
</span>
</div>
<object type="image/svg+xml" data="keeb.svg" class="main"></object>
<table id="menu">
<tr id="menu-ez">
<th> EZ </th>
<td> <strong>No hold-taps</strong>
<br> A beginner-friendly keymap for 42-key keebs.
<br> <kbd>Backspace</kbd>, <kbd>Return</kbd> and <kbd>Shift</kbd> on outer columns.
</td>
</tr>
<tr id="menu-tt">
<th> TT </th>
<td> <strong>Thumb-taps</strong>: spare your pinkies
<br><i class="layer">Nav</i> layer with a long press on the <kbd>Space</kbd> key.
<br> <kbd>Backspace</kbd>, <kbd>Return</kbd> and <kbd>Shift</kbd> under the thumbs.
</td>
</tr>
<tr id="menu-hrm" class="selected">
<th> HRM </th>
<td> <strong>home row mods</strong>: the sane default
<br>Symmetrical modifiers on the home row.
<br>Symmetrical layer-shifts under the thumbs.
</td>
</tr>
<tr id="menu-2tk">
<th> 2TK </th>
<td> <strong>Two thumb keys</strong>: a sane alternative
<br>If three thumbs do not work for you. </td>
</tr>
</table>
</form>
</header>
<main>
<h2 id="hold-taps">Hold-Taps That Just Work</h2>
<p>Compact keyboards rely on affecting several actions to some keys based on how long they
are tapped or held (hold-taps behaviour). Bad timing configurations can however make hold-taps unreliable and very
frustrating to use. We believe Selenium provides sane defaults to avoid the problem. </p>
<h3 id="timing-is-key">Timing is Key</h3>
<p>The common approach for compact keyboard keymaps is to use a single configuration (and timing)
for all hold-taps, which is often a compromise between “tap-preferred” and “hold-preferred” (like QMK’s
“permissive hold”), and then rely on mitigating measures and fine timing adjustments to limit
the number of typos.</p>
<p>In our experience, this doesn’t work reliably for most users and never will, because
<strong>home row mods and thumb modifiers have two mutually exclusive goals</strong>.
Instead, Selenium uses three distinct kinds of hold-tap behaviors that define which
action takes priority and timings:</p>
<table>
<tr>
<td>
<svg viewBox="0 0 60 57">
<g class="thumb">
<rect/>
<rect class="holdTap borderNav tap-pref"/>
<text class="level1 borderNav pc">nav</text>
<use class="level2" href="#glyph_space"/>
</g>
</svg>
</td>
<td>
<strong>Tap-Preferred</strong><br>
Behaves as a letter key by default, becomes a modifier / layer-shift when pressed longer
than 300ms.<br>
Perfect for <kbd>Space</kbd> and home row mods.
</td>
</tr>
<tr>
<td>
<svg viewBox="0 0 60 57">
<g class="thumb">
<rect/>
<rect class="holdTap colorFun"/>
<text class="level1 colorFun pc">fn</text>
<use class="level2" href="#glyph_return"/>
</g>
</svg>
</td>
<td>
<strong>Hold-Preferred</strong><br>
Behaves as a modifier / layer-shift by default, becomes an input when pressed and
released in less than 150ms.<br>
Perfect for adding actions like <kbd>Enter</kbd>, <kbd>Backspace</kbd>, <kbd>Tab</kbd>,
<kbd>Esc</kbd> to any thumb modifier / layer-shift.
</td>
</tr>
<tr>
<td>
<svg viewBox="0 0 60 57">
<g class="thumb">
<rect/>
<rect class="colorSym sticky"/>
<text class="colorSym sticky pc">sym</text>
</g>
</svg>
</td>
<td>
<strong>Sticky</strong><br>
Behaves as a one-time-shift when tapped, and as a modifier / layer-shift when held.<br>
Perfect for <kbd>Shift</kbd> and <kbd>Symbols</kbd>.
</td>
</tr>
</table>
<p>With this approach, you’ll never have to think of it: as long as your keymap respects the
proper behavior/key associations, it just works. No unwanted shortcuts while typing text, no
accidental <kbd>Return</kbd> while chatting.</p>
<h3 id="thumb-shifting">Thumb-Shifting</h3>
<p>An opiniated choice with Selenium is that the <kbd>Shift</kbd> and <kbd>Symbols</kbd>
keys belong to the thumbs, <em>not</em> to the home row:</p>
<ul>
<li>to work seamlessly these keys must have “hold-preferred” priority, which is not suitable for home row mods;</li>
<li>this setting makes it <em></em>much easier<em></em> to chain several uppercase letters or symbols.</li>
</ul>
<p>Having <kbd>Shift</kbd> as a home row mod is often recommended… and a very common reason why HRMs as a whole are
so difficult to tune right: capitalizing a word while typing text requires <kbd>Shift</kbd>
to have an immediate action, which is exactly what you do <em>NOT</em> want for keyboard
shortcuts. The problem can be partially mitigated with complex settings and practice, but it
always ends up showing up at higher typing speeds.</p>
<p>Instead, placing the <kbd>Shift</kbd> on a thumb key with hold-preferred priority allows us to use a very
long tapping-term on the other home row mods (300 ms by default), which ensures they’re never misfired. </p>
<p> It might take a bit to get used to <kbd>Shift</kbd> under the left thumb, but it’s totally
worth it — even without these timing considerations. Probably the biggest comfort improvement
you can expect on a keyboard. </p>
<h3 id="one-time-shift">One-Time-Shift</h3>
<p>In its recommended flavor (HRM), Selenium affects a dual behaviour to <kbd>Shift</kbd> and <kbd>Symbols</kbd>
keys under the thumbs:
<ul>
<li>modifiers when held, similar to the behaviour of <kbd>Shift</kbd> on an ISO keyboard</li>
<li>sticky key when tapped: the <em>next key</em> you tap will be affected (think of it as a dead key)</li>
</ul>
<p>Because the sticky behavior only affects the following key (a <em>one-time shift</em>, then), this action is safe
even with fast typing: no risk of timing your hold of <kbd>Shift</kbd> a bit wrong and ending up with two
capital letters instead of one.
<p>Besides decreasing frustration at higher speeds, these sticky behaviours provide a great confort improvement over
the regular modifier behaviour (hold). Try <em>rolling</em> these thumb keys rather than <em>chording</em> them,
and never again feel the pain of holding your thumb in place while trying to reach the top most inner key with your index!
<p>In our opinion, these sticky keys are the main reason why you should have a keyboard with
three good keys per thumb. Otherwise, 34 keys would be just fine.</p>
<h2 id="flavors">From 42 to 34 Keys (and beyond)</h2>
<p>Selenium is available in 4 different <em>flavors</em>: pick the HRM flavor right away,
or start with EZ or TT to ease the learning process if you’re unsure.</p>
<h3 id="flavor-ez">EZ: No Hold-Taps</h3>
<svg viewBox="0 10 410 57">
<g class="left" id="ez-left">
<g class="tucked specialKey">
<rect class="colorMod"/>
<text class="colorMod level0">alt</text>
<text class="layerSym shortcut">num</text>
</g>
<g class="comfy specialKey">
<rect class="colorMod"/>
<text class="colorMod level0">ctrl</text>
<use class="layerSym" href="#glyph_space"/>
</g>
<g class="reachy specialKey">
<rect class="colorMod"/>
<text class="colorMod level0">os</text>
<text class="layerNav shortcut">fn</text>
<use class="layerSym" href="#glyph_return"/>
</g>
</g>
<g class="right" id="ez-right">
<g class="reachy specialKey">
<rect class="colorNav"/>
<text class="colorNav level0">nav</text>
</g>
<g class="comfy thumb">
<rect/>
<use class="level0" href="#glyph_space"/>
</g>
<g class="tucked specialKey">
<rect class="colorSym"/>
<text class="colorSym level0">sym</text>
<text class="layerNav shortcut">altgr</text>
</g>
</g>
</svg>
<p> The most direct way to get started with compact keyboards (42+ keys): </p>
<ul>
<li> modifiers on the left, except for <kbd>Shift</kbd>; </li>
<li> <kbd>Space</kbd> and layer-shifts (<kbd>Sym</kbd> and <kbd>Nav</kbd> to access layers) on the right; </li>
<li> <kbd>Nav</kbd>+<kbd>OS</kbd> gets to the <i class="layer">Fn/Media</i> layer. </li>
</ul>
<p> Special keys like <kbd>Shift</kbd>, <kbd>Enter</kbd>, <kbd>Backspace</kbd> or
<kbd>Tab</kbd> remain on lateral columns, like on standard ANSI/ISO keyboards. </p>
<h3 id="flavor-tt">TT: Thumb-Taps</h3>
<svg viewBox="0 10 410 57">
<g class="left">
<use class="tucked" href="#sticky-shift"/>
<g class="comfy thumb">
<rect/>
<rect class="holdTap colorMod"/>
<text class="level1 colorMod pc">ctrl</text>
<use class="level2" href="#glyph_backspace"/>
<use class="layerNav" href="#glyph_delete"/>
<use class="layerSym" href="#glyph_space"/>
</g>
<g class="reachy thumb">
<rect/>
<rect class="holdTap colorMod"/>
<text class="level1 colorMod pc">os</text>
<use class="level2" href="#glyph_tab"/>
<use class="layerNav" href="#glyph_btab"/>
<use class="layerSym" href="#glyph_return"/>
</g>
</g>
<g class="right">
<g class="reachy thumb">
<rect/>
<rect class="holdTap colorMod"/>
<text class="level1 colorMod pc">alt</text>
<use class="level2" href="#glyph_return"/>
</g>
<use class="comfy" href="#nav-right"/>
<use class="tucked" href="#sticky-sym"/>
</g>
</svg>
<p> Learning hold-taps and thumb-shifting is the next step:</p>
<ul>
<li> <i class="layer">Nav/Num</i> is activated with a long press on <kbd>Space</kbd>; </li>
<li> introduction to hold-taps: modifier keys <kbd>Ctrl</kbd>, <kbd>OS</kbd> and
<kbd>Alt</kbd> act as <kbd>Backspace</kbd>, <kbd>Tab</kbd> and <kbd>Enter</kbd>when tapped; </li>
<li> <kbd>Shift</kbd> and <kbd>Sym</kbd> are sticky: modifiers when held,
dead keys when tapped. </li>
</ul>
<p> This flavor tries to be as symmetrical as possible, with keys mirrored by pairs:
<kbd>Shift</kbd>/<kbd>Sym</kbd>, <kbd>Backspace</kbd>/<kbd>Space</kbd>,
<kbd>Tab</kbd>/<kbd>Enter</kbd>.
</p>
<h3 id="flavor-hrm">HRM: Home Row Mods</h3>
<svg viewBox="0 10 410 57">
<g class="left">
<use class="tucked" href="#sticky-shift"/>
<use class="comfy" href="#nav-left"/>
<g class="reachy thumb">
<rect/>
<rect class="holdTap colorFun"/>
<text class="level1 colorFun pc">fn</text>
<use class="level2" href="#glyph_tab"/>
<use class="layerNav" href="#glyph_btab"/>
<use class="layerSym" href="#glyph_return"/>
</g>
</g>
<g class="right">
<g class="reachy thumb">
<rect/>
<rect class="holdTap colorFun"/>
<text class="level1 colorFun pc">fn</text>
<use class="level2" href="#glyph_return"/>
</g>
<use class="comfy" href="#nav-right"/>
<use class="tucked" href="#sticky-sym"/>
</g>
</svg>
<p> This is the default and recommended flavor. It pushes the symmetry even further: </p>
<ul>
<li> symmetrical modifiers on the home row (long press), making all keyboard shortcuts
trivial; </li>
<li> symmetrical layer-shifts under the thumbs, to handle the half-layers in
<i class="layer">Nav/Num</i> and <i class="layer">Fn/Media</i>. </li>
</ul>
<p> <kbd>Shift</kbd> and <kbd>Sym</kbd> are mirrored, not doubled: </p>
<ul>
<li> unlike <kbd>Nav</kbd> and <kbd>Fn</kbd>, these keys can be held to type several
characters with both hands, like <code>FULLCAPS</code> words or symbol sequences like
<code>:(){ :|:& };:</code> (don’t); </li>
<li> when used for a single character, they’re used as dead keys.</li>
</ul>
<p> This flavor quickly feels like the most natural way to use a keyboard. </p>
<h3 id="flavor-2tk">2TK: Two Thumb Keys</h3>
<svg viewBox="0 10 410 57">
<g class="left">
<g class="comfy thumb">
<rect/>
<rect class="holdTap colorMod"/>
<text class="level1 colorMod pc">shift</text>
<use class="level2" href="#glyph_tab"/>
<use class="layerNav" href="#glyph_btab"/>
<use class="layerSym" href="#glyph_caps"/>
</g>
<use class="reachy" href="#nav-left"/>
</g>
<g class="right">
<use class="reachy" href="#nav-right"/>
<g class="comfy thumb">
<rect/>
<rect class="holdTap colorSym"/>
<text class="level1 colorSym pc">sym</text>
<use class="level2" href="#glyph_return"/>
<text class="layerNav shortcut">altgr</text>
</g>
</g>
</svg>
<p> Keyboards with three good keys per thumb are rare, but there are a lot of good 34-key
keebs out there, and Selenium has a flavor for them — which is just a simplified version of
the default HRM flavor: </p>
<ul>
<li> <i class="layer">Fn/Media</i> is activated by holding both <kbd>Nav</kbd> keys; </li>
<li> <kbd>Shift</kbd> and <kbd>Sym</kbd> become hold-preferred. </li>
</ul>
<p> FTR: Selenium started as a 34-key configuration, and the name is a reference to the 34th
element of the periodic table. This flavor used to be the default one — and would still be
if sticky keys weren’t such a banger. ;-) </p>
<h2 id="layers">Layers</h2>
<h3 id="layer-nav-num">Nav/Num</h3>
<object type="image/svg+xml" data="keeb.svg" class="nav"></object>
<p>A navigation half-layer on the left:</p>
<ul>
<li>arrow keys on <kbd>E</kbd><kbd>S</kbd><kbd>D</kbd><kbd>F</kbd> (inverted T),
along with home/end and page up/down;</li>
<li>common keyboard shortcuts on
<kbd>A</kbd><kbd>S</kbd><kbd>Z</kbd><kbd>X</kbd><kbd>C</kbd><kbd>V</kbd>; </li>
<li><kbd>Escape</kbd> on <kbd>Q</kbd>.</li>
</ul>
<p>A numpad on the right:</p>
<ul>
<li>positive numbers on a 3×3 grid, <kbd>0</kbd> on the home row; </li>
<li>not a full-featured numpad, but enough for numbers and dates.</li>
</ul>
<svg viewBox="0 10 410 57">
<g class="left">
<g class="tucked thumb">
<rect/>
<rect class="dimmed colorMod sticky"/>
<text class="dimmed colorMod sticky pc">shift</text>
<use class=" layerVim" href="#glyph_caps"/>
<text class="dimmed layerSym shortcut">num</text>
</g>
<g class="comfy thumb">
<rect/>
<rect class="holdTap colorNav"/>
<text class="level1 colorNav pc">nav</text>
<use class="dimmed level2" href="#glyph_backspace"/>
<use class=" layerNav" href="#glyph_delete"/>
<use class="dimmed layerSym" href="#glyph_space"/>
</g>
<g class="reachy thumb">
<rect/>
<rect class="dimmed holdTap colorFun"/>
<text class="dimmed level1 colorFun pc">fn</text>
<use class="dimmed level2" href="#glyph_tab"/>
<use class=" layerNav" href="#glyph_btab"/>
<use class="dimmed layerSym" href="#glyph_return"/>
</g>
</g>
<g class="right">
<g class="reachy thumb">
<rect/>
<rect class="dimmed holdTap colorFun"/>
<text class="dimmed level1 colorFun pc">fn</text>
<use class="dimmed level2" href="#glyph_return"/>
</g>
<g class="comfy thumb">
<rect/>
<rect class="holdTap borderNav tap-pref"/>
<text class="level1 borderNav pc">nav</text>
<use class="dimmed level2" href="#glyph_space"/>
<text class="layerNav shortcut">fn</text>
</g>
<g class="tucked thumb">
<rect/>
<rect class="dimmed colorSym sticky"/>
<text class="dimmed colorSym sticky pc">sym</text>
<text class="layerNav shortcut">altgr</text>
</g>
</g>
</svg>
<p>The <kbd>Nav</kbd> key is accessible from the home position of both thumbs, with a catch:
it has tap-preferred priority on the right (<kbd>Space</kbd>), hold-preferred on the left.
This allows unmissable, single-hand shortcuts. </p>
<h3 id="layer-symbols">Symbols</h3>
<object type="image/svg+xml" data="keeb.svg" class="sym"></object>
<p>All 30 programming symbols are available on this single layer, and their placement has been
optimized for comfort: </p>
<ul>
<li> the most common symbols are in the most comfortable positions; </li>
<li> no symbol ever requires <kbd>Shift</kbd>; </li>
<li> common sequences of programming symbols can be typed without same-finger bigrams,
either by alternating hands (<code>~/</code>, <code>);</code>, <code></></code>,
<code>+=</code>, <code>['']</code>, etc.) or with a single-hand roll (<code>>=</code>,
<code>/*</code>, <code>";</code>, <code>()</code>, <code>\"</code>, etc.). </li>
</ul>
<p> Besides, this layer has truly been designed with Vim in mind, to ease advanced
navigation tricks like vertical jumps with <code>{}</code>, <code>()</code>, <code>[]</code>
followed by <code>+-</code> (on the <kbd>J</kbd><kbd>K</kbd> positions), to adjust the
movement line by line without releasing the <kbd>Sym</kbd> key. </p>
<p>The Symbols layer is a core part of the <a href="https://ergol.org">Ergol</a> layout and
the <a href="https://github.com/OneDeadKey/arsenik">Arsenik</a> keymap: it’s been tested and
improved over <em>years</em>. Rough edges have been polished over time. </p>
<svg viewBox="0 10 410 57">
<g class="left">
<g class="tucked thumb">
<rect/>
<rect class="dimmed colorMod sticky"/>
<text class="dimmed colorMod sticky pc">shift</text>
<use class="dimmed layerVim" href="#glyph_caps"/>
<text class="layerSym pc">num</text>
</g>
<g class="comfy thumb">
<rect/>
<rect class="dimmed holdTap colorNav"/>
<text class="dimmed level1 colorNav pc">nav</text>
<use class="dimmed level2" href="#glyph_backspace"/>
<use class="dimmed layerNav" href="#glyph_delete"/>
<use class=" layerSym" href="#glyph_space"/>
</g>
<g class="reachy thumb">
<rect/>
<rect class="dimmed holdTap colorFun"/>
<text class="dimmed level1 colorFun pc">fn</text>
<use class="dimmed level2" href="#glyph_tab"/>
<use class="dimmed layerNav" href="#glyph_btab"/>
<use class=" layerSym" href="#glyph_return"/>
</g>
</g>
<g class="right">
<g class="reachy thumb">
<rect/>
<rect class="dimmed holdTap colorFun"/>
<text class="dimmed level1 colorFun pc">fn</text>
<use class="dimmed level2" href="#glyph_return"/>
</g>
<g class="comfy thumb">
<rect/>
<rect class="dimmed holdTap borderNav tap-pref"/>
<text class="dimmed level1 borderNav pc">nav</text>
<use class="dimmed level2" href="#glyph_space"/>
<text class="dimmed layerNav shortcut">fn</text>
</g>
<g class="tucked thumb">
<rect/>
<rect class="colorSym sticky"/>
<text class="colorSym sticky pc">sym</text>
<text class="dimmed layerNav shortcut">altgr</text>
</g>
</g>
</svg>
<p>Selenium adds a specific concern to ease sequences with non-alpha characters without
releasing the <kbd>Sym</kbd> key, thus avoiding same-thumb bigrams and preserving the typing
flow. This is why the Symbols layer features these three actions in the left-hand thumb
cluster, from right to left: </p>
<ul>
<li> <kbd>Enter</kbd>, to easily type a line ending after a symbol (e.g. <code>;</code>); </li>
<li> <kbd>Space</kbd>, for long symbol sequences like <code>:(){ :|:& };:</code>; </li>
<li> <kbd>num</kbd>, which activates the default numeric layer (either Nav/Num or NumRow,
see below), to type Symbols/Digits combos like <code>(0)</code>, <code>[1]</code>, etc.
This key is sticky for all flavors with three thumb keys. </li>
</ul>
<h3 id="layer-fn-media">Fn/Media</h3>
<object type="image/svg+xml" data="keeb.svg" class="fun"></object>
<ul>
<li>Function keys on the left: <kbd>F1</kbd>-<kbd>F12</kbd> on a 3×4 grid; </li>
<li>Media keys on the right: prev/play/next, volume +/-/mute, brightness +/-/lock.</li>
</ul>
<p>Note: home row mods are always enabled on the Media half-layer, no matter which flavor is
chosen. This is by far the easiest way to do an <kbd>Alt</kbd>‑<kbd>F4</kbd> or a
<kbd>Ctrl</kbd>‑<kbd>F5</kbd> — and a safe opportunity to start learning HRMs. </p>
<h2 id="options">Options</h2>
<h3 id="vim-variant">Vim Variant</h3>
<p>This variant uses two layers instead of the <i class="layer">Nav/Num</i> one.</p>
<object type="image/svg+xml" data="keeb.svg" class="vim"></object>
<p>The <i class="layer">NumRow</i> layer mostly picks the number row of your keyboard layout
(QWERTY, AZERTY…):</p>
<ul>
<li>Numbers on the home row, <kbd>Shift</kbd> + number on the top row. This suits experienced
touch-typists, who are often more efficient with a numrow than with a numpad. </li>
<li>Comma, period, dash, slash, everything else needed to write numbers, hours and dates
under the right hand.</li>
</ul>
<p>The <i class="layer">VimNav</i> layer offers advanced navigation possibilities:</p>
<ul>
<li>the right part has arrows on <kbd>H</kbd><kbd>J</kbd><kbd>K</kbd><kbd>L</kbd>, along
with home/end and page up/down on the top row — Vim-like cursor movements in any app, no
matter which keyboard layout you use; </li>
<li>the left part has <kbd>Tab</kbd> and <kbd>Shift</kbd><kbd>Tab</kbd> on the home row
(<kbd>D</kbd><kbd>F</kbd>, mirroring <kbd>J</kbd><kbd>K</kbd> in the right hand),
<kbd>prev</kbd>/<kbd>next</kbd> on the top row (<kbd>E</kbd><kbd>R</kbd> ), along with
general keyboard shortcuts. </li>
</ul>
<svg viewBox="0 10 410 57">
<g class="left">
<use class="tucked" href="#sticky-shift"/>
<use class="comfy" href="#nav-left"/>
<g class="reachy thumb">
<rect/>
<rect class="holdTap colorNum"/>
<text class="level1 colorNum shortcut">num</text>
<use class="level2" href="#glyph_escape"/>
<use class="layerSym" href="#glyph_return"/>
</g>
</g>
<g class="right">
<g class="reachy thumb">
<rect/>
<rect class="holdTap colorNum"/>
<text class="level1 colorNum shortcut">num</text>
<use class="level2" href="#glyph_return"/>
</g>
<use class="comfy" href="#nav-right"/>
<use class="tucked" href="#sticky-sym"/>
</g>
</svg>
<p><kbd>Escape</kbd> replaces <kbd>Tab</kbd> on the left thumb, which makes it even more
symmetrical: </p>
<ul>
<li>the right hand confirms (<kbd>Enter</kbd>, <kbd>Space</kbd>), the left hand cancels
(<kbd>Escape</kbd>, <kbd>Backspace</kbd>); </li>
<li><kbd>Enter</kbd> mirrors <kbd>Escape</kbd>,
<kbd>Space</kbd> mirrors <kbd>Backspace</kbd>.</li>
</ul>
<p>This variant is <em>very</em> popular and extensively tested.</p>
<h3 id="shift-hrm"><kbd>Shift</kbd> as Pinky HRM</h3>
TODO
<h2 id="implementations">Implementations</h2>
<p>The reference implementation is called “Ækeynox”, and is available both for ZMK and QMK:</p>
<nav class="big-links">
<a href="https://github.com/OneDeadKey/zmk-config-aekeynox">ZMK-config-Ækeynox</a>
<a href="https://github.com/OneDeadKey/qmk-config-aekeynox">QMK-config-Ækeynox</a>
</nav>
<h2 id="alternatives">Alternatives</h2>
<ul>
<li><a href="https://github.com/manna-harbour/miryoku">Miryoku</a>:
36+ keys, 6 layers, <kbd>Shift</kbd> as home row mod
</li>
<li><a href="36 keys, 6 layers">Seniply</a>:
34+ keys, 6 layers, no layer-taps (“Callum-style”)
</li>
</ul>
</main>
<footer>
<a href="https://unlicense.org">Unlicensed</a> 2025-2026 by
<a href="https://github.com/OneDeadKey/selenium">OneDeadKey</a> contributors.
</footer>
</html>