keymap: Colemak UML layer with arrows, BT combos, fix BLE/settings config
/ build (push) Has been cancelled
/ build (push) Has been cancelled
- UML layer: arrows on T(↑) C(←) D(↓) V(→), ALT on Enter - BT profile switching via combos: CTRL+Q/W/F/P → profiles 1-4 - Explicit CONFIG_ZMK_BLE, CONFIG_FLASH, CONFIG_NVS, CONFIG_SETTINGS_NVS - Board name: seeeduino_xiao_ble → xiao_ble - Add .gitignore, AGENTS.md (build docs), BINDINGS.md (keymap ref)
This commit is contained in:
+18
@@ -0,0 +1,18 @@
|
|||||||
|
# Build artifacts
|
||||||
|
build/
|
||||||
|
*.uf2
|
||||||
|
|
||||||
|
# West-managed submodules
|
||||||
|
modules/
|
||||||
|
optional/
|
||||||
|
zephyr/
|
||||||
|
zmk/
|
||||||
|
|
||||||
|
# West state
|
||||||
|
.west/
|
||||||
|
|
||||||
|
# macOS
|
||||||
|
.DS_Store
|
||||||
|
|
||||||
|
# Reasonix
|
||||||
|
.reasonix/
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
# AGENTS.md — TOTEM ZMK Config
|
||||||
|
|
||||||
|
## Build
|
||||||
|
|
||||||
|
Local Docker build (no GitHub Actions needed):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker run --rm \
|
||||||
|
-v $(pwd):/workspace/zmk-config \
|
||||||
|
-w /workspace/zmk-config \
|
||||||
|
zmkfirmware/zmk-build-arm:stable \
|
||||||
|
bash -c "
|
||||||
|
git config --global --add safe.directory '*'
|
||||||
|
west zephyr-export
|
||||||
|
west build -s zmk/app -d build/left -b xiao_ble -- -DSHIELD=totem_left -DZMK_CONFIG=/workspace/zmk-config/config
|
||||||
|
west build -s zmk/app -d build/right -b xiao_ble -- -DSHIELD=totem_right -DZMK_CONFIG=/workspace/zmk-config/config
|
||||||
|
"
|
||||||
|
|
||||||
|
cp build/left/zephyr/zmk.uf2 totem_left.uf2
|
||||||
|
cp build/right/zephyr/zmk.uf2 totem_right.uf2
|
||||||
|
```
|
||||||
|
|
||||||
|
- Clean build dirs between config changes: `rm -rf build/left build/right`
|
||||||
|
- The Docker image `zmkfirmware/zmk-build-arm:stable` must be pulled first (~3 GB)
|
||||||
|
- Board name is `xiao_ble` (not `seeeduino_xiao_ble` — that was the old name)
|
||||||
|
- `west update` only needed when ZMK/Zephyr deps change (pulls submodules)
|
||||||
|
- `CONFIG_ZMK_BLE=y` is explicitly set in `config/totem.conf` (board defconfig alone proved unreliable)
|
||||||
|
|
||||||
|
## Keymap
|
||||||
|
|
||||||
|
The active keymap is `config/totem.keymap`. It overrides the shield default at `config/boards/shields/totem/totem.keymap`.
|
||||||
|
|
||||||
|
3 layers: `BASE` (0), `UML` (1), `BT` (2).
|
||||||
|
|
||||||
|
## BINDINGS.md
|
||||||
|
|
||||||
|
**After every binding change** in `config/totem.keymap`, update `BINDINGS.md` with an ASCII graphic of all three layers and the quick-reference table. The physical key labels in the ASCII art must match the BASE layer positions exactly.
|
||||||
+85
@@ -0,0 +1,85 @@
|
|||||||
|
# TOTEM Keymap Reference
|
||||||
|
|
||||||
|
> Auto-generated from `config/totem.keymap`. **Must be updated after every binding change.**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Layer 0: BASE (Colemak)
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┐
|
||||||
|
│ Q │ W │ F │ P │ B │ │ J │ L │ U │ Z │ ? │
|
||||||
|
├─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┤
|
||||||
|
│ A │ R │ S │ T │ G │ │ M │ N │ E │ I │ O │
|
||||||
|
├─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┤
|
||||||
|
│ ⇧ │ Y │ X │ C │ D │ V │ │ K │ H │ / │ , │ . │ ⎋ │
|
||||||
|
└─────┴─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┴─────┴─────┘
|
||||||
|
│ ␣ │ UML │ ⏎ │ │CTRL │ SPR │ ⌫ │
|
||||||
|
└─────┴─────┴─────┘ └─────┴─────┴─────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Layer 1: UML (hold left thumb)
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┐
|
||||||
|
│ 1 │ 2 │ 3 │ 4 │ 5 │ │ + │ @ │ Ü │ { │ ~ │
|
||||||
|
├─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┤
|
||||||
|
│ Ä │ · │ ß │ ↑ │ · │ │ / │ ` │ > │ } │ Ö │
|
||||||
|
├─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┤
|
||||||
|
│ · │ · │ · │ ← │ ↓ │ → │ │ 6 │ 7 │ 8 │ 9 │ 0 │ * │
|
||||||
|
└─────┴─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┴─────┴─────┘
|
||||||
|
│ ⇥ │ · │ ⌥ │ │CTRL │ ( │ ) │
|
||||||
|
└─────┴─────┴─────┘ └─────┴─────┴─────┘
|
||||||
|
|
||||||
|
· = transparent (falls through to BASE)
|
||||||
|
⌥ = LALT / Option
|
||||||
|
```
|
||||||
|
|
||||||
|
### Arrow cluster
|
||||||
|
|
||||||
|
```
|
||||||
|
T → ↑
|
||||||
|
C → ← D → ↓ V → →
|
||||||
|
```
|
||||||
|
|
||||||
|
| Physical key | Action |
|
||||||
|
|-------------|--------|
|
||||||
|
| T | ↑ |
|
||||||
|
| C | ← |
|
||||||
|
| D | ↓ |
|
||||||
|
| V | → |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Bluetooth Profile Switching
|
||||||
|
|
||||||
|
CTRL is a normal modifier key. BT profiles are switched via **combos** (press both keys
|
||||||
|
within 50ms of each other):
|
||||||
|
|
||||||
|
| Combo | Action |
|
||||||
|
|-------|--------|
|
||||||
|
| **CTRL + Q** | BT profile 1 |
|
||||||
|
| **CTRL + W** | BT profile 2 |
|
||||||
|
| **CTRL + F** | BT profile 3 |
|
||||||
|
| **CTRL + P** | BT profile 4 |
|
||||||
|
|
||||||
|
CTRL works normally for all other shortcuts (CTRL+C, CTRL+V, etc. are unaffected).
|
||||||
|
On macOS these combos do not conflict with standard shortcuts (which use Cmd, not Ctrl).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Quick Reference
|
||||||
|
|
||||||
|
| Shortcut | Action |
|
||||||
|
|----------|--------|
|
||||||
|
| **UML + T** | ↑ |
|
||||||
|
| **UML + C** | ← |
|
||||||
|
| **UML + D** | ↓ |
|
||||||
|
| **UML + V** | → |
|
||||||
|
| **UML + ENT** | ALT / Option |
|
||||||
|
| **CTRL + Q** | BT profile 1 |
|
||||||
|
| **CTRL + W** | BT profile 2 |
|
||||||
|
| **CTRL + F** | BT profile 3 |
|
||||||
|
| **CTRL + P** | BT profile 4 |
|
||||||
@@ -3,7 +3,7 @@ id: totem
|
|||||||
name: TOTEM
|
name: TOTEM
|
||||||
type: shield
|
type: shield
|
||||||
url: https://github.com/GEIGEIGEIST/TOTEM
|
url: https://github.com/GEIGEIGEIST/TOTEM
|
||||||
requires: [seeeduino_xiao_ble]
|
requires: [xiao_ble]
|
||||||
features:
|
features:
|
||||||
- keys
|
- keys
|
||||||
siblings:
|
siblings:
|
||||||
|
|||||||
+16
-1
@@ -1 +1,16 @@
|
|||||||
CONFIG_ZMK_USB_LOGGING=n
|
CONFIG_ZMK_USB_LOGGING=n
|
||||||
|
|
||||||
|
# Explicitly enable BLE (needed for xiao_ble)
|
||||||
|
CONFIG_ZMK_BLE=y
|
||||||
|
|
||||||
|
# Settings storage (board defconfig not reliably applied)
|
||||||
|
CONFIG_FLASH=y
|
||||||
|
CONFIG_FLASH_PAGE_LAYOUT=y
|
||||||
|
CONFIG_FLASH_MAP=y
|
||||||
|
CONFIG_NVS=y
|
||||||
|
CONFIG_SETTINGS_NVS=y
|
||||||
|
|
||||||
|
# Erst nach 10 Min Inaktivität schlafen
|
||||||
|
CONFIG_ZMK_IDLE_TIMEOUT=3600000
|
||||||
|
CONFIG_ZMK_SLEEP=y
|
||||||
|
CONFIG_ZMK_IDLE_SLEEP_TIMEOUT=3600000
|
||||||
|
|||||||
+13
-27
@@ -10,9 +10,16 @@
|
|||||||
|
|
||||||
#define BASE 0
|
#define BASE 0
|
||||||
#define UML 1
|
#define UML 1
|
||||||
#define BT 2
|
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
|
combos {
|
||||||
|
compatible = "zmk,combos";
|
||||||
|
combo_bt1 { timeout-ms = <50>; key-positions = <0 35>; bindings = <&bt BT_SEL 0>; };
|
||||||
|
combo_bt2 { timeout-ms = <50>; key-positions = <1 35>; bindings = <&bt BT_SEL 1>; };
|
||||||
|
combo_bt3 { timeout-ms = <50>; key-positions = <2 35>; bindings = <&bt BT_SEL 2>; };
|
||||||
|
combo_bt4 { timeout-ms = <50>; key-positions = <3 35>; bindings = <&bt BT_SEL 3>; };
|
||||||
|
};
|
||||||
|
|
||||||
macros {
|
macros {
|
||||||
slash: slash {
|
slash: slash {
|
||||||
label = "SLASH";
|
label = "SLASH";
|
||||||
@@ -91,7 +98,7 @@ label = "BASE";
|
|||||||
&kp Q &kp W &kp F &kp P &kp B &kp J &kp L &kp U &kp Z &qmark
|
&kp Q &kp W &kp F &kp P &kp B &kp J &kp L &kp U &kp Z &qmark
|
||||||
&kp A &kp R &kp S &kp T &kp G &kp M &kp N &kp E &kp I &kp O
|
&kp A &kp R &kp S &kp T &kp G &kp M &kp N &kp E &kp I &kp O
|
||||||
&kp LSHFT &kp Y &kp X &kp C &kp D &kp V &kp K &kp H &slash &kp DOT &kp COMMA &kp ESC
|
&kp LSHFT &kp Y &kp X &kp C &kp D &kp V &kp K &kp H &slash &kp DOT &kp COMMA &kp ESC
|
||||||
&kp SPACE &mo UML &kp RET < BT LCTRL &kp LGUI &kp BSPC
|
&kp SPACE &mo UML &kp RET &kp LCTRL &kp LGUI &kp BSPC
|
||||||
>;
|
>;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -102,41 +109,20 @@ label = "UML";
|
|||||||
// ┏━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━┓ ┏━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━┓
|
// ┏━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━┓ ┏━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━┓
|
||||||
// ┃ 1 ┃ 2 ┃ 3 ┃ 4 ┃ 5 ┃ ┃ + ┃ @ ┃ Ü ┃ ┃ ~ ┃
|
// ┃ 1 ┃ 2 ┃ 3 ┃ 4 ┃ 5 ┃ ┃ + ┃ @ ┃ Ü ┃ ┃ ~ ┃
|
||||||
// ┣━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━┫ ┣━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━┫
|
// ┣━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━┫ ┣━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━┫
|
||||||
// ┃ Ä ┃ ┃ ß ┃ ┃ UP ┃ ┃ - ┃ < ┃ > ┃ ┃ Ö ┃
|
// ┃ Ä ┃ ┃ ß ┃ UP ┃ ┃ ┃ - ┃ < ┃ > ┃ ┃ Ö ┃
|
||||||
// ┏━━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━┫ ┣━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━━┓
|
// ┏━━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━┫ ┣━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━━┓
|
||||||
// ┃ ┃ ┃ LEFT ┃ ┃ DOWN ┃ RIGHT ┃ ┃ 6 ┃ 7 ┃ 8 ┃ 9 ┃ 0 ┃ ┃
|
// ┃ ┃ ┃ ┃ LEFT ┃ DOWN ┃ RIGHT ┃ ┃ 6 ┃ 7 ┃ 8 ┃ 9 ┃ 0 ┃ ┃
|
||||||
// ┗━━━━━━━━━━━━┻━━━━━━━━━━━┻━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━┫ ┣━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━┻━━━━━━━━━━━┻━━━━━━━━━━━━┛
|
// ┗━━━━━━━━━━━━┻━━━━━━━━━━━┻━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━┫ ┣━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━┻━━━━━━━━━━━┻━━━━━━━━━━━━┛
|
||||||
// ┃ TAB ┃ trans ┃ ALT ┃ ┃ CTRL ┃ ( ┃ ) ┃
|
// ┃ TAB ┃ trans ┃ ALT ┃ ┃ CTRL ┃ ( ┃ ) ┃
|
||||||
// ┗━━━━━━━━━━━┻━━━━━━━━━━━┻━━━━━━━━━━━┛ ┗━━━━━━━━━━━┻━━━━━━━━━━━┻━━━━━━━━━━━┛
|
// ┗━━━━━━━━━━━┻━━━━━━━━━━━┻━━━━━━━━━━━┛ ┗━━━━━━━━━━━┻━━━━━━━━━━━┻━━━━━━━━━━━┛
|
||||||
bindings = <
|
bindings = <
|
||||||
// ╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷
|
// ╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷
|
||||||
&kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp KP_PLUS &at &kp LBKT &lbrace &tilde
|
&kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp KP_PLUS &at &kp LBKT &lbrace &tilde
|
||||||
&kp SQT &none &kp MINUS &none &kp UP &kp FSLH &kp GRAVE >_sign &rbrace &kp SEMI
|
&kp SQT &none &kp MINUS &kp UP &none &kp FSLH &kp GRAVE >_sign &rbrace &kp SEMI
|
||||||
&trans &none &kp LEFT &none &kp DOWN &kp RIGHT &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp KP_MULTIPLY
|
&trans &none &none &kp LEFT &kp DOWN &kp RIGHT &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp KP_MULTIPLY
|
||||||
&kp TAB &trans &kp LALT &kp LCTRL &lparen &rparen
|
&kp TAB &trans &kp LALT &kp LCTRL &lparen &rparen
|
||||||
>;
|
>;
|
||||||
};
|
};
|
||||||
|
|
||||||
bt_layer {
|
|
||||||
// ╔══════════════════════════════════════╗
|
|
||||||
label = "BT";
|
|
||||||
// ╚══════════════════════════════════════╝
|
|
||||||
// ┏━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━┓ ┏━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━┓
|
|
||||||
// ┃ BT1 ┃ BT2 ┃ BT3 ┃ BT4 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
|
|
||||||
// ┣━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━┫ ┣━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━┫
|
|
||||||
// ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
|
|
||||||
// ┏━━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━┫ ┣━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━━┓
|
|
||||||
// ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
|
|
||||||
// ┗━━━━━━━━━━━━┻━━━━━━━━━━━┻━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━┫ ┣━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━━━━━┻━━━━━━━━━━━┻━━━━━━━━━━━━┛
|
|
||||||
// ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
|
|
||||||
// ┗━━━━━━━━━━━┻━━━━━━━━━━━┻━━━━━━━━━━━┛ ┗━━━━━━━━━━━┻━━━━━━━━━━━┻━━━━━━━━━━━┛
|
|
||||||
bindings = <
|
|
||||||
// ╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷
|
|
||||||
&bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &none &none &none &none &none &none
|
|
||||||
&none &none &none &none &none &none &none &none &none &none
|
|
||||||
&none &none &none &none &none &none &none &none &none &none &none &none
|
|
||||||
&none &none &none &trans &none &none
|
|
||||||
>;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user