drashna.h 16 KB

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