keymap.c (13739B)
1 #include QMK_KEYBOARD_H 2 #include "version.h" 3 4 #define BASE 0 // default layer 5 #define SYMB 1 // symbols 6 #define MDIA 2 // media keys 7 8 enum custom_keycodes { 9 PLACEHOLDER = SAFE_RANGE, // can always be here 10 EPRM, 11 VRSN, 12 RGB_SLD, 13 RGB_LYR 14 }; 15 16 typedef union { 17 uint32_t raw; 18 struct { 19 bool rgb_layer_change :1; 20 }; 21 } user_config_t; 22 23 user_config_t user_config; 24 25 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 26 /* Keymap 0: Basic layer 27 * 28 * ,--------------------------------------------------. ,--------------------------------------------------. 29 * | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - | 30 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| 31 * | Del | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ | 32 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| 33 * | BkSp | A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd | 34 * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------| 35 * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift | 36 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' 37 * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 | 38 * `----------------------------------' `----------------------------------' 39 * ,-------------. ,-------------. 40 * | App | LGui | | Alt |Ctrl/Esc| 41 * ,------|------|------| |------+--------+------. 42 * | | | Home | | PgUp | | | 43 * | Space|Backsp|------| |------| Tab |Enter | 44 * | |ace | End | | PgDn | | | 45 * `--------------------' `----------------------' 46 */ 47 // If it accepts an argument (i.e, is a function), it doesn't need KC_. 48 // Otherwise, it needs KC_* 49 [BASE] = LAYOUT_ergodox( // layer 0 : default 50 // left hand 51 KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, 52 KC_DEL, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), 53 KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, 54 KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, HYPR_T(KC_NO), 55 LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT, 56 ALT_T(KC_APP), KC_LGUI, 57 KC_HOME, 58 KC_SPC,KC_BSPC,KC_END, 59 // right hand 60 KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, 61 TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, 62 KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT), 63 MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, 64 KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, TT(SYMB), 65 KC_LALT, CTL_T(KC_ESC), 66 KC_PGUP, 67 KC_PGDN,KC_TAB, KC_ENT 68 ), 69 /* Keymap 1: Symbol Layer 70 * 71 * ,---------------------------------------------------. ,--------------------------------------------------. 72 * |Version | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | 73 * |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------| 74 * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 | 75 * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------| 76 * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | | 77 * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------| 78 * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | | 79 * `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' 80 * | EPRM | | | | | | | . | 0 | = | | 81 * `-----------------------------------' `----------------------------------' 82 * ,-------------. ,-------------. 83 * |Animat| LYR | |Toggle|Solid | 84 * ,------|------|------| |------+------+------. 85 * |Bright|Bright| | | |Hue- |Hue+ | 86 * |ness- |ness+ |------| |------| | | 87 * | | | | | | | | 88 * `--------------------' `--------------------' 89 */ 90 // SYMBOLS 91 [SYMB] = LAYOUT_ergodox( 92 // left hand 93 VRSN, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, 94 QK_BOOT,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS, 95 KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV, 96 EPRM,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS, 97 KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, 98 UG_NEXT,RGB_LYR, 99 KC_TRNS, 100 UG_VALD,UG_VALU,KC_TRNS, 101 // right hand 102 KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, 103 KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12, 104 KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS, 105 KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS, 106 KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS, 107 UG_TOGG, RGB_SLD, 108 KC_TRNS, 109 KC_TRNS, UG_HUED, UG_HUEU 110 ), 111 /* Keymap 2: Media and mouse keys 112 * 113 * ,--------------------------------------------------. ,--------------------------------------------------. 114 * | | | | | | | | | | | | | | | | 115 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| 116 * | | | | MsUp | | | | | | | | | | | | 117 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| 118 * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play | 119 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| 120 * | | | | | | | | | | | | Prev | Next | | | 121 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' 122 * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | | 123 * `----------------------------------' `----------------------------------' 124 * ,-------------. ,-------------. 125 * | | | | | | 126 * ,------|------|------| |------+------+------. 127 * | | | | | | |Brwser| 128 * | | |------| |------| |Back | 129 * | | | | | | | | 130 * `--------------------' `--------------------' 131 */ 132 // MEDIA AND MOUSE 133 [MDIA] = LAYOUT_ergodox( 134 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 135 KC_TRNS, KC_TRNS, KC_TRNS, MS_UP, KC_TRNS, KC_TRNS, KC_TRNS, 136 KC_TRNS, KC_TRNS, MS_LEFT, MS_DOWN, MS_RGHT, KC_TRNS, 137 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 138 KC_TRNS, KC_TRNS, KC_TRNS, MS_BTN1, MS_BTN2, 139 KC_TRNS, KC_TRNS, 140 KC_TRNS, 141 KC_TRNS, KC_TRNS, KC_TRNS, 142 // right hand 143 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 144 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 145 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, 146 KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, 147 KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, 148 KC_TRNS, KC_TRNS, 149 KC_TRNS, 150 KC_TRNS, KC_TRNS, KC_WBAK 151 ), 152 }; 153 154 #ifdef RGBLIGHT_ENABLE 155 void eeconfig_init_user(void) { 156 rgblight_enable(); 157 rgblight_sethsv(HSV_CYAN); 158 rgblight_mode(1); 159 user_config.rgb_layer_change = true; 160 eeconfig_update_user(user_config.raw); 161 } 162 #endif 163 164 bool process_record_user(uint16_t keycode, keyrecord_t *record) { 165 switch (keycode) { 166 // dynamically generate these. 167 case EPRM: 168 if (record->event.pressed) { 169 eeconfig_init(); 170 } 171 return false; 172 case VRSN: 173 if (record->event.pressed) { 174 SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); 175 } 176 return false; 177 #ifdef RGBLIGHT_ENABLE 178 case RGB_SLD: 179 if (record->event.pressed) { 180 rgblight_mode(1); 181 } 182 return false; 183 case RGB_LYR: // This allows me to use underglow as layer indication, or as normal 184 if (record->event.pressed) { 185 user_config.rgb_layer_change ^= 1; // Toggles the status 186 eeconfig_update_user(user_config.raw); // Writes the new status to EEPROM 187 if (user_config.rgb_layer_change) { // if layer state indication is enabled, 188 layer_state_set(layer_state); // then immediately update the layer color 189 } 190 } 191 return false; 192 case UNDERGLOW_KEYCODE_RANGE: // For any of the RGB codes (see quantum_keycodes.h, L400 for reference) 193 if (record->event.pressed) { //This disables layer indication, as it's assumed that if you're changing this ... you want that disabled 194 if (user_config.rgb_layer_change) { // only if this is enabled 195 user_config.rgb_layer_change = false; // disable it, and 196 eeconfig_update_user(user_config.raw); // write the setings to EEPROM 197 } 198 } 199 return true; 200 #endif 201 } 202 return true; 203 } 204 205 #ifdef RGBLIGHT_ENABLE 206 void matrix_init_user(void) { 207 // Call the keymap level matrix init. 208 209 // Read the user config from EEPROM 210 user_config.raw = eeconfig_read_user(); 211 212 // Set default layer, if enabled 213 if (user_config.rgb_layer_change) { 214 rgblight_enable_noeeprom(); 215 rgblight_sethsv_noeeprom(HSV_CYAN); 216 rgblight_mode_noeeprom(1); 217 } 218 } 219 #endif 220 221 layer_state_t layer_state_set_user(layer_state_t state) { 222 ergodox_board_led_off(); 223 ergodox_right_led_1_off(); 224 ergodox_right_led_2_off(); 225 ergodox_right_led_3_off(); 226 switch (get_highest_layer(state)) { 227 case SYMB: 228 ergodox_right_led_1_on(); 229 #ifdef RGBLIGHT_ENABLE 230 if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom(HSV_RED); rgblight_mode_noeeprom(1); } 231 #endif 232 break; 233 case MDIA: 234 ergodox_right_led_2_on(); 235 #ifdef RGBLIGHT_ENABLE 236 if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom(HSV_GREEN); rgblight_mode_noeeprom(1); } 237 #endif 238 break; 239 case 3: 240 ergodox_right_led_3_on(); 241 #ifdef RGBLIGHT_ENABLE 242 if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom(HSV_BLUE); rgblight_mode_noeeprom(1); } 243 #endif 244 break; 245 case 4: 246 ergodox_right_led_1_on(); 247 ergodox_right_led_2_on(); 248 #ifdef RGBLIGHT_ENABLE 249 if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom(HSV_ORANGE); rgblight_mode_noeeprom(1); } 250 #endif 251 break; 252 case 5: 253 ergodox_right_led_1_on(); 254 ergodox_right_led_3_on(); 255 #ifdef RGBLIGHT_ENABLE 256 if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom(HSV_YELLOW); rgblight_mode_noeeprom(1); } 257 #endif 258 break; 259 case 6: 260 ergodox_right_led_2_on(); 261 ergodox_right_led_3_on(); 262 #ifdef RGBLIGHT_ENABLE 263 if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom(HSV_PINK); rgblight_mode_noeeprom(1); } 264 #endif 265 break; 266 case 7: 267 ergodox_right_led_1_on(); 268 ergodox_right_led_2_on(); 269 ergodox_right_led_3_on(); 270 #ifdef RGBLIGHT_ENABLE 271 if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom(HSV_WHITE); rgblight_mode_noeeprom(1); } 272 #endif 273 break; 274 default: // for any other layers, or the default layer 275 #ifdef RGBLIGHT_ENABLE 276 if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom(HSV_CYAN); rgblight_mode_noeeprom(1); } 277 #endif 278 break; 279 } 280 return state; 281 }