]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/ergodox/keymaps/xyverz/keymap.c
Merge pull request #624 from Xyverz/master
[qmk_firmware.git] / keyboards / ergodox / keymaps / xyverz / keymap.c
1 /*
2  * The Dvorak layout shown herestems from my early Kinesis years, using the Contour PS/2 with a Dvorak
3  * software layout. Because of this, the RBRC and LBRC were on opposite sides of the board in the corner
4  * keys. I've decided to continue using this layout with my ErgoDox.
5  *
6  * The QWERTY layout shown here is based entirely on the Kinesis Advantage layout, with the additional
7  * keys as shown in the diagrams. The Colemak layout is merely an adaptation of that.
8  *
9  * I've enabled persistent keymaps for Qwerty, Dvorak and Colemak layers, similar to the default Planck
10  * layouts.
11  * 
12  * For a better explanation of the layout matrices shown below, take a look at ../../ez/ez.h where the
13  * keymap is defined, beginning on line 81.
14  *
15  */
16
17 #include "ergodox.h"
18 #include "debug.h"
19 #include "action_layer.h"
20 #include "eeconfig.h"
21
22 extern keymap_config_t keymap_config;
23
24 #define _DV 0 // Dvorak layer
25 #define _QW 1 // Qwerty layer
26 #define _CM 2 // Colemak layer
27 #define _MD 3 // Media Layer
28 #define _KP 4 // Keypad Layer
29
30 // Macro name shortcuts
31 #define DVORAK M(_DV)
32 #define QWERTY M(_QW)
33 #define COLEMAK M(_CM)
34
35 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
36 /* Keymap 0: Dvorak layer
37  *
38  * ,--------------------------------------------------.           ,--------------------------------------------------.
39  * |   ]    |   1  |   2  |   3  |   4  |   5  | ESC  |           | ESC  |   6  |   7  |   8  |   9  |   0  |   [    |
40  * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
41  * | Tab    |   '  |   ,  |   .  |   Y  |   Y  |      |           |      |   F  |   G  |   C  |   R  |   L  |   \    |
42  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
43  * | CapsLk |   A  |   O  |   E  |   U  |   I  |------|           |------|   D  |   H  |   T  |   N  |   S  |   -    |
44  * |--------+------+------+------+------+------| _MD  |           | _KP  |------+------+------+------+------+--------|
45  * | LShift |   Z  |   X  |   C  |   V  |   X  |      |           |      |   B  |   M  |   W  |   V  |   Z  | RShift |
46  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
47  *   | LGUI |   `  |  INS | Left | Rght |                                       |  Up  |  Dn  |   /  |   =  | RGUI |
48  *   `----------------------------------'                                       `----------------------------------'
49  *                                        ,-------------.       ,-------------.
50  *                                        | LCtr | LAlt |       | Ralt | RCtr |
51  *                                 ,------|------|------|       |------+------+------.
52  *                                 |      |      | Home |       | PgUp |      |      |
53  *                                 | BkSp | Del  |------|       |------| Enter| Space|
54  *                                 |      |      | End  |       | PgDn |      |      |
55  *                                 `--------------------'       `--------------------'
56  *
57  */
58 // If it accepts an argument (i.e, is a function), it doesn't need KC_.
59 // Otherwise, it needs KC_*
60 [_DV] = {  // layer 0 : Dvorak
61         // left hand
62         {KC_RBRC, KC_TAB,  KC_CAPS, KC_LSFT, KC_LGUI, KC_NO  },
63         {KC_1,    KC_QUOT, KC_A,    KC_SCLN, KC_GRV,  KC_END },
64         {KC_2,    KC_COMM, KC_O,    KC_Q,    KC_INS,  KC_DEL },
65         {KC_3,    KC_DOT,  KC_E,    KC_J,    KC_LEFT, KC_BSPC},
66         {KC_4,    KC_P,    KC_U,    KC_K,    KC_RGHT, KC_HOME},
67         {KC_5,    KC_Y,    KC_I,    KC_X,    KC_NO,   KC_LCTL},
68         {KC_ESC,  KC_NO,   KC_NO,   MO(_MD), KC_NO,   KC_LALT},
69
70         // right hand
71         {KC_ESC,  KC_NO,   KC_NO,   MO(_KP), KC_NO,   KC_RALT},
72         {KC_6,    KC_F,    KC_D,    KC_B,    KC_NO,   KC_RCTL},
73         {KC_7,    KC_G,    KC_H,    KC_M,    KC_UP,   KC_PGUP},
74         {KC_8,    KC_C,    KC_T,    KC_W,    KC_DOWN, KC_SPC },
75         {KC_9,    KC_R,    KC_N,    KC_V,    KC_SLSH, KC_ENT },
76         {KC_0,    KC_L,    KC_S,    KC_Z,    KC_EQL,  KC_PGDN},
77         {KC_LBRC, KC_BSLS, KC_MINS, KC_RSFT, KC_RGUI, KC_NO  }
78 },
79
80 /* Keymap 1: QWERTY layer
81  *
82  * ,--------------------------------------------------.           ,--------------------------------------------------.
83  * |   =    |   1  |   2  |   3  |   4  |   5  | ESC  |           | ESC  |   6  |   7  |   8  |   9  |   0  |   -    |
84  * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
85  * | Tab    |   Q  |   W  |   E  |   R  |   T  |      |           |      |   Y  |   U  |   I  |   O  |   P  |   \    |
86  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
87  * | CapsLk |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  |   '    |
88  * |--------+------+------+------+------+------| _MD  |           | _KP  |------+------+------+------+------+--------|
89  * | LShift |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |   /  | RShift |
90  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
91  *   | LGUI |   `  |  INS | Left | Rght |                                       |  Up  |  Dn  |   [  |   ]  | RGUI |
92  *   `----------------------------------'                                       `----------------------------------'
93  *                                        ,-------------.       ,-------------.
94  *                                        | LCtr | LAlt |       | Ralt | RCtr |
95  *                                 ,------|------|------|       |------+------+------.
96  *                                 |      |      | Home |       | PgUp |      |      |
97  *                                 | BkSp | Del  |------|       |------| Enter| Space|
98  *                                 |      |      | End  |       | PgDn |      |      |
99  *                                 `--------------------'       `--------------------'
100  */
101 // If it accepts an argument (i.e, is a function), it doesn't need KC_.
102 // Otherwise, it needs KC_*
103 [_QW] = {  // layer 1 : QWERTY
104         // left hand
105         {KC_EQL,  KC_TAB,  KC_CAPS, KC_LSFT, KC_LGUI, KC_NO  },
106         {KC_1,    KC_Q,    KC_A,    KC_Z,    KC_GRV,  KC_END },
107         {KC_2,    KC_W,    KC_S,    KC_X,    KC_INS,  KC_DEL },
108         {KC_3,    KC_E,    KC_D,    KC_C,    KC_LEFT, KC_BSPC},
109         {KC_4,    KC_R,    KC_F,    KC_V,    KC_RGHT, KC_HOME},
110         {KC_5,    KC_T,    KC_G,    KC_B,    KC_NO,   KC_LCTL},
111         {KC_ESC,  KC_NO,   KC_NO,   MO(_MD), KC_NO,   KC_LALT},
112
113         // right hand
114         {KC_ESC,  KC_NO,   KC_NO,   MO(_KP), KC_NO,   KC_RALT},
115         {KC_6,    KC_Y,    KC_H,    KC_N,    KC_NO,   KC_RCTL},
116         {KC_7,    KC_U,    KC_J,    KC_M,    KC_UP,   KC_PGUP},
117         {KC_8,    KC_I,    KC_K,    KC_COMM, KC_DOWN, KC_SPC },
118         {KC_9,    KC_O,    KC_L,    KC_DOT,  KC_LBRC, KC_ENT },
119         {KC_0,    KC_P,    KC_SCLN, KC_SLSH, KC_RBRC, KC_PGDN},
120         {KC_MINS, KC_BSLS, KC_QUOT, KC_RSFT, KC_RGUI, KC_NO  }
121   },
122
123 /* Keymap 2: Colemak layer
124  *
125  * ,--------------------------------------------------.           ,--------------------------------------------------.
126  * |   =    |   1  |   2  |   3  |   4  |   5  | ESC  |           | ESC  |   6  |   7  |   8  |   9  |   0  |   -    |
127  * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
128  * | Tab    |   Q  |   W  |   F  |   P  |   G  |      |           |      |   J  |   L  |   U  |   Y  |   ;  |   \    |
129  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
130  * | BkSpc  |   A  |   R  |   S  |   T  |   D  |------|           |------|   H  |   N  |   E  |   I  |   O  |   '    |
131  * |--------+------+------+------+------+------| _MD  |           | _KP  |------+------+------+------+------+--------|
132  * | LShift |   Z  |   X  |   C  |   V  |   B  |      |           |      |   K  |   M  |   ,  |   .  |   /  | RShift |
133  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
134  *   | LGUI |   `  |  INS | Left | Rght |                                       |  Up  |  Dn  |   [  |   ]  | RGUI |
135  *   `----------------------------------'                                       `----------------------------------'
136  *                                        ,-------------.       ,-------------.
137  *                                        | LCtr | LAlt |       | Ralt | RCtr |
138  *                                 ,------|------|------|       |------+------+------.
139  *                                 |      |      | Home |       | PgUp |      |      |
140  *                                 | BkSp | Del  |------|       |------| Enter| Space|
141  *                                 |      |      | End  |       | PgDn |      |      |
142  *                                 `--------------------'       `--------------------'
143  */
144 // If it accepts an argument (i.e, is a function), it doesn't need KC_.
145 // Otherwise, it needs KC_*
146 [_CM] = {  // layer 2 : Colemak
147         // left hand
148         {KC_EQL,  KC_TAB,  KC_BSPC, KC_LSFT, KC_LGUI, KC_NO  },
149         {KC_1,    KC_Q,    KC_A,    KC_Z,    KC_GRV,  KC_END },
150         {KC_2,    KC_W,    KC_R,    KC_X,    KC_INS,  KC_DEL },
151         {KC_3,    KC_F,    KC_S,    KC_C,    KC_LEFT, KC_BSPC},
152         {KC_4,    KC_P,    KC_T,    KC_V,    KC_RGHT, KC_HOME},
153         {KC_5,    KC_G,    KC_D,    KC_B,    KC_NO,   KC_LCTL},
154         {KC_ESC,  KC_NO,   KC_NO,   MO(_MD), KC_NO,   KC_LALT},
155
156         // right hand
157         {KC_ESC,  KC_NO,   KC_NO,   MO(_KP), KC_NO,   KC_RALT},
158         {KC_6,    KC_J,    KC_H,    KC_K,    KC_NO,   KC_RCTL},
159         {KC_7,    KC_L,    KC_N,    KC_M,    KC_UP,   KC_PGUP},
160         {KC_8,    KC_U,    KC_E,    KC_COMM, KC_DOWN, KC_SPC },
161         {KC_9,    KC_Y,    KC_I,    KC_DOT,  KC_LBRC, KC_ENT },
162         {KC_0,    KC_SCLN, KC_O,    KC_SLSH, KC_RBRC, KC_PGDN},
163         {KC_MINS, KC_BSLS, KC_QUOT, KC_RSFT, KC_RGUI, KC_NO  }
164   },
165
166 /* Keymap 3: Symbol Layer
167  *
168  * ,--------------------------------------------------.           ,--------------------------------------------------.
169  * | TEENSY |  F1  |  F2  |  F3  |  F4  |  F5  | F11  |           |  F12 |  F6  |  F7  |  F8  |  F9  |  F10 |        |
170  * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
171  * |        |      | PrSc | ScLk | Paus |      | FN4  |           |  FN5 |      | Mute | Vol- | Vol+ |      |        |
172  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
173  * |        |      |      |      |      |      |------|           |------| Stop | Prev | Play | Next | Sel  |        |
174  * |--------+------+------+------+------+------| FN4  |           |  FN5 |------+------+------+------+------+--------|
175  * |        |      |Dvorak|Qwerty|Colemk|      |      |           |      |      |      |      |      |      |        |
176  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
177  *   |      |      |      |      |      |                                       |      |      |      |      |      |
178  *   `----------------------------------'                                       `----------------------------------'
179  *                                        ,-------------.       ,-------------.
180  *                                        |      |      |       |      |      |
181  *                                 ,------|------|------|       |------+------+------.
182  *                                 |      |      |      |       |      |      |      |
183  *                                 |      |      |------|       |------|      |      |
184  *                                 |      |      |      |       |      |      |      |
185  *                                 `--------------------'       `--------------------'
186  */
187 // Media Layer
188 [_MD] = { // layer 3 : Media layer
189         // left hand
190         {RESET,   KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO  },
191         {KC_F1,   KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS},
192         {KC_F2,   KC_PSCR, KC_TRNS, DVORAK,  KC_TRNS, KC_TRNS},
193         {KC_F3,   KC_SLCK, KC_TRNS, QWERTY,  KC_TRNS, KC_TRNS},
194         {KC_F4,   KC_PAUS, KC_TRNS, COLEMAK, KC_TRNS, KC_TRNS},
195         {KC_F5,   KC_TRNS, KC_TRNS, KC_TRNS, KC_NO,   KC_TRNS},
196         {KC_F11,  KC_NO,   KC_NO,   KC_TRNS, KC_NO,   KC_TRNS},
197
198         // right hand
199         {KC_F12,  KC_NO,   KC_NO,   KC_TRNS, KC_NO,   KC_TRNS},
200         {KC_F6,   KC_TRNS, KC_MSTP, KC_TRNS, KC_NO,   KC_TRNS},
201         {KC_F7,   KC_MUTE, KC_MPRV, KC_TRNS, KC_TRNS, KC_TRNS},
202         {KC_F8,   KC_VOLD, KC_MPLY, KC_TRNS, KC_TRNS, KC_TRNS},
203         {KC_F9,   KC_VOLU, KC_MNXT, KC_TRNS, KC_TRNS, KC_TRNS},
204         {KC_F10,  KC_TRNS, KC_MSEL, KC_TRNS, KC_TRNS, KC_TRNS},
205         {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO  }
206   },
207
208 /* Keymap 4: Keypad layer
209  *
210  * ,--------------------------------------------------.           ,--------------------------------------------------.
211  * | Power  |      |      |      |      |      |      |           |      |      | NmLk | KP / | KP * | KP - |        |
212  * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
213  * | Sleep  |      |      |      |      |      | FN5  |           |  FN4 |      | KP 7 | KP 8 | KP 9 | KP + |        |
214  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
215  * | Wake   |      |      |      |      |      |------|           |------|      | KP 4 | KP 5 | KP 6 | KP + |        |
216  * |--------+------+------+------+------+------| FN5  |           |  FN4 |------+------+------+------+------+--------|
217  * |        |      |      |      |      |      |      |           |      |      | KP 1 | KP 2 | KP 3 |KP Ent|        |
218  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
219  *   |      |      |      |      |      |                                       | KP 0 |      | KP . |KP Ent|      |
220  *   `----------------------------------'                                       `----------------------------------'
221  *                                        ,-------------.       ,-------------.
222  *                                        |      |      |       |      |      |
223  *                                 ,------|------|------|       |------+------+------.
224  *                                 |      |      |      |       |      |      |      |
225  *                                 |      |      |------|       |------|      |      |
226  *                                 |      |      |      |       |      |      |      |
227  *                                 `--------------------'       `--------------------'
228  */
229 // Keypad Layer
230 [_KP] = { // layer 4 : Keypad layer
231         // left hand
232         {KC_PWR,  KC_SLEP, KC_WAKE, KC_TRNS, KC_TRNS, KC_NO  },
233         {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS},
234         {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS},
235         {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS},
236         {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS},
237         {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO,   KC_TRNS},
238         {KC_TRNS, KC_NO,   KC_NO,   KC_TRNS, KC_NO,   KC_TRNS},
239
240         // right hand
241         {KC_TRNS, KC_NO,   KC_NO,   KC_TRNS, KC_NO,   KC_TRNS},
242         {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO,   KC_TRNS},
243         {KC_NLCK, KC_P7,   KC_P4,   KC_P1,   KC_P0,   KC_TRNS},
244         {KC_PSLS, KC_P8,   KC_P5,   KC_P2,   KC_NO,   KC_TRNS},
245         {KC_PAST, KC_P9,   KC_P6,   KC_P3,   KC_PDOT, KC_TRNS},
246         {KC_PMNS, KC_PPLS, KC_PPLS, KC_PENT, KC_PENT, KC_TRNS},
247         {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO,   KC_NO  }
248   },
249
250 };
251
252 const uint16_t PROGMEM fn_actions[] = {
253
254 };
255
256 void persistant_default_layer_set(uint16_t default_layer) {
257   eeconfig_update_default_layer(default_layer);
258   default_layer_set(default_layer);
259 }
260
261
262 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
263 {
264       switch(id) {
265         case _DV:
266           if (record->event.pressed) {
267             persistant_default_layer_set(1UL<<_DV);
268           }
269           break;
270         case _QW:
271           if (record->event.pressed) {
272             persistant_default_layer_set(1UL<<_QW);
273           }
274           break;
275         case _CM:
276           if (record->event.pressed) {
277             persistant_default_layer_set(1UL<<_CM);
278           }
279           break;
280       }
281     return MACRO_NONE;
282 };
283
284 // Runs just one time when the keyboard initializes.
285 void matrix_init_user(void) {
286
287 };
288
289 // Runs constantly in the background, in a loop.
290 void matrix_scan_user(void) {
291
292     uint8_t layer = biton32(layer_state);
293
294     ergodox_board_led_off();
295     ergodox_right_led_1_off();
296     ergodox_right_led_2_off();
297     ergodox_right_led_3_off();
298     switch (layer) {
299       // TODO: Make this relevant to the ErgoDox EZ.
300         case 1:
301             ergodox_right_led_1_on();
302             break;
303         case 2:
304             ergodox_right_led_2_on();
305             break;
306         default:
307             // none
308             break;
309     }
310
311 };