2 #include "action_layer.h"
3 #include "keymap_extras/keymap_german.h"
7 #define L0 0 // layer_0
8 #define L1 1 // layer_1
9 #define L2 2 // layer_2
10 #define L3 3 // layer_3
11 #define L4 4 // layer_4
12 #define L5 5 // layer_5
13 #define L6 6 // layer_6
15 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
17 .------------------------------------.------------------------------------.
18 |ESC | 1 | 2 | 3 | 4 | 5 | ´ | ` | 6 | 7 | 8 | 9 | 0 | ^ |
19 !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
20 |TAB | X | V | L | C | W |Print| | K | H | G | F | Q | ß |
21 !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
22 |MO(1)| U | I | A | E | O |-----!-----! S | N | R | T | D | Y |
23 !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
24 |LSFT | ü | ö | ä | P | Z |SPACE| | B | M | , | . | J |RSFT |
25 '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
26 |LCTL|LGUI|LALT|MO(3)|MO(2)| !MO(2)|MO(3)|APP |RALT|RCTL|
27 '------------------------' '------------------------'
28 .-----------. .-----------.
29 |VOL- |VOL+ | !MUTE |PLAY |
30 .-----+-----+-----! !-----+-----+-----.
32 ! ! |-----| !-----| ! !
33 ! CTL ! ! ALT ! ! CTL ! ! ALT !
34 |ENTER|MO(1)| TAB | !ESC |MO(1)|SPACE|
35 '-----------------' '-----------------'
38 KC_ESC, DE_1, DE_2, DE_3, DE_4, DE_5, DE_ACUT,
39 KC_TAB, DE_X, DE_V, DE_L, DE_C, DE_W, KC_PSCR,
40 MO(1), DE_U, DE_I, DE_A, DE_E, DE_O,
41 KC_LSFT, DE_UE, DE_OE, DE_AE, DE_P, DE_Z, KC_SPACE,
42 KC_LCTL, KC_LGUI, KC_LALT, MO(3), MO(2),
43 /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_VOLD, KC_VOLU,
44 /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS,
45 /*-*/ /*-*/ /*-*/ /*-*/ CTL_T(KC_ENTER), MO(1), ALT_T(KC_TAB),
46 DE_GRV, DE_6, DE_7, DE_8, DE_9, DE_0, DE_CIRC,
47 KC_TRNS, DE_K, DE_H, DE_G, DE_F, DE_Q, DE_SS,
48 /*-*/ DE_S, DE_N, DE_R, DE_T, DE_D, DE_Y,
49 KC_TRNS, DE_B, DE_M, DE_COMM, DE_DOT, DE_J, KC_RSFT,
50 /*-*/ /*-*/ MO(2), MO(3), KC_APP, KC_RALT, KC_RCTL,
53 CTL_T(KC_ESC), MO(1), ALT_T(KC_SPACE)
56 .------------------------------------.------------------------------------.
57 | | | | | | | | | | | | | | |
58 !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
59 | | € | _ | [ | ] | | | | ! | < | > | = | & | |
60 !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
61 | | \ | / | { | } | * |-----!-----! ? | ( | ) | - | : | @ |
62 !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
63 | | # | $ | | | ~ | | | | + | % | " | ' | ; | |
64 '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
65 | | | | | | ! | | | | |
66 '------------------------' '------------------------'
67 .-----------. .-----------.
69 .-----+-----+-----! !-----+-----+-----.
71 ! ! !-----! !-----! ! !
73 '-----------------' '-----------------'
76 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
77 KC_TRNS, DE_EURO, DE_UNDS, DE_LBRC, DE_RBRC, KC_TRNS, KC_TRNS,
78 KC_TRNS, DE_BSLS, DE_SLSH, DE_LCBR, DE_RCBR, DE_ASTR,
79 KC_TRNS, DE_HASH, DE_DLR, DE_PIPE, DE_TILD, KC_TRNS, KC_TRNS,
80 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
81 /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS,
82 /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS,
83 /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS,
84 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
85 KC_TRNS, DE_EXLM, DE_LESS, DE_MORE, DE_EQL, DE_AMPR, KC_TRNS,
86 /*-*/ DE_QST, DE_LPRN, DE_RPRN, DE_MINS, DE_COLN, DE_AT,
87 KC_TRNS, DE_PLUS, DE_PERC, DE_DQOT, DE_QUOT, DE_SCLN, KC_TRNS,
88 /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
91 KC_TRNS, KC_TRNS, KC_TRNS
94 * .------------------------------------.------------------------------------.
95 * | | | | | | | | | | | | | | |
96 * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
97 * | |PGUP|BSPC| UP |DEL |PGDN| | | | 7 | 8 | 9 | | |
98 * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
99 * | |HOME|LEFT|DOWN|RGHT|END |-----!-----! | 4 | 5 | 6 | | |
100 * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
101 * | | | |PREV|NEXT| | | | | 1 | 2 | 3 | | |
102 * '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
103 * | | | | | | ! | | | | |
104 * '------------------------' '------------------------'
105 * .-----------. .-----------.
107 * .-----+-----+-----! !-----+-----+-----.
109 * ! ! !-----! !-----! ! !
111 * '-----------------' '-----------------'
114 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
115 KC_TRNS, KC_PGUP, KC_BSPC, KC_UP, KC_DEL, KC_PGDN, KC_TRNS,
116 KC_TRNS, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END,
117 KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
118 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
119 /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS,
120 /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS,
121 /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS,
122 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
123 KC_TRNS, KC_TRNS, DE_7, DE_8, DE_9, KC_TRNS, KC_TRNS,
124 /*-*/ KC_TRNS, DE_4, DE_5, DE_6, KC_TRNS, KC_TRNS,
125 KC_TRNS, KC_TRNS, DE_1, DE_2, DE_3, KC_TRNS, KC_TRNS,
126 /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
129 KC_TRNS, KC_TRNS, DE_0
132 * .------------------------------------.------------------------------------.
133 * | | F1 | F2 | F3 | F4 | F5 | F6 | | | | | | | |
134 * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
135 * | | F7 | F8 | F9 | F10| F11| F12 | | |M_WU|M_CU|M_WD| | |
136 * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
137 * |M_B5 |M_B4|M_B3|M_B2|M_B1| |-----!-----! |M_CL|M_CD|M_CR| | |
138 * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
139 * | | |M_A2|M_A1|M_A0| | | | | | | | | |
140 * '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
141 * | | | | | | ! | | | | |
142 * '------------------------' '------------------------'
143 * .-----------. .-----------.
145 * .-----+-----+-----! !-----+-----+-----.
147 * ! ! !-----! !-----! ! !
149 * '-----------------' '-----------------'
152 KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
153 KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
154 KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, KC_BTN1, KC_TRNS,
155 KC_TRNS, KC_TRNS, KC_ACL2, KC_ACL1, KC_ACL0, KC_TRNS, KC_TRNS,
156 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
157 /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS,
158 /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS,
159 /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS,
160 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
161 KC_TRNS, KC_TRNS, KC_WH_U, KC_MS_U, KC_WH_D, KC_TRNS, KC_TRNS,
162 /*-*/ KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, KC_TRNS,
163 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
164 /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
167 KC_TRNS, KC_TRNS, KC_TRNS
170 * .------------------------------------.------------------------------------.
171 * | | | | | | | | | | | | | | |
172 * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
173 * | | | | | | | | | | | | | | |
174 * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
175 * | | | | | | |-----!-----! | | | | | |
176 * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
177 * | | | | | | | | | | | | | | |
178 * '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
179 * | | | | | | ! | | | | |
180 * '------------------------' '------------------------'
181 * .-----------. .-----------.
183 * .-----+-----+-----! !-----+-----+-----.
185 * ! ! !-----! !-----! ! !
187 * '-----------------' '-----------------'
190 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
191 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
192 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
193 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
194 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
195 /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS,
196 /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS,
197 /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS,
198 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
199 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
200 /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
201 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
202 /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
205 KC_TRNS, KC_TRNS, KC_TRNS
208 * .------------------------------------.------------------------------------.
209 * | | | | | | | | | | | | | | |
210 * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
211 * | | | | | | | | | | | | | | |
212 * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
213 * | | | | | | |-----!-----! | | | | | |
214 * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
215 * | | | | | | | | | | | | | | |
216 * '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
217 * | | | | | | ! | | | | |
218 * '------------------------' '------------------------'
219 * .-----------. .-----------.
221 * .-----+-----+-----! !-----+-----+-----.
223 * ! ! !-----! !-----! ! !
225 * '-----------------' '-----------------'
228 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
229 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
230 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
231 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
232 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
233 /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS,
234 /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS,
235 /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS,
236 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
237 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
238 /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
239 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
240 /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
243 KC_TRNS, KC_TRNS, KC_TRNS
246 * .------------------------------------.------------------------------------.
247 * | | | | | | | | | | | | | | |
248 * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
249 * | | | | | | | | | | | | | | |
250 * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
251 * | | | | | | |-----!-----! | | | | | |
252 * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
253 * | | | | | | | | | | | | | | |
254 * '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
255 * | | | | | | ! | | | | |
256 * '------------------------' '------------------------'
257 * .-----------. .-----------.
259 * .-----+-----+-----! !-----+-----+-----.
261 * ! ! !-----! !-----! ! !
263 * '-----------------' '-----------------'
266 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
267 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
268 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
269 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
270 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
271 /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS,
272 /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS,
273 /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS,
274 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
275 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
276 /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
277 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
278 /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
281 KC_TRNS, KC_TRNS, KC_TRNS
285 const uint16_t PROGMEM fn_actions[] = {};
287 #define UC_MODE_WIN 0
288 #define UC_MODE_LINUX 1
289 #define UC_MODE_OSX 2
291 // TODO: allow default mode to be configured
292 static uint16_t unicode_mode = UC_MODE_WIN;
294 uint16_t hextokeycode(uint8_t hex) {
299 return KC_P1 + (hex - 0x1);
301 return KC_A + (hex - 0xA);
304 void unicode_action_function(uint16_t hi, uint16_t lo) {
305 switch (unicode_mode) {
307 register_code(KC_LALT);
309 register_code(KC_PPLS);
310 unregister_code(KC_PPLS);
312 register_code(hextokeycode((hi & 0xF0) >> 4));
313 unregister_code(hextokeycode((hi & 0xF0) >> 4));
314 register_code(hextokeycode((hi & 0x0F)));
315 unregister_code(hextokeycode((hi & 0x0F)));
316 register_code(hextokeycode((lo & 0xF0) >> 4));
317 unregister_code(hextokeycode((lo & 0xF0) >> 4));
318 register_code(hextokeycode((lo & 0x0F)));
319 unregister_code(hextokeycode((lo & 0x0F)));
321 unregister_code(KC_LALT);
324 register_code(KC_LCTL);
325 register_code(KC_LSFT);
328 unregister_code(KC_U);
330 register_code(hextokeycode((hi & 0xF0) >> 4));
331 unregister_code(hextokeycode((hi & 0xF0) >> 4));
332 register_code(hextokeycode((hi & 0x0F)));
333 unregister_code(hextokeycode((hi & 0x0F)));
334 register_code(hextokeycode((lo & 0xF0) >> 4));
335 unregister_code(hextokeycode((lo & 0xF0) >> 4));
336 register_code(hextokeycode((lo & 0x0F)));
337 unregister_code(hextokeycode((lo & 0x0F)));
339 unregister_code(KC_LCTL);
340 unregister_code(KC_LSFT);
347 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
348 if (!record->event.pressed) {
351 // MACRODOWN only works in this function
354 unicode_mode = (unicode_mode + 1) % 2;
364 // Runs just one time when the keyboard initializes.
365 void matrix_init_user(void) {
369 // Runs constantly in the background, in a loop.
370 void matrix_scan_user(void) {
371 uint8_t layer = biton32(layer_state);
373 ergodox_board_led_off();
374 ergodox_right_led_1_off();
375 ergodox_right_led_2_off();
376 ergodox_right_led_3_off();
379 ergodox_right_led_1_on();
382 ergodox_right_led_2_on();
385 ergodox_right_led_3_on();
388 ergodox_right_led_1_on();
389 ergodox_right_led_2_on();
392 ergodox_right_led_1_on();
393 ergodox_right_led_3_on();
396 // ergodox_right_led_2_on();
397 // ergodox_right_led_3_on();
400 // ergodox_right_led_1_on();
401 // ergodox_right_led_2_on();
402 // ergodox_right_led_3_on();
405 ergodox_board_led_off();