@ -19,14 +19,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
# include "quantum.h"
# include "quantum.h"
# include "version.h"
# include "version.h"
# include "eeprom.h"
# include "eeprom.h"
# include "send_unicode.h"
# ifdef RGB_MATRIX_ENABLE
# ifdef RGB_MATRIX_ENABLE
# include "rgb_matrix.h"
# include "rgb_matrix.h"
# endif
# endif
// Define layer names
/* Define layer names */
enum userspace_layers {
enum userspace_layers {
_QWERTY = 0 ,
_QWERTY = 0 ,
_NUMLOCK = 0 ,
_NUMLOCK = 0 ,
@ -43,28 +42,27 @@ enum userspace_layers {
_ADJUST ,
_ADJUST ,
} ;
} ;
//define modifiers
/*
define modifiers here , since MOD_ * doesn ' t seem to work for these
*/
# define MODS_SHIFT_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
# define MODS_SHIFT_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
# define MODS_CTRL_MASK (MOD_BIT(KC_LCTL)|MOD_BIT(KC_RCTRL))
# define MODS_CTRL_MASK (MOD_BIT(KC_LCTL)|MOD_BIT(KC_RCTRL))
# define MODS_ALT_MASK (MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
# define MODS_ALT_MASK (MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
# define MODS_GUI_MASK (MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI))
# define MODS_GUI_MASK (MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI))
// RGB color codes are no longer located here anymore. Instead, you will want to
/*
// head to https://github.com/qmk/qmk_firmware/blob/master/quantum/rgblight_list.h
RGB color codes are no longer located here anymore . Instead , you will want to
head to https : //github.com/qmk/qmk_firmware/blob/master/quantum/rgblight_list.h
extern bool rgb_layer_change ;
*/
# ifdef RGBLIGHT_ENABLE
# ifdef RGBLIGHT_ENABLE
void rgblight_sethsv_default_helper ( uint8_t index ) ;
void rgblight_sethsv_default_helper ( uint8_t index ) ;
# endif // RGBLIGHT_ENABLE
# endif // RGBLIGHT_ENABLE
inline void tap ( uint16_t keycode ) { register_code ( keycode ) ; unregister_code ( keycode ) ; } ;
bool mod_key_press_timer ( uint16_t code , uint16_t mod_code , bool pressed ) ;
bool mod_key_press_timer ( uint16_t code , uint16_t mod_code , bool pressed ) ;
bool mod_key_press ( uint16_t code , uint16_t mod_code , bool pressed , uint16_t this_timer ) ;
bool mod_key_press ( uint16_t code , uint16_t mod_code , bool pressed , uint16_t this_timer ) ;
# define EECONFIG_USERSPACE (uint32_t *)19
typedef union {
typedef union {
uint32_t raw ;
uint32_t raw ;
struct {
struct {
@ -149,7 +147,7 @@ enum userspace_custom_keycodes {
# define DL_RAIS LT(_RAISE, KC_DEL)
# define DL_RAIS LT(_RAISE, KC_DEL)
# define ET_RAIS LT(_RAISE, KC_ENTER)
# define ET_RAIS LT(_RAISE, KC_ENTER)
// OSM keycodes, to keep things clean and easy to change
/* OSM keycodes, to keep things clean and easy to change */
# define KC_MLSF OSM(MOD_LSFT)
# define KC_MLSF OSM(MOD_LSFT)
# define KC_MRSF OSM(MOD_RSFT)
# define KC_MRSF OSM(MOD_RSFT)
@ -178,9 +176,11 @@ enum {
# endif // TAP_DANCE_ENABLE
# endif // TAP_DANCE_ENABLE
// Custom Keycodes for Diablo 3 layer
/*
// But since TD() doesn't work when tap dance is disabled
Custom Keycodes for Diablo 3 layer
// We use custom codes here, so we can substitute the right stuff
But since TD ( ) doesn ' t work when tap dance is disabled
We use custom codes here , so we can substitute the right stuff
*/
# ifdef TAP_DANCE_ENABLE
# ifdef TAP_DANCE_ENABLE
# define KC_D3_1 TD(TD_D3_1)
# define KC_D3_1 TD(TD_D3_1)
# define KC_D3_2 TD(TD_D3_2)
# define KC_D3_2 TD(TD_D3_2)
@ -193,11 +193,11 @@ enum {
# define KC_D3_4 KC_4
# define KC_D3_4 KC_4
# endif // TAP_DANCE_ENABLE
# endif // TAP_DANCE_ENABLE
/*
Since our quirky block definitions are basically a list of comma separated
// Since our quirky block definitions are basically a list of comma separated
arguments , we need a wrapper in order for these definitions to be
// arguments, we need a wrapper in order for these definitions to be
expanded before being used as arguments to the LAYOUT_xxx macro .
// expanded before being used as arguments to the LAYOUT_xxx macro.
*/
# if (!defined(LAYOUT) && defined(KEYMAP))
# if (!defined(LAYOUT) && defined(KEYMAP))
# define LAYOUT KEYMAP
# define LAYOUT KEYMAP
# endif
# endif
@ -208,112 +208,114 @@ enum {
# define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__)
# define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__)
# define LAYOUT_ortho_4x12_wrapper(...) LAYOUT_ortho_4x12(__VA_ARGS__)
# define LAYOUT_ortho_4x12_wrapper(...) LAYOUT_ortho_4x12(__VA_ARGS__)
// Blocks for each of the four major keyboard layouts
/*
// Organized so we can quickly adapt and modify all of them
Blocks for each of the four major keyboard layouts
// at once, rather than for each keyboard, one at a time.
Organized so we can quickly adapt and modify all of them
// And this allows for much cleaner blocks in the keymaps.
at once , rather than for each keyboard , one at a time .
// For instance Tap/Hold for Control on all of the layouts
And this allows for much cleaner blocks in the keymaps .
For instance Tap / Hold for Control on all of the layouts
// NOTE: These are all the same length. If you do a search/replace
// then you need to add/remove underscores to keep the
NOTE : These are all the same length . If you do a search / replace
// lengths consistent.
then you need to add / remove underscores to keep the
lengths consistent .
*/
# define _________________QWERTY_L1_________________ KC_Q, KC_W, KC_E, KC_R, KC_T
# define _________________QWERTY_L1_________________ KC_Q, KC_W, KC_E, KC_R, KC_T
# define _________________QWERTY_L2_________________ KC_A, KC_S, KC_D, KC_F, KC_G
# define _________________QWERTY_L2_________________ KC_A, KC_S, KC_D, KC_F, KC_G
# define _________________QWERTY_L3_________________ CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B
# define _________________QWERTY_L3_________________ KC_Z, KC_X, KC_C, KC_V, KC_B
# define _________________QWERTY_R1_________________ KC_Y, KC_U, KC_I, KC_O, KC_P
# define _________________QWERTY_R1_________________ KC_Y, KC_U, KC_I, KC_O, KC_P
# define _________________QWERTY_R2_________________ KC_H, KC_J, KC_K, KC_L, KC_SCLN
# define _________________QWERTY_R2_________________ KC_H, KC_J, KC_K, KC_L, KC_SCLN
# define _________________QWERTY_R3_________________ KC_N, KC_M, KC_COMM, KC_DOT, CTL_T( KC_SLASH)
# define _________________QWERTY_R3_________________ KC_N, KC_M, KC_COMM, KC_DOT, KC_SLASH
# define _________________COLEMAK_L1________________ KC_Q, KC_W, KC_F, KC_P, KC_G
# define _________________COLEMAK_L1________________ KC_Q, KC_W, KC_F, KC_P, KC_G
# define _________________COLEMAK_L2________________ KC_A, KC_R, KC_S, KC_T, KC_D
# define _________________COLEMAK_L2________________ KC_A, KC_R, KC_S, KC_T, KC_D
# define _________________COLEMAK_L3________________ CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B
# define _________________COLEMAK_L3________________ KC_Z, KC_X, KC_C, KC_V, KC_B
# define _________________COLEMAK_R1________________ KC_J, KC_L, KC_U, KC_Y, KC_SCLN
# define _________________COLEMAK_R1________________ KC_J, KC_L, KC_U, KC_Y, KC_SCLN
# define _________________COLEMAK_R2________________ KC_H, KC_N, KC_E, KC_I, KC_O
# define _________________COLEMAK_R2________________ KC_H, KC_N, KC_E, KC_I, KC_O
# define _________________COLEMAK_R3________________ KC_K, KC_M, KC_COMM, KC_DOT, CTL_T( KC_SLASH)
# define _________________COLEMAK_R3________________ KC_K, KC_M, KC_COMM, KC_DOT, KC_SLASH
# define ______________COLEMAK_MOD_DH_L1____________ KC_Q, KC_W, KC_F, KC_P, KC_B
# define ______________COLEMAK_MOD_DH_L1____________ KC_Q, KC_W, KC_F, KC_P, KC_B
# define ______________COLEMAK_MOD_DH_L2____________ KC_A, KC_R, KC_S, KC_T, KC_G
# define ______________COLEMAK_MOD_DH_L2____________ KC_A, KC_R, KC_S, KC_T, KC_G
# define ______________COLEMAK_MOD_DH_L3____________ CTL_T(KC_Z), KC_X, KC_C, KC_D, KC_V
# define ______________COLEMAK_MOD_DH_L3____________ KC_Z, KC_X, KC_C, KC_D, KC_V
# define ______________COLEMAK_MOD_DH_R1____________ KC_J, KC_L, KC_U, KC_Y, KC_SCLN
# define ______________COLEMAK_MOD_DH_R1____________ KC_J, KC_L, KC_U, KC_Y, KC_SCLN
# define ______________COLEMAK_MOD_DH_R2____________ KC_M, KC_N, KC_E, KC_I, KC_O
# define ______________COLEMAK_MOD_DH_R2____________ KC_M, KC_N, KC_E, KC_I, KC_O
# define ______________COLEMAK_MOD_DH_R3____________ KC_K, KC_H, KC_COMM, KC_DOT, CTL_T( KC_SLASH)
# define ______________COLEMAK_MOD_DH_R3____________ KC_K, KC_H, KC_COMM, KC_DOT, KC_SLASH
# define _________________DVORAK_L1_________________ KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y
# define _________________DVORAK_L1_________________ KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y
# define _________________DVORAK_L2_________________ KC_A, KC_O, KC_E, KC_U, KC_I
# define _________________DVORAK_L2_________________ KC_A, KC_O, KC_E, KC_U, KC_I
# define _________________DVORAK_L3_________________ CTL_T(KC_SCLN), KC_Q, KC_J, KC_K, KC_X
# define _________________DVORAK_L3_________________ KC_SCLN, KC_Q, KC_J, KC_K, KC_X
# define _________________DVORAK_R1_________________ KC_F, KC_G, KC_C, KC_R, KC_L
# define _________________DVORAK_R1_________________ KC_F, KC_G, KC_C, KC_R, KC_L
# define _________________DVORAK_R2_________________ KC_D, KC_H, KC_T, KC_N, KC_S
# define _________________DVORAK_R2_________________ KC_D, KC_H, KC_T, KC_N, KC_S
# define _________________DVORAK_R3_________________ KC_B, KC_M, KC_W, KC_V, CTL_T( KC_Z)
# define _________________DVORAK_R3_________________ KC_B, KC_M, KC_W, KC_V, KC_Z
# define _________________WORKMAN_L1________________ KC_Q, KC_D, KC_R, KC_W, KC_B
# define _________________WORKMAN_L1________________ KC_Q, KC_D, KC_R, KC_W, KC_B
# define _________________WORKMAN_L2________________ KC_A, KC_S, KC_H, KC_T, KC_G
# define _________________WORKMAN_L2________________ KC_A, KC_S, KC_H, KC_T, KC_G
# define _________________WORKMAN_L3________________ CTL_T(KC_Z), KC_X, KC_M, KC_C, KC_V
# define _________________WORKMAN_L3________________ KC_Z, KC_X, KC_M, KC_C, KC_V
# define _________________WORKMAN_R1________________ KC_J, KC_F, KC_U, KC_P, KC_SCLN
# define _________________WORKMAN_R1________________ KC_J, KC_F, KC_U, KC_P, KC_SCLN
# define _________________WORKMAN_R2________________ KC_Y, KC_N, KC_E, KC_O, KC_I
# define _________________WORKMAN_R2________________ KC_Y, KC_N, KC_E, KC_O, KC_I
# define _________________WORKMAN_R3________________ KC_K, KC_L, KC_COMM, KC_DOT, CTL_T( KC_SLASH)
# define _________________WORKMAN_R3________________ KC_K, KC_L, KC_COMM, KC_DOT, KC_SLASH
# define _________________NORMAN_L1_________________ KC_Q, KC_W, KC_D, KC_F, KC_K
# define _________________NORMAN_L1_________________ KC_Q, KC_W, KC_D, KC_F, KC_K
# define _________________NORMAN_L2_________________ KC_A, KC_S, KC_E, KC_T, KC_G
# define _________________NORMAN_L2_________________ KC_A, KC_S, KC_E, KC_T, KC_G
# define _________________NORMAN_L3_________________ CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B
# define _________________NORMAN_L3_________________ KC_Z, KC_X, KC_C, KC_V, KC_B
# define _________________NORMAN_R1_________________ KC_J, KC_U, KC_R, KC_L, KC_SCLN
# define _________________NORMAN_R1_________________ KC_J, KC_U, KC_R, KC_L, KC_SCLN
# define _________________NORMAN_R2_________________ KC_Y, KC_N, KC_I, KC_O, KC_U
# define _________________NORMAN_R2_________________ KC_Y, KC_N, KC_I, KC_O, KC_U
# define _________________NORMAN_R3_________________ KC_P, KC_M, KC_COMM, KC_DOT, CTL_T( KC_SLASH)
# define _________________NORMAN_R3_________________ KC_P, KC_M, KC_COMM, KC_DOT, KC_SLASH
# define _________________MALTRON_L1________________ KC_Q, KC_P, KC_Y, KC_C, KC_B
# define _________________MALTRON_L1________________ KC_Q, KC_P, KC_Y, KC_C, KC_B
# define _________________MALTRON_L2________________ KC_A, KC_N, KC_I, KC_S, KC_F
# define _________________MALTRON_L2________________ KC_A, KC_N, KC_I, KC_S, KC_F
# define _________________MALTRON_L3________________ CTL_T(KC_SCLN), KC_SLSH, KC_J KC_G, KC_COMM
# define _________________MALTRON_L3________________ KC_SCLN, KC_SLSH, KC_J KC_G, KC_COMM
# define _________________MALTRON_R1________________ KC_V, KC_M, KC_U, KC_Z, KC_L
# define _________________MALTRON_R1________________ KC_V, KC_M, KC_U, KC_Z, KC_L
# define _________________MALTRON_R2________________ KC_D, KC_T, KC_D, KC_O, KC_R
# define _________________MALTRON_R2________________ KC_D, KC_T, KC_D, KC_O, KC_R
# define _________________MALTRON_R3________________ KC_DOT, KC_W, KC_K, KC_MINS, CTL_T(KC_x)
# define _________________MALTRON_R3________________ KC_DOT, KC_W, KC_K, KC_MINS, KC_X
# define _________________EUCALYN_L1________________ KC_SLSH, KC_COMM, KC_DOT, KC_F, KC_Q
# define _________________EUCALYN_L1________________ KC_SLSH, KC_COMM, KC_DOT, KC_F, KC_Q
# define _________________EUCALYN_L2________________ KC_A, KC_O, KC_E, KC_I, KC_U
# define _________________EUCALYN_L2________________ KC_A, KC_O, KC_E, KC_I, KC_U
# define _________________EUCALYN_L3________________ CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_W
# define _________________EUCALYN_L3________________ KC_Z, KC_X, KC_C, KC_V, KC_W
# define _________________EUCALYN_R1________________ KC_M, KC_R, KC_D, KC_Y, KC_P
# define _________________EUCALYN_R1________________ KC_M, KC_R, KC_D, KC_Y, KC_P
# define _________________EUCALYN_R2________________ KC_G, KC_T, KC_K, KC_S, KC_N
# define _________________EUCALYN_R2________________ KC_G, KC_T, KC_K, KC_S, KC_N
# define _________________EUCALYN_R3________________ KC_B, KC_H, KC_J, KC_L, CTL_T( KC_SCLN)
# define _________________EUCALYN_R3________________ KC_B, KC_H, KC_J, KC_L, KC_SCLN
# define _____________CARPLAX_QFMLWY_L1_____________ KC_Q, KC_F, KC_M, KC_L, KC_W
# define _____________CARPLAX_QFMLWY_L1_____________ KC_Q, KC_F, KC_M, KC_L, KC_W
# define _____________CARPLAX_QFMLWY_L2_____________ KC_D, KC_S, KC_T, KC_N, KC_R
# define _____________CARPLAX_QFMLWY_L2_____________ KC_D, KC_S, KC_T, KC_N, KC_R
# define _____________CARPLAX_QFMLWY_L3_____________ CTL_T(KC_Z), KC_V, KC_G, KC_C, KC_X
# define _____________CARPLAX_QFMLWY_L3_____________ KC_Z, KC_V, KC_G, KC_C, KC_X
# define _____________CARPLAX_QFMLWY_R1_____________ KC_Y, KC_U, KC_O, KC_B, KC_J
# define _____________CARPLAX_QFMLWY_R1_____________ KC_Y, KC_U, KC_O, KC_B, KC_J
# define _____________CARPLAX_QFMLWY_R2_____________ KC_I, KC_A, KC_E, KC_H, KC_SCLN
# define _____________CARPLAX_QFMLWY_R2_____________ KC_I, KC_A, KC_E, KC_H, KC_SCLN
# define _____________CARPLAX_QFMLWY_R3_____________ KC_P, KC_K, KC_COMM, KC_DOT, CTL_T( KC_SLSH)
# define _____________CARPLAX_QFMLWY_R3_____________ KC_P, KC_K, KC_COMM, KC_DOT, KC_SLSH
# define _____________CARPLAX_QGMLWB_L1_____________ KC_Q, KC_G, KC_M, KC_L, KC_W
# define _____________CARPLAX_QGMLWB_L1_____________ KC_Q, KC_G, KC_M, KC_L, KC_W
# define _____________CARPLAX_QGMLWB_L2_____________ KC_D, KC_S, KC_T, KC_N, KC_R
# define _____________CARPLAX_QGMLWB_L2_____________ KC_D, KC_S, KC_T, KC_N, KC_R
# define _____________CARPLAX_QGMLWB_L3_____________ CTL_T(KC_Z) , KC_X, KC_C, KC_F, KC_J
# define _____________CARPLAX_QGMLWB_L3_____________ KC_Z , KC_X, KC_C, KC_F, KC_J
# define _____________CARPLAX_QGMLWB_R1_____________ KC_B, KC_Y, KC_U, KC_V, KC_SCLN
# define _____________CARPLAX_QGMLWB_R1_____________ KC_B, KC_Y, KC_U, KC_V, KC_SCLN
# define _____________CARPLAX_QGMLWB_R2_____________ KC_I, KC_A, KC_E, KC_O, KC_H
# define _____________CARPLAX_QGMLWB_R2_____________ KC_I, KC_A, KC_E, KC_O, KC_H
# define _____________CARPLAX_QGMLWB_R3_____________ KC_K, KC_P, KC_COMM, KC_DOT, CTL_T( KC_SLSH)
# define _____________CARPLAX_QGMLWB_R3_____________ KC_K, KC_P, KC_COMM, KC_DOT, KC_SLSH
# define _____________CARPLAX_QGMLWY_L1_____________ KC_Q, KC_G, KC_M, KC_L, KC_W
# define _____________CARPLAX_QGMLWY_L1_____________ KC_Q, KC_G, KC_M, KC_L, KC_W
# define _____________CARPLAX_QGMLWY_L2_____________ KC_D, KC_S, KC_T, KC_N, KC_R
# define _____________CARPLAX_QGMLWY_L2_____________ KC_D, KC_S, KC_T, KC_N, KC_R
# define _____________CARPLAX_QGMLWY_L3_____________ CTL_T(KC_Z) , KC_X, KC_C, KC_V, KC_J
# define _____________CARPLAX_QGMLWY_L3_____________ KC_Z , KC_X, KC_C, KC_V, KC_J
# define _____________CARPLAX_QGMLWY_R1_____________ KC_Y, KC_F, KC_U, KC_B, KC_SCLN
# define _____________CARPLAX_QGMLWY_R1_____________ KC_Y, KC_F, KC_U, KC_B, KC_SCLN
# define _____________CARPLAX_QGMLWY_R2_____________ KC_I, KC_A, KC_E, KC_O, KC_H
# define _____________CARPLAX_QGMLWY_R2_____________ KC_I, KC_A, KC_E, KC_O, KC_H
# define _____________CARPLAX_QGMLWY_R3_____________ KC_K, KC_P, KC_COMM, KC_DOT, CTL_T( KC_SLSH)
# define _____________CARPLAX_QGMLWY_R3_____________ KC_K, KC_P, KC_COMM, KC_DOT, KC_SLSH
# define ________________NUMBER_LEFT________________ KC_1, KC_2, KC_3, KC_4, KC_5
# define ________________NUMBER_LEFT________________ KC_1, KC_2, KC_3, KC_4, KC_5
@ -352,21 +354,3 @@ enum {
# define _________________ADJUST_R2_________________ AG_SWAP, QWERTY, COLEMAK, DVORAK, WORKMAN
# define _________________ADJUST_R2_________________ AG_SWAP, QWERTY, COLEMAK, DVORAK, WORKMAN
# define _________________ADJUST_R3_________________ MG_NKRO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT
# define _________________ADJUST_R3_________________ MG_NKRO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT
// Since we have 4 default layouts (QWERTY, DVORAK, COLEMAK and WORKMAN),
// this allows us to quickly modify the bottom row for all of the layouts
// so we don't have to alter it 4 times and hope that we haven't missed
// anything
# define ___________ERGODOX_BOTTOM_LEFT_____________ OSM(MOD_MEH), OSM(MOD_LGUI), KC_LBRC, KC_RBRC
# define ___________ERGODOX_BOTTOM_RIGHT____________ KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
# define ___________ORTHODOX_THUMP_TOP_____________ ALT_APP, OS_LGUI, KC_LALT, OS_RGUI
# define ___________________ORTHODOX_THUMB_BOTTOM____________________ LOWER, KC_SPACE,KC_BSPC, KC_DEL, KC_ENT, RAISE
# define __________________ERGODOX_THUMB_CLUSTER_____________________ ALT_T(KC_APP), OSM(MOD_LGUI), OSM(MOD_RGUI), CTL_T(KC_ESCAPE), \
KC_HOME , KC_PGUP , \
LT ( _LOWER , KC_SPACE ) , KC_BSPC , KC_END , KC_PGDN , KC_DEL , LT ( _RAISE , KC_ENTER )