]> git.donarmstrong.com Git - tmk_firmware.git/blob - keyboard/ergodox/keymap_cub.h
Split Layer2 into two independent layers
[tmk_firmware.git] / keyboard / ergodox / keymap_cub.h
1 static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
2     /*
3      * Keymap: Default Layer in QWERTY
4      *
5      * ,--------------------------------------------------.           ,--------------------------------------------------.
6      * |   ~    |   1  |   2  |   3  |   4  |   5  |   \  |           |   -  |   6  |   7  |   8  |   9  |   0  |   =    |
7      * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
8      * | Tab    |   Q  |   W  |   E  |   R  |   T  | ~L5  |           | ~L6  |   Y  |   U  |   I  |   O  |   P  |   [    |
9      * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
10      * | LShift |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  |   '    |
11      * |--------+------+------+------+------+------|  L0  |           | ~L7  |------+------+------+------+------+--------|
12      * | LCtrl  |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   /  |   ]    |
13      * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
14      *   | ~L5  | ~L2  | Caps | LAlt | LGui |                                       |  Lft |  Up  |  Dn  | Rght | ~L6  |
15      *   `----------------------------------'                                       `----------------------------------'
16      *                                        ,-------------.       ,-------------.
17      *                                        | +L2  | Home |       | PgUp | Del  |
18      *                                 ,------|------|------|       |------+------+------.
19      *                                 |      |      |  End |       | PgDn |      |      |
20      *                                 | BkSp |  ESC |------|       |------| Enter| Space|
21      *                                 |      |      |  Spc |       | Ins  |      |      |
22      *                                 `--------------------'       `--------------------'
23      *
24      *
25      *
26      ****************************************************************************************************
27      *
28      * Under XOrg, I use my own mapping from QWERTY to "Workman for Programmers"
29      * See XOrg files in ./addons/ subdirectory.
30      *
31      * I have to do so, because of two things:
32      * 1) my native language is Russian, and XOrg keymap for it is based on QWERTY layout
33      * 2) I want to have non-standart shifted keys, like $ (as normal) and @ (as shifted), or _ and -
34      *
35      * And even if (2) could be solved using FN* keys (but there is limit in firmware for only 32 such
36      * keys), then (1) can't be solved at firmware level at all.
37      *
38      * So, I have to stick with QWERTY as my main layout + my own XOrg keyboard layout for English.
39      * But sometimes I have to input something when XOrg is not active - for example, in Linux console,
40      * or in firmware console (while debugging firmware), or when keyboard is connected to not my computer.
41      *
42      * For such cases I have Layer1 :)
43      * // hint: switch to Layer1 is only at Layer6
44      *
45      ****************************************************************************************************
46      *
47      *
48      *
49      * Keymap: Default Layer in Workman
50      *
51      * ,--------------------------------------------------.           ,--------------------------------------------------.
52      * |   ~    |   ;  |   !  |   #  |   {  |   }  |   '  |           |   ^  |   [  |   ]  |   *  |   (  |   )  |   =    |
53      * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
54      * | Tab    |   Q  |   D  |   R  |   W  |   B  | ~L5  |           | ~L6  |   J  |   F  |   U  |   P  |   $  |   :    |
55      * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
56      * | LShift |   A  |   S  |   H  |   T  |   G  |------|           |------|   Y  |   N  |   E  |   O  |   I  |   -    |
57      * |--------+------+------+------+------+------|  L0  |           | ~L7  |------+------+------+------+------+--------|
58      * | LCtrl  |   Z  |   X  |   M  |   C  |   V  |      |           |      |   K  |   L  |   ,  |   .  |   /  |   |    |
59      * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
60      *   | ~L5  | ~L2  | Caps | LAlt | LGui |                                       |  Lft |  Up  |  Dn  | Rght | ~L6  |
61      *   `----------------------------------'                                       `----------------------------------'
62      *                                        ,-------------.       ,-------------.
63      *                                        | +L2  | Home |       | PgUp | Del  |
64      *                                 ,------|------|------|       |------+------+------.
65      *                                 |      |      |  End |       | PgDn |      |      |
66      *                                 | BkSp |  ESC |------|       |------| Enter| Space|
67      *                                 |      |      |  Spc |       | Ins  |      |      |
68      *                                 `--------------------'       `--------------------'
69      *
70      * Keymap: Default Layer in Workman / with Shift
71      *
72      * ,--------------------------------------------------.           ,--------------------------------------------------.
73      * |   `    |   1  |   2  |   3  |   4  |   5  |   "  |           |   \  |   6  |   7  |   8  |   9  |   0  |   +    |
74      * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
75      * | Tab    |   Q  |   D  |   R  |   W  |   B  | ~L5  |           | ~L6  |   J  |   F  |   U  |   P  |   @  |   %    |
76      * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
77      * | LShift |   A  |   S  |   H  |   T  |   G  |------|           |------|   Y  |   N  |   E  |   O  |   I  |   _    |
78      * |--------+------+------+------+------+------|  L0  |           | ~L7  |------+------+------+------+------+--------|
79      * | LCtrl  |   Z  |   X  |   M  |   C  |   V  |      |           |      |   K  |   L  |   ,  |   .  |   /  |   &    |
80      * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
81      *   | ~L5  | ~L2  | Caps | LAlt | LGui |                                       |  Lft |  Up  |  Dn  | Rght | ~L6  |
82      *   `----------------------------------'                                       `----------------------------------'
83      *                                        ,-------------.       ,-------------.
84      *                                        | +L2  | Home |       | PgUp | Del  |
85      *                                 ,------|------|------|       |------+------+------.
86      *                                 |      |      |  End |       | PgDn |      |      |
87      *                                 | BkSp |  ESC |------|       |------| Enter| Space|
88      *                                 |      |      |  Spc |       | Ins  |      |      |
89      *                                 `--------------------'       `--------------------'
90      *
91      */
92
93     KEYMAP(  // Layer0: default, leftled:none
94         // left hand
95         GRV, 1,   2,   3,   4,   5,   BSLS,
96         TAB, Q,   W,   E,   R,   T,   FN19,
97         FN11,FN24,FN23,FN25,FN22,G,
98         LCTL,Z,   X,   C,   V,   B,   FN15,
99         FN19,FN18,CAPS,LALT,FN12,
100                                       FN17,HOME,
101                                            END,
102                                  FN5, FN6, FN7,
103         // right hand
104              MINS,6,   7,   8,   9,   0,   EQL,
105              FN20,Y,   U,   I,   O,   P,   LBRC,
106                   H,   J,   K,   L,   SCLN,FN13,
107              FN21,N,   M,   COMM,DOT, SLSH,FN14,
108                        LEFT,UP,  DOWN,RGHT,FN20,
109         PGUP,DEL,
110         PGDN,
111         FN8, FN9, FN10
112     ),
113
114     KEYMAP(  // Layer1: Workman layout, leftled:all
115         // left hand
116         TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
117         TRNS,Q,   D,   R,   W,   B,   TRNS,
118         TRNS,A,   S,   H,   T,   G,
119         TRNS,Z,   X,   M,   C,   V,   TRNS,
120         TRNS,TRNS,TRNS,TRNS,TRNS,
121                                       TRNS,TRNS,
122                                            TRNS,
123                                  TRNS,TRNS,TRNS,
124         // right hand
125              TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
126              TRNS,J,   F,   U,   P,   4,   TRNS,
127                   Y,   N,   E,   O,   I,   TRNS,
128              TRNS,K,   L,   TRNS,TRNS,TRNS,TRNS,
129                        TRNS,TRNS,TRNS,TRNS,TRNS,
130         TRNS,TRNS,
131         TRNS,
132         TRNS,TRNS,TRNS
133     ),
134
135     KEYMAP(  // Layer2: numpad, leftled:blue
136         // left hand
137         TRNS,NO,  NO,  NO,  NO,  PAUS,PSCR,
138         TRNS,NO,  NO,  NO,  NO,  NO,  TRNS,
139         TRNS,NO,  NO,  NO,  TRNS,NO,
140         TRNS,NO,  NO,  NO,  NO,  NO,  TRNS,
141         TRNS,TRNS,TRNS,TRNS,TRNS,
142                                       TRNS,TRNS,
143                                            TRNS,
144                                  TRNS,TRNS,TRNS,
145         // right hand
146              SLCK,NLCK,PSLS,PAST,PAST,PMNS,BSPC,
147              TRNS,NO,  P7,  P8,  P9,  PMNS,BSPC,
148                   TRNS,P4,  P5,  P6,  PPLS,PENT,
149              TRNS,NO,  P1,  P2,  P3,  PPLS,PENT,
150                        P0,  PDOT,SLSH,PENT,PENT,
151         TRNS,TRNS,
152         TRNS,
153         TRNS,TRNS,TRNS
154     ),
155
156     KEYMAP(  // Layer3: F-keys + PgUp/PgDn on right hand, leftled:green
157         // left hand
158         TRNS,NO,  NO,  NO,  NO,  NO,  NO,
159         TRNS,NO,  NO,  NO,  NO,  NO,  TRNS,
160         TRNS,NO,  TRNS,NO,  NO,  NO,
161         TRNS,NO,  NO,  NO,  NO,  NO,  TRNS,
162         TRNS,TRNS,TRNS,LALT,LGUI,
163                                       TRNS,TRNS,
164                                            TRNS,
165                                  LCTL,LSFT,TRNS,
166         // right hand
167              NO,  NO,  NO,  NO,  NO,  NO,  TRNS,
168              TRNS,NO,  F1,  F2,  F3,  F4,  PGUP,
169                   NO,  F5,  F6,  F7,  F8,  PGDN,
170              TRNS,NO,  F9,  F10, F11, F12, NO,
171                        RGUI,RALT,TRNS,TRNS,TRNS,
172         TRNS,TRNS,
173         TRNS,
174         TRNS,RSFT,RCTL
175     ),
176
177     KEYMAP(  // Layer4: unconvenient keys on right hand, leftled:red
178         // left hand
179         TRNS,NO,  NO,  NO,  NO,  NO,  NO,
180         TRNS,NO,  NO,  NO,  NO,  NO,  TRNS,
181         TRNS,TRNS,NO,  NO,  NO,  NO,
182         TRNS,NO,  NO,  NO,  NO,  NO,  TRNS,
183         TRNS,TRNS,TRNS,LALT,LGUI,
184                                       TRNS,TRNS,
185                                            TRNS,
186                                  TRNS,TRNS,TRNS,
187
188         // in Workman this will be:
189         //              =
190         //      { } ( ) +
191         //      ' " ^ ^ \
192         //      [ < > ] \
193
194         // right hand
195              NO,  NO,  NO,  NO,  NO,  NO,  TRNS,
196              TRNS,NO,  4,   5,   9,   0,   PPLS,
197                   NO,  BSLS,FN1, MINS,MINS,FN2,
198              TRNS,NO,  6,   FN3, FN4, 7,   FN2,
199                        TRNS,TRNS,TRNS,TRNS,TRNS,
200         TRNS,TRNS,
201         TRNS,
202         TRNS,TRNS,TRNS
203     ),
204
205     KEYMAP(  // Layer5: F-keys instead of numbers, leftled:red
206         // left hand
207         TRNS,F1,  F2,  F3,  F4,  F5,  F6,
208         TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
209         TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
210         TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
211         TRNS,TRNS,TRNS,TRNS,TRNS,
212                                       TRNS,TRNS,
213                                            TRNS,
214                                  TRNS,TRNS,TRNS,
215         // right hand
216              F7,  F8,  F9,  F10, F11, F12, TRNS,
217              TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
218                   TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
219              TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
220                        TRNS,TRNS,TRNS,TRNS,TRNS,
221         TRNS,TRNS,
222         TRNS,
223         TRNS,TRNS,TRNS
224     ),
225
226     KEYMAP(  // Layer6: F-keys, cursor, Workman-layer switch, Teensy, leftled:red+onboard
227         // left hand
228         TRNS,F1,  F2,  F3,  F4,  F5,  F6,
229         FN0, NO,  PGUP,UP,  PGDN,PGUP,TRNS,
230         TRNS,NO,  LEFT,DOWN,RGHT,PGDN,
231         TRNS,NO,  NO,  END, HOME,NO,  TRNS,
232         FN16,TRNS,TRNS,TRNS,TRNS,
233                                       TRNS,TRNS,
234                                            TRNS,
235                                  TRNS,TRNS,TRNS,
236         // right hand
237              F7,  F8,  F9,  F10, F11, F12, MINS,
238              TRNS,PGUP,PGUP,UP,  PGDN,NO,  FN0,
239                   PGDN,LEFT,DOWN,RGHT,NO,  TRNS,
240              TRNS,NO,  HOME,END, NO,  NO,  TRNS,
241                        TRNS,TRNS,TRNS,TRNS,TRNS,
242         TRNS,TRNS,
243         TRNS,
244         TRNS,TRNS,TRNS
245     ),
246
247     //
248     // rarely used
249     //
250
251     KEYMAP(  // Layer7: F-keys only, leftled:red
252         // left hand
253         TRNS,NO,  NO,  NO,  NO,  NO,  NO,
254         TRNS,F13, F14, F15, F16, NO,  TRNS,
255         TRNS,F17, F18, F19, F20, NO,
256         TRNS,F21, F22, F23, F24, NO,  TRNS,
257         TRNS,TRNS,TRNS,TRNS,TRNS,
258                                       TRNS,TRNS,
259                                            TRNS,
260                                  TRNS,TRNS,TRNS,
261         // right hand
262              NO,  NO,  NO,  NO,  NO,  NO,  TRNS,
263              TRNS,NO,  F1,  F2,  F3,  F4,  TRNS,
264                   NO,  F5,  F6,  F7,  F8,  TRNS,
265              TRNS,NO,  F9,  F10, F11, F12, TRNS,
266                        TRNS,TRNS,TRNS,TRNS,TRNS,
267         TRNS,TRNS,
268         TRNS,
269         TRNS,TRNS,TRNS
270     ),
271
272     KEYMAP(  // Layer8: mouse and navigation, leftled:blue
273         // left hand
274         TRNS,NO,  NO,  NO,  NO,  NO,  NO,
275         TRNS,NO,  NO,  NO,  NO,  NO,  TRNS,
276         TRNS,NO,  NO,  TRNS,NO,  NO,
277         TRNS,NO,  NO,  NO,  NO,  NO,  TRNS,
278         TRNS,TRNS,TRNS,TRNS,TRNS,
279                                       TRNS,TRNS,
280                                            TRNS,
281                                  TRNS,TRNS,TRNS,
282
283         // right hand
284              TRNS,NO,  NO,  NO,  NO,  NO,  NO,
285              TRNS,BTN2,WH_L,WH_U,WH_D,WH_R,PGUP,
286                   BTN1,MS_L,MS_U,MS_D,MS_R,PGDN,
287              TRNS,BTN3,HOME,END, DEL, INS, NO,
288                        TRNS,TRNS,TRNS,TRNS,TRNS,
289         TRNS,TRNS,
290         TRNS,
291         TRNS,TRNS,TRNS
292     ),
293
294 /*
295     // templates to copy from
296
297     KEYMAP(  // LayerN: transparent on edges + hard-defined thumb keys, all others are empty
298         // left hand
299         TRNS,NO,  NO,  NO,  NO,  NO,  NO,
300         TRNS,NO,  NO,  NO,  NO,  NO,  TRNS,
301         TRNS,NO,  NO,  NO,  NO,  NO,
302         TRNS,NO,  NO,  NO,  NO,  NO,  TRNS,
303         TRNS,TRNS,TRNS,LALT,LGUI,
304                                       TRNS,TRNS,
305                                            TRNS,
306                                  LCTL,LSFT,TRNS,
307         // right hand
308              NO,  NO,  NO,  NO,  NO,  NO,  TRNS,
309              TRNS,NO,  NO,  NO,  NO,  NO,  TRNS,
310                   NO,  NO,  NO,  NO,  NO,  TRNS,
311              TRNS,NO,  NO,  NO,  NO,  NO,  TRNS,
312                        RGUI,RALT,TRNS,TRNS,TRNS,
313         TRNS,TRNS,
314         TRNS,
315         TRNS,RSFT,RCTL
316     ),
317     KEYMAP(  // LayerN: fully transparent
318         // left hand
319         TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
320         TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
321         TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
322         TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
323         TRNS,TRNS,TRNS,TRNS,TRNS,
324                                       TRNS,TRNS,
325                                            TRNS,
326                                  TRNS,TRNS,TRNS,
327         // right hand
328              TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
329              TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
330                   TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
331              TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
332                        TRNS,TRNS,TRNS,TRNS,TRNS,
333         TRNS,TRNS,
334         TRNS,
335         TRNS,TRNS,TRNS
336     ),
337 */
338
339 };
340
341 /* id for user defined functions */
342 enum function_id {
343     TEENSY_KEY,
344 };
345
346 /*
347  * Fn action definition
348  */
349 static const uint16_t PROGMEM fn_actions[] = {
350     ACTION_FUNCTION(TEENSY_KEY),                    // FN0  - Teensy key
351
352     ACTION_MODS_KEY(MOD_LSFT, KC_BSLS),             // FN1  = Shifted BackSlash // " in Workman
353     ACTION_MODS_KEY(MOD_LSFT, KC_MINS),             // FN2  = Shifted Minus     // \ in Workman
354     ACTION_MODS_KEY(MOD_LSFT, KC_COMM),             // FN3  = Shifted comma     // < in Workman
355     ACTION_MODS_KEY(MOD_LSFT, KC_DOT),              // FN4  = Shifted dot       // > in Workman
356
357     ACTION_MODS_TAP_KEY(MOD_LCTL, KC_BSPC),         // FN5  = LShift with tap BackSpace
358     ACTION_MODS_TAP_KEY(MOD_LSFT, KC_ESC),          // FN6  = LCtrl  with tap Escape
359     ACTION_MODS_TAP_KEY(MOD_LALT, KC_SPC),          // FN7  = LAlt   with tap Space
360     ACTION_MODS_TAP_KEY(MOD_RALT, KC_INS),          // FN8  = RAlt   with tap Ins
361     ACTION_MODS_TAP_KEY(MOD_RSFT, KC_ENT),          // FN9  = RShift with tap Enter
362     ACTION_MODS_TAP_KEY(MOD_RCTL, KC_SPC),          // FN10 = RCtrl  with tap Space
363
364     ACTION_MODS_TAP_KEY(MOD_LSFT, KC_TAB),          // FN11 = LShift with tap Tab
365     ACTION_MODS_TAP_KEY(MOD_LGUI, KC_ESC),          // FN12 = LGui   with tap Escape
366     ACTION_MODS_TAP_KEY(MOD_RSFT, KC_QUOT),         // FN13 = RShift with tap quotes
367     ACTION_MODS_TAP_KEY(MOD_RCTL, KC_RBRC),         // FN14 = RCtrl  with tap ]
368
369     ACTION_LAYER_SET(0, ON_BOTH),                   // FN15 - set Layer0
370     ACTION_LAYER_SET(1, ON_BOTH),                   // FN16 - set Layer1, to use Workman layout at firmware level
371     ACTION_LAYER_SET(2, ON_BOTH),                   // FN17 - set Layer2, to use with Numpad keys
372
373     ACTION_LAYER_MOMENTARY(2),                      // FN18 - momentary Layer2, to use with Numpad keys
374     ACTION_LAYER_MOMENTARY(5),                      // FN19 - momentary Layer5, to use with F* keys on top row
375     ACTION_LAYER_MOMENTARY(6),                      // FN20 - momentary Layer6, to use with F* keys, cursor, Teensy, Workman-layer switch
376     ACTION_LAYER_MOMENTARY(7),                      // FN21 - momentary Layer7, to use with F* keys (F1-F24)
377
378     ACTION_LAYER_TAP_KEY(2, KC_F),                  // FN22 = momentary Layer2 on F key, to use with Numpad keys
379     ACTION_LAYER_TAP_KEY(3, KC_S),                  // FN23 = momentary Layer3 on S key, to use with F* keys
380     ACTION_LAYER_TAP_KEY(4, KC_A),                  // FN24 = momentary Layer4 on A key, to use with unconvenient keys
381     ACTION_LAYER_TAP_KEY(8, KC_D),                  // FN25 = momentary Layer8 on D key, to use with mouse and navigation keys
382 };
383
384 void action_function(keyrecord_t *event, uint8_t id, uint8_t opt)
385 {
386     print("action_function called\n");
387     print("id  = "); phex(id); print("\n");
388     print("opt = "); phex(opt); print("\n");
389     if (id == TEENSY_KEY) {
390         clear_keyboard();
391         print("\n\nJump to bootloader... ");
392         _delay_ms(250);
393         bootloader_jump(); // should not return
394         print("not supported.\n");
395     }
396 }
397