Skip to content

Commit 234ac7a

Browse files
author
Ivan Kurbanov
committedFeb 19, 2025·
fix
1 parent 8292aec commit 234ac7a

22 files changed

+797
-90
lines changed
 

‎build.yaml

+4-22
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,7 @@
1-
# This file generates the GitHub Actions matrix.
2-
# For simple board + shield combinations, add them to the top level board and
3-
# shield arrays, for more control, add individual board + shield combinations
4-
# to the `include` property. You can also use the `cmake-args` property to
5-
# pass flags to the build command, `snippet` to add a Zephyr snippet, and
6-
# `artifact-name` to assign a name to distinguish build outputs from each other:
7-
#
8-
# board: [ "nice_nano_v2" ]
9-
# shield: [ "corne_left", "corne_right" ]
10-
# include:
11-
# - board: bdn9_rev2
12-
# - board: nice_nano_v2
13-
# shield: reviung41
14-
# - board: nice_nano_v2
15-
# shield: corne_left
16-
# snippet: studio-rpc-usb-uart
17-
# cmake-args: -DCONFIG_ZMK_STUDIO=y
18-
# artifact-name: corne_left_with_studio
19-
#
20-
---
211
include:
222
- board: seeeduino_xiao_ble
23-
shield: corne_left
3+
shield: totem_left
244
- board: seeeduino_xiao_ble
25-
shield: corne_right
5+
shield: totem_right
6+
- board: seeeduino_xiao_ble
7+
shield: settings_reset
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
if SHIELD_TOTEM_LEFT
2+
3+
config ZMK_KEYBOARD_NAME
4+
default "TOTEM"
5+
6+
config ZMK_SPLIT_ROLE_CENTRAL
7+
default y
8+
9+
endif
10+
11+
if SHIELD_TOTEM_LEFT || SHIELD_TOTEM_RIGHT
12+
13+
config ZMK_SPLIT
14+
default y
15+
16+
endif
+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# Copyright (c) 2022 The ZMK Contributors
2+
# SPDX-License-Identifier: MIT
3+
4+
config SHIELD_TOTEM_LEFT
5+
def_bool $(shields_list_contains,totem_left)
6+
7+
config SHIELD_TOTEM_RIGHT
8+
def_bool $(shields_list_contains,totem_right)
9+
10+
config SHIELD_TOTEM_DONGLE
11+
def_bool $(shields_list_contains,totem_dongle)
File renamed without changes.
+92
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
/*
2+
* Copyright (c) 2022 The ZMK Contributors
3+
*
4+
* SPDX-License-Identifier: MIT
5+
*/
6+
7+
#include <dt-bindings/zmk/matrix_transform.h>
8+
#include <physical_layouts.dtsi>
9+
10+
/ {
11+
chosen {
12+
zmk,kscan = &kscan0;
13+
zmk,physical-layout = &default_layout;
14+
};
15+
16+
default_transform: keymap_transform_0 {
17+
compatible = "zmk,matrix-transform";
18+
columns = <10>;
19+
rows = <4>;
20+
// | SW01 | SW02 | SW03 | SW04 | SW05 | | SW05 | SW04 | SW03 | SW02 | SW01 |
21+
// | SW06 | SW07 | SW08 | SW09 | SW10 | | SW10 | SW09 | SW08 | SW07 | SW06 |
22+
// | SW16 | SW11 | SW12 | SW13 | SW14 | SW15 | | SW15 | SW14 | SW13 | SW12 | SW11 | SW16 |
23+
// | SW17 | SW18 | SW19 | | SW19 | SW18 | SW17 |
24+
map = <
25+
RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9)
26+
RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9)
27+
RC(3,0) RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(3,9)
28+
RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7)
29+
>;
30+
};
31+
32+
default_layout: default_layout {
33+
compatible = "zmk,physical-layout";
34+
display-name = "TOTEM";
35+
transform = <&default_transform>;
36+
kscan = <&kscan0>;
37+
38+
keys // w h x y rot rx ry
39+
= <&key_physical_attrs 105 100 77 151 (-1000) 130 201>
40+
, <&key_physical_attrs 105 100 196 60 (-400) 249 110>
41+
, <&key_physical_attrs 105 100 317 0 0 0 0>
42+
, <&key_physical_attrs 105 100 423 49 0 0 0>
43+
, <&key_physical_attrs 105 100 529 65 0 0 0>
44+
, <&key_physical_attrs 105 100 868 65 0 0 0>
45+
, <&key_physical_attrs 105 100 974 49 0 0 0>
46+
, <&key_physical_attrs 105 100 1080 0 0 0 0>
47+
, <&key_physical_attrs 105 100 1200 60 400 1253 110>
48+
, <&key_physical_attrs 105 100 1319 152 1000 1372 202>
49+
, <&key_physical_attrs 105 100 95 250 (-1000) 147 300>
50+
, <&key_physical_attrs 105 100 203 160 (-400) 256 210>
51+
, <&key_physical_attrs 105 100 317 100 0 0 0>
52+
, <&key_physical_attrs 105 100 423 149 0 0 0>
53+
, <&key_physical_attrs 105 100 529 165 0 0 0>
54+
, <&key_physical_attrs 105 100 868 166 0 0 0>
55+
, <&key_physical_attrs 105 100 974 149 0 0 0>
56+
, <&key_physical_attrs 105 100 1080 100 0 0 0>
57+
, <&key_physical_attrs 105 100 1193 160 400 1246 210>
58+
, <&key_physical_attrs 105 100 1302 250 1000 1355 300>
59+
, <&key_physical_attrs 105 100 0 323 (-1000) 52 373>
60+
, <&key_physical_attrs 105 100 112 348 (-1000) 165 398>
61+
, <&key_physical_attrs 105 100 210 260 (-400) 263 310>
62+
, <&key_physical_attrs 105 100 317 200 0 0 0>
63+
, <&key_physical_attrs 105 100 423 249 0 0 0>
64+
, <&key_physical_attrs 105 100 529 265 0 0 0>
65+
, <&key_physical_attrs 105 100 868 266 0 0 0>
66+
, <&key_physical_attrs 105 100 974 249 0 0 0>
67+
, <&key_physical_attrs 105 100 1080 200 0 0 0>
68+
, <&key_physical_attrs 105 100 1186 260 400 1239 310>
69+
, <&key_physical_attrs 105 100 1285 349 1000 1338 399>
70+
, <&key_physical_attrs 105 100 1397 323 1000 1450 373>
71+
, <&key_physical_attrs 105 100 393 371 0 0 0>
72+
, <&key_physical_attrs 105 100 511 387 1500 563 437>
73+
, <&key_physical_attrs 105 100 619 432 3000 672 482>
74+
, <&key_physical_attrs 105 100 778 432 (-3000) 831 482>
75+
, <&key_physical_attrs 105 100 886 387 (-1500) 939 437>
76+
, <&key_physical_attrs 105 100 1003 371 0 0 0>
77+
;
78+
};
79+
80+
kscan0: kscan_0 {
81+
compatible = "zmk,kscan-gpio-matrix";
82+
label = "KSCAN";
83+
84+
diode-direction = "col2row";
85+
row-gpios
86+
= <&xiao_d 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
87+
, <&xiao_d 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
88+
, <&xiao_d 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
89+
, <&xiao_d 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
90+
;
91+
};
92+
};
+106
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
//
2+
// ▀▀▀▀▀ ▀▀▀▀▀ ▀▀█▀▀
3+
// ▄▀▀▀▄ ▄ ▄▀▀▀▄ ▄ ▄▀▀▀▄ █ ▄▀▀▀▄
4+
// █ █ █ █ █ █ █ █ █ █ █
5+
// ▀▀▀ █ ▀▀▀ █ ▀▀▀ ▀ ▀▀▀
6+
// █ ▄▄▄█▄▄▄ █ █
7+
// ▀ █ █ █ █▄█
8+
// ▀▀▀▀▀ █ █ █ ▀
9+
// ▀ ▀ ▀
10+
//
11+
// ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
12+
13+
#include <behaviors.dtsi>
14+
#include <dt-bindings/zmk/keys.h>
15+
#include <dt-bindings/zmk/bt.h>
16+
#include <dt-bindings/zmk/outputs.h>
17+
#include <dt-bindings/zmk/ext_power.h>
18+
19+
#define Base 0
20+
#define Sym 1
21+
#define Num 2
22+
23+
&mt {
24+
quick-tap-ms = <100>;
25+
global-quick-tap;
26+
flavor = "tap-preferred";
27+
tapping-term-ms = <170>;
28+
};
29+
30+
&lt {
31+
tapping-term-ms = <240>;
32+
flavor = "balanced";
33+
quick-tap-ms = <150>;
34+
};
35+
36+
37+
38+
/ {
39+
40+
behaviors {
41+
hm: homerow_mods {
42+
compatible = "zmk,behavior-hold-tap";
43+
label = "HOMEROW_MODS";
44+
#binding-cells = <2>;
45+
flavor = "tap-preferred";
46+
tapping-term-ms = <240>;
47+
quick-tap-ms = <150>;
48+
global-quick-tap;
49+
bindings =
50+
<&kp>,
51+
<&kp>;
52+
};
53+
54+
td_sk_to: tap_dance_sticky_to_layer {
55+
compatible = "zmk,behavior-tap-dance";
56+
#binding-cells = <2>;
57+
tapping-term-ms = <200>;
58+
bindings = <&sk>, <&to>;
59+
};
60+
61+
td_to: tap_dance_0 {
62+
compatible = "zmk,behavior-tap-dance";
63+
#binding-cells = <2>;
64+
tapping-term-ms = <200>;
65+
bindings = <&kp>, <&to>;
66+
};
67+
68+
69+
};
70+
71+
72+
keymap {
73+
compatible = "zmk,keymap";
74+
75+
Base {
76+
label = "Base";
77+
bindings = <
78+
&kp q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P
79+
&kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMICOLON
80+
&sk LSHIFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &lt 7 SLASH &sk LEFT_GUI
81+
&td_to LEFT_PARENTHESIS Num &kp ESCAPE &kp SPACE &kp BACKSPACE &kp ENTER &td_to RIGHT_PARENTHESIS Sym
82+
>;
83+
};
84+
85+
Sym {
86+
label = "Sym";
87+
bindings = <
88+
&kp LEFT_BRACE &kp AMPERSAND &kp ASTERISK &kp LEFT_PARENTHESIS &kp RIGHT_BRACE &trans &trans &trans &trans &trans
89+
&kp COLON &kp DOLLAR &kp PERCENT &kp CARET &kp PLUS &trans &kp RSHIFT &kp RCTRL &kp RALT &kp RGUI
90+
&trans &kp TILDE &kp EXCL &kp AT &kp HASH &kp PIPE &trans &trans &trans &trans &trans &trans
91+
&kp LEFT_PARENTHESIS &kp RIGHT_PARENTHESIS &kp UNDERSCORE &to Base &trans &trans
92+
>;
93+
};
94+
95+
Num {
96+
label = "Num";
97+
bindings = <
98+
&kp LEFT_BRACKET &kp NUMBER_7 &kp NUMBER_8 &kp NUMBER_9 &kp RIGHT_BRACKET &trans &trans &trans &trans &trans
99+
&kp SEMICOLON &kp NUMBER_4 &kp NUMBER_5 &kp NUMBER_6 &kp EQUAL &trans &kp RSHIFT &kp RCTRL &kp RALT &kp RGUI
100+
&trans &kp GRAVE &kp NUMBER_1 &kp NUMBER_2 &kp NUMBER_3 &kp BACKSLASH &trans &trans &trans &trans &trans &trans
101+
&kp SQT &kp NUMBER_0 &kp MINUS &to Base &trans &trans
102+
>;
103+
}
104+
105+
};
106+
};
+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
file_format: "1"
2+
id: totem
3+
name: TOTEM
4+
type: shield
5+
url: https://github.com/GEIGEIGEIST/TOTEM
6+
requires: [seeeduino_xiao_ble]
7+
features:
8+
- keys
9+
siblings:
10+
- totem_left
11+
- totem_right

