]> git.donarmstrong.com Git - qmk_firmware.git/blob - users/drashna/drashna.c
Migrated most code from keymaps to userspace (#1980)
[qmk_firmware.git] / users / drashna / drashna.c
1 #include "drashna.h"
2 #include "quantum.h"
3 #include "action.h"
4 #include "version.h"
5
6 __attribute__ ((weak))
7 void matrix_init_keymap(void) {}
8
9 __attribute__ ((weak))
10 void matrix_scan_keymap(void) {}
11
12 __attribute__ ((weak))
13 bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
14   return true;
15 }
16
17
18 void matrix_init_user(void) {
19 #ifdef RGBLIGHT_ENABLE
20   uint8_t default_layer = eeconfig_read_default_layer();
21
22   rgblight_enable();
23
24   if (true) {
25     if (default_layer & (1UL << _COLEMAK)) {
26       rgblight_set_magenta;
27     }
28     else if (default_layer & (1UL << _DVORAK)) {
29       rgblight_set_green;
30     }
31     else if (default_layer & (1UL << _WORKMAN)) {
32       rgblight_set_purple;
33     }
34     else {
35       rgblight_set_teal;
36     }
37   }
38   else
39   {
40     rgblight_set_red;
41     rgblight_mode(5);
42   }
43 #endif
44   matrix_init_keymap();
45 }
46
47 void matrix_scan_user(void) {
48   matrix_scan_keymap();
49 }
50
51 #ifdef AUDIO_ENABLE
52 float tone_qwerty[][2]     = SONG(QWERTY_SOUND);
53 float tone_dvorak[][2]     = SONG(DVORAK_SOUND);
54 float tone_colemak[][2]    = SONG(COLEMAK_SOUND);
55 float tone_workman[][2]    = SONG(PLOVER_SOUND);
56 #endif
57
58
59 void persistent_default_layer_set(uint16_t default_layer) {
60   eeconfig_update_default_layer(default_layer);
61   default_layer_set(default_layer);
62 }
63
64
65 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
66
67   uint16_t kc;
68   if (is_overwatch) {
69     kc = KC_BSPC;
70   }
71   else {
72     kc = KC_ENTER;
73   }
74 #ifdef CONSOLE_ENABLE
75   xprintf("KL: row: %u, column: %u, pressed: %u\n", record->event.key.col, record->event.key.row, record->event.pressed);
76 #endif
77
78   switch (keycode) {
79   case KC_QWERTY:
80     if (record->event.pressed) {
81 #ifdef AUDIO_ENABLE
82       PLAY_SONG(tone_qwerty);
83 #endif
84       persistent_default_layer_set(1UL << _QWERTY);
85     }
86     return false;
87     break;
88   case KC_COLEMAK:
89     if (record->event.pressed) {
90 #ifdef AUDIO_ENABLE
91       PLAY_SONG(tone_colemak);
92 #endif
93       persistent_default_layer_set(1UL << _COLEMAK);
94     }
95     return false;
96     break;
97   case KC_DVORAK:
98     if (record->event.pressed) {
99 #ifdef AUDIO_ENABLE
100       PLAY_SONG(tone_dvorak);
101 #endif
102       persistent_default_layer_set(1UL << _DVORAK);
103     }
104     return false;
105     break;
106   case KC_WORKMAN:
107     if (record->event.pressed) {
108 #ifdef AUDIO_ENABLE
109       PLAY_SONG(tone_workman);
110 #endif
111       persistent_default_layer_set(1UL << _WORKMAN);
112     }
113     return false;
114     break;
115   case LOWER:
116     if (record->event.pressed) {
117       layer_on(_LOWER);
118       update_tri_layer(_LOWER, _RAISE, _ADJUST);
119     }
120     else {
121       layer_off(_LOWER);
122       update_tri_layer(_LOWER, _RAISE, _ADJUST);
123     }
124     return false;
125     break;
126   case RAISE:
127     if (record->event.pressed) {
128       layer_on(_RAISE);
129       update_tri_layer(_LOWER, _RAISE, _ADJUST);
130     }
131     else {
132       layer_off(_RAISE);
133       update_tri_layer(_LOWER, _RAISE, _ADJUST);
134     }
135     return false;
136     break;
137   case ADJUST:
138     if (record->event.pressed) {
139       layer_on(_ADJUST);
140     }
141     else {
142       layer_off(_ADJUST);
143     }
144     return false;
145     break;
146   case KC_OVERWATCH:
147     if (record->event.pressed) {
148       is_overwatch = !is_overwatch;
149     }
150 #ifdef RGBLIGHT_ENABLE
151     is_overwatch ? rgblight_mode(17) : rgblight_mode(18);
152 #endif
153     return false;
154     break;
155   case KC_SALT:
156     if (!record->event.pressed) {
157       register_code(kc);
158       unregister_code(kc);
159       _delay_ms(50);
160       SEND_STRING("Salt, salt, salt...");
161       register_code(KC_ENTER);
162       unregister_code(KC_ENTER);
163     }
164     return false;
165     break;
166   case KC_MORESALT:
167     if (!record->event.pressed) {
168       register_code(kc);
169       unregister_code(kc);
170       _delay_ms(50);
171       SEND_STRING("Please sir, can I have some more salt?!");
172       register_code(KC_ENTER);
173       unregister_code(KC_ENTER);
174     }
175     return false;
176     break;
177   case KC_SALTHARD:
178     if (!record->event.pressed) {
179       register_code(kc);
180       unregister_code(kc);
181       _delay_ms(50);
182       SEND_STRING("Your salt only makes my penis that much harder, and even more aggressive!");
183       register_code(KC_ENTER);
184       unregister_code(KC_ENTER);
185     }
186     return false;
187     break;
188   case KC_GOODGAME:
189     if (!record->event.pressed) {
190       register_code(kc);
191       unregister_code(kc);
192       _delay_ms(50);
193       SEND_STRING("Good game, everyone!");
194       register_code(KC_ENTER);
195       unregister_code(KC_ENTER);
196   }
197     return false;
198     break;
199   case KC_GLHF:
200     if (!record->event.pressed) {
201       register_code(kc);
202       unregister_code(kc);
203       _delay_ms(50);
204       SEND_STRING("Good luck, have fun!!!");
205       register_code(KC_ENTER);
206       unregister_code(KC_ENTER);
207     }
208     return false;
209     break;
210   case KC_SYMM:
211     if (!record->event.pressed) {
212       register_code(kc);
213       unregister_code(kc);
214       _delay_ms(50);
215       SEND_STRING("Left click to win!");
216       register_code(KC_ENTER);
217       unregister_code(KC_ENTER);
218     }
219     return false;
220     break;
221   case KC_DOOMFIST:
222     if (!record->event.pressed) {
223       register_code(kc);
224       unregister_code(kc);
225       _delay_ms(50);
226       SEND_STRING("Hey, look at me.  I'm Doomfist, and I'm overpowered!  All I do is spam punches all day!   I'm DPS, tank and defense, rolled into one! All I need is team healing to be complete!");
227       register_code(KC_ENTER);
228       unregister_code(KC_ENTER);
229     }
230     return false;
231     break;
232   case KC_JUSTGAME:
233     if (!record->event.pressed) {
234       register_code(kc);
235       unregister_code(kc);
236       _delay_ms(50);
237       SEND_STRING("It may be a game, but if you don't want to actually try, please go play AI, so that people that actually want to take the game seriously and \"get good\" have a place to do so without trolls like you throwing games.");
238       register_code(KC_ENTER);
239       unregister_code(KC_ENTER);
240     }
241     return false;
242     break;
243   case KC_TORB:
244     if (!record->event.pressed) {
245       register_code(kc);
246       unregister_code(kc);
247       _delay_ms(50);
248       SEND_STRING("That was positively riveting!");
249       register_code(KC_ENTER);
250       unregister_code(KC_ENTER);
251     }
252     return false;
253     break;
254   case KC_AIM:
255     if (!record->event.pressed) {
256       register_code(kc);
257       unregister_code(kc);
258       _delay_ms(50);
259       SEND_STRING("That aim is absolutely amazing. It's almost like you're a machine!" SS_TAP(X_ENTER));
260       _delay_ms(50);
261       SEND_STRING("Wait! That aim is TOO good!  You're clearly using an aim hack! CHEATER!" SS_TAP(X_ENTER));
262     }
263     return false;
264     break;
265   case KC_MAKE:
266     if (!record->event.pressed) {
267 #ifdef RGBLIGHT_ENABLE
268       SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP " RGBLIGHT_ENABLE=yes" SS_TAP(X_ENTER));
269 #else
270       SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP " RGBLIGHT_ENABLE=no"SS_TAP(X_ENTER));
271 #endif
272     }
273     return false;
274     break;
275   case KC_RESET:
276     if (!record->event.pressed) {
277 #ifdef RGBLIGHT_ENABLE
278       rgblight_enable();
279       rgblight_mode(1);
280       rgblight_setrgb(0xff, 0x00, 0x00);
281 #endif
282       reset_keyboard();
283     }
284     return false;
285     break;
286   case EPRM:
287     if (record->event.pressed) {
288       eeconfig_init();
289     }
290     return false;
291     break;
292   case VRSN:
293     if (record->event.pressed) {
294       SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
295     }
296     return false;
297     break;
298   case KC_P00:
299     if (!record->event.pressed) {
300       register_code(KC_P0);
301       unregister_code(KC_P0);
302       register_code(KC_P0);
303       unregister_code(KC_P0);
304     }
305     return false;
306     break;
307   }
308   return process_record_keymap(keycode, record);
309 }
310
311
312 uint32_t layer_state_set_kb(uint32_t state) {
313 #ifdef RGBLIGHT_ENABLE
314   uint8_t default_layer = eeconfig_read_default_layer();
315
316   switch (biton32(state)) {
317   case _NAV:
318     rgblight_set_blue;
319     rgblight_mode(1);
320     break;
321   case _SYMB:
322     rgblight_set_blue;
323     rgblight_mode(2);
324     break;
325   case _MOUS:
326     rgblight_set_yellow;
327     rgblight_mode(1);
328     break;
329   case _MACROS:
330     rgblight_set_orange;
331     is_overwatch ? rgblight_mode(17) : rgblight_mode(18);
332     rgblight_mode(18);
333     break;
334   case _MEDIA:
335     rgblight_set_green;
336     rgblight_mode(22);
337     break;
338   case _OVERWATCH:
339     rgblight_set_orange;
340     rgblight_mode(17);
341     break;
342   case _DIABLO:
343     rgblight_set_red;
344     rgblight_mode(5);
345     break;
346   case _RAISE:
347     rgblight_set_yellow;
348     rgblight_mode(5);
349     break;
350   case _LOWER:
351     rgblight_set_orange;
352     rgblight_mode(5);
353     break;
354   case _ADJUST:
355     rgblight_set_red;
356     rgblight_mode(23);
357     break;
358   case _COVECUBE:
359     rgblight_set_green;
360     rgblight_mode(2);
361   default:
362     if (default_layer & (1UL << _COLEMAK)) {
363       rgblight_set_magenta;
364     }
365     else if (default_layer & (1UL << _DVORAK)) {
366       rgblight_set_green;
367     }
368     else if (default_layer & (1UL << _WORKMAN)) {
369       rgblight_set_purple;
370     }
371     else {
372       rgblight_set_teal;
373     }
374     rgblight_mode(1);
375     break;
376   }
377 #endif
378   return state;
379 }