]> git.donarmstrong.com Git - qmk_firmware.git/blob - layouts/community/ergodox/333fred/keymap.c
333fred layout update (#1971)
[qmk_firmware.git] / layouts / community / ergodox / 333fred / keymap.c
1 #include QMK_KEYBOARD_H
2 #include "debug.h"
3 #include "action_layer.h"
4 #include "version.h"
5 #include "333fred.h"
6
7 enum custom_keycodes {
8   PLACEHOLDER = SAFE_RANGE, // can always be here
9   EPRM,
10   VRSN,
11 };
12
13 enum custom_macros {
14   VERSION,
15   EEPROM,
16
17   // Windows macros
18   DLEFT,
19   DRIGHT,
20   PSCREEN_APP,
21   LSFT_TAB,
22
23   // VS Macros
24   REFACTOR,
25   TEST,
26   DEBUG_TEST,
27   FORMAT,
28   BUILD,
29   GO_TO_IMPL,
30   FIND_ALL_REF,
31   REMOVE_SORT_USINGS,
32
33   // KeePass macros
34   KEEPASS_OPEN,
35   KEEPASS_TYPE,
36 };
37
38 // NOTE: Cells marked with ACCESS must remain transparent, they're the keys that actually get to that layer
39
40 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
41 /* Keymap 0: Basic layer
42  *
43  * ,--------------------------------------------------.           ,--------------------------------------------------.
44  * |   `    |   1  |   2  |   3  |   4  |   5  |  =   |           |  L1  |   6  |   7  |   8  |   9  |   0  |   -    |
45  * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
46  * | TAB    |   Q  |   W  |   E  |   R  |   T  |  L1  |           |  L2  |   Y  |   U  |   I  |   O  |   P  |   \    |
47  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
48  * | Esc    |   A  |   S  |   D  |LT 3,F|   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  |   '    |
49  * |--------+------+------+------+------+------|  L2  |           |MO(3) |------+------+------+------+------+--------|
50  * | LShift |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |//Ctrl| RShift |
51  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
52  *   |LCTRL |  F4  |  F5  | LGUI | LALT |                                       | Left | Down |  Up  | Right| RGUI |
53  *   `----------------------------------'                                       `----------------------------------'
54  *                                        ,-------------.       ,-------------.
55  *                                        | Copy | Paste|       | Copy | Paste  |
56  *                                 ,------|------|------|       |------+--------+------.
57  *                                 |      |      | PgUp |       | PgDn |        |      |
58  *                                 | Bcksp|OSL(2)|------|       |------|  Ent   |Space |
59  *                                 |      |  VIM | Del  |       | RCtrl|        |      |
60  *                                 `--------------------'       `----------------------'
61  */
62 // If it accepts an argument (i.e, is a function), it doesn't need KC_.
63 // Otherwise, it needs KC_*
64 [BASE] = LAYOUT_ergodox(  // layer 0 : default
65         // left hand
66         KC_GRV,        KC_1,         KC_2,   KC_3,   KC_4,          KC_5,   KC_EQL,
67         KC_TAB,        KC_Q,         KC_W,   KC_E,   KC_R,          KC_T,   TG(CODE),
68         KC_ESC,        KC_A,         KC_S,   KC_D,   LT(VIM, KC_F),KC_G,
69         OSM(MOD_LSFT), CTL_T(KC_Z),  KC_X,   KC_C,   KC_V,          KC_B,   TG(SYMB),
70         OSM(MOD_LCTL), KC_F4,        KC_F5,  KC_LGUI,KC_LALT,
71                                                                              LCTL(KC_C),     LCTL(KC_V),
72                                                                                              KC_PGUP,
73                                                                      KC_BSPC,TD(TD_SYM_VIM), KC_DEL,
74         // right hand
75              TG(CODE), KC_6,   KC_7,   KC_8,   KC_9,   KC_0,           KC_MINS,
76              TG(SYMB), KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,           KC_BSLS,
77                        KC_H,   KC_J,   KC_K,   KC_L,   KC_SCLN,        KC_QUOT,
78              MO(MDIA), KC_N,   KC_M,   KC_COMM,KC_DOT, CTL_T(KC_SLSH), OSM(MOD_RSFT),
79                                   KC_LEFT,KC_DOWN,KC_UP,  KC_RIGHT,       KC_RGUI,
80              LCTL(KC_C), LCTL(KC_V),
81              KC_PGDN,
82              KC_RCTL,    KC_ENT, KC_SPC
83     ),
84 /* Keymap 1: Code Layer
85  *
86  * ,--------------------------------------------------.           ,--------------------------------------------------.
87  * |        |      |      |      |      |      |      |           |ACCESS|      |      |      |      |      |        |
88  * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
89  * |        |      |      |      |      |      |  F10 |           |  F11 |      |      |      |      |      |        |
90  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
91  * |        |      |      |      |      |      |------|           |------|      |      |      |      |      |        |
92  * |--------+------+------+------+------+------|  L2  |           |      |------+------+------+------+------+--------|
93  * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
94  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
95  *   |      |      |      |      |      |                                       | F12  |GoToIm|  FAR |      |      |
96  *   `----------------------------------'                                       `----------------------------------'
97  *                                        ,-------------.       ,---------------.
98  *                                        |Format|Build |       | Copy | Paste  |
99  *                                 ,------|------|------|       |------+--------+------.
100  *                                 |      |      |Refact|       |Sort U|        |      |
101  *                                 |      |ACCESS|------|       |------|        |      |
102  *                                 |      |      |      |       |      |        |      |
103  *                                 `--------------------'       `----------------------'
104  */
105 // If it accepts an argument (i.e, is a function), it doesn't need KC_.
106 // Otherwise, it needs KC_*
107 [CODE] = LAYOUT_ergodox(  // layer 1 : code
108         // left hand
109         KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
110         KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F10,
111         KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
112         KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, TG(SYMB),
113         KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
114                                                                              M(FORMAT),M(BUILD),
115                                                                                        M(REFACTOR),
116                                                                     KC_TRNS, KC_TRNS,  KC_TRNS,
117         // right hand
118
119             KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,      KC_TRNS,        KC_TRNS, KC_TRNS,
120             KC_F11,  KC_TRNS, KC_TRNS, KC_TRNS,      KC_TRNS,        KC_TRNS, KC_TRNS,
121                      KC_TRNS, KC_TRNS, KC_TRNS,      KC_TRNS,        KC_TRNS, KC_TRNS,
122             KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,      KC_TRNS,        KC_TRNS, KC_TRNS,
123                               KC_F12,  M(GO_TO_IMPL),M(FIND_ALL_REF),KC_TRNS, KC_TRNS,
124              LCTL(KC_C), LCTL(KC_V),
125              M(REMOVE_SORT_USINGS),
126              KC_TRNS, KC_TRNS, KC_TRNS
127     ),
128 /* Keymap 2: Symbol Layer
129  *
130  * ,---------------------------------------------------.           ,--------------------------------------------------.
131  * |Version  |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
132  * |---------+------+------+------+------+------+------|           |------+------+------+------+------+------+--------|
133  * |         |   !  |   @  |   (  |   )  |   |  |ACCESS|           |ACCESS|   Up |   7  |   8  |   9  |   *  |   F12  |
134  * |---------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
135  * |         |   #  |   $  |   {  |   }  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
136  * |---------+------+------+------+------+------|ACCESS|           |      |------+------+------+------+------+--------|
137  * |         |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
138  * `---------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
139  *   | EPRM  |      |      |      |      |                                       |   0  |   0  |   .  |   =  |      |
140  *   `-----------------------------------'                                       `----------------------------------'
141  *                                        ,-------------.       ,-------------.
142  *                                        |      | Caps |       |      |      |
143  *                                 ,------|------|------|       |------+------+------.
144  *                                 |      |      |APScr |       |      |      |      |
145  *                                 |      |ACCESS|------|       |------|      |      |
146  *                                 |      |      | PScr |       |ACCESS|      |      |
147  *                                 `--------------------'       `--------------------'
148  */
149 // SYMBOLS
150 [SYMB] = LAYOUT_ergodox(
151        // left hand
152        VRSN,   KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
153        KC_TRNS,KC_EXLM,KC_AT,  KC_LPRN,KC_RPRN,KC_PIPE,KC_TRNS,
154        KC_TRNS,KC_HASH,KC_DLR, KC_LCBR,KC_RCBR,KC_GRV,
155        KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
156           EPRM,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
157                                        KC_TRNS,KC_CAPS,
158                                                M(PSCREEN_APP),
159                                KC_TRNS,KC_TRNS,KC_PSCR,
160        // right hand
161        KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
162        KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
163                 KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
164        KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
165                          KC_0,   KC_0,    KC_DOT,  KC_EQL,  KC_TRNS,
166        KC_TRNS, KC_TRNS,
167        KC_TRNS,
168        KC_TRNS, KC_TRNS, KC_TRNS
169 ),
170 /* Keymap 3: Media and mouse keys
171  *
172  * ,--------------------------------------------------.           ,--------------------------------------------------.
173  * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
174  * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
175  * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
176  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
177  * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |        |
178  * |--------+------+------+------+------+------|      |           |ACCESS|------+------+------+------+------+--------|
179  * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
180  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
181  *   |      |      |      | Lclk | Rclk |                                       |      |      |      |      |      |
182  *   `----------------------------------'                                       `----------------------------------'
183  *                                        ,-------------.       ,-------------.
184  *                                        | Back+| Back-|       | Vol+ |      |
185  *                                 ,------|------|------|       |------+------+------.
186  *                                 |      |      |BackTg|       | Vol- |      |      |
187  *                                 |      |      |------|       |------| PL/PS| Next |
188  *                                 |      |      |      |       | Back |      |      |
189  *                                 `--------------------'       `--------------------'
190  */
191 // MEDIA AND MOUSE
192 [MDIA] = LAYOUT_ergodox(
193        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
194        KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
195        KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
196        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
197        KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
198                                            BL_INC,  BL_DEC,
199                                                     BL_TOGG,
200                                   KC_TRNS, KC_TRNS, KC_TRNS,
201     // right hand
202        KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
203        KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
204                  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
205        KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
206                           KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
207        KC_VOLU, KC_TRNS,
208        KC_VOLD,
209        KC_MPRV, KC_MPLY, KC_MNXT
210 ),
211 /* Keymap 4: Movement
212  *
213  * ,--------------------------------------------------.           ,--------------------------------------------------.
214  * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
215  * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
216  * |        |KOpen |KType |LSHFT |      |      |      |           |      | Copy |      |      |      | Paste|        |
217  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
218  * |        |DLeft |DRight|LCTRL | LGUI |      |------|           |------| Left | Down |  Up  | Right|      |        |
219  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
220  * |        |SFT_TB| TAB  |      |      |      |      |           |      |      |      |      |      |      |        |
221  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
222  *   |      |      |      |      |      |                                       |      |      |      |      |      |
223  *   `----------------------------------'                                       `----------------------------------'
224  *                                        ,-------------.       ,-------------.
225  *                                        |      |      |       | Home | End  |
226  *                                 ,------|------|------|       |------+------+------.
227  *                                 |      |      |      |       |      |      |      |
228  *                                 |      |ACCESS|------|       |------|      |      |
229  *                                 |      |      |      |       |      |      |      |
230  *                                 `--------------------'       `--------------------'
231  */
232 // MEDIA AND MOUSE
233 [VIM] = LAYOUT_ergodox(
234        KC_TRNS, KC_TRNS,        KC_TRNS,        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
235        KC_TRNS, M(KEEPASS_OPEN),M(KEEPASS_TYPE),KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS,
236        KC_TRNS, M(DLEFT),       M(DRIGHT),      KC_LCTL, KC_LGUI, KC_TRNS,
237        KC_TRNS, M(LSFT_TAB),    KC_TAB,         KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
238        KC_TRNS, KC_TRNS,        KC_TRNS,        KC_TRNS, KC_TRNS,
239                                              KC_TRNS, KC_TRNS,
240                                                       KC_TRNS,
241                                     KC_TRNS, KC_TRNS, KC_TRNS,
242     // right hand
243        KC_TRNS,  KC_TRNS,   KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,   KC_TRNS,
244        KC_TRNS,  LCTL(KC_C),KC_TRNS, KC_TRNS, KC_TRNS, LCTL(KC_V),KC_TRNS,
245                  KC_LEFT,   KC_DOWN, KC_UP,   KC_RIGHT,KC_TRNS,   KC_TRNS,
246        KC_TRNS,  KC_TRNS,   KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,   KC_TRNS,
247                             KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,   KC_TRNS,
248        KC_HOME,  KC_END,
249        KC_TRNS,
250        KC_TRNS, KC_TRNS, KC_TRNS
251
252 )
253 };
254
255 const uint16_t PROGMEM fn_actions[] = {
256     [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
257 };
258
259 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
260 {
261   // MACRODOWN only works in this function
262       switch(id) {
263         case VERSION:
264           if (record->event.pressed) {
265             SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
266           }
267           break;
268         case EEPROM:
269           if (record->event.pressed) { // For resetting EEPROM
270             eeconfig_init();
271           }
272           break;
273         case DLEFT:
274           if (record->event.pressed) { // Windows move desktop left
275             return MACRO(D(LCTL), D(LGUI), T(LEFT), U(LGUI), U(LCTL), END);
276           }
277           break;
278         case DRIGHT:
279           if (record->event.pressed) { // Windows move desktop right
280             return MACRO(D(LCTL), D(LGUI), T(RIGHT), U(LGUI), U(LCTL), END);
281           }
282           break;
283         case PSCREEN_APP:
284           if (record->event.pressed) {
285             return MACRO(D(LALT), T(PSCR), U(LALT), END);
286           }
287           break;
288         case LSFT_TAB:
289           if (record->event.pressed) {
290             return MACRO(D(LSFT), T(TAB), U(LSFT), END);
291           }
292         case REFACTOR:
293           if (record->event.pressed) { // VS Refactor CTRL+R, R
294             return MACRO(D(LCTL), T(R), U(LCTL), T(R), END);
295           }
296           break;
297         case TEST:
298           if (record->event.pressed) { // VS Run Tests CTRL+R, T
299             return MACRO(D(LCTL), T(R), U(LCTL), T(T), END);
300           }
301           break;
302         case DEBUG_TEST:
303           if (record->event.pressed) { // VS Debug Tests CTRL+R, CTRL+T
304             return MACRO(D(LCTL), T(R), T(T), U(LCTL), END);
305           }
306           break;
307         case FORMAT:
308           if (record->event.pressed) { // VS Format Document, CTRL+K, CTRL+D
309             return MACRO(D(LCTL), T(K), T(D), U(LCTL), END);
310           }
311           break;
312         case BUILD:
313           if (record->event.pressed) { // VS Build. Sends CTRL+SHFT+B
314             return MACRO(D(LCTL), D(LSFT), T(B), U(LSFT), U(LCTL), END);
315           }
316           break;
317         case GO_TO_IMPL:
318           if (record->event.pressed) { // VS Go To Implementation. Sends CTRL+F12
319             return MACRO(D(LCTL), T(F12), U(LCTL), END);
320           }
321           break;
322         case FIND_ALL_REF:
323           if (record->event.pressed) { // VS Find All References. Sends CTRL+K, R
324             return MACRO(D(LCTL), T(K), U(LCTL), T(R), END);
325           }
326           break;
327         case REMOVE_SORT_USINGS:
328           if (record->event.pressed) {
329             return MACRO(D(LCTL), T(R), T(G), U(LCTL), END);
330           }
331           break;
332         case KEEPASS_OPEN:
333           if (record->event.pressed) { // Keepass open application
334             return MACRO(D(LCTL), D(LALT), T(K), U(LALT), U(LCTL), END);
335           }
336           break;
337         case KEEPASS_TYPE:
338           if (record->event.pressed) { // Keepass autotype
339             return MACRO(D(LCTL), D(LALT), T(A), U(LALT), U(LCTL), END);
340           }
341           break;
342       }
343     return MACRO_NONE;
344 };
345
346 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
347   tap_dance_process_record(keycode);
348   switch (keycode) {
349     // dynamically generate these.
350     case EPRM:
351       if (record->event.pressed) {
352         eeconfig_init();
353       }
354       return false;
355       break;
356     case VRSN:
357       if (record->event.pressed) {
358         SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
359       }
360       return false;
361       break;
362   }
363   return true;
364 }
365
366 // Runs just one time when the keyboard initializes.
367 void matrix_init_user(void) {
368
369 };
370
371
372 // Runs constantly in the background, in a loop.
373 void matrix_scan_user(void) {
374     ergodox_board_led_on();
375     ergodox_led_all_on();
376 };
377