‎config/boards/shields/totem/totem_left.conf

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/*
2+
* Copyright (c) 2022 The ZMK Contributors
3+
*
4+
* SPDX-License-Identifier: MIT
5+
*/
6+
7+
#include "totem.dtsi"
8+
9+
&kscan0 {
10+
col-gpios
11+
= <&xiao_d 4 GPIO_ACTIVE_HIGH>
12+
, <&xiao_d 5 GPIO_ACTIVE_HIGH>
13+
, <&xiao_d 10 GPIO_ACTIVE_HIGH>
14+
, <&xiao_d 9 GPIO_ACTIVE_HIGH>
15+
, <&xiao_d 8 GPIO_ACTIVE_HIGH>
16+
;
17+
};

‎config/boards/shields/totem/totem_right.conf

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/*
2+
* Copyright (c) 2022 The ZMK Contributors
3+
*
4+
* SPDX-License-Identifier: MIT
5+
*/
6+
7+
#include "totem.dtsi"
8+
9+
&default_transform {
10+
col-offset = <5>;
11+
};
12+
13+
&kscan0 {
14+
col-gpios
15+
= <&xiao_d 8 GPIO_ACTIVE_HIGH>
16+
, <&xiao_d 9 GPIO_ACTIVE_HIGH>
17+
, <&xiao_d 10 GPIO_ACTIVE_HIGH>
18+
, <&xiao_d 5 GPIO_ACTIVE_HIGH>
19+
, <&xiao_d 4 GPIO_ACTIVE_HIGH>
20+
;
21+
};

