aboutsummaryrefslogtreecommitdiff
path: root/users/drashna/drashna.c
diff options
context:
space:
mode:
Diffstat (limited to 'users/drashna/drashna.c')
-rw-r--r--users/drashna/drashna.c379
1 files changed, 379 insertions, 0 deletions
diff --git a/users/drashna/drashna.c b/users/drashna/drashna.c
new file mode 100644
index 000000000..47565ff9c
--- /dev/null
+++ b/users/drashna/drashna.c
@@ -0,0 +1,379 @@
1#include "drashna.h"
2#include "quantum.h"
3#include "action.h"
4#include "version.h"
5
6__attribute__ ((weak))
7void matrix_init_keymap(void) {}
8
9__attribute__ ((weak))
10void matrix_scan_keymap(void) {}
11
12__attribute__ ((weak))
13bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
14 return true;
15}
16
17
18void 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
47void matrix_scan_user(void) {
48 matrix_scan_keymap();
49}
50
51#ifdef AUDIO_ENABLE
52float tone_qwerty[][2] = SONG(QWERTY_SOUND);
53float tone_dvorak[][2] = SONG(DVORAK_SOUND);
54float tone_colemak[][2] = SONG(COLEMAK_SOUND);
55float tone_workman[][2] = SONG(PLOVER_SOUND);
56#endif
57
58
59void persistent_default_layer_set(uint16_t default_layer) {
60 eeconfig_update_default_layer(default_layer);
61 default_layer_set(default_layer);
62}
63
64
65bool 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
312uint32_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}