Skip to content

Commit 7ac2c86

Browse files
committed
Configure tap settings
1 parent 21a9933 commit 7ac2c86

File tree

2 files changed

+171
-3
lines changed

2 files changed

+171
-3
lines changed

config/charybdis.keymap

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,16 @@
44
#include <dt-bindings/zmk/keys.h>
55
#include <dt-bindings/zmk/pointing.h>
66

7-
#define U_TAPPING_TERM 175
7+
#define U_TAPPING_TERM 280
8+
#define U_QUICK_TAP 175
9+
#define U_REQUIRE_PRIOR_IDLE 175
10+
11+
// Key position ranges for hold-trigger-key-positions
12+
// Left hand: columns 0-5 (positions 0-11, 24-28)
13+
// Right hand: columns 6-11 (positions 12-23, 29-34)
14+
#define LEFT_HAND_KEYS 0 1 2 3 4 5 6 7 8 9 10 11 24 25 26 27 28
15+
#define RIGHT_HAND_KEYS 12 13 14 15 16 17 18 19 20 21 22 23 29 30 31 32 33 34
16+
#define THUMB_KEYS 24 25 26 27 28 29 30 31 32 33 34
817
#define BASE 0
918
#define NAV 1
1019
#define SYMNUM 2
@@ -79,8 +88,12 @@
7988
compatible = "zmk,behavior-hold-tap";
8089
#binding-cells = <2>;
8190
tapping-term-ms = <U_TAPPING_TERM>;
82-
flavor = "tap-preferred";
91+
quick-tap-ms = <U_QUICK_TAP>;
92+
require-prior-idle-ms = <U_REQUIRE_PRIOR_IDLE>;
93+
flavor = "balanced";
8394
bindings = <&kp>, <&kp>;
95+
hold-trigger-key-positions = <RIGHT_HAND_KEYS THUMB_KEYS>;
96+
hold-trigger-on-release;
8497
};
8598

8699
u_lt: u_lt {
@@ -90,7 +103,7 @@
90103
flavor = "tap-preferred";
91104
bindings = <&mo>, <&kp>;
92105

93-
quick-tap-ms = <U_TAPPING_TERM>;
106+
quick-tap-ms = <U_QUICK_TAP>;
94107
};
95108
};
96109