‎config/corne.conf

-6
This file was deleted.

‎config/corne.keymap

-56
This file was deleted.

‎config/info.json

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
{
2+
"id": "totem",
3+
"name": "totem",
4+
"url": "https://github.com/GEIGEIGEIST/TOTEM",
5+
"layouts": {
6+
"LAYOUT": {
7+
"layout": [
8+
{ "row": 0, "col": 1, "x": 0.776, "y": 1.519, "w": 1.059, "r": -10, "rx": 1.305, "ry": 2.019 },
9+
{ "row": 0, "col": 2, "x": 1.964, "y": 0.605, "w": 1.059, "r": -4, "rx": 2.494, "ry": 1.105 },
10+
{ "row": 0, "col": 3, "x": 3.175, "y": 0, "w": 1.059 },
11+
{ "row": 0, "col": 4, "x": 4.234, "y": 0.496, "w": 1.059 },
12+
{ "row": 0, "col": 5, "x": 5.292, "y": 0.656, "w": 1.059 },
13+
{ "row": 0, "col": 7, "x": 8.682, "y": 0.656, "w": 1.059 },
14+
{ "row": 0, "col": 8, "x": 9.741, "y": 0.496, "w": 1.059 },
15+
{ "row": 0, "col": 9, "x": 10.8, "y": 0, "w": 1.059 },
16+
{ "row": 0, "col": 10, "x": 12.007, "y": 0.606, "w": 1.059, "r": 4, "rx": 12.537, "ry": 1.106 },
17+
{ "row": 0, "col": 11, "x": 13.199, "y": 1.52, "w": 1.059, "r": 10, "rx": 13.729, "ry": 2.02 },
18+
19+
{ "row": 1, "col": 1, "x": 0.95, "y": 2.504, "w": 1.059, "r": -10, "rx": 1.479, "ry": 3.004 },
20+
{ "row": 1, "col": 2, "x": 2.033, "y": 1.602, "w": 1.059, "r": -4, "rx": 2.562, "ry": 2.102 },
21+
{ "row": 1, "col": 3, "x": 3.175, "y": 1, "w": 1.059 },
22+
{ "row": 1, "col": 4, "x": 4.234, "y": 1.496, "w": 1.059 },
23+
{ "row": 1, "col": 5, "x": 5.292, "y": 1.656, "w": 1.059 },
24+
{ "row": 1, "col": 7, "x": 8.682, "y": 1.661, "w": 1.059 },
25+
{ "row": 1, "col": 8, "x": 9.741, "y": 1.496, "w": 1.059 },
26+
{ "row": 1, "col": 9, "x": 10.8, "y": 1, "w": 1.059 },
27+
{ "row": 1, "col": 10, "x": 11.937, "y": 1.603, "w": 1.059, "r": 4, "rx": 12.466, "ry": 2.103 },
28+
{ "row": 1, "col": 11, "x": 13.026, "y": 2.505, "w": 1.059, "r": 10, "rx": 13.556, "ry": 3.005 },
29+
30+
{ "row": 2, "col": 0, "x": 0, "y": 3.231, "w": 1.059, "r": -10, "rx": 0.529, "ry": 3.731 },
31+
{ "row": 2, "col": 1, "x": 1.124, "y": 3.489, "w": 1.059, "r": -10, "rx": 1.654, "ry": 3.989 },
32+
{ "row": 2, "col": 2, "x": 2.103, "y": 2.6, "w": 1.059, "r": -4, "rx": 2.633, "ry": 3.1 },
33+
{ "row": 2, "col": 3, "x": 3.175, "y": 2, "w": 1.059 },
34+
{ "row": 2, "col": 4, "x": 4.234, "y": 2.496, "w": 1.059 },
35+
{ "row": 2, "col": 5, "x": 5.292, "y": 2.656, "w": 1.059 },
36+
{ "row": 2, "col": 7, "x": 8.682, "y": 2.661, "w": 1.059 },
37+
{ "row": 2, "col": 8, "x": 9.741, "y": 2.496, "w": 1.059 },
38+
{ "row": 2, "col": 9, "x": 10.8, "y": 2, "w": 1.059 },
39+
{ "row": 2, "col": 10, "x": 11.868, "y": 2.601, "w": 1.059, "r": 4, "rx": 12.398, "ry": 3.101 },
40+
{ "row": 2, "col": 11, "x": 12.852, "y": 3.49, "w": 1.059, "r": 10, "rx": 13.382, "ry": 3.99 },
41+
{ "row": 2, "col": 12, "x": 13.973, "y": 3.231, "w": 1.059, "r": 10, "rx": 14.503, "ry": 3.731 },
42+
43+
{ "row": 3, "col": 3, "x": 3.938, "y": 3.714, "w": 1.059 },
44+
{ "row": 3, "col": 4, "x": 5.11, "y": 3.878, "w": 1.059, "r": 15, "rx": 5.639, "ry": 4.378 },
45+
{ "row": 3, "col": 5, "x": 6.195, "y": 4.329, "w": 1.059, "r": 30, "rx": 6.724, "ry": 4.829 },
46+
{ "row": 3, "col": 7, "x": 7.781, "y": 4.329, "w": 1.059, "r": -30, "rx": 8.31, "ry": 4.829 },
47+
{ "row": 3, "col": 8, "x": 8.866, "y": 3.878, "w": 1.059, "r": -15, "rx": 9.396, "ry": 4.378 },
48+
{ "row": 3, "col": 9, "x": 10.037, "y": 3.714, "w": 1.059 }
49+
]
50+
}
51+
},
52+
"sensors": []
53+
}

