1 #include QMK_KEYBOARD_H
3 extern keymap_config_t keymap_config;
5 // where the 'T_' communicates how the key does something different when tapped.
8 KC_T_LALT = SAFE_RANGE,
46 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
50 {{ KC_T_LRSE, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_T_RRSE},
51 { KC_T_LSFT, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_T_RSFT},
52 { KC_T_LCTL, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_T_RCTL},
53 { KC_T_LGUI, KC_T_LALT, KC_UP, KC_DOWN, KC_BSPC, KC_TAB, KC_ENT, KC_SPC, KC_LEFT, KC_RIGHT, KC_T_RALT, KC_T_RGUI}
58 {{ KC_T_LRSE, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_T_RRSE},
59 { KC_T_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_T_RSFT},
60 { KC_T_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_QUOT, KC_T_RCTL},
61 { KC_T_LGUI, KC_T_LALT, KC_UP, KC_DOWN, KC_BSPC, KC_TAB, KC_ENT, KC_SPC, KC_LEFT, KC_RIGHT, KC_T_RALT, KC_DVORAK}
66 {{ KC_TRANSPARENT, KC_EZUNDO, KC_EZCOPY, KC_EZCUT, KC_EZPSTE, KC_INS, KC_EQL, KC_7, KC_8, KC_9, KC_TRANSPARENT, KC_TRANSPARENT},
67 { KC_EZSHFT, KC_ESC, KC_CAPS, KC_PGUP, KC_PGDN, KC_HOME, KC_ASTR, KC_4, KC_5, KC_6, KC_0, KC_EZSHFT},
68 { KC_EZCTRL, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_1, KC_2, KC_3, KC_COM, KC_EZCTRL},
69 { KC_EZGUI, KC_EZALT, KC_EZUP, KC_EZDOWN, KC_SPC, KC_AMPR, KC_PIPE, KC_END, KC_EZLEFT, KC_EZRGHT, KC_EZALT, KC_EZGUI}
74 {{ KC_TRANSPARENT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRANSPARENT},
75 { KC_TRANSPARENT, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_TRANSPARENT},
76 { KC_TRANSPARENT, KC_F21, KC_F22, KC_F23, KC_F24, KC_QWERTY, KC_DVORAK, KC_USER, KC_EMAIL, KC_NAME, KC_TRANSPARENT, KC_TRANSPARENT},
77 { KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_DIR, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT}
82 static uint16_t tap_timer = 0;
85 void mod_press(uint16_t tap_code, uint16_t hold_code, int id) {
86 // this first if body makes double modified keys impossible, but stops the
87 // delay when modifying a tap key which would result in the tap key not
89 if (last_mod != id && last_mod != 10) {
93 tap_timer = timer_read();
95 register_code(hold_code);
99 void mod_lift(uint16_t tap_code, uint16_t hold_code, int id) {
100 unregister_code(hold_code);
101 if (last_mod == id && timer_elapsed(tap_timer) < TAPPING_TERM) {
102 tap_code16(tap_code);
107 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
111 if (record->event.pressed) {
112 set_single_persistent_default_layer(_DVORAK);
118 if (record->event.pressed) {
119 set_single_persistent_default_layer(_QWERTY);
125 if (record->event.pressed) {
126 mod_press(S(KC_9), KC_LALT, 0);
128 mod_lift(S(KC_9), KC_LALT, 0);
133 if (record->event.pressed) {
134 mod_press(S(KC_0), KC_RALT, 1);
136 mod_lift(S(KC_0), KC_RALT, 1);
142 if (record->event.pressed) {
143 mod_press(KC_GRAVE, KC_LGUI, 2);
145 mod_lift(KC_GRAVE, KC_LGUI, 2);
150 if (record->event.pressed) {
151 mod_press(KC_BSLASH, KC_RGUI, 3);
153 mod_lift(KC_BSLASH, KC_RGUI, 3);
159 if (record->event.pressed) {
160 mod_press(KC_LBRACKET, KC_LCTL, 4);
162 mod_lift(KC_LBRACKET, KC_LCTL, 4);
167 if (record->event.pressed) {
168 mod_press(KC_RBRACKET, KC_RCTL, 5);
170 mod_lift(KC_RBRACKET, KC_RCTL, 5);
176 if (record->event.pressed) {
177 mod_press(KC_EQUAL, KC_LSFT, 6);
179 mod_lift(KC_EQUAL, KC_LSFT, 6);
184 if (record->event.pressed) {
185 mod_press(KC_MINUS, KC_RSFT, 7);
187 mod_lift(KC_MINUS, KC_RSFT, 7);
193 if (record->event.pressed) {
194 tap_timer = timer_read();
199 if (last_mod == 8 && timer_elapsed(tap_timer) < TAPPING_TERM) {
200 tap_code16(KC_DELETE);
207 if (record->event.pressed) {
208 tap_timer = timer_read();
213 if (last_mod == 9 && timer_elapsed(tap_timer) < TAPPING_TERM) {
214 tap_code16(KC_SLASH);
222 if (record->event.pressed) {
223 set_oneshot_mods(MOD_LSFT);
229 if (record->event.pressed) {
230 set_oneshot_mods(MOD_LCTL);
236 if (record->event.pressed) {
237 set_oneshot_mods(MOD_LALT);
243 if (record->event.pressed) {
244 set_oneshot_mods(MOD_LGUI);
251 if (record->event.pressed) {
252 register_code(KC_LCTL);
253 tap_code16(S(KC_RGHT));
254 unregister_code(KC_LCTL);
260 if (record->event.pressed) {
261 register_code(KC_LCTL);
262 tap_code16(S(KC_LEFT));
263 unregister_code(KC_LCTL);
269 if (record->event.pressed) {
270 register_code(KC_LCTL);
271 tap_code16(S(KC_DOWN));
272 unregister_code(KC_LCTL);
278 if (record->event.pressed) {
279 register_code(KC_LCTL);
280 tap_code16(S(KC_UP));
281 unregister_code(KC_LCTL);
288 if (record->event.pressed) {
295 if (record->event.pressed) {
302 if (record->event.pressed) {
309 if (record->event.pressed) {
317 if (record->event.pressed) {
319 set_oneshot_layer(_COMMAND, ONESHOT_START);
322 clear_oneshot_layer_state (ONESHOT_PRESSED);
328 if (record->event.pressed) {
329 send_string("mhostley");
335 if (record->event.pressed) {
336 send_string("mhostley@gmail.com");
342 if (record->event.pressed) {
343 send_string("Samuel Jahnke");
349 if (record->event.pressed) {
350 send_string("home/mhostley/");