keymap.c (12446B)
1 // Copyright 2023 Danny Nguyen (danny@keeb.io) 2 // SPDX-License-Identifier: GPL-2.0-or-later 3 4 #include QMK_KEYBOARD_H 5 6 // Each layer gets a name for readability, which is then used in the keymap matrix below. 7 // The underscores don't mean anything - you can have a layer called STUFF or any other name. 8 // Layer names don't all need to be of the same length, obviously, and you can also skip them 9 // entirely and just use numbers. 10 enum layer_names { 11 _QWERTY, 12 _COLEMAK, 13 _DVORAK, 14 _LOWER, 15 _RAISE, 16 _ADJUST 17 }; 18 19 enum custom_keycodes { 20 QWERTY = SAFE_RANGE, 21 COLEMAK, 22 DVORAK, 23 LOWER, 24 RAISE, 25 ADJUST, 26 }; 27 28 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 29 30 /* Qwerty 31 * ,-----------------------------------------------------------------------------------. 32 * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | 33 * |------+------+------+------+------+------+------+------+------+------+------+------| 34 * | Tab | Q | W | E | R | T | Y | U | I | O | P | Del | 35 * |------+------+------+------+------+-------------+------+------+------+------+------| 36 * | Esc | A | S | D | F | G | H | J | K | L | ; | " | 37 * |------+------+------+------+------+------|------+------+------+------+------+------| 38 * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | 39 * |------+------+------+------+------+------+------+------+------+------+------+------| 40 * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | 41 * `-----------------------------------------------------------------------------------' 42 */ 43 [_QWERTY] = LAYOUT_ortho_5x12( 44 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, 45 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, 46 KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, 47 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , 48 ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT 49 ), 50 51 /* Colemak 52 * ,-----------------------------------------------------------------------------------. 53 * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | 54 * |------+------+------+------+------+------+------+------+------+------+------+------| 55 * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Del | 56 * |------+------+------+------+------+-------------+------+------+------+------+------| 57 * | Esc | A | R | S | T | D | H | N | E | I | O | " | 58 * |------+------+------+------+------+------|------+------+------+------+------+------| 59 * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | 60 * |------+------+------+------+------+------+------+------+------+------+------+------| 61 * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | 62 * `-----------------------------------------------------------------------------------' 63 */ 64 [_COLEMAK] = LAYOUT_ortho_5x12( 65 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, 66 KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_DEL, 67 KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, 68 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , 69 ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT 70 ), 71 72 /* Dvorak 73 * ,-----------------------------------------------------------------------------------. 74 * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | 75 * |------+------+------+------+------+------+------+------+------+------+------+------| 76 * | Tab | " | , | . | P | Y | F | G | C | R | L | Del | 77 * |------+------+------+------+------+-------------+------+------+------+------+------| 78 * | Esc | A | O | E | U | I | D | H | T | N | S | / | 79 * |------+------+------+------+------+------|------+------+------+------+------+------| 80 * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | 81 * |------+------+------+------+------+------+------+------+------+------+------+------| 82 * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right | 83 * `-----------------------------------------------------------------------------------' 84 */ 85 [_DVORAK] = LAYOUT_ortho_5x12( 86 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, 87 KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_DEL, 88 KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, 89 KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , 90 ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT 91 ), 92 93 /* Lower 94 * ,-----------------------------------------------------------------------------------. 95 * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | 96 * |------+------+------+------+------+-------------+------+------+------+------+------| 97 * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | 98 * |------+------+------+------+------+-------------+------+------+------+------+------| 99 * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | | \ | | | 100 * |------+------+------+------+------+------|------+------+------+------+------+------| 101 * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | Home | End | | 102 * |------+------+------+------+------+------+------+------+------+------+------+------| 103 * | | | | | | | | Next | Vol- | Vol+ | Play | 104 * `-----------------------------------------------------------------------------------' 105 */ 106 [_LOWER] = LAYOUT_ortho_5x12( 107 KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, 108 KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, 109 KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, 110 BL_STEP, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),KC_HOME,KC_END, _______, 111 _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY 112 ), 113 114 /* Raise 115 * ,-----------------------------------------------------------------------------------. 116 * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | 117 * |------+------+------+------+------+-------------+------+------+------+------+------| 118 * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | 119 * |------+------+------+------+------+-------------+------+------+------+------+------| 120 * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | 121 * |------+------+------+------+------+------|------+------+------+------+------+------| 122 * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / |Pg Up |Pg Dn | | 123 * |------+------+------+------+------+------+------+------+------+------+------+------| 124 * | | | | | | | | Next | Vol- | Vol+ | Play | 125 * `-----------------------------------------------------------------------------------' 126 */ 127 [_RAISE] = LAYOUT_ortho_5x12( 128 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, 129 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, 130 KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, 131 _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______, 132 _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY 133 ), 134 135 /* Adjust (Lower + Raise) 136 * ,-----------------------------------------------------------------------------------. 137 * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | 138 * |------+------+------+------+------+------+------+------+------+------+------+------| 139 * | | Reset|RGB Tg|RGB Md|Hue Up|Hue Dn|Sat Up|Sat Dn|Val Up|Val Dn| | Del | 140 * |------+------+------+------+------+-------------+------+------+------+------+------| 141 * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | 142 * |------+------+------+------+------+------|------+------+------+------+------+------| 143 * | | | | | | | | | | | | | 144 * |------+------+------+------+------+------+------+------+------+------+------+------| 145 * | | | | | | | | | | | | 146 * `-----------------------------------------------------------------------------------' 147 */ 148 [_ADJUST] = LAYOUT_ortho_5x12( 149 KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, 150 _______, QK_BOOT, RM_TOGG, RM_NEXT, RM_HUED, RM_HUEU, RM_SATD, RM_SATU, RM_VALD, RM_VALU, _______, KC_DEL, 151 _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, 152 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, 153 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ 154 ) 155 156 157 }; 158 159 #ifdef AUDIO_ENABLE 160 float tone_qwerty[][2] = SONG(QWERTY_SOUND); 161 float tone_dvorak[][2] = SONG(DVORAK_SOUND); 162 float tone_colemak[][2] = SONG(COLEMAK_SOUND); 163 #endif 164 165 bool process_record_user(uint16_t keycode, keyrecord_t *record) { 166 switch (keycode) { 167 case QWERTY: 168 if (record->event.pressed) { 169 #ifdef AUDIO_ENABLE 170 PLAY_SONG(tone_qwerty); 171 #endif 172 set_single_persistent_default_layer(_QWERTY); 173 } 174 return false; 175 break; 176 case COLEMAK: 177 if (record->event.pressed) { 178 #ifdef AUDIO_ENABLE 179 PLAY_SONG(tone_colemak); 180 #endif 181 set_single_persistent_default_layer(_COLEMAK); 182 } 183 return false; 184 break; 185 case DVORAK: 186 if (record->event.pressed) { 187 #ifdef AUDIO_ENABLE 188 PLAY_SONG(tone_dvorak); 189 #endif 190 set_single_persistent_default_layer(_DVORAK); 191 } 192 return false; 193 break; 194 case LOWER: 195 if (record->event.pressed) { 196 layer_on(_LOWER); 197 update_tri_layer(_LOWER, _RAISE, _ADJUST); 198 } else { 199 layer_off(_LOWER); 200 update_tri_layer(_LOWER, _RAISE, _ADJUST); 201 } 202 return false; 203 break; 204 case RAISE: 205 if (record->event.pressed) { 206 layer_on(_RAISE); 207 update_tri_layer(_LOWER, _RAISE, _ADJUST); 208 } else { 209 layer_off(_RAISE); 210 update_tri_layer(_LOWER, _RAISE, _ADJUST); 211 } 212 return false; 213 break; 214 case ADJUST: 215 if (record->event.pressed) { 216 layer_on(_ADJUST); 217 } else { 218 layer_off(_ADJUST); 219 } 220 return false; 221 break; 222 } 223 return true; 224 } 225 226 #ifdef ENCODER_MAP_ENABLE 227 const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { 228 [_QWERTY] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_PGUP, KC_PGDN) }, 229 [_COLEMAK] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_PGUP, KC_PGDN) }, 230 [_DVORAK] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_PGUP, KC_PGDN) }, 231 [_LOWER] = { ENCODER_CCW_CW(RM_NEXT, RM_PREV), ENCODER_CCW_CW(KC_MNXT, KC_MPRV) }, 232 [_RAISE] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) }, 233 [_ADJUST] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) } 234 }; 235 #endif