‎config/totem.conf

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
CONFIG_BT_CTLR_TX_PWR_PLUS_8=y
2+
CONFIG_ZMK_BLE_EXPERIMENTAL_CONN=y
3+
4+
CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_FETCHING=y
5+
CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_PROXY=y

‎config/totem.keymap

+281
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,281 @@
1+
//
2+
// ▀▀▀▀▀ ▀▀▀▀▀ ▀▀█▀▀
3+
// ▄▀▀▀▄ ▄ ▄▀▀▀▄ ▄ ▄▀▀▀▄ █ ▄▀▀▀▄
4+
// █ █ █ █ █ █ █ █ █ █ █
5+
// ▀▀▀ █ ▀▀▀ █ ▀▀▀ ▀ ▀▀▀
6+
// █ ▄▄▄█▄▄▄ █ █
7+
// ▀ █ █ █ █▄█
8+
// ▀▀▀▀▀ █ █ █ ▀
9+
// ▀ ▀ ▀
10+
//
11+
// ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
12+
13+
#include <behaviors.dtsi>
14+
#include <dt-bindings/zmk/keys.h>
15+
16+
#define Base 0
17+
#define Sym 1
18+
#define Num 2
19+
20+
/ {
21+
behaviors {
22+
layer_1_layer_2: layer_1_layer_2 {
23+
compatible = "zmk,behavior-tap-dance";
24+
label = "LAYER_1_LAYER_2";
25+
#binding-cells = <0>;
26+
bindings = <&to 2>, <&to 1>;
27+
};
28+
29+
sqt_to_0: sqt_to_0 {
30+
compatible = "zmk,behavior-tap-dance";
31+
label = "SQT_TO_0";
32+
#binding-cells = <0>;
33+
bindings = <&kp SQT>, <&to 0>;
34+
};
35+
36+
sl_sk: sl_sk {
37+
compatible = "zmk,behavior-hold-tap";
38+
label = "SL_SK";
39+
bindings = <&sk>, <&sl>;
40+
41+
#binding-cells = <2>;
42+
tapping-term-ms = <200>;
43+
flavor = "balanced";
44+
};
45+
46+
kp_sk: kp_sk {
47+
compatible = "zmk,behavior-hold-tap";
48+
label = "KP_SK";
49+
bindings = <&sk>, <&kp>;
50+
51+
#binding-cells = <2>;
52+
tapping-term-ms = <250>;
53+
flavor = "balanced";
54+
};
55+
56+
kp_kp: kp_kp {
57+
compatible = "zmk,behavior-hold-tap";
58+
label = "KP_KP";
59+
bindings = <&kp>, <&kp>;
60+
61+
#binding-cells = <2>;
62+
tapping-term-ms = <250>;
63+
flavor = "tap-preferred";
64+
hold-trigger-on-release;
65+
};
66+
67+
kp_comment: kp_comment {
68+
compatible = "zmk,behavior-hold-tap";
69+
label = "KP_COMMENT";
70+
bindings = <&comment>, <&kp>;
71+
72+
#binding-cells = <2>;
73+
flavor = "tap-preferred";
74+
tapping-term-ms = <200>;
75+
};
76+
77+
kp_link: kp_link {
78+
compatible = "zmk,behavior-hold-tap";
79+
label = "KP_LINK";
80+
bindings = <&link>, <&kp>;
81+
82+
#binding-cells = <2>;
83+
tapping-term-ms = <200>;
84+
flavor = "tap-preferred";
85+
};
86+
87+
kp_caps_word: kp_caps_word {
88+
compatible = "zmk,behavior-hold-tap";
89+
label = "KP_CAPS_WORD";
90+
bindings = <&caps_word>, <&kp>;
91+
92+
#binding-cells = <2>;
93+
flavor = "tap-preferred";
94+
tapping-term-ms = <200>;
95+
};
96+
97+
kp_lt: kp_lt {
98+
compatible = "zmk,behavior-hold-tap";
99+
label = "KP_LT";
100+
bindings = <&lt>, <&kp>;
101+
102+
#binding-cells = <2>;
103+
tapping-term-ms = <300>;
104+
flavor = "tap-preferred";
105+
};
106+
107+
sk_mo: sk_mo {
108+
compatible = "zmk,behavior-hold-tap";
109+
label = "SK_MO";
110+
bindings = <&mo>, <&sk>;
111+
112+
#binding-cells = <2>;
113+
tapping-term-ms = <150>;
114+
};
115+
116+
alfred_q: alfred_q {
117+
compatible = "zmk,behavior-tap-dance";
118+
label = "ALFRED_Q";
119+
#binding-cells = <0>;
120+
bindings = <&kp Q>, <&alfred>;
121+
122+
tapping-term-ms = <200>;
123+
};
124+
125+
clipboard_w: clipboard_w {
126+
compatible = "zmk,behavior-tap-dance";
127+
label = "CLIPBOARD_W";
128+
#binding-cells = <0>;
129+
bindings = <&kp W>, <&kp LA(LG(C))>;
130+
};
131+
};
132+
133+
macros {
134+
alfred: alfred {
135+
compatible = "zmk,behavior-macro";
136+
#binding-cells = <0>;
137+
bindings = <&kp LEFT_GUI &kp LGUI>;
138+
label = "ALFRED";
139+
wait-ms = <1>;
140+
tap-ms = <40>;
141+
};
142+
143+
comment: comment {
144+
compatible = "zmk,behavior-macro";
145+
#binding-cells = <0>;
146+
bindings = <&kp GRAVE &kp GRAVE &kp GRAVE>;
147+
label = "COMMENT";
148+
wait-ms = <1>;
149+
tap-ms = <1>;
150+
};
151+
152+
link: link {
153+
compatible = "zmk,behavior-macro";
154+
#binding-cells = <0>;
155+
bindings = <&kp LBKT &kp RIGHT_BRACKET &kp LPAR &kp RPAR>;
156+
label = "LINK";
157+
wait-ms = <1>;
158+
tap-ms = <1>;
159+
};
160+
161+
save_vim: save_vim {
162+
compatible = "zmk,behavior-macro";
163+
#binding-cells = <0>;
164+
bindings = <&kp COLON &kp W &kp RET>;
165+
label = "SAVE_VIM";
166+
};
167+
};
168+
169+
combos {
170+
compatible = "zmk,combos";
171+
172+
alt_tab {
173+
bindings = <&kp LG(TAB)>;
174+
key-positions = <0 34>;
175+
};
176+
177+
enter {
178+
bindings = <&kp ENTER>;
179+
key-positions = <33 32>;
180+
};
181+
182+
tab_aine {
183+
bindings = <&kp TAB>;
184+
key-positions = <4 14>;
185+
};
186+
187+
enter-2 {
188+
bindings = <&kp ENTER>;
189+
key-positions = <36 37>;
190+
};
191+
192+
backspace {
193+
bindings = <&kp BACKSPACE>;
194+
key-positions = <24 13>;
195+
};
196+
197+
backspace-2 {
198+
bindings = <&kp BACKSPACE>;
199+
key-positions = <16 27>;
200+
};
201+
202+
enter-3 {
203+
bindings = <&kp ENTER>;
204+
key-positions = <33 34>;
205+
};
206+
207+
enter-4 {
208+
bindings = <&kp ENTER>;
209+
key-positions = <36 35>;
210+
};
211+
212+
shortcuts {
213+
bindings = <&lt 5 LEFT_SHIFT>;
214+
key-positions = <10 21>;
215+
timeout-ms = <5>;
216+
require-prior-idle-ms = <20>;
217+
};
218+
};
219+
220+
keymap {
221+
compatible = "zmk,keymap";
222+
223+
Base {
224+
label = "Base";
225+
bindings = <
226+
&kp Q &clipboard_w &kp E &kp R &kp T &kp Y &kp U &kp I &kp_kp UNDER O &kp_kp MINUS P
227+
&kp_kp AT A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp_kp PIPE SEMICOLON
228+
&kp_sk LEFT_SHIFT ESCAPE &kp_kp LCTRL Z &kp X &kp C &kp V &kp B &kp_kp SQT N &kp_kp DOUBLE_QUOTES M &kp COMMA &kp DOT &kp_kp QUESTION SLASH &sl_sk LEFT_SHIFT 3
229+
&lt 1 TAB &kp SPACE &lt 4 LGUI &kp BACKSPACE &lt 1 SPACE &lt 2 TAB
230+
>;
231+
};
232+
233+
Num {
234+
label = "Num";
235+
bindings = <
236+
&kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp_kp UNDERSCORE NUMBER_9 &kp_kp MINUS N0
237+
&kp SEMICOLON &kp MINUS &kp LEFT_PARENTHESIS &kp RIGHT_PARENTHESIS &kp DOT &kp EQUAL &kp LEFT &kp UP_ARROW &kp RIGHT &kp COLON
238+
&trans &kp GRAVE &kp AT &kp LBKT &kp RBKT &kp PLUS &kp MINUS &kp LEFT &kp DOWN &kp RIGHT &kp BACKSLASH &trans
239+
&trans &trans &trans &trans &trans &trans
240+
>;
241+
};
242+
243+
Sym {
244+
label = "Sym";
245+
bindings = <
246+
&kp GRAVE &kp AMPERSAND &kp ASTERISK &kp LEFT_BRACE &kp RIGHT_BRACE &kp LEFT_PARENTHESIS &kp RIGHT_PARENTHESIS &kp LEFT_BRACKET &kp RIGHT_BRACKET &trans
247+
&kp COLON &kp DOLLAR &kp PERCENT &kp CARET &kp PLUS &kp LEFT_BRACKET &kp LEFT &kp UP_ARROW &kp RIGHT &none
248+
&trans &kp TILDE &kp EXCL &kp AT &kp HASH &kp PIPE &kp DQT &kp LEFT_ARROW &kp DOWN_ARROW &kp RIGHT &kp BACKSLASH &trans
249+
&trans &trans &trans &trans &trans &trans
250+
>;
251+
};
252+
253+
shortcuts {
254+
bindings = <
255+
&kp LG(NUMBER_1) &kp LG(NUMBER_2) &kp LG(NUMBER_3) &kp LG(NUMBER_4) &save_vim &comment &kp LG(LA(C)) &kp LC(LG(O)) &none &save_vim
256+
&kp LC(LG(S)) &none &none &kp LS(LG(D)) &none &link &kp LG(LC(F)) &kp LG(LC(K)) &kp LG(LC(G)) &none
257+
&trans &kp LG(LC(Z)) &kp LG(LC(X)) &kp LG(LC(C)) &kp LG(D) &none &kp LALT &kp LG(LC(I)) &kp LC(LG(F)) &kp LC(LG(K)) &none &alfred
258+
&none &none &alfred &kp LS(LG(NUMBER_4)) &none &none
259+
>;
260+
};
261+
262+
meta {
263+
label = "meta";
264+
bindings = <
265+
&kp LG(Q) &kp LG(W) &kp LG(E) &kp LG(R) &kp LG(T) &kp LG(Y) &kp LG(U) &kp LG(I) &kp LG(O) &kp LG(MINUS)
266+
&kp LG(A) &kp LG(S) &kp LG(D) &kp LG(F) &kp LG(G) &kp LG(H) &kp LG(J) &kp LG(K) &kp LG(L) &kp LG(SEMICOLON)
267+
&kp LEFT_SHIFT &kp LG(Z) &kp LG(X) &kp LG(C) &kp LG(V) &none &kp LG(N) &kp LG(M) &kp LG(COMMA) &kp LG(DOT) &kp LG(SLASH) &kp RIGHT_SHIFT
268+
&trans &kp SPACE &none &kp LG(LS(NUMBER_4)) &none &trans
269+
>;
270+
};
271+
272+
vim {
273+
bindings = <
274+
&trans &trans &trans &trans &trans &trans &kp LEFT_BRACE &kp RIGHT_BRACE &trans &save_vim
275+
&trans &trans &trans &trans &trans &trans &kp LA(LEFT) &kp LA(UP) &kp LA(RIGHT) &trans
276+
&trans &trans &trans &trans &trans &trans &trans &kp LA(LEFT_ARROW) &kp LA(DOWN) &kp LA(RIGHT) &trans &trans
277+
&trans &trans &trans &trans &trans &trans
278+
>;
279+
};
280+
};
281+
};

