diff --git a/draw/keymap.png b/draw/keymap.png index c529cf4..dbe5085 100644 Binary files a/draw/keymap.png and b/draw/keymap.png differ diff --git a/readme.md b/readme.md index 70e17af..8488a0f 100644 --- a/readme.md +++ b/readme.md @@ -10,26 +10,20 @@ compatible with Zephyr 3.0 is available ## Highlights -- simple keymap configuration using helper macros from +- ["Timeless" homerow mods](#timeless-homerow-mods) +- Combos replace symbol layer +- Smart numbers and mouse layers auto-toggle off +- Unicode math and international leader key sequences +- Simplified Devicetree syntax using helper macros from [zmk-helpers](https://github.com/urob/zmk-helpers) -- the base keymap and combo setup are independent of the physical location of - keys and are re-used for multiple keyboards. The configuration is fit onto - larger boards by padding it via a modular structure of "extra keys" -- ["timeless" homerow mods](#timeless-homerow-mods) -- combos replacing the symbol layer -- 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 +- Base keymap padded with modular structure of "extra keys" to fit on larger + boards +- Arrow-cluster doubles as home, end, begin/end of document on long-press -- more intuitive shift-actions: , ;, . : and ? +- More intuitive shift-actions: , ;, . : and ? ! -- shift + space morphs into dot → - spacesticky-shift -- "Greek" layer for mathematical typesetting (activated as sticky-layer via a - combo) -- nix-based [local build environment](#local-development-workspace) -- simply - `cd` into your workspace and start building without any setup +- Fully automated, nix-based + [local build environment](#local-development-workspace) ![](draw/keymap.png) @@ -41,7 +35,7 @@ timing: In its most naive implementation, in order to produce a "mod", they must be held _longer_ than `tapping-term-ms`. In order to produce a "tap", they must be held _less_ than `tapping-term-ms`. This requires very consistent typing speeds that, alas, I do not possess. Hence my quest for a "timer-less" HRM -setup.[^2] +setup.[^1] After months of tweaking, I eventually ended up with a HRM setup that is essentially timer-less, resulting in virtually no misfires. Yet it provides a @@ -51,7 +45,7 @@ Let's suppose for a moment we set `tapping-term-ms` to something ridiculously large, say 5 seconds. This makes the configuration timer-less of sorts. But it has two problems: (1) To activate a mod we will have to hold the HRM keys for what feels like eternity. (2) During regular typing, there are delays between -the press of a key and the time it appears on the screen.[^3] Enter two of my +the press of a key and the time it appears on the screen.[^2] Enter two of my favorite ZMK features: - To address the first problem, I use ZMK's `balanced` flavor, which produces a @@ -148,7 +142,7 @@ smaller (and larger) things to try. - **Noticeable delay when tapping HRMs:** Increase `require-prior-idle-ms`. As a rule of thumb, you want to set it to at least `10500/x` where `x` is your - (relaxed) WPM for English prose.[^4] + (relaxed) WPM for English prose.[^3] - **False negatives (same-hand):** Reduce `tapping-term-ms` (or disable `hold-trigger-key-positions`) - **False negatives (cross-hand):** Reduce `require-prior-idle-ms` (or set @@ -249,14 +243,15 @@ 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 +##### Leader key -I recently switched to 25g-chocs on one of my keyboards. I already was very -happy with my combos prior to that (even with heavy-ish 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 reduce SFUs when typing -double-letter words. +I recently started using Nick Conway's +[Leader key](https://github.com/zmkfirmware/zmk/pull/1380) implementation for +ZMK. From my limited experience, I really like how it allows making less +commonly used behaviors accessible without binding them to a dedicated key. For +now I am using it for a variety of Unicode math symbols and international +characters. I am planning to extend the use to various firmware interactions +once I figure out the technical details. ## Local development workspace @@ -281,9 +276,9 @@ environment is _completely isolated_ and won't pollute your system. ``` 2. Install [`direnv`](https://direnv.net/) (and optionally but recommended - [`nix-direnv`](https://github.com/nix-community/nix-direnv)[^5]) using your + [`nix-direnv`](https://github.com/nix-community/nix-direnv)[^4]) using your package manager of choice. E.g., using the `nix` package manager that we just - installed[^6]: + installed[^5]: ``` nix profile install nixpkgs#direnv nixpkgs#nix-direnv @@ -409,31 +404,11 @@ remaining issues: pause when wanting to chord HRMs that overlap with combo positions. As a workaround, I implemented all homerow combos as homerow-mod-combos. This is good enough for day-to-day, but does not address all edge cases (eg - dynamically adding/removing mods doesn't work well). Having a native solution - akin to QMK's "COMBO_MUST_TAP" property would be fantastic. -- 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)) + changing active mods). - 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. 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 `require-prior-idle` timeout. However, with both a large tapping-term and @@ -442,12 +417,12 @@ remaining issues: i.e., variations in typing speed won't affect _what_ is being typed but merely _how fast_ it appears on the screen. -[^3]: +[^2]: The delay is determined by how quickly a key is released and is not directly related to the tapping-term. But regardless of its length, most people still find it noticable and disruptive. -[^4]: +[^3]: E.g, if your WPM is 70 or larger, then the default of 150ms (=10500/70) should work well. The rule of thumb is based on an average character length of 4.7 for English words. Taking into account 1 extra tap for `space`, this @@ -455,12 +430,12 @@ remaining issues: / x milliseconds. The approximation errs on the safe side, as in practice home row taps tend to be faster than average. -[^5]: +[^4]: `nix-direnv` provides a vastly improved caching experience compared to only having `direnv`, making entering and exiting the workspace instantaneous after the first time. -[^6]: +[^5]: This will permanently install the packages into your local profile, forgoing many of the benefits that make Nix uniquely powerful. A better approach, though beyond the scope of this document, is to use `home-manager` to