]> git.donarmstrong.com Git - qmk_firmware.git/blob - users/drashna/drashna.h
06e726714c9b3706755291a3fc7c744f342022ba
[qmk_firmware.git] / users / drashna / drashna.h
1 /*
2 Copyright 2017 Christopher Courtney <drashna@live.com> @drashna
3
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation, either version 2 of the License, or
7 (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 */
17
18 #pragma once
19 #include "quantum.h"
20 #include "version.h"
21 #include "eeprom.h"
22
23 #ifdef RGB_MATRIX_ENABLE
24 #include "rgb_matrix.h"
25 #endif
26
27
28 /* Define layer names */
29 enum userspace_layers {
30   _QWERTY = 0,
31   _NUMLOCK = 0,
32   _COLEMAK,
33   _DVORAK,
34   _WORKMAN,
35   _MODS,
36   _GAMEPAD,
37   _DIABLO,
38   _MACROS,
39   _MEDIA,
40   _LOWER,
41   _RAISE,
42   _ADJUST,
43 };
44
45 /*
46 define modifiers here, since MOD_* doesn't seem to work for these
47  */
48 #define MODS_SHIFT_MASK  (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
49 #define MODS_CTRL_MASK  (MOD_BIT(KC_LCTL)|MOD_BIT(KC_RCTRL))
50 #define MODS_ALT_MASK  (MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
51 #define MODS_GUI_MASK  (MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI))
52
53
54 /*
55 RGB color codes are no longer located here anymore.  Instead, you will want to
56 head to https://github.com/qmk/qmk_firmware/blob/master/quantum/rgblight_list.h
57 */
58
59 #ifdef RGBLIGHT_ENABLE
60 void rgblight_sethsv_default_helper(uint8_t index);
61 #endif // RGBLIGHT_ENABLE
62
63 bool mod_key_press_timer (uint16_t code, uint16_t mod_code, bool pressed);
64 bool mod_key_press (uint16_t code, uint16_t mod_code, bool pressed, uint16_t this_timer);
65
66 typedef union {
67   uint32_t raw;
68   struct {
69     bool     rgb_layer_change :1;
70     bool     is_overwatch     :1;
71     bool     nuke_switch      :1;
72     uint8_t  unicode_mod      :4;
73   };
74 } userspace_config_t;
75
76 extern userspace_config_t userspace_config;
77
78 #if defined(KEYMAP_SAFE_RANGE)
79   #define PLACEHOLDER_SAFE_RANGE KEYMAP_SAFE_RANGE
80 #else
81   #define PLACEHOLDER_SAFE_RANGE SAFE_RANGE
82 #endif
83
84 enum userspace_custom_keycodes {
85   VRSN = PLACEHOLDER_SAFE_RANGE,              // Prints QMK Firmware and board info
86   KC_QWERTY,         // Sets default layer to QWERTY
87   KC_COLEMAK,        // Sets default layer to COLEMAK
88   KC_DVORAK,         // Sets default layer to DVORAK
89   KC_WORKMAN,        // Sets default layer to WORKMAN
90   KC_DIABLO_CLEAR,   // Clears all Diablo Timers
91   KC_OVERWATCH,      // Toggles game macro input mode (so in OW, it defaults to game chat)
92   KC_SALT,           // See drashna.c for details
93   KC_MORESALT,
94   KC_SALTHARD,
95   KC_GOODGAME,
96   KC_SYMM,
97   KC_JUSTGAME,
98   KC_GLHF,
99   KC_TORB,
100   KC_AIM,
101   KC_C9,
102   KC_GGEZ,
103   KC_MAKE,           // Run keyboard's customized make command
104   KC_RGB_T,          // Toggles RGB Layer Indication mode
105   KC_SECRET_1,       // test1
106   KC_SECRET_2,       // test2
107   KC_SECRET_3,       // test3
108   KC_SECRET_4,       // test4
109   KC_SECRET_5,       // test5
110   KC_CCCV,           // Hold to copy, tap to paste
111   KC_NUKE,           // NUCLEAR LAUNCH DETECTED!!!
112   UC_FLIP,           // (ಠ痊ಠ)┻━┻
113   UC_TABL,           // ┬─┬ノ( º _ ºノ)
114   UC_SHRG,           // ¯\_(ツ)_/¯
115   UC_DISA,           // ಠ_ಠ
116   NEW_SAFE_RANGE     //use "NEWPLACEHOLDER for keymap specific codes
117 };
118
119
120 #define LOWER MO(_LOWER)
121 #define RAISE MO(_RAISE)
122 #define ADJUST MO(_ADJUST)
123 #define TG_MODS TG(_MODS)
124 #define TG_GAME TG(_GAMEPAD)
125
126 #define KC_SEC1 KC_SECRET_1
127 #define KC_SEC2 KC_SECRET_2
128 #define KC_SEC3 KC_SECRET_3
129 #define KC_SEC4 KC_SECRET_4
130 #define KC_SEC5 KC_SECRET_5
131
132 #define QWERTY KC_QWERTY
133 #define DVORAK KC_DVORAK
134 #define COLEMAK KC_COLEMAK
135 #define WORKMAN KC_WORKMAN
136
137 #define KC_RESET RESET
138 #define KC_RST KC_RESET
139
140 #ifdef SWAP_HANDS_ENABLE
141 #define KC_C1R3 SH_TT
142 #else // SWAP_HANDS_ENABLE
143 #define KC_C1R3 KC_BSPC
144 #endif // SWAP_HANDS_ENABLE
145
146 #define BK_LWER LT(_LOWER, KC_BSPC)
147 #define SP_LWER LT(_LOWER, KC_SPC)
148 #define DL_RAIS LT(_RAISE, KC_DEL)
149 #define ET_RAIS LT(_RAISE, KC_ENTER)
150
151 /* OSM keycodes, to keep things clean and easy to change */
152 #define KC_MLSF OSM(MOD_LSFT)
153 #define KC_MRSF OSM(MOD_RSFT)
154
155 #define OS_LGUI OSM(MOD_LGUI)
156 #define OS_RGUI OSM(MOD_RGUI)
157 #define OS_LSFT OSM(MOD_LSFT)
158 #define OS_RSFT OSM(MOD_RSFT)
159 #define OS_LCTL OSM(MOD_LCTL)
160 #define OS_RCTL OSM(MOD_RCTL)
161 #define OS_LALT OSM(MOD_LALT)
162 #define OS_RALT OSM(MOD_RALT)
163 #define OS_MEH  OSM(MOD_MEH)
164 #define OS_HYPR OSM(MOD_HYPR)
165
166 #define ALT_APP ALT_T(KC_APP)
167
168 #define MG_NKRO MAGIC_TOGGLE_NKRO
169
170 #define UC_IRNY UC(0x2E2E)
171 #define UC_CLUE UC(0x203D)
172
173 #ifdef TAP_DANCE_ENABLE
174 enum {
175   TD_D3_1 = 0,
176   TD_D3_2,
177   TD_D3_3,
178   TD_D3_4
179 };
180 #endif // TAP_DANCE_ENABLE
181
182
183 /*
184 Custom Keycodes for Diablo 3 layer
185 But since TD() doesn't work when tap dance is disabled
186 We use custom codes here, so we can substitute the right stuff
187 */
188 #ifdef TAP_DANCE_ENABLE
189 #define KC_D3_1 TD(TD_D3_1)
190 #define KC_D3_2 TD(TD_D3_2)
191 #define KC_D3_3 TD(TD_D3_3)
192 #define KC_D3_4 TD(TD_D3_4)
193 #else // TAP_DANCE_ENABLE
194 #define KC_D3_1 KC_1
195 #define KC_D3_2 KC_2
196 #define KC_D3_3 KC_3
197 #define KC_D3_4 KC_4
198 #endif // TAP_DANCE_ENABLE
199
200 /*
201 Since our quirky block definitions are basically a list of comma separated
202 arguments, we need a wrapper in order for these definitions to be
203 expanded before being used as arguments to the LAYOUT_xxx macro.
204 */
205 #if (!defined(LAYOUT) && defined(KEYMAP))
206 #define LAYOUT KEYMAP
207 #endif
208
209 #define LAYOUT_ergodox_wrapper(...)          LAYOUT_ergodox(__VA_ARGS__)
210 #define LAYOUT_ergodox_pretty_wrapper(...)   LAYOUT_ergodox_pretty(__VA_ARGS__)
211 #define KEYMAP_wrapper(...)                  LAYOUT(__VA_ARGS__)
212 #define LAYOUT_wrapper(...)                  LAYOUT(__VA_ARGS__)
213 #define LAYOUT_ortho_4x12_wrapper(...)       LAYOUT_ortho_4x12(__VA_ARGS__)
214
215 /*
216 Blocks for each of the four major keyboard layouts
217 Organized so we can quickly adapt and modify all of them
218 at once, rather than for each keyboard, one at a time.
219 And this allows for much cleaner blocks in the keymaps.
220 For instance Tap/Hold for Control on all of the layouts
221
222 NOTE: These are all the same length.  If you do a search/replace
223   then you need to add/remove underscores to keep the
224   lengths consistent.
225 */
226
227 #define _________________QWERTY_L1_________________        KC_Q,    KC_W,    KC_E,    KC_R,    KC_T
228 #define _________________QWERTY_L2_________________        KC_A,    KC_S,    KC_D,    KC_F,    KC_G
229 #define _________________QWERTY_L3_________________        KC_Z,    KC_X,    KC_C,    KC_V,    KC_B
230
231 #define _________________QWERTY_R1_________________        KC_Y,    KC_U,    KC_I,    KC_O,    KC_P
232 #define _________________QWERTY_R2_________________        KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN
233 #define _________________QWERTY_R3_________________        KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLASH
234
235
236 #define _________________COLEMAK_L1________________       KC_Q,    KC_W,    KC_F,    KC_P,    KC_G
237 #define _________________COLEMAK_L2________________       KC_A,    KC_R,    KC_S,    KC_T,    KC_D
238 #define _________________COLEMAK_L3________________       KC_Z,    KC_X,    KC_C,    KC_V,    KC_B
239
240 #define _________________COLEMAK_R1________________       KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN
241 #define _________________COLEMAK_R2________________       KC_H,    KC_N,    KC_E,    KC_I,    KC_O
242 #define _________________COLEMAK_R3________________       KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLASH
243
244 #define ______________COLEMAK_MOD_DH_L1____________       KC_Q,    KC_W,    KC_F,    KC_P,    KC_B
245 #define ______________COLEMAK_MOD_DH_L2____________       KC_A,    KC_R,    KC_S,    KC_T,    KC_G
246 #define ______________COLEMAK_MOD_DH_L3____________       KC_Z,    KC_X,    KC_C,    KC_D,    KC_V
247
248 #define ______________COLEMAK_MOD_DH_R1____________       KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN
249 #define ______________COLEMAK_MOD_DH_R2____________       KC_M,    KC_N,    KC_E,    KC_I,    KC_O
250 #define ______________COLEMAK_MOD_DH_R3____________       KC_K,    KC_H,    KC_COMM, KC_DOT,  KC_SLASH
251
252
253 #define _________________DVORAK_L1_________________        KC_QUOT, KC_COMM, KC_DOT, KC_P,     KC_Y
254 #define _________________DVORAK_L2_________________        KC_A,    KC_O,    KC_E,   KC_U,     KC_I
255 #define _________________DVORAK_L3_________________        KC_SCLN, KC_Q,    KC_J,   KC_K,     KC_X
256
257 #define _________________DVORAK_R1_________________        KC_F,    KC_G,    KC_C,    KC_R,    KC_L
258 #define _________________DVORAK_R2_________________        KC_D,    KC_H,    KC_T,    KC_N,    KC_S
259 #define _________________DVORAK_R3_________________        KC_B,    KC_M,    KC_W,    KC_V,    KC_Z
260
261
262 #define ________________DVORAK_AU_L1_______________        KC_QUOT, KC_COMM, KC_DOT, KC_P,     KC_Y
263 #define ________________DVORAK_AU_L2_______________        KC_O,    KC_A,    KC_E,   KC_I,     KC_U
264 #define ________________DVORAK_AU_L3_______________        KC_SCLN, KC_Q,    KC_J,   KC_K,     KC_X
265
266 #define ________________DVORAK_AU_R1_______________        KC_F,    KC_G,    KC_C,    KC_R,    KC_L
267 #define ________________DVORAK_AU_R2_______________        KC_D,    KC_H,    KC_T,    KC_N,    KC_S
268 #define ________________DVORAK_AU_R3_______________        KC_B,    KC_M,    KC_W,    KC_V,    KC_Z
269
270 #define _________________WORKMAN_L1________________       KC_Q,    KC_D,    KC_R,   KC_W,     KC_B
271 #define _________________WORKMAN_L2________________       KC_A,    KC_S,    KC_H,   KC_T,     KC_G
272 #define _________________WORKMAN_L3________________       KC_Z,    KC_X,    KC_M,   KC_C,     KC_V
273
274 #define _________________WORKMAN_R1________________       KC_J,    KC_F,    KC_U,    KC_P,    KC_SCLN
275 #define _________________WORKMAN_R2________________       KC_Y,    KC_N,    KC_E,    KC_O,    KC_I
276 #define _________________WORKMAN_R3________________       KC_K,    KC_L,    KC_COMM, KC_DOT,  KC_SLASH
277
278
279 #define _________________NORMAN_L1_________________       KC_Q,    KC_W,    KC_D,    KC_F,    KC_K
280 #define _________________NORMAN_L2_________________       KC_A,    KC_S,    KC_E,    KC_T,    KC_G
281 #define _________________NORMAN_L3_________________       KC_Z,    KC_X,    KC_C,    KC_V,    KC_B
282
283 #define _________________NORMAN_R1_________________       KC_J,    KC_U,    KC_R,    KC_L,    KC_SCLN
284 #define _________________NORMAN_R2_________________       KC_Y,    KC_N,    KC_I,    KC_O,    KC_U
285 #define _________________NORMAN_R3_________________       KC_P,    KC_M,    KC_COMM, KC_DOT,  KC_SLASH
286
287
288 #define _________________MALTRON_L1________________       KC_Q,    KC_P,    KC_Y,    KC_C,    KC_B
289 #define _________________MALTRON_L2________________       KC_A,    KC_N,    KC_I,    KC_S,    KC_F
290 #define _________________MALTRON_L3________________       KC_SCLN, KC_SLSH, KC_J     KC_G,    KC_COMM
291
292 #define _________________MALTRON_R1________________       KC_V,    KC_M,    KC_U,    KC_Z,    KC_L
293 #define _________________MALTRON_R2________________       KC_D,    KC_T,    KC_D,    KC_O,    KC_R
294 #define _________________MALTRON_R3________________       KC_DOT,  KC_W,    KC_K,    KC_MINS,  KC_X
295
296
297 #define _________________EUCALYN_L1________________       KC_SLSH, KC_COMM, KC_DOT,  KC_F,    KC_Q
298 #define _________________EUCALYN_L2________________       KC_A,    KC_O,    KC_E,    KC_I,    KC_U
299 #define _________________EUCALYN_L3________________       KC_Z,    KC_X,    KC_C,    KC_V,    KC_W
300
301 #define _________________EUCALYN_R1________________       KC_M,    KC_R,    KC_D,    KC_Y,    KC_P
302 #define _________________EUCALYN_R2________________       KC_G,    KC_T,    KC_K,    KC_S,    KC_N
303 #define _________________EUCALYN_R3________________       KC_B,    KC_H,    KC_J,    KC_L,    KC_SCLN
304
305
306 #define _____________CARPLAX_QFMLWY_L1_____________       KC_Q,    KC_F,    KC_M,    KC_L,    KC_W
307 #define _____________CARPLAX_QFMLWY_L2_____________       KC_D,    KC_S,    KC_T,    KC_N,    KC_R
308 #define _____________CARPLAX_QFMLWY_L3_____________       KC_Z,    KC_V,    KC_G,    KC_C,    KC_X
309
310 #define _____________CARPLAX_QFMLWY_R1_____________       KC_Y,    KC_U,    KC_O,    KC_B,    KC_J
311 #define _____________CARPLAX_QFMLWY_R2_____________       KC_I,    KC_A,    KC_E,    KC_H,    KC_SCLN
312 #define _____________CARPLAX_QFMLWY_R3_____________       KC_P,    KC_K,    KC_COMM, KC_DOT,  KC_SLSH
313
314
315 #define _____________CARPLAX_QGMLWB_L1_____________       KC_Q,    KC_G,    KC_M,    KC_L,    KC_W
316 #define _____________CARPLAX_QGMLWB_L2_____________       KC_D,    KC_S,    KC_T,    KC_N,    KC_R
317 #define _____________CARPLAX_QGMLWB_L3_____________       KC_Z,   KC_X,    KC_C,    KC_F,    KC_J
318
319 #define _____________CARPLAX_QGMLWB_R1_____________       KC_B,    KC_Y,    KC_U,    KC_V,    KC_SCLN
320 #define _____________CARPLAX_QGMLWB_R2_____________       KC_I,    KC_A,    KC_E,    KC_O,    KC_H
321 #define _____________CARPLAX_QGMLWB_R3_____________       KC_K,    KC_P,    KC_COMM, KC_DOT,  KC_SLSH
322
323
324 #define _____________CARPLAX_QGMLWY_L1_____________       KC_Q,    KC_G,    KC_M,    KC_L,    KC_W
325 #define _____________CARPLAX_QGMLWY_L2_____________       KC_D,    KC_S,    KC_T,    KC_N,    KC_R
326 #define _____________CARPLAX_QGMLWY_L3_____________       KC_Z,   KC_X,    KC_C,    KC_V,    KC_J
327
328 #define _____________CARPLAX_QGMLWY_R1_____________       KC_Y,    KC_F,    KC_U,    KC_B,    KC_SCLN
329 #define _____________CARPLAX_QGMLWY_R2_____________       KC_I,    KC_A,    KC_E,    KC_O,    KC_H
330 #define _____________CARPLAX_QGMLWY_R3_____________       KC_K,    KC_P,    KC_COMM, KC_DOT,  KC_SLSH
331
332
333 #define ________________NUMBER_LEFT________________       KC_1,    KC_2,    KC_3,    KC_4,    KC_5
334 #define ________________NUMBER_RIGHT_______________       KC_6,    KC_7,    KC_8,    KC_9,    KC_0
335 #define _________________FUNC_LEFT_________________       KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5
336 #define _________________FUNC_RIGHT________________       KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10
337
338 #define ___________________BLANK___________________        _______, _______, _______, _______, _______
339
340
341 #define _________________LOWER_L1__________________        KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC
342 #define _________________LOWER_L2__________________        _________________FUNC_LEFT_________________
343 #define _________________LOWER_L3__________________        _________________FUNC_RIGHT________________
344
345 #define _________________LOWER_R1__________________        KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN
346 #define _________________LOWER_R2__________________        _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR
347 #define _________________LOWER_R3__________________        _______, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT
348
349
350
351 #define _________________RAISE_L1__________________        ________________NUMBER_LEFT________________
352 #define _________________RAISE_L2__________________        ___________________BLANK___________________
353 #define _________________RAISE_L3__________________        ___________________BLANK___________________
354
355 #define _________________RAISE_R1__________________        ________________NUMBER_RIGHT_______________
356 #define _________________RAISE_R2__________________        _______, KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC
357 #define _________________RAISE_R3__________________        _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
358
359
360
361 #define _________________ADJUST_L1_________________        RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_TOG
362 #define _________________ADJUST_L2_________________        MU_TOG , CK_TOGG, AU_ON,   AU_OFF,  AG_NORM
363 #define _________________ADJUST_L3_________________        RGB_RMOD,RGB_HUD,RGB_SAD, RGB_VAD, KC_RGB_T
364
365 #define _________________ADJUST_R1_________________        KC_SEC1, KC_SEC2, KC_SEC3, KC_SEC4, KC_SEC5
366 #define _________________ADJUST_R2_________________        AG_SWAP, QWERTY,  COLEMAK, DVORAK,  WORKMAN
367 #define _________________ADJUST_R3_________________        MG_NKRO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT