Shortcuts Without Reaching
Every keyboard shortcut on your Mac requires a modifier — Command, Shift, Control, Option. Those keys are tucked into the bottom corners of your keyboard, forcing your fingers off the home row dozens of times an hour. Over a full workday, that’s thousands of small reaches that slow you down and strain your hands.
Home row mods fix this by putting modifiers right under your fingertips:
┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐
│ A │ │ S │ │ D │ │ F │ │ J │ │ K │ │ L │ │ ; │
│ ⇧ │ │ ⌃ │ │ ⌥ │ │ ⌘ │ │ ⌘ │ │ ⌥ │ │ ⌃ │ │ ⇧ │
└─────┘ └─────┘ └─────┘ └─────┘ └─────┘ └─────┘ └─────┘ └─────┘
Tap for letters, hold for modifiers
Tap a key normally and you get the letter. Hold it briefly and it becomes a modifier. Your hands never move — every shortcut is one fluid motion from the home row.
If you’re new to keyboard customization, read Keyboard Concepts first for background on dual-role keys and layers.
What are home row mods?
Every home row key gets a second job:
| Key | Tap | Hold |
|---|---|---|
| A | a | Shift (⇧) |
| S | s | Control (⌃) |
| D | d | Option (⌥) |
| F | f | Command (⌘) |
| J | j | Command (⌘) |
| K | k | Option (⌥) |
| L | l | Control (⌃) |
| ; | ; | Shift (⇧) |
This is the CAGS layout (Command on index, Alt/Option on middle, Control on ring, Shift on pinky) — mirrored on both hands.
The result: any keyboard shortcut is one fluid motion. Hold F + press C = ⌘C (Copy). Hold A + press tab = ⇧Tab (Shift-Tab). No reaching, no contortion.
Getting started with defaults
- Open KeyPath and click the gear icon to open the inspector panel
- Go to the Custom Rules tab
- Enable the Home Row Mods pre-built rule
- Start typing normally
The defaults use the CAGS layout shown above. Practice for a few days — occasional misfires during fast typing are normal at first and improve as you adjust.
Pinky → Shift Ring → Control
Middle → Option Index → Command
Tip: Start by using home row mods only for shortcuts you already know (⌘C, ⌘V, ⌘Z). Once those feel natural, expand to new shortcuts.
Tuning your setup
Once you’ve enabled home row mods, you can fine-tune how they feel. Open the rule’s settings to access these controls.
Typing Feel slider
KeyPath provides a slider to adjust the tap-hold threshold:
Screenshot — Typing Feel slider in rule settings:
┌─────────────────────────────────────────────────────┐
│ Typing Feel │
│ │
│ More Letters ────────●──────────── More Modifiers │
│ ↑ │
│ 200 ms │
│ │
│ Tap timeout: [ 200 ms ] │
│ Hold timeout: [ 200 ms ] │
└─────────────────────────────────────────────────────┘
- Slide toward “More Letters” for a longer tap window (fewer accidental modifiers)
- Slide toward “More Modifiers” for quicker modifier activation
Per-finger sensitivity
Pinkies are slower than index fingers. KeyPath lets you add extra tolerance for slower fingers to prevent accidental holds:
Screenshot — Per-finger sensitivity sliders:
┌─────────────────────────────────────────────────────┐
│ Per-Finger Tolerance │
│ │
│ Pinky ████████████████████░ +40 ms │
│ Ring █████████████░░░░░░░░ +25 ms │
│ Middle █████████░░░░░░░░░░░░ +15 ms │
│ Index ██████░░░░░░░░░░░░░░░ +0 ms │
│ │
│ Slower fingers get more time before │
│ the hold activates. │
└─────────────────────────────────────────────────────┘
Quick tap
When enabled, a quick tap-and-release always produces the letter, even if another key was pressed during the tap window. This is especially helpful for fast typists.
Start with defaults, then adjust one parameter at a time.
How KeyPath makes home row mods reliable
Split-hand detection
KeyPath tracks which keyboard half each key belongs to. This is the key to reliable home row mods:
- Same-hand key press during the tap-hold window → immediately produces the letter (fast typing)
- Opposite-hand key press → allows the modifier to activate (intentional shortcut)
Left Hand Right Hand
┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐
│ Q │ W │ E │ R │ T │ │ Y │ U │ I │ O │ P │
├───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┤
│ A │ S │ D │ F │ G │ │ H │ J │ K │ L │ ; │
├───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┤
│ Z │ X │ C │ V │ B │ │ N │ M │ , │ . │ / │
└───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘
Same hand → tap (letter) Example: F then D → "fd"
Cross hand → hold (modifier) Example: F then J → ⌘J
This is based on Kanata’s tap-hold-release-keys and the approach recommended by Kanata’s creator.
Per-finger timing
Different fingers move at different speeds. KeyPath lets you give slower fingers (pinkies) more time before the hold activates, while keeping faster fingers (index) responsive. This eliminates most accidental modifier activations.
Switching from Karabiner? See the From Karabiner-Elements guide for a detailed comparison of how home row mods work in both tools.
Advanced techniques
These are techniques being explored in the mechanical keyboard community. Some are in KeyPath today, others are planned or available through custom Kanata config.
Anti-cascade / nomods layer
After a tap resolves, temporarily disable all home row mods for the rest of the typing burst, re-enabling them after a brief idle. This prevents chain-reaction misfires.
Pioneered by Sunaku’s home row mods configuration, which implements this via a dedicated “nomods” layer in Kanata.
Typing streak detection
Track sustained typing bursts and suppress modifier activation entirely during the streak. Only re-enable modifiers after a pause. This eliminates nearly all misfires during fast prose typing.
See Sunaku’s bilateral combinations approach for a detailed implementation.
Achordion / Chordal Hold
QMK firmware libraries (created by Pascal Getreuer) that make the tap/hold decision based on which hand pressed the next key. Chordal Hold was merged into QMK core in February 2025, making opposite-hand detection a built-in feature for QMK keyboards.
KeyPath’s split-hand detection provides equivalent functionality for standard Mac keyboards via Kanata.
Eager mods
Apply the modifier immediately while the tap-hold decision is still pending. If the key resolves as a tap, the modifier is retroactively canceled. This reduces perceived latency for intentional modifier use.
Kanata supports eager mode via tap-hold-press and tap-hold-release variants. See the Kanata tap-hold documentation for details.
Shift exemption
Shift is the most frequently used modifier during normal typing (capital letters, punctuation). Advanced configurations exempt Shift from streak suppression and anti-cascade so capitalization works naturally during fast typing, while still suppressing accidental Control, Option, and Command.
Resources
KeyPath guides
- Keyboard Concepts — Background on tap-hold, layers, and modifiers
- One Key, Multiple Actions — Detailed guide to all tap-hold options in KeyPath
- What You Can Build — See HRM as part of a complete setup with Hyper key, window tiling, and more
- Alternative Layouts — HRM works with any layout — see what’s supported
- Keyboard Layouts — Split keyboards and HRM are a natural match
- Switching from Karabiner? — See how KeyPath’s HRM compares to Karabiner’s approach
- Back to Docs
External references
- The Home Row Mods Guide (Precondition) — The definitive community reference on HRM layouts and tuning ↗
- Pascal Getreuer’s home row mods analysis — Technical deep dive on timing, anti-misfire, and Chordal Hold ↗
- Sunaku’s home row mods — Advanced anti-cascade and bilateral combinations ↗
- Kanata tap-hold documentation — Full reference for the engine behind KeyPath’s tap-hold ↗
- jtroo’s Kanata config — Real-world advanced config from Kanata’s creator ↗
- QMK Chordal Hold — Firmware-level opposite-hand detection (same concept KeyPath uses) ↗
- r/ErgoMechKeyboards — Active community discussing HRM tuning and experiences ↗
- Ben Vallack’s HRM journey — Practical experiences with home row mods on various layouts ↗