2 Copyright 2017 Christopher Courtney <drashna@live.com> @drashna
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.
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.
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/>.
23 #ifdef RGB_MATRIX_ENABLE
24 #include "rgb_matrix.h"
28 /* Define layer names */
29 enum userspace_layers {
46 define modifiers here, since MOD_* doesn't seem to work for these
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))
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
59 #ifdef RGBLIGHT_ENABLE
60 void rgblight_sethsv_default_helper(uint8_t index);
61 #endif // RGBLIGHT_ENABLE
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);
69 bool rgb_layer_change :1;
72 uint8_t unicode_mod :4;
76 #if defined(KEYMAP_SAFE_RANGE)
77 #define PLACEHOLDER_SAFE_RANGE KEYMAP_SAFE_RANGE
79 #define PLACEHOLDER_SAFE_RANGE SAFE_RANGE
82 enum userspace_custom_keycodes {
83 EPRM = PLACEHOLDER_SAFE_RANGE, // Resets EEPROM do defaults (as in eeconfig_init)
84 VRSN, // Prints QMK Firmware and board info
85 KC_QWERTY, // Sets default layer to QWERTY
86 KC_COLEMAK, // Sets default layer to COLEMAK
87 KC_DVORAK, // Sets default layer to DVORAK
88 KC_WORKMAN, // Sets default layer to WORKMAN
89 KC_DIABLO_CLEAR, // Clears all Diablo Timers
90 KC_OVERWATCH, // Toggles game macro input mode (so in OW, it defaults to game chat)
91 KC_SALT, // See drashna.c for details
102 KC_MAKE, // Run keyboard's customized make command
103 KC_RGB_T, // Toggles RGB Layer Indication mode
104 KC_SECRET_1, // test1
105 KC_SECRET_2, // test2
106 KC_SECRET_3, // test3
107 KC_SECRET_4, // test4
108 KC_SECRET_5, // test5
109 KC_CCCV, // Hold to copy, tap to paste
110 KC_NUKE, // NUCLEAR LAUNCH DETECTED!!!
112 UC_TABL, // ┬─┬ノ( º _ ºノ)
113 UC_SHRG, // ¯\_(ツ)_/¯
115 NEW_SAFE_RANGE //use "NEWPLACEHOLDER for keymap specific codes
119 #define LOWER MO(_LOWER)
120 #define RAISE MO(_RAISE)
121 #define ADJUST MO(_ADJUST)
122 #define TG_MODS TG(_MODS)
123 #define TG_GAME TG(_GAMEPAD)
125 #define KC_SEC1 KC_SECRET_1
126 #define KC_SEC2 KC_SECRET_2
127 #define KC_SEC3 KC_SECRET_3
128 #define KC_SEC4 KC_SECRET_4
129 #define KC_SEC5 KC_SECRET_5
131 #define QWERTY KC_QWERTY
132 #define DVORAK KC_DVORAK
133 #define COLEMAK KC_COLEMAK
134 #define WORKMAN KC_WORKMAN
136 #define KC_RESET RESET
137 #define KC_RST KC_RESET
139 #ifdef SWAP_HANDS_ENABLE
140 #define KC_C1R3 SH_TT
141 #else // SWAP_HANDS_ENABLE
142 #define KC_C1R3 KC_BSPC
143 #endif // SWAP_HANDS_ENABLE
145 #define BK_LWER LT(_LOWER, KC_BSPC)
146 #define SP_LWER LT(_LOWER, KC_SPC)
147 #define DL_RAIS LT(_RAISE, KC_DEL)
148 #define ET_RAIS LT(_RAISE, KC_ENTER)
150 /* OSM keycodes, to keep things clean and easy to change */
151 #define KC_MLSF OSM(MOD_LSFT)
152 #define KC_MRSF OSM(MOD_RSFT)
154 #define OS_LGUI OSM(MOD_LGUI)
155 #define OS_RGUI OSM(MOD_RGUI)
156 #define OS_LSFT OSM(MOD_LSFT)
157 #define OS_RSFT OSM(MOD_RSFT)
158 #define OS_LCTL OSM(MOD_LCTL)
159 #define OS_RCTL OSM(MOD_RCTL)
160 #define OS_LALT OSM(MOD_LALT)
161 #define OS_RALT OSM(MOD_RALT)
162 #define ALT_APP ALT_T(KC_APP)
164 #define MG_NKRO MAGIC_TOGGLE_NKRO
166 #define UC_IRNY UC(0x2E2E)
167 #define UC_CLUE UC(0x203D)
169 #ifdef TAP_DANCE_ENABLE
176 #endif // TAP_DANCE_ENABLE
180 Custom Keycodes for Diablo 3 layer
181 But since TD() doesn't work when tap dance is disabled
182 We use custom codes here, so we can substitute the right stuff
184 #ifdef TAP_DANCE_ENABLE
185 #define KC_D3_1 TD(TD_D3_1)
186 #define KC_D3_2 TD(TD_D3_2)
187 #define KC_D3_3 TD(TD_D3_3)
188 #define KC_D3_4 TD(TD_D3_4)
189 #else // TAP_DANCE_ENABLE
194 #endif // TAP_DANCE_ENABLE
197 Since our quirky block definitions are basically a list of comma separated
198 arguments, we need a wrapper in order for these definitions to be
199 expanded before being used as arguments to the LAYOUT_xxx macro.
201 #if (!defined(LAYOUT) && defined(KEYMAP))
202 #define LAYOUT KEYMAP
205 #define LAYOUT_ergodox_wrapper(...) LAYOUT_ergodox(__VA_ARGS__)
206 #define LAYOUT_ergodox_pretty_wrapper(...) LAYOUT_ergodox_pretty(__VA_ARGS__)
207 #define KEYMAP_wrapper(...) LAYOUT(__VA_ARGS__)
208 #define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__)
209 #define LAYOUT_ortho_4x12_wrapper(...) LAYOUT_ortho_4x12(__VA_ARGS__)
212 Blocks for each of the four major keyboard layouts
213 Organized so we can quickly adapt and modify all of them
214 at once, rather than for each keyboard, one at a time.
215 And this allows for much cleaner blocks in the keymaps.
216 For instance Tap/Hold for Control on all of the layouts
218 NOTE: These are all the same length. If you do a search/replace
219 then you need to add/remove underscores to keep the
223 #define _________________QWERTY_L1_________________ KC_Q, KC_W, KC_E, KC_R, KC_T
224 #define _________________QWERTY_L2_________________ KC_A, KC_S, KC_D, KC_F, KC_G
225 #define _________________QWERTY_L3_________________ KC_Z, KC_X, KC_C, KC_V, KC_B
227 #define _________________QWERTY_R1_________________ KC_Y, KC_U, KC_I, KC_O, KC_P
228 #define _________________QWERTY_R2_________________ KC_H, KC_J, KC_K, KC_L, KC_SCLN
229 #define _________________QWERTY_R3_________________ KC_N, KC_M, KC_COMM, KC_DOT, KC_SLASH
232 #define _________________COLEMAK_L1________________ KC_Q, KC_W, KC_F, KC_P, KC_G
233 #define _________________COLEMAK_L2________________ KC_A, KC_R, KC_S, KC_T, KC_D
234 #define _________________COLEMAK_L3________________ KC_Z, KC_X, KC_C, KC_V, KC_B
236 #define _________________COLEMAK_R1________________ KC_J, KC_L, KC_U, KC_Y, KC_SCLN
237 #define _________________COLEMAK_R2________________ KC_H, KC_N, KC_E, KC_I, KC_O
238 #define _________________COLEMAK_R3________________ KC_K, KC_M, KC_COMM, KC_DOT, KC_SLASH
240 #define ______________COLEMAK_MOD_DH_L1____________ KC_Q, KC_W, KC_F, KC_P, KC_B
241 #define ______________COLEMAK_MOD_DH_L2____________ KC_A, KC_R, KC_S, KC_T, KC_G
242 #define ______________COLEMAK_MOD_DH_L3____________ KC_Z, KC_X, KC_C, KC_D, KC_V
244 #define ______________COLEMAK_MOD_DH_R1____________ KC_J, KC_L, KC_U, KC_Y, KC_SCLN
245 #define ______________COLEMAK_MOD_DH_R2____________ KC_M, KC_N, KC_E, KC_I, KC_O
246 #define ______________COLEMAK_MOD_DH_R3____________ KC_K, KC_H, KC_COMM, KC_DOT, KC_SLASH
249 #define _________________DVORAK_L1_________________ KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y
250 #define _________________DVORAK_L2_________________ KC_A, KC_O, KC_E, KC_U, KC_I
251 #define _________________DVORAK_L3_________________ KC_SCLN, KC_Q, KC_J, KC_K, KC_X
253 #define _________________DVORAK_R1_________________ KC_F, KC_G, KC_C, KC_R, KC_L
254 #define _________________DVORAK_R2_________________ KC_D, KC_H, KC_T, KC_N, KC_S
255 #define _________________DVORAK_R3_________________ KC_B, KC_M, KC_W, KC_V, KC_Z
258 #define ________________DVORAK_AU_L1_______________ KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y
259 #define ________________DVORAK_AU_L2_______________ KC_O, KC_A, KC_E, KC_I, KC_U
260 #define ________________DVORAK_AU_L3_______________ KC_SCLN, KC_Q, KC_J, KC_K, KC_X
262 #define ________________DVORAK_AU_R1_______________ KC_F, KC_G, KC_C, KC_R, KC_L
263 #define ________________DVORAK_AU_R2_______________ KC_D, KC_H, KC_T, KC_N, KC_S
264 #define ________________DVORAK_AU_R3_______________ KC_B, KC_M, KC_W, KC_V, KC_Z
266 #define _________________WORKMAN_L1________________ KC_Q, KC_D, KC_R, KC_W, KC_B
267 #define _________________WORKMAN_L2________________ KC_A, KC_S, KC_H, KC_T, KC_G
268 #define _________________WORKMAN_L3________________ KC_Z, KC_X, KC_M, KC_C, KC_V
270 #define _________________WORKMAN_R1________________ KC_J, KC_F, KC_U, KC_P, KC_SCLN
271 #define _________________WORKMAN_R2________________ KC_Y, KC_N, KC_E, KC_O, KC_I
272 #define _________________WORKMAN_R3________________ KC_K, KC_L, KC_COMM, KC_DOT, KC_SLASH
275 #define _________________NORMAN_L1_________________ KC_Q, KC_W, KC_D, KC_F, KC_K
276 #define _________________NORMAN_L2_________________ KC_A, KC_S, KC_E, KC_T, KC_G
277 #define _________________NORMAN_L3_________________ KC_Z, KC_X, KC_C, KC_V, KC_B
279 #define _________________NORMAN_R1_________________ KC_J, KC_U, KC_R, KC_L, KC_SCLN
280 #define _________________NORMAN_R2_________________ KC_Y, KC_N, KC_I, KC_O, KC_U
281 #define _________________NORMAN_R3_________________ KC_P, KC_M, KC_COMM, KC_DOT, KC_SLASH
284 #define _________________MALTRON_L1________________ KC_Q, KC_P, KC_Y, KC_C, KC_B
285 #define _________________MALTRON_L2________________ KC_A, KC_N, KC_I, KC_S, KC_F
286 #define _________________MALTRON_L3________________ KC_SCLN, KC_SLSH, KC_J KC_G, KC_COMM
288 #define _________________MALTRON_R1________________ KC_V, KC_M, KC_U, KC_Z, KC_L
289 #define _________________MALTRON_R2________________ KC_D, KC_T, KC_D, KC_O, KC_R
290 #define _________________MALTRON_R3________________ KC_DOT, KC_W, KC_K, KC_MINS, KC_X
293 #define _________________EUCALYN_L1________________ KC_SLSH, KC_COMM, KC_DOT, KC_F, KC_Q
294 #define _________________EUCALYN_L2________________ KC_A, KC_O, KC_E, KC_I, KC_U
295 #define _________________EUCALYN_L3________________ KC_Z, KC_X, KC_C, KC_V, KC_W
297 #define _________________EUCALYN_R1________________ KC_M, KC_R, KC_D, KC_Y, KC_P
298 #define _________________EUCALYN_R2________________ KC_G, KC_T, KC_K, KC_S, KC_N
299 #define _________________EUCALYN_R3________________ KC_B, KC_H, KC_J, KC_L, KC_SCLN
302 #define _____________CARPLAX_QFMLWY_L1_____________ KC_Q, KC_F, KC_M, KC_L, KC_W
303 #define _____________CARPLAX_QFMLWY_L2_____________ KC_D, KC_S, KC_T, KC_N, KC_R
304 #define _____________CARPLAX_QFMLWY_L3_____________ KC_Z, KC_V, KC_G, KC_C, KC_X
306 #define _____________CARPLAX_QFMLWY_R1_____________ KC_Y, KC_U, KC_O, KC_B, KC_J
307 #define _____________CARPLAX_QFMLWY_R2_____________ KC_I, KC_A, KC_E, KC_H, KC_SCLN
308 #define _____________CARPLAX_QFMLWY_R3_____________ KC_P, KC_K, KC_COMM, KC_DOT, KC_SLSH
311 #define _____________CARPLAX_QGMLWB_L1_____________ KC_Q, KC_G, KC_M, KC_L, KC_W
312 #define _____________CARPLAX_QGMLWB_L2_____________ KC_D, KC_S, KC_T, KC_N, KC_R
313 #define _____________CARPLAX_QGMLWB_L3_____________ KC_Z, KC_X, KC_C, KC_F, KC_J
315 #define _____________CARPLAX_QGMLWB_R1_____________ KC_B, KC_Y, KC_U, KC_V, KC_SCLN
316 #define _____________CARPLAX_QGMLWB_R2_____________ KC_I, KC_A, KC_E, KC_O, KC_H
317 #define _____________CARPLAX_QGMLWB_R3_____________ KC_K, KC_P, KC_COMM, KC_DOT, KC_SLSH
320 #define _____________CARPLAX_QGMLWY_L1_____________ KC_Q, KC_G, KC_M, KC_L, KC_W
321 #define _____________CARPLAX_QGMLWY_L2_____________ KC_D, KC_S, KC_T, KC_N, KC_R
322 #define _____________CARPLAX_QGMLWY_L3_____________ KC_Z, KC_X, KC_C, KC_V, KC_J
324 #define _____________CARPLAX_QGMLWY_R1_____________ KC_Y, KC_F, KC_U, KC_B, KC_SCLN
325 #define _____________CARPLAX_QGMLWY_R2_____________ KC_I, KC_A, KC_E, KC_O, KC_H
326 #define _____________CARPLAX_QGMLWY_R3_____________ KC_K, KC_P, KC_COMM, KC_DOT, KC_SLSH
329 #define ________________NUMBER_LEFT________________ KC_1, KC_2, KC_3, KC_4, KC_5
330 #define ________________NUMBER_RIGHT_______________ KC_6, KC_7, KC_8, KC_9, KC_0
331 #define _________________FUNC_LEFT_________________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5
332 #define _________________FUNC_RIGHT________________ KC_F6, KC_F7, KC_F8, KC_F9, KC_F10
334 #define ___________________BLANK___________________ _______, _______, _______, _______, _______
337 #define _________________LOWER_L1__________________ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC
338 #define _________________LOWER_L2__________________ _________________FUNC_LEFT_________________
339 #define _________________LOWER_L3__________________ _________________FUNC_RIGHT________________
341 #define _________________LOWER_R1__________________ KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN
342 #define _________________LOWER_R2__________________ _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR
343 #define _________________LOWER_R3__________________ _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
347 #define _________________RAISE_L1__________________ ________________NUMBER_LEFT________________
348 #define _________________RAISE_L2__________________ ___________________BLANK___________________
349 #define _________________RAISE_L3__________________ ___________________BLANK___________________
351 #define _________________RAISE_R1__________________ ________________NUMBER_RIGHT_______________
352 #define _________________RAISE_R2__________________ _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC
353 #define _________________RAISE_R3__________________ _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
357 #define _________________ADJUST_L1_________________ RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_TOG
358 #define _________________ADJUST_L2_________________ MU_TOG , CK_TOGG, AU_ON, AU_OFF, AG_NORM
359 #define _________________ADJUST_L3_________________ RGB_RMOD,RGB_HUD,RGB_SAD, RGB_VAD, KC_RGB_T
361 #define _________________ADJUST_R1_________________ KC_SEC1, KC_SEC2, KC_SEC3, KC_SEC4, KC_SEC5
362 #define _________________ADJUST_R2_________________ AG_SWAP, QWERTY, COLEMAK, DVORAK, WORKMAN
363 #define _________________ADJUST_R3_________________ MG_NKRO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT