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