docs/MOD_MORPH_GUIDE.md

Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
# Mod-Morph Guide
2+
3+
## What is Mod-Morph?
4+
5+
**Mod-Morph** is a ZMK feature that lets one key produce **two different symbols** depending on whether you're holding Shift when you press it.
6+
7+
Think of it as: "Press this key normally → get first symbol. Hold Shift + press this key → get second symbol."
8+
9+
## How It Works
10+
11+
### Traditional Way (Without Mod-Morph)
12+
13+
```
14+
To type "?" you press: ?
15+
To type "!" you press: Shift + !
16+
```
17+
18+
Two separate keys, two separate mental mappings.
19+
20+
### With Mod-Morph
21+
22+
```
23+
To type "?" you press: [mod-morph key]
24+
To type "!" you press: Shift + [same mod-morph key]
25+
```
26+
27+
**One key, intuitive behavior.**
28+
29+
## Your Mod-Morph Keys
30+
31+
Your firmware now has **3 mod-morph keys** on the BASE layer:
32+
33+
| Key Position | Name | Press Normally | Press with Shift |
34+
|--------------|------|----------------|------------------|
35+
| Right hand, bottom row (H key) | `mm_cm_sc` | `,` (comma) | `;` (semicolon) |
36+
| Right hand, bottom row (, key) | `mm_pr_col` | `.` (period) | `:` (colon) |
37+
| Add anywhere | `mm_qm_ex` | `?` (question) | `!` (exclamation) |
38+
39+
## Real-World Examples
40+
41+
### Example 1: Punctuation in Sentences
42+
43+
**Typing:** "Hello, world!"
44+
45+
```
46+
H e l l o [comma+space] w o r l d [shift+period]
47+
```
48+
49+
**Without mod-morph:** You'd need to remember comma is on symbol layer or use pinky stretch
50+
**With mod-morph:** Just press the key, it's comma!
51+
52+
**Typing:** "What? Really!"
53+
54+
```
55+
W h a t [?] [space] R e a l l y [shift+?]
56+
```
57+
58+
**With mod-morph:** Press `?` key normally for `?`, hold Shift for `!`
59+
60+
### Example 2: Coding
61+
62+
**Typing:** `array.length;`
63+
64+
```
65+
a r r a y [period] l e n g t h [shift+comma]
66+
```
67+
68+
**With mod-morph:** Same key does `.` and `;` automatically!
69+
70+
## Why Use Mod-Morph?
71+
72+
| Benefit | Explanation |
73+
|---------|-------------|
74+
| **No waiting** | Instant output, no 200ms delay like tap-dance |
75+
| **Intuitive** | You already know Shift = alternate symbol |
76+
| **Saves keys** | One key instead of two |
77+
| **No layers** | Don't need symbol layer for common punctuation |
78+
| **Fast typing** | Works at full typing speed |
79+
80+
## Comparison to Other Methods
81+
82+
### vs Tap-Dance
83+
84+
| Method | Speed | Mental Model |
85+
|--------|-------|--------------|
86+
| Tap-dance `?` / `!` | Must wait 200ms | "Tap once or twice?" |
87+
| Mod-morph `?` / `!` | Instant (0ms) | "Press or Shift+press" |
88+
89+
**Winner:** Mod-morph for shift-paired symbols
90+
91+
### vs Hold-Tap Layers
92+
93+
| Method | Steps for `!` |
94+
|--------|---------------|
95+
| Layer hold + key press | Hold layer, press key, release (3 actions) |
96+
| Mod-morph | Hold Shift, press key (2 actions) |
97+
98+
**Winner:** Mod-morph for common symbols
99+
100+
### vs Standard Keyboard
101+
102+
| Method | `?` location | `!` location |
103+
|--------|--------------|--------------|
104+
| Standard QWERTY | Shift + `/` | Shift + `1` |
105+
| Your mod-morph | One key | Shift + same key |
106+
107+
**Winner:** Your muscle memory already knows Shift!
108+
109+
## Troubleshooting
110+
111+
### Q: I press the key but don't get the symbol I expect!
112+
**A:** Make sure you're not accidentally holding Shift. Mod-morph checks if **either** left or right Shift is held.
113+
114+
### Q: Can I use this with other modifiers?
115+
**A:** The current config only works with Shift. You can add `MOD_LCTRL`, `MOD_LALT`, etc. if needed.
116+
117+
### Q: What if I want to add more mod-morph keys?
118+
**A:** Edit `config/charybdis.keymap` and add:
119+
```dev
120+
mm_your_name: your_name {
121+
compatible = "zmk,behavior-mod-morph";
122+
#binding-cells = <0>;
123+
bindings = <&kp FIRST_SYMBOL>, <&kp SECOND_SYMBOL>;
124+
mods = <(MOD_LSFT | MOD_RSFT)>;
125+
};
126+
```
127+
128+
## Common Mod-Morph Pairs
129+
130+
These work great because they're conceptually related:
131+
132+
| Pair | Why |
133+
|------|-----|
134+
| `?` / `!` | Both are sentence endings |
135+
| `.` / `:` | Both are punctuation stops |
136+
| `,` / `;` | Both are separators |
137+
| `<` / `>` | Comparison operators |
138+
| `(` / `)` | Parens (same key on std keyboard) |
139+
| `[` / `]` | Brackets (same key on std keyboard) |
140+
| `{` / `}` | Braces (same key on std keyboard) |
141+
142+
## Summary
143+
144+
- **Mod-morph** = one key, two outputs based on Shift
145+
- **Instant** = no waiting, no delays
146+
- **Intuitive** = works the way you already think
147+
- **Your keys** = `,`/`;` and `.`/`:` are already set up
148+
149+
**Just type naturally and let mod-morph handle the symbols!**
150+
151+
---
152+
153+
**Want to learn more?** Check out:
154+
- [ZMK Mod-Morph Documentation](https://zmk.dev/docs/behaviors/mod-morph)
155+
- Your keymap: `config/charybdis.keymap` (search for `mm_`)

0 commit comments

Comments
 (0)