]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/ergodox/keymaps/coderkun_neo2/keymap.c
Initial structure for Ergodox as subprojects
[qmk_firmware.git] / keyboards / ergodox / keymaps / coderkun_neo2 / keymap.c
1 #include "ergodox_ez.h"
2 #include "debug.h"
3 #include "action_layer.h"
4 #include "led.h"
5 #include "keymap_extras/keymap_neo2.h"
6
7 // Layer names
8 #define BASE 0      // default layer
9 #define PMQ  1      // poor man’s QWERTZ
10 #define PMN  2      // poor man’s Neo
11 #define FMU  3      // FMU layer
12 #define NHL  4      // Neo’s software layer 4 rebuilt in Hardware
13
14
15 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
16 /* Layer 0: default
17  * ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐     ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐
18  * │  TAB  │  1  │  2  │  3  │  4  │  5  │  `  │     │  ´  │  6  │  7  │  8  │  9  │  0  │ BKSPC │
19  * ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤     ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤
20  * │   Y   │  X  │  V  │  L  │  C  │  W  │ HOM │     │ END │  K  │  H  │  G  │  F  │  Q  │  ß    │
21  * ├───────┼─────┼─────┼─────╆─────╅─────┤  E  │     │     ├─────╆─────╅─────┼─────┼─────┼───────┤
22  * │ Mod3  │  U  │  I  │  A  │  E  │  O  ├─────┤     ├─────┤  S  │  N  │  R  │  T  │  D  │ Mod3  │
23  * ├───────┼─────┼─────┼─────╄─────╃─────┤ TL2 │     │ TL3 ├─────╄─────╃─────┼─────┼─────┼───────┤
24  * │ LSHFT │  Ü  │  Ö  │  Ä  │  P  │  Z  │     │     │     │  B  │  M  │  ,  │  .  │  J  │ Shift │
25  * └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘     └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘
26  *   │ CTL │ ALT │ MO1 │ Win │ Mod4│                             │ Mod4│ Win │ MO1 │ Alt │ CTL │
27  *   └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘
28  *                                   │  ←  │  ↑  │ │  ↓  │  →  │
29  *                             ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐
30  *                             │     │     │  ─  │ │  ─  │     │     │
31  *                             │ SPC │ RTN ├─────┤ ├─────┤ RTN │ SPC │
32  *                             │     │     │ HYP │ │ MEH │     │     │
33  *                             └─────┴─────┴─────┘ └─────┴─────┴─────┘
34  */
35 [BASE] = KEYMAP(
36         // left hand
37         KC_TAB,     KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   NEO_GRV,
38         NEO_Y,      NEO_X,  NEO_V,  NEO_L,  NEO_C,  NEO_W,  KC_HOME,
39         NEO_L1_L,   NEO_U,  NEO_I,  NEO_A,  NEO_E,  NEO_O,
40         KC_LSFT,    NEO_UE, NEO_OE, NEO_AE, NEO_P,  NEO_Z,  TG(PMQ),
41         KC_LCTL,    KC_LALT,MO(FMU),KC_LGUI,NEO_L2_L,
42                                                     KC_LEFT,    KC_UP,
43                                                                 KC_MINS,
44                                             KC_SPC, KC_ENT,    ALL_T(KC_NO),
45         // right hand
46         NEO_ACUT,   KC_6,   KC_7,   KC_8,   KC_9,   KC_0,   KC_BSPC,
47         KC_END,     NEO_K,  NEO_H,  NEO_G,  NEO_F,  NEO_Q,  NEO_SS,
48                     NEO_S,  NEO_N,  NEO_R,  NEO_T,  NEO_D,  NEO_L1_R,
49         TG(PMN),    NEO_B,  NEO_M,  KC_COMM,KC_DOT, NEO_J,  KC_RSFT,
50                             NEO_L2_R,KC_RGUI,MO(FMU),KC_RALT,KC_RCTL,
51         KC_DOWN,    KC_RGHT,
52         KC_MINS,
53         MEH_T(KC_NO),KC_ENT,KC_SPC
54     ),
55
56 /* Layer 1: poor man’s QWERTZ
57  * based on kaimi’s layout
58  * ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐     ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐
59  * │  TAB  │  1  │  2  │  3  │  4  │  5  │  `  │     │  ´  │  6  │  7  │  8  │  9  │  0  │ BKSPC │
60  * ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤     ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤
61  * │   C   │  P  │  T  │  F  │  K  │  L  │ HOM │     │ END │  B  │  A  │  S  │  G  │  V  │  Y    │
62  * ├───────┼─────┼─────┼─────╆─────╅─────┤  E  │     │     ├─────╆─────╅─────┼─────┼─────┼───────┤
63  * │ Mod3  │  D  │  H  │  Ö  │  O  │  I  ├─────┤     ├─────┤  U  │  -  │  Z  │  E  │  X  │ Mod3  │
64  * ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│     │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤
65  * │ LSHFT │  Ä  │  Q  │  R  │  W  │  N  │     │     │     │  J  │  M  │  ,  │  .  │  ẞ  │ Shift │
66  * └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘     └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘
67  *   │ CTL │ ALT │ MO1 │ Win │ MO4 │                             │ M04 │ Win │ MO1 │ Alt │ CTL │
68  *   └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘
69  *                                   │  ←  │  ↑  │ │  ↓  │  →  │
70  *                             ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐
71  *                             │     │     │  ─  │ │  ─  │     │     │
72  *                             │ SPC │ RTN ├─────┤ ├─────┤ RTN │ SPC │
73  *                             │     │     │ HYP │ │ MEH │     │     │
74  *                             └─────┴─────┴─────┘ └─────┴─────┴─────┘
75  */
76 [PMQ] = KEYMAP(
77         // left hand
78         KC_TAB,     KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_EQL,
79         DE_C,       DE_P,   DE_T,   DE_F,   DE_K,   DE_L,   KC_HOME,
80         NEO_L1_L,   DE_D,   DE_H,   DE_OE,  DE_O,   DE_I,
81         KC_LSFT,    DE_AE,  DE_Q,   DE_R,   DE_W,   DE_N,   KC_TRNS,
82         KC_LCTL,    KC_LALT,MO(FMU),KC_LGUI,MO(NHL),
83                                                     KC_LEFT,    KC_UP,
84                                                                 KC_MINS,
85                                             KC_SPC, KC_ENT,    ALL_T(KC_NO),
86         // right hand
87         DE_ACUT,    KC_6,   KC_7,   KC_8,   KC_9,   KC_0,   KC_BSPC,
88         KC_END,     DE_B,   DE_A,   DE_S,   DE_G,   DE_V,   DE_Y,
89                     DE_U,   DE_MINS,DE_Z,   DE_E,   DE_X,   NEO_L1_R,
90         KC_TRNS,    DE_J,   DE_M,   DE_COMM,DE_DOT, DE_SS,  KC_RSFT,
91                             MO(NHL),KC_RGUI,MO(FMU),KC_RALT,KC_RCTL,
92         KC_DOWN,    KC_RGHT,
93         KC_MINS,
94         MEH_T(KC_NO),KC_ENT,KC_SPC
95     ),
96
97 /* Layer 2: poor man’s Neo
98  * based on kaimi’s layout
99  * ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐     ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐
100  * │  TAB  │  1  │  2  │  3  │  4  │  5  │  `  │     │  ´  │  6  │  7  │  8  │  9  │  0  │ BKSPC │
101  * ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤     ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤
102  * │   Y   │  X  │  V  │  L  │  C  │  W  │ HOM │     │ END │  K  │  H  │  G  │  F  │  Q  │  ß    │
103  * ├───────┼─────┼─────┼─────╆─────╅─────┤  E  │     │     ├─────╆─────╅─────┼─────┼─────┼───────┤
104  * │ Mod3  │  U  │  I  │  A  │  E  │  O  ├─────┤     ├─────┤  S  │  N  │  R  │  T  │  D  │ Mod3  │
105  * ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│     │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤
106  * │ LSHFT │  Ü  │  Ö  │  Ä  │  P  │  Z  │     │     │     │  B  │  M  │  ,  │  .  │  J  │ Shift │
107  * └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘     └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘
108  *   │ CTL │ ALT │ MO1 │ Win │ MO4 │                             │ M04 │ Win │ MO1 │ Alt │ CTL │
109  *   └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘
110  *                                   │  ←  │  ↑  │ │  ↓  │  →  │
111  *                             ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐
112  *                             │     │     │  ─  │ │  ─  │     │     │
113  *                             │ SPC │ RTN ├─────┤ ├─────┤ RTN │ SPC │
114  *                             │     │     │ HYP │ │ MEH │     │     │
115  *                             └─────┴─────┴─────┘ └─────┴─────┴─────┘
116  */
117 [PMN] = KEYMAP(
118         KC_TAB,     KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_EQL,
119         DE_Y,       DE_X,   DE_V,   DE_L,   DE_C,   DE_W,   KC_HOME,
120         KC_NO,      DE_U,   DE_I,   DE_A,   DE_E,   DE_O,
121         KC_LSFT,    DE_UE,  DE_OE,  DE_AE,  DE_P,   DE_Z,   KC_TRNS,
122         KC_LCTL,    KC_LALT,MO(FMU),KC_LGUI,MO(NHL),
123                                                     KC_LEFT,    KC_UP,
124                                                                 KC_MINS,
125                                             KC_SPC, KC_ENT,    ALL_T(KC_NO),
126         // right hand
127         DE_ACUT,    KC_6,   KC_7,   KC_8,   KC_9,   KC_0,   KC_BSPC,
128         KC_END,     DE_K,   DE_H,   DE_G,   DE_F,   DE_Q,   DE_SS,
129                     DE_S,   DE_N,   DE_R,   DE_T,   DE_D,   KC_NO,
130         KC_TRNS,    DE_B,   DE_M,   KC_COMM,KC_DOT, DE_J,   KC_RSFT,
131                             MO(NHL),KC_RGUI,MO(FMU),KC_RALT,KC_RCTL,
132         KC_DOWN,    KC_RGHT,
133         KC_MINS,
134         MEH_T(KC_NO),KC_ENT,KC_SPC
135     ),
136
137 /* Layer 3: F-keys, Mouse and Unicode
138  * ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐     ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐
139  * │       │     │     │     │     │     │     │     │     │     │     │     │     │     │       │
140  * ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤     ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤
141  * │       │     │     │     │  ✕  │     │     │     │     │     │ F9  │ F10 │ F11 │ F12 │       │
142  * ├───────┼─────┼─────┼─────╆─────╅─────┤     │     │     ├─────╆─────╅─────┼─────┼─────┼───────┤
143  * │       │     │     │     │  ✓  │     ├─────┤     ├─────┤     │ F5  │ F6  │ F7  │ F8  │       │
144  * ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│     │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤
145  * │       │     │     │     │     │     │     │     │     │     │ F1  │ F2  │ F3  │ F4  │       │
146  * └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘     └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘
147  *   │     │     │(MO1)│     │(MO4)│                             │(MO4)│     │(MO1)│     │     │
148  *   └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘
149  *                                   │ Ms← │ Ms↑ │ │ Ms↓ │ Ms→ │
150  *                             ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐
151  *                             │     │     │ MLC │ │ MRC │     │     │
152  *                             │     │     ├─────┤ ├─────┤     │     │
153  *                             │     │     │     │ │     │     │     │
154  *                             └─────┴─────┴─────┘ └─────┴─────┴─────┘
155  */
156 [FMU] = KEYMAP(
157         // left hand
158         KC_TRNS,    KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
159         KC_TRNS,    KC_TRNS,KC_TRNS,KC_TRNS,UC(0x2713),KC_TRNS,KC_TRNS,
160         KC_TRNS,    KC_TRNS,KC_TRNS,KC_TRNS,UC(0x2715),KC_TRNS,
161         KC_TRNS,    KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
162         KC_TRNS,    KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
163                                                     KC_MS_L,    KC_MS_U,
164                                                                 KC_BTN1,
165                                             KC_TRNS,KC_TRNS,    KC_TRNS,
166         // right hand
167         KC_TRNS,    KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
168         KC_TRNS,    KC_TRNS,KC_F9,  KC_F10, KC_F11, KC_F12, KC_TRNS,
169                     KC_TRNS,KC_F5,  KC_F6,  KC_F7,  KC_F8,  KC_TRNS,
170         KC_TRNS,    KC_TRNS,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_TRNS,
171                             KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
172         KC_MS_D,    KC_MS_R,
173         KC_BTN2,
174         KC_TRNS,    KC_TRNS,KC_TRNS
175     ),
176
177 /* Layer 4: Neo’s software layer 4 rebuilt in Hardware
178  * based on kaimi’s layout
179  * ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┐     ┌─────┬─────┬─────┬─────┬─────┬─────┬───────┐
180  * │       │     │     │     │     │     │     │     │     │     │     │     │     │     │       │
181  * ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤     ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤
182  * │       │ PgUp│ BSpc│  ↑  │ Del │ PgDn│     │     │     │     │  7  │  8  │  9  │  +  │   −   │
183  * ├───────┼─────┼─────┼─────╆─────╅─────┤     │     │     ├─────╆─────╅─────┼─────┼─────┼───────┤
184  * │       │ Home│  ←  │  ↓  │  →  │ End ├─────┤     ├─────┤     │  4  │  5  │  6  │  ,  │   .   │
185  * ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│     │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤
186  * │       │ Esc │ Tab │ Ins │ Ret │ Undo│     │     │     │     │  1  │  2  │  3  │     │       │
187  * └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘     └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘
188  *   │     │     │(MO1)│     │(MO4)│                             │(MO4)│     │(MO1)│     │     │
189  *   └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┐ ┌─────┬─────┐ └─────┴─────┴─────┴─────┴─────┘
190  *                                   │     │     │ │     │     │
191  *                             ┌─────┼─────┼─────┤ ├─────┼─────┼─────┐
192  *                             │     │     │     │ │     │     │     │
193  *                             │     │     ├─────┤ ├─────┤     │     │
194  *                             │     │     │     │ │     │     │     │
195  *                             └─────┴─────┴─────┘ └─────┴─────┴─────┘
196  */
197 [NHL] = KEYMAP(
198         // left hand
199         KC_NO,      KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,
200         KC_NO,      KC_PGUP,KC_BSPC,KC_UP,  KC_DELT,KC_PGDN,KC_NO,
201         KC_NO,      KC_HOME,KC_LEFT,KC_DOWN,KC_RGHT,KC_END,
202         KC_NO,      KC_ESC, KC_TAB, KC_INS, KC_ENT, KC_UNDO,KC_TRNS,
203         KC_NO,      KC_NO,  KC_TRNS,KC_NO,  KC_TRNS,
204                                                     KC_NO,      KC_NO,
205                                                                 KC_NO,
206                                             KC_NO,  KC_NO,      KC_NO,
207         // right hand
208         KC_NO,      KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,  KC_NO,
209         KC_NO,      KC_NO,  KC_7,   KC_8,   KC_9,   DE_PLUS,DE_MINS,
210                     KC_NO,  KC_4,   KC_5,   KC_6,   KC_COMM,KC_DOT,
211         KC_TRNS,    KC_NO,  KC_1,   KC_2,   KC_3,   KC_NO,  KC_NO,
212                             KC_TRNS,KC_NO,  KC_TRNS,KC_NO,  KC_NO,
213         KC_NO,      KC_NO,
214         KC_NO,
215         KC_NO,      KC_NO,  KC_NO
216     ),
217 };
218
219 const uint16_t PROGMEM fn_actions[] = {
220     [BASE] = ACTION_FUNCTION(BASE),
221     [PMQ]  = ACTION_FUNCTION(PMQ),
222     [PMN]  = ACTION_FUNCTION(PMN),
223     [FMU]  = ACTION_LAYER_TAP_TOGGLE(FMU),
224     [NHL]  = ACTION_LAYER_TAP_TOGGLE(NHL)
225 };
226
227
228 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
229 {
230     // MACRODOWN only works in this function
231     switch(id) {
232         case 0:
233             if (record->event.pressed) {
234                 register_code(KC_RSFT);
235             }
236             else {
237                 unregister_code(KC_RSFT);
238             }
239         break;
240     }
241
242     return MACRO_NONE;
243 };
244
245
246 // Runs just one time when the keyboard initializes.
247 void matrix_init_user(void) {
248 };
249
250
251 // Runs constantly in the background, in a loop.
252 void matrix_scan_user(void)
253 {
254     uint8_t layer = biton32(layer_state);
255
256     ergodox_board_led_off();
257     ergodox_right_led_1_off();
258     ergodox_right_led_2_off();
259     ergodox_right_led_3_off();
260     switch (layer) {
261         case FMU:
262             ergodox_right_led_1_on();
263         break;
264         case PMQ:
265             ergodox_right_led_2_on();
266         break;
267         case PMN:
268             ergodox_right_led_3_on();
269         break;
270         default:
271             if(host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) {
272                 ergodox_led_all_set(LED_BRIGHTNESS_HI);
273                 ergodox_right_led_1_on();
274             }
275             else {
276                 ergodox_board_led_off();
277             }
278         break;
279     }
280
281 };