1 #include QMK_KEYBOARD_H
9 // Each layer gets a name for readability, which is then used in the keymap matrix below.
23 // To switch the default layer used for the layout, there are special keycodes.
24 // Which onces detected below serve to switch it.
25 enum cospad_keycodes {
32 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
34 /* Keymap _QWERTY_LAYER: Default layer
35 * ,-----------------------.
37 * |-----|-----|-----|-----|
39 * |-----|-----|-----|-----|
41 * |-----|-----|-----| Spc |
43 * |-----|-----|-----|-----|
45 * |-----|-----|-----|-----|
46 * | Esc | Tab | Sft | Ctl |
47 * `-----------------------'
49 * And it's LOWER layer
50 * ,-----------------------.
52 * |-----|-----|-----|-----|
54 * |-----|-----|-----|-----|
56 * |-----|-----|-----| Ent |
58 * |-----|-----|-----|-----|
60 * |-----|-----|-----|-----|
61 * | Esc | Tab | Sft | Ctl |
62 * `-----------------------'
64 [_QWERTY_LAYER] = LAYOUT_gamepad_6x4(
65 KC_T, KC_G, KC_B, KC_LALT, \
66 KC_R, KC_F, KC_V, MO(_QWERTY_LOWER_LAYER),\
68 KC_W, KC_S, KC_X, KC_SPACE, \
69 KC_Q, KC_A, KC_Z, MO(_RAISE_LAYER),\
70 KC_GESC, KC_TAB, KC_LSFT, KC_LCTRL),
71 [_QWERTY_LOWER_LAYER] = LAYOUT_gamepad_6x4(
72 KC_P, KC_SCLN, KC_SLSH, KC_LALT, \
73 KC_O, KC_L, KC_DOT, _______, \
74 KC_I, KC_K, KC_COMM, \
75 KC_U, KC_J, KC_M, KC_ENTER, \
76 KC_Y, KC_H, KC_N, _______, \
77 _______, _______, _______, _______),
81 /* Keymap _QWERTZ_LAYER: Alternate default layer
82 * ,-----------------------.
84 * |-----|-----|-----|-----|
86 * |-----|-----|-----|-----|
88 * |-----|-----|-----| Spc |
90 * |-----|-----|-----|-----|
92 * |-----|-----|-----|-----|
93 * | Esc | Tab | Sft | Ctl |
94 * `-----------------------'
96 * And it's LOWER layer
97 * ,-----------------------.
99 * |-----|-----|-----|-----|
100 * | O | L | > | LOW |
101 * |-----|-----|-----|-----|
103 * |-----|-----|-----| Ent |
105 * |-----|-----|-----|-----|
106 * | Z | H | N | RAI |
107 * |-----|-----|-----|-----|
108 * | Esc | Tab | Sft | Ctl |
109 * `-----------------------'
111 [_QWERTZ_LAYER] = LAYOUT_gamepad_6x4(
112 KC_T, KC_G, KC_B, KC_LALT, \
113 KC_R, KC_F, KC_V, MO(_QWERTZ_LOWER_LAYER),\
115 KC_W, KC_S, KC_X, KC_SPACE, \
116 KC_Q, KC_A, KC_Y, MO(_RAISE_LAYER),\
117 KC_GESC, KC_TAB, KC_LSFT, KC_LCTRL),
118 [_QWERTZ_LOWER_LAYER] = LAYOUT_gamepad_6x4(
119 KC_P, KC_SCLN, KC_SLSH, KC_LALT, \
120 KC_O, KC_L, KC_DOT, _______, \
121 KC_I, KC_K, KC_COMM, \
122 KC_U, KC_J, KC_M, KC_ENTER, \
123 KC_Z, KC_H, KC_N, _______, \
124 _______, _______, _______, _______),
128 /* Keymap _COLEMA_LAYER: Alternate default layer
129 * ,-----------------------.
130 * | G | D | B | Alt |
131 * |-----|-----|-----|-----|
132 * | P | T | V | LOW |
133 * |-----|-----|-----|-----|
135 * |-----|-----|-----| Spc |
137 * |-----|-----|-----|-----|
138 * | Q | A | Z | RAI |
139 * |-----|-----|-----|-----|
140 * | Esc | Tab | Sft | Ctl |
141 * `-----------------------'
143 * And it's LOWER layer
144 * ,-----------------------.
145 * | ; | O | / | Alt |
146 * |-----|-----|-----|-----|
147 * | Y | I | . | LOW |
148 * |-----|-----|-----|-----|
150 * |-----|-----|-----| Ent |
152 * |-----|-----|-----|-----|
153 * | J | H | K | RAI |
154 * |-----|-----|-----|-----|
155 * | Esc | Tab | Sft | Ctl |
156 * `-----------------------'
158 [_COLEMA_LAYER] = LAYOUT_gamepad_6x4(
159 KC_T, KC_D, KC_B, KC_LALT, \
160 KC_R, KC_T, KC_V, MO(_COLEMA_LOWER_LAYER),\
162 KC_W, KC_R, KC_X, KC_SPACE, \
163 KC_Q, KC_A, KC_Z, MO(_RAISE_LAYER),\
164 KC_GESC, KC_TAB, KC_LSFT, KC_LCTRL),
165 [_COLEMA_LOWER_LAYER] = LAYOUT_gamepad_6x4(
166 KC_SCLN, KC_O, KC_SLSH, _______, \
167 KC_Y, KC_I, KC_DOT, _______, \
168 KC_U, KC_E, KC_COMM, \
169 KC_L, KC_N, KC_M, KC_ENTER, \
170 KC_J, KC_H, KC_K, _______, \
171 KC_F, KC_G, _______, _______),
175 /* Keymap _DVORAK_LAYER: Alternate default layer
176 * ,-----------------------.
177 * | Y | I | X | Alt |
178 * |-----|-----|-----|-----|
179 * | P | U | K | LOW |
180 * |-----|-----|-----|-----|
182 * |-----|-----|-----| Spc |
184 * |-----|-----|-----|-----|
185 * | ' | A | ; | RAI |
186 * |-----|-----|-----|-----|
187 * | Esc | Tab | Sft | Ctl |
188 * `-----------------------'
190 * And it's LOWER layer
191 * ,-----------------------.
192 * | L | S | Z | Alt |
193 * |-----|-----|-----|-----|
194 * | R | N | V | LOW |
195 * |-----|-----|-----|-----|
197 * |-----|-----|-----| Ent |
199 * |-----|-----|-----|-----|
200 * | F | D | B | RAI |
201 * |-----|-----|-----|-----|
202 * | Esc | Tab | Sft | Ctl |
203 * `-----------------------'
205 [_DVORAK_LAYER] = LAYOUT_gamepad_6x4(
206 KC_Y, KC_I, KC_X, KC_LALT, \
207 KC_P, KC_U, KC_K, MO(_DVORAK_LOWER_LAYER),\
208 KC_DOT, KC_E, KC_J, \
209 KC_COMM, KC_O, KC_A, KC_SPACE, \
210 KC_QUOT, KC_A, KC_SCLN, MO(_RAISE_LAYER),\
211 KC_GESC, KC_TAB, KC_LSFT, KC_LCTRL),
212 [_DVORAK_LOWER_LAYER] = LAYOUT_gamepad_6x4(
213 KC_L, KC_S, KC_Z, KC_LALT, \
214 KC_R, KC_N, KC_V, _______, \
216 KC_G, KC_H, KC_M, KC_ENTER,\
217 KC_F, KC_D, KC_B, _______, \
218 _______, _______, _______, _______),
222 /* Keymap _RAISE_LAYER: Additional layer to access more
223 * ,-----------------------.
224 * | 5 | 0 | del | Alt |
225 * |-----|-----|-----|-----|
226 * | 4 | 9 | -> | LOW |
227 * |-----|-----|-----|-----|
229 * |-----|-----|-----| Spc |
231 * |-----|-----|-----|-----|
232 * | 1 | 6 | <- | RAI |
233 * |-----|-----|-----|-----|
234 * | Esc | Tab | Sft | Ctl |
235 * `-----------------------'
237 [_RAISE_LAYER] = LAYOUT_gamepad_6x4(
238 KC_5, KC_0, KC_BSPC, _______, \
239 KC_4, KC_9, KC_RIGHT, _______, \
241 KC_2, KC_7, KC_DOWN, _______, \
242 KC_1, KC_6, KC_LEFT, _______, \
243 _______, _______, _______, _______),
247 /* Keymap _ALTER_LAYER: Function layer used to control the Leds
248 * and use media buttons
249 * ,----------------------------------------.
250 * | Val Dec | Bl Toggle | Qwertz | Super |
251 * |---------|------------|---------|-------|
252 * | Val Inc | Bl Off | Qwerty | |
253 * |---------|------------|---------|-------|
254 * | Sat Dec | Bl On | Colemak | |
255 * |---------|------------|---------| |
256 * | Sat Inc | RGB Toggle | Dvorak | |
257 * |---------|------------|---------|-------|
258 * | Hue Dec | RGB Next | Vol Dwn | |
259 * |---------|------------|---------|-------|
260 * | Hue Inc | RGB Prev | Vol Up | Reset |
261 * `----------------------------------------'
263 [_ALTER_LAYER] = LAYOUT_gamepad_6x4(
264 RGB_VAD, BL_TOGG, QWERTZ, KC_LGUI, \
265 RGB_VAI, BL_OFF, QWERTY, _______, \
266 RGB_SAD, BL_ON, COLEMAK, \
267 RGB_SAI, RGB_TOG, DVORAK, _______, \
268 RGB_HUD, RGB_MOD, KC_VOLD, _______, \
269 RGB_HUI, RGB_RMOD, KC_VOLU, RESET),
272 // Makes sure to update the good tri-layer if a layer changes
273 uint32_t layer_state_set_user(uint32_t state) {
274 switch (biton32(default_layer_state)) {
276 state = update_tri_layer_state(state, _RAISE_LAYER, _QWERTY_LOWER_LAYER, _ALTER_LAYER);
279 state = update_tri_layer_state(state, _RAISE_LAYER, _QWERTZ_LOWER_LAYER, _ALTER_LAYER);
282 state = update_tri_layer_state(state, _RAISE_LAYER, _COLEMA_LOWER_LAYER, _ALTER_LAYER);
285 state = update_tri_layer_state(state, _RAISE_LAYER, _DVORAK_LOWER_LAYER, _ALTER_LAYER);
291 // Makes the tri-layer
292 uint32_t default_layer_state_set_kb(uint32_t state) {
293 switch (biton32(state)) {
295 state = update_tri_layer_state(state, _RAISE_LAYER, _QWERTZ_LOWER_LAYER, _ALTER_LAYER);
296 state = update_tri_layer_state(state, _RAISE_LAYER, _COLEMA_LOWER_LAYER, _ALTER_LAYER);
297 state = update_tri_layer_state(state, _RAISE_LAYER, _DVORAK_LOWER_LAYER, _ALTER_LAYER);
298 layer_move(_QWERTY_LAYER);
301 state = update_tri_layer_state(state, _RAISE_LAYER, _QWERTY_LOWER_LAYER, _ALTER_LAYER);
302 state = update_tri_layer_state(state, _RAISE_LAYER, _COLEMA_LOWER_LAYER, _ALTER_LAYER);
303 state = update_tri_layer_state(state, _RAISE_LAYER, _DVORAK_LOWER_LAYER, _ALTER_LAYER);
304 layer_move(_QWERTZ_LAYER);
307 state = update_tri_layer_state(state, _RAISE_LAYER, _QWERTY_LOWER_LAYER, _ALTER_LAYER);
308 state = update_tri_layer_state(state, _RAISE_LAYER, _QWERTZ_LOWER_LAYER, _ALTER_LAYER);
309 state = update_tri_layer_state(state, _RAISE_LAYER, _DVORAK_LOWER_LAYER, _ALTER_LAYER);
310 layer_move(_COLEMA_LAYER);
313 state = update_tri_layer_state(state, _RAISE_LAYER, _QWERTY_LOWER_LAYER, _ALTER_LAYER);
314 state = update_tri_layer_state(state, _RAISE_LAYER, _QWERTZ_LOWER_LAYER, _ALTER_LAYER);
315 state = update_tri_layer_state(state, _RAISE_LAYER, _COLEMA_LOWER_LAYER, _ALTER_LAYER);
316 layer_move(_DVORAK_LAYER);
322 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
325 if (record->event.pressed) {
326 cospad_bl_led_togg();
330 if (record->event.pressed) {
335 if (record->event.pressed) {
340 if (record->event.pressed) {
341 set_single_persistent_default_layer(_QWERTY_LAYER);
342 print("switched to QWERTY layout\n");
347 if (record->event.pressed) {
348 set_single_persistent_default_layer(_QWERTZ_LAYER);
353 if (record->event.pressed) {
354 set_single_persistent_default_layer(_COLEMA_LAYER);
359 if (record->event.pressed) {
360 set_single_persistent_default_layer(_DVORAK_LAYER);