]> git.donarmstrong.com Git - tmk_firmware.git/blob - keyboard/ergodox/keymap_cub.h
Layers reordered, according to Hasu's reccomendation + minor tweaks
[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,FN25,FN24,D,   F,   G,
98         LCTL,Z,   X,   C,   FN23,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                   FN22,J,   K,   L,   FN26,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: mouse + numpad, leftled:blue
136         // left hand
137         TRNS,NO,  NO,  NO,  NO,  PAUS,PSCR,
138         TRNS,WH_L,WH_U,WH_D,WH_R,BTN2,TRNS,
139         TRNS,MS_L,MS_U,MS_D,MS_R,BTN1,
140         TRNS,NO,  NO,  NO,  TRNS,BTN3,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
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: F-keys on home+1 row
273         // left hand
274         TRNS,NO,  NO,  NO,  NO,  NO,  NO,
275         TRNS,F1,  F2,  F3,  F4,  F5,  F11,
276         TRNS,TRNS,NO,  NO,  NO,  NO,
277         TRNS,NO,  NO,  NO,  NO,  NO,  TRNS,
278         TRNS,TRNS,TRNS,LALT,LGUI,
279                                       TRNS,TRNS,
280                                            TRNS,
281                                  LCTL,LSFT,TRNS,
282         // right hand
283              NO,  NO,  NO,  NO,  NO,  NO,  TRNS,
284              F12, F6,  F7,  F8,  F9,  F10, PGUP,
285                   NO,  NO,  NO,  NO,  TRNS,PGDN,
286              TRNS,NO,  NO,  NO,  NO,  NO,  TRNS,
287                        RGUI,RALT,TRNS,TRNS,TRNS,
288         TRNS,TRNS,
289         TRNS,
290         TRNS,RSFT,RCTL
291     ),
292
293 /*
294     // templates to copy from
295
296     KEYMAP(  // LayerN: transparent on edges + hard-defined thumb keys, all others are empty
297         // left hand
298         TRNS,NO,  NO,  NO,  NO,  NO,  NO,
299         TRNS,NO,  NO,  NO,  NO,  NO,  TRNS,
300         TRNS,NO,  NO,  NO,  NO,  NO,
301         TRNS,NO,  NO,  NO,  NO,  NO,  TRNS,
302         TRNS,TRNS,TRNS,LALT,LGUI,
303                                       TRNS,TRNS,
304                                            TRNS,
305                                  LCTL,LSFT,TRNS,
306         // right hand
307              NO,  NO,  NO,  NO,  NO,  NO,  TRNS,
308              TRNS,NO,  NO,  NO,  NO,  NO,  TRNS,
309                   NO,  NO,  NO,  NO,  NO,  TRNS,
310              TRNS,NO,  NO,  NO,  NO,  NO,  TRNS,
311                        RGUI,RALT,TRNS,TRNS,TRNS,
312         TRNS,TRNS,
313         TRNS,
314         TRNS,RSFT,RCTL
315     ),
316     KEYMAP(  // LayerN: fully transparent
317         // left hand
318         TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
319         TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
320         TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
321         TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
322         TRNS,TRNS,TRNS,TRNS,TRNS,
323                                       TRNS,TRNS,
324                                            TRNS,
325                                  TRNS,TRNS,TRNS,
326         // right hand
327              TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
328              TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
329                   TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
330              TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
331                        TRNS,TRNS,TRNS,TRNS,TRNS,
332         TRNS,TRNS,
333         TRNS,
334         TRNS,TRNS,TRNS
335     ),
336 */
337
338 };
339
340 /* id for user defined functions */
341 enum function_id {
342     TEENSY_KEY,
343 };
344
345 /*
346  * Fn action definition
347  */
348 static const uint16_t PROGMEM fn_actions[] = {
349     ACTION_FUNCTION(TEENSY_KEY),                    // FN0  - Teensy key
350
351     ACTION_MODS_KEY(MOD_LSFT, KC_BSLS),             // FN1  = Shifted BackSlash // " in Workman
352     ACTION_MODS_KEY(MOD_LSFT, KC_MINS),             // FN2  = Shifted Minus     // \ in Workman
353     ACTION_MODS_KEY(MOD_LSFT, KC_COMM),             // FN3  = Shifted comma     // < in Workman
354     ACTION_MODS_KEY(MOD_LSFT, KC_DOT),              // FN4  = Shifted dot       // > in Workman
355
356     ACTION_MODS_TAP_KEY(MOD_LCTL, KC_BSPC),         // FN5  = LShift with tap BackSpace
357     ACTION_MODS_TAP_KEY(MOD_LSFT, KC_ESC),          // FN6  = LCtrl  with tap Escape
358     ACTION_MODS_TAP_KEY(MOD_LALT, KC_SPC),          // FN7  = LAlt   with tap Space
359     ACTION_MODS_TAP_KEY(MOD_RALT, KC_INS),          // FN8  = RAlt   with tap Ins
360     ACTION_MODS_TAP_KEY(MOD_RSFT, KC_ENT),          // FN9  = RShift with tap Enter
361     ACTION_MODS_TAP_KEY(MOD_RCTL, KC_SPC),          // FN10 = RCtrl  with tap Space
362
363     ACTION_MODS_TAP_KEY(MOD_LSFT, KC_TAB),          // FN11 = LShift with tap Tab
364     ACTION_MODS_TAP_KEY(MOD_LGUI, KC_ESC),          // FN12 = LGui   with tap Escape
365     ACTION_MODS_TAP_KEY(MOD_RSFT, KC_QUOT),         // FN13 = RShift with tap quotes
366     ACTION_MODS_TAP_KEY(MOD_RCTL, KC_RBRC),         // FN14 = RCtrl  with tap ]
367
368     ACTION_LAYER_SET(0, ON_BOTH),                   // FN15 - set Layer0
369     ACTION_LAYER_SET(1, ON_BOTH),                   // FN16 - set Layer1, to use Workman layout at firmware level
370     ACTION_LAYER_SET(2, ON_BOTH),                   // FN17 - set Layer2, to use with Numpad keys
371
372     ACTION_LAYER_MOMENTARY(2),                      // FN18 - momentary Layer2, to use with Numpad keys
373     ACTION_LAYER_MOMENTARY(5),                      // FN19 - momentary Layer5, to use with F* keys on top row
374     ACTION_LAYER_MOMENTARY(6),                      // FN20 - momentary Layer6, to use with F* keys, cursor, Teensy, Workman-layer switch
375     ACTION_LAYER_MOMENTARY(7),                      // FN21 - momentary Layer7, to use with F* keys (F1-F24)
376
377     ACTION_LAYER_TAP_KEY(2, KC_H),                  // FN22 = momentary Layer2 on H key, to use with Mouse keys
378     ACTION_LAYER_TAP_KEY(2, KC_V),                  // FN23 = momentary Layer2 on V key, to use with Numpad keys
379     ACTION_LAYER_TAP_KEY(3, KC_S),                  // FN24 = momentary Layer3 on S key, to use with F* keys
380     ACTION_LAYER_TAP_KEY(4, KC_A),                  // FN25 = momentary Layer4 on A key, to use with unconvenient keys
381     ACTION_LAYER_TAP_KEY(8, KC_SCLN),               // FN26 = momentary Layer8 on ; key, to use with F* keys on home+1 row
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