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