diff --git a/config/base.keymap b/config/base.keymap
index 0bd92ba..e4b9362 100644
--- a/config/base.keymap
+++ b/config/base.keymap
@@ -223,7 +223,7 @@ ZMK_LAYER(base,
//├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┼─────────────┼─────────────┤ ├──────┤
X_LB &kp Z &kp X &kp C &kp D &kp V X_MB &kp K &kp H &comma_morph &dot_morph &qexcl X_RB
//├──────┤ ╰─────────────┼─────────────┴─────────────┼─────────────┼─────────────┤ ├──────┤ ├─────────────┼─────────────┼─────────────┴───────────────────────────╯ ├──────┤
- X_LH <_spc NAV 0 < FN RET X_MH NUM_WORD &ss_cw X_RH
+ X_LH <_spc NAV 0 < FN RET X_MH NUM_WORD &ss_cw X_RH
//╰──────╯ ╰─────────────┴─────────────╯ ╰──────╯ ╰─────────────┴─────────────╯ ╰──────╯
)
diff --git a/img/keymap.png b/img/keymap.png
index 06e8676..3c0288e 100644
Binary files a/img/keymap.png and b/img/keymap.png differ
diff --git a/readme.md b/readme.md
index acc8099..b3a65f5 100644
--- a/readme.md
+++ b/readme.md
@@ -4,7 +4,7 @@ This is my personal [ZMK firmware](https://github.com/zmkfirmware/zmk/) configur
It consists of a 34-keys base layout that is re-used for various boards, including my
Corneish Zen and an Advantage 360 pro.
-## *Key* features
+## Highlights
- clean keymap + unicode setup using helper macros from
[zmk-nodefree-config](https://github.com/urob/zmk-nodefree-config)
@@ -13,21 +13,14 @@ Corneish Zen and an Advantage 360 pro.
larger boards by padding it via a modular structure of "extra keys"
- ["timer-less" homerow mods](#timeless-homerow-mods)
- combos replacing the symbol layer
-- a smart-layer implementation for ZMK that automatically toggles the numbers
- layer
-- long-pressing the arrow-cluster yields home, end, begin/end of document, and
- fwd/bwd-delete words
-- sticky shift on right thumb, double-tap (or shift + tap)[^1] activates
- caps-word
-- shift + , morphs into ; and
- shift + . morphs into ; (freeing up the
- right pinky for ? / !)
-- shift + ctrl + , morphs into <
- and shift + ctrl + . morphs into
- >
+- smart numbers and smart mouse layers that automatically toggle off when done
+- sticky shift on right thumb, double-tap (or shift + tap)[^1] activates caps-word
+- arrow-cluster doubles as home, end, begin/end of
+ document on long-press
+- more intuitive shift-actions: , ;, . : and ? !
- shift + space morphs into dot →
space → sticky-shift
-- "Greek" layer for mathematical typesetting (activated via sticky-layer combo)
+- "Greek" layer for mathematical typesetting (activated as sticky-layer via a combo)
- modified Github Actions workflow that recognizes git-submodules
- automated
[build-scripts](https://github.com/urob/zmk-config/tree/main/scripts#readme)
@@ -147,14 +140,19 @@ PRs, you might find this [ZMK-centric introduction to
Git](https://gist.github.com/urob/68a1e206b2356a01b876ed02d3f542c7) helpful.
-## Combo setup
+## Using combos instead of a symbol layer
-My layout makes heavy use of combos. Thanks to `global-quick-tap` for combos
-(introduced in above mentioned PR #1387), combo misfires are rare, even when
-rolling keys. Most of my combos are bind to symbols, replacing the usual
-symbols layer seen on many sub-40 keyboard layouts. The combos are designed so
-as to put the most used symbols in easy-to-access locations while also making
-them easy to remember. Specifically:
+I am a big fan of combos for all sort of things. In terms of comfort, I much prefer them
+over accessing layers that involve lateral thumb movements to be activated, especially
+when switching between different layers in rapid succession.
+
+One common concern about overloading the layout with combos is that they lead to
+misfires. Fortunately, the above-mentioned PR #1387, also adds a `global-quick-tap` option
+for combos, which in my experience all but completely eliminates the problem -- even
+when rolling keys on the home row!
+
+My combo layout aims place the most used symbols in easy-to-access
+locations while also making them easy to remember. Specifically:
- the top vertical-combo row matches the symbols on a standard numbers row
(except `+` and `&` being swapped)
@@ -162,37 +160,70 @@ them easy to remember. Specifically:
aligns with superscript `^`; minus `-` aligns with `+`; division `/` aligns
with multiplication `*`; logical-or `|` aligns with logical-and `&`)
- parenthesis, braces, brackets are set up symmetrically as horizontal combos
-- cut (on `X + D`), copy, and paste are on the left side for one-handed mouse
- use
-- `L + Y` activates Greek layer for the next key press, `L + U + Y` activates the shifted
- Greek layer the next key
-- `tap`, `esc`, `enter` are on horizontal combos
+- left-hand side combos for `tap`, `esc`, `enter`, `cut` (on X + D),
+ `copy` and `paste` that go well with right-handed mouse usage
+- L + Y switches to the Greek layer for a single key
+ press, L + U + Y activates one-shot shift in
+ addition
+- W + P activates the smart mouse layer
-## Experimental changes
+## Smart layers and other gimmicks
-- I recently reduced my core layout to 34 keys. Backspace and Delete are now on
- my Navigation-layer. To make room for these keys, I have added hold-taps to
- the arrow cluster, which now double as Home/End and Beginning/End of
- document. I really like the new navigation cluster and will likely keep it in
- one way or another
-- Inspired by Jonas Hietala's
- [Numword](https://www.jonashietala.se/blog/2021/06/03/the-t-34-keyboard-layout/#where-are-the-digits)
- for QMK, I implemented my own version of [Smart-layers for
- ZMK](https://github.com/zmkfirmware/zmk/pull/1451). It is triggered via a
- single tap on my Num-key (holding the key will activate the num layer as
- usual without triggering Numword). Similar to Capsword, Numword continues
- to be activated as long as I type numbers, and deactivates automatically on
- any other keypress. I found that I use Numword for most of my numbers
- typing. For single digits, it effectively is a sticky-layer, but
- importantly I can also use it for multiple digits. The only case where it
- doesn't deactivate automatically is where immediately after a digit I would
- type any of the letters on which my numpad is located (WFPRSTXCD), which is
- rare, but does happen. For these cases I have a CANCEL key on my Nav layer
- that cancels both Numword and Capsword.
-- Since the switch to 34 keys, I freed up the tap-position on my left-most
- thumb key. For now I added a secondary Bspc, but I am still searching for a
- better use. (I tried adding Repeat here but I found that it doesn't work well
- adjacent to space, which requires to much lateral thumb-movements)
+##### Numword
+
+Inspired by Jonas Hietala's
+[Numword](https://www.jonashietala.se/blog/2021/06/03/the-t-34-keyboard-layout/#where-are-the-digits)
+for QMK, I implemented my own version of [Smart-layers for
+ZMK](https://github.com/zmkfirmware/zmk/pull/1451). It is triggered via a
+single tap on "Smart-Num". Numword continues to be activated as long as I
+type numbers, and deactivates automatically on any other keypress (holding it activates
+a non-sticky num layer).
+
+After using Numword for about 6 months now, I have been overall very happy with it. When
+typing single digits, it effectively is a sticky-layer but with the added advantage that
+I can also use it to type multiple digits.
+
+The main downside is that if a sequence of numbers is *immediately* followed by any of the
+letters on which my numpad is located (WFPRSTXCD), then the automatic deactivation won't
+work. But this is rare -- most number sequences are terminated by `space`, `return` or some form
+of punctuation/delimination. To deal with the rare cases where they aren't, there is a
+`CANCEL` key on the navigation-layer that deactivates Numword, Capsword and Smart-mouse.
+
+##### Smart-Mouse
+
+Similarly to Numword, I have a smart-mouse layer (activated by comboing
+W + P), which replaces the navigation cluster with
+scroll and mouse-movements, and replaces the right thumbs with mouse buttons.
+Pressing any other key automatically deactivates the layer.
+
+##### Capsword
+
+My right thumb triggers three variations of shift: Tapping yields
+sticky-shift (used to capitalize alphas), holding activates a regular shift, and
+double-tapping (or equivalently shift + tap) activates ZMK's Caps-word behavior.
+
+One minor technical detail: While it would be possible to implement the double-tap functionality
+as a tap-dance, this would add a delay when using single taps. To avoid the delays, I
+instead implemented the double-tap functionality as a mod-morph.
+
+##### Multi-purpose Navigation cluster
+
+To economize on keys, I am using hold-taps on my navigation cluster, which yield `home`, `end`,
+`begin/end of document`, and `delete word forward/backward` on long-presses.
+
+##### Swapper
+
+I am using [Nick Conway](https://github.com/nickconway)'s fantastic
+[tri-state](https://github.com/zmkfirmware/zmk/pull/1366) behavior for a
+one-handed Alt-Tab switcher (`PWin` and `NWin`).
+
+##### Repeat
+
+I recently switched to 25g-chocs on one of my keyboards. I already was a big fan of
+combos prior to that (even with heavy MX-switches). But with the light chocs, I find
+that I can now even use them for regular typing. While I haven't yet tried placing alphas
+on combos, I am currently experimenting with a `repeat` combo on my home row that I
+use to make writing double-letter words more fun.
## Issues and workarounds
@@ -202,22 +233,29 @@ any functionality (to the contrary, I found that ZMK supports many features
natively that would require complex user-space implementations in QMK). Below
are a few remaining issues:
-- ZMK does not yet support tap-only combos
- ([#544](https://github.com/zmkfirmware/zmk/issues/544)). Workaround: pause
- briefly when chording multiple HRMs together on positions that otherwise would trigger
- a combo.
-- OS sleep is not yet implemented ([#1077](https://github.com/zmkfirmware/zmk/issues/1077)).
- Workaround: use sleep-macro instead.
-- `&bootloader` doesn't work with Planck_rev6
- ([#1086](https://github.com/zmkfirmware/zmk/issues/1086)). Workaround: Manually press
- reset-button.
+- ZMK does not yet support "tap-only" combos
+ ([#544](https://github.com/zmkfirmware/zmk/issues/544)). As a workaround, one
+ can pause briefly when chording multiple HRMs together on positions that
+ otherwise would trigger a combo. But this is at the top of my ZMK-wishlist.
+- Another item on my wishlist are adaptive keys
+ ([#1624](https://github.com/zmkfirmware/zmk/issues/1624)). This would open
+ the door for things like spacespace becoming
+ .spacesticky-shift. (Using tap-dance isn't
+ really an option here due to the delay it adds)
+- A minor thing is that ZMK doesn't yet support any keys on the
+ desktop-user-page; e.g., OS sleep
+ ([#1077](https://github.com/zmkfirmware/zmk/issues/1077),
+ [#1535](https://github.com/zmkfirmware/zmk/issues/1535))
+- Very minor: `&bootloader` doesn't work with stm32 boards like the Planck
+ ([#1086](https://github.com/zmkfirmware/zmk/issues/1086))
[^1]: Really what's happening is that `Shift` + my right home-thumb morph into
caps-word. This gives me two separate ways of activating it: (1) Holding the
homerow-mod shift on my left index-finger and then pressing my right home-thumb, which
is my new preferred way. Or, (2) double-tapping the right home-thumb, which also works
because the first tap yields sticky-shift, activating the mod-morph upon the second
- tap.
+ tap. But even when only activating via double-tapping, this implementation is advantageous
+ compared to using tap-dance as it does not create any delay when single-tapping the key.
[^2]: I call it "timer-less", because the large tapping-term makes the behavior
insensitive to the precise timings. One may say that there is still the