‎config/west.yml

+1-3
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,10 @@ manifest:
22
remotes:
33
- name: zmkfirmware
44
url-base: https://github.com/zmkfirmware
5-
# Additional modules containing boards/shields/custom code can be listed here as well
6-
# See https://docs.zephyrproject.org/3.2.0/develop/west/manifest.html#projects
75
projects:
86
- name: zmk
97
remote: zmkfirmware
108
revision: main
119
import: app/west.yml
1210
self:
13-
path: config
11+
path: config

‎docs/images/TOTEM_layout.svg

+107
Loading

‎docs/images/TOTEM_logo_bright.svg

+21
Loading

‎docs/images/TOTEM_logo_dark.svg

+21
Loading

‎readme.md

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<picture>
2+
<source media="(prefers-color-scheme: dark)" srcset="/docs/images/TOTEM_logo_dark.svg">
3+
<source media="(prefers-color-scheme: light)" srcset="/docs/images/TOTEM_logo_bright.svg">
4+
<img alt="TOTEM logo font" src="/docs/images/TOTEM_logo_bright.svg">
5+
</picture>
6+
7+
# ZMK CONFIG FOR THE TOTEM SPLIT KEYBOARD
8+
9+
[Here](https://github.com/GEIGEIGEIST/totem) you can find the hardware files and build guide.\
10+
[Here](https://github.com/GEIGEIGEIST/qmk-config-totem) you can find the QMK config for the TOTEM.
11+
12+
TOTEM is a 38 key column-staggered split keyboard running [ZMK](https://zmk.dev/) or [QMK](https://docs.qmk.fm/). It's meant to be used with a SEEED XIAO BLE or RP2040.
13+
14+
15+
![TOTEM layout](/docs/images/TOTEM_layout.svg)
16+
17+
18+
19+
## HOW TO USE
20+
21+
- fork this repo
22+
- `git clone` your repo, to create a local copy on your PC (you can use the [command line](https://www.atlassian.com/git/tutorials) or [github desktop](https://desktop.github.com/))
23+
- adjust the totem.keymap file (find all the keycodes on [the zmk docs pages](https://zmk.dev/docs/codes/))
24+
- `git push` your repo to your fork
25+
- on the GitHub page of your fork navigate to "Actions"
26+
- scroll down and unzip the `firmware.zip` archive that contains the latest firmware
27+
- connect the left half of the TOTEM to your PC, press reset twice
28+
- the keyboard should now appear as a mass storage device
29+
- drag'n'drop the `totem_left-seeeduino_xiao_ble-zmk.uf2` file from the archive onto the storage device
30+
- repeat this process with the right half and the `totem_right-seeeduino_xiao_ble-zmk.uf2` file.

‎zephyr/module.yml

-3
This file was deleted.

0 commit comments

Comments
 (0)
Please sign in to comment.