]> git.donarmstrong.com Git - tmk_firmware.git/blob - keyboard/ergodox/keymap_cub.h
eb32370dd2260a0c7f5bd4401e9919305cde42c2
[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,   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: 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 /*
273     // templates to copy from
274
275     KEYMAP(  // LayerN: transparent on edges + hard-defined thumb keys, all others are empty
276         // left hand
277         TRNS,NO,  NO,  NO,  NO,  NO,  NO,
278         TRNS,NO,  NO,  NO,  NO,  NO,  TRNS,
279         TRNS,NO,  NO,  NO,  NO,  NO,
280         TRNS,NO,  NO,  NO,  NO,  NO,  TRNS,
281         TRNS,TRNS,TRNS,LALT,LGUI,
282                                       TRNS,TRNS,
283                                            TRNS,
284                                  LCTL,LSFT,TRNS,
285         // right hand
286              NO,  NO,  NO,  NO,  NO,  NO,  TRNS,
287              TRNS,NO,  NO,  NO,  NO,  NO,  TRNS,
288                   NO,  NO,  NO,  NO,  NO,  TRNS,
289              TRNS,NO,  NO,  NO,  NO,  NO,  TRNS,
290                        RGUI,RALT,TRNS,TRNS,TRNS,
291         TRNS,TRNS,
292         TRNS,
293         TRNS,RSFT,RCTL
294     ),
295     KEYMAP(  // LayerN: fully transparent
296         // left hand
297         TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
298         TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
299         TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
300         TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
301         TRNS,TRNS,TRNS,TRNS,TRNS,
302                                       TRNS,TRNS,
303                                            TRNS,
304                                  TRNS,TRNS,TRNS,
305         // right hand
306              TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
307              TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
308                   TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
309              TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
310                        TRNS,TRNS,TRNS,TRNS,TRNS,
311         TRNS,TRNS,
312         TRNS,
313         TRNS,TRNS,TRNS
314     ),
315 */
316
317 };
318
319 /* id for user defined functions */
320 enum function_id {
321     TEENSY_KEY,
322 };
323
324 /*
325  * Fn action definition
326  */
327 static const uint16_t PROGMEM fn_actions[] = {
328     ACTION_FUNCTION(TEENSY_KEY),                    // FN0  - Teensy key
329
330     ACTION_MODS_KEY(MOD_LSFT, KC_BSLS),             // FN1  = Shifted BackSlash // " in Workman
331     ACTION_MODS_KEY(MOD_LSFT, KC_MINS),             // FN2  = Shifted Minus     // \ in Workman
332     ACTION_MODS_KEY(MOD_LSFT, KC_COMM),             // FN3  = Shifted comma     // < in Workman
333     ACTION_MODS_KEY(MOD_LSFT, KC_DOT),              // FN4  = Shifted dot       // > in Workman
334
335     ACTION_MODS_TAP_KEY(MOD_LCTL, KC_BSPC),         // FN5  = LShift with tap BackSpace
336     ACTION_MODS_TAP_KEY(MOD_LSFT, KC_ESC),          // FN6  = LCtrl  with tap Escape
337     ACTION_MODS_TAP_KEY(MOD_LALT, KC_SPC),          // FN7  = LAlt   with tap Space
338     ACTION_MODS_TAP_KEY(MOD_RALT, KC_INS),          // FN8  = RAlt   with tap Ins
339     ACTION_MODS_TAP_KEY(MOD_RSFT, KC_ENT),          // FN9  = RShift with tap Enter
340     ACTION_MODS_TAP_KEY(MOD_RCTL, KC_SPC),          // FN10 = RCtrl  with tap Space
341
342     ACTION_MODS_TAP_KEY(MOD_LSFT, KC_TAB),          // FN11 = LShift with tap Tab
343     ACTION_MODS_TAP_KEY(MOD_LGUI, KC_ESC),          // FN12 = LGui   with tap Escape
344     ACTION_MODS_TAP_KEY(MOD_RSFT, KC_QUOT),         // FN13 = RShift with tap quotes
345     ACTION_MODS_TAP_KEY(MOD_RCTL, KC_RBRC),         // FN14 = RCtrl  with tap ]
346
347     ACTION_LAYER_SET(0, ON_BOTH),                   // FN15 - set Layer0
348     ACTION_LAYER_SET(1, ON_BOTH),                   // FN16 - set Layer1, to use Workman layout at firmware level
349     ACTION_LAYER_SET(2, ON_BOTH),                   // FN17 - set Layer2, to use with Numpad keys
350
351     ACTION_LAYER_MOMENTARY(2),                      // FN18 - momentary Layer2, to use with Numpad keys
352     ACTION_LAYER_MOMENTARY(5),                      // FN19 - momentary Layer5, to use with F* keys on top row
353     ACTION_LAYER_MOMENTARY(6),                      // FN20 - momentary Layer6, to use with F* keys, cursor, Teensy, Workman-layer switch
354     ACTION_LAYER_MOMENTARY(7),                      // FN21 - momentary Layer7, to use with F* keys (F1-F24)
355
356     ACTION_LAYER_TAP_KEY(2, KC_H),                  // FN22 = momentary Layer2 on H key, to use with Mouse keys
357     ACTION_LAYER_TAP_KEY(2, KC_V),                  // FN23 = momentary Layer2 on V key, to use with Numpad keys
358     ACTION_LAYER_TAP_KEY(3, KC_S),                  // FN24 = momentary Layer3 on S key, to use with F* keys
359     ACTION_LAYER_TAP_KEY(4, KC_A),                  // FN25 = momentary Layer4 on A key, to use with unconvenient keys
360 };
361
362 void action_function(keyrecord_t *event, uint8_t id, uint8_t opt)
363 {
364     print("action_function called\n");
365     print("id  = "); phex(id); print("\n");
366     print("opt = "); phex(opt); print("\n");
367     if (id == TEENSY_KEY) {
368         clear_keyboard();
369         print("\n\nJump to bootloader... ");
370         _delay_ms(250);
371         bootloader_jump(); // should not return
372         print("not supported.\n");
373     }
374 }
375