Implement "Timeless" Homerow Mods (HRMs)
mainTo achieve a "timer-less" typing experience with minimal misfires and delays, use a combination of ZMK's balanced flavor and specific timing properties. This setup avoids the traditional requirement of holding a key longer than tapping-term-ms to trigger a modifier.
Key Configuration Properties
flavor = "balanced": Produces a "hold" if another key is both pressed and released within the tapping term. This allows modifiers to trigger without waiting for the full tapping term.require-prior-idle-ms: Immediately resolves an HRM as a "tap" if it is pressed shortly after another key has been tapped, eliminating the typing delay.hold-trigger-key-positions: Used with positional hold-tap to force HRMs to resolve as a "tap" when the next key is on the same side of the keyboard, preventing accidental nested sequences during key rolls.hold-trigger-on-release: Delays the positional decision until the next key is released, allowing multiple modifiers to be combined on the same hand.
Example Configuration
Note: This example uses zmk-helpers macros for key labels. If not using them, replace KEYS_L, KEYS_R, and THUMBS with your specific key position indices.
/* Left-hand HRMs. */
ZMK_HOLD_TAP(hml,
flavor = "balanced";
tapping-term-ms = <280>;
quick-tap-ms = <175>;
require-prior-idle-ms = <150>;
bindings = <&kp>, <&kp>;
hold-trigger-key-positions = <KEYS_R THUMBS>;
hold-trigger-on-release;
)
/* Right-hand HRMs. */
ZMK_HOLD_TAP(hmr,
flavor = "balanced";
tapping-term-ms = <280>;
quick-tap-ms = <175>;
require-prior-idle-ms = <150>;
bindings = <&kp>, <&kp>;
hold-trigger-key-positions = <KEYS_L THUMBS>;
hold-trigger-on-release;
)