]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/planck/keymaps/samuel/keymap.c
Update KBD67 readme so that it mentions the KBD65 PCB (#5143)
[qmk_firmware.git] / keyboards / planck / keymaps / samuel / keymap.c
1 #include QMK_KEYBOARD_H
2
3 extern keymap_config_t keymap_config;
4
5 // where the 'T_' communicates how the key does something different when tapped.
6 enum planck_keycodes {
7 //DVORAK = SAFE_RANGE,
8 KC_T_LALT = SAFE_RANGE,
9 KC_T_RALT,
10 KC_T_LGUI,
11 KC_T_RGUI,
12 KC_T_LCTL,
13 KC_T_RCTL,
14 KC_T_LSFT,
15 KC_T_RSFT,
16 KC_T_LRSE,
17 KC_T_RRSE,
18 KC_EZRGHT,
19 KC_EZLEFT,
20 KC_EZUP,
21 KC_EZDOWN,
22 KC_EZUNDO,
23 KC_EZCOPY,
24 KC_EZCUT,
25 KC_EZPSTE,
26 KC_EZSHFT,
27 KC_EZCTRL,
28 KC_EZGUI,
29 KC_EZALT,
30 KC_DVORAK,
31 KC_QWERTY,
32 KC_USER,
33 KC_EMAIL,
34 KC_NAME,
35 KC_DIR,
36 KC_COM
37 };
38
39 enum planck_layers {
40 _DVORAK,
41 _QWERTY,
42 _RISE,
43 _COMMAND
44 };
45
46 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
47
48 [_DVORAK] =
49
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}
54 },
55
56 [_QWERTY] =
57
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}
62 },
63
64 [_RISE] =
65
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}
70 },
71
72 [_COMMAND] =
73
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}
78 },
79
80 };
81
82 static uint16_t tap_timer = 0;
83 char last_mod = 10;
84
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
88     // getting modified.
89     if (last_mod != id && last_mod != 10) {
90         tap_code16(tap_code);
91         last_mod = 10;
92     } else {
93         tap_timer = timer_read();
94         last_mod = id;
95         register_code(hold_code);
96     }
97 }
98
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);
103         last_mod = 10;
104     }
105 }
106
107 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
108     switch (keycode) {
109
110 case KC_DVORAK:
111 if (record->event.pressed) {
112     set_single_persistent_default_layer(_DVORAK);
113 }
114 return true;
115 break;
116
117 case KC_QWERTY:
118 if (record->event.pressed) {
119     set_single_persistent_default_layer(_QWERTY);
120 }
121 return true;
122 break;
123
124 case KC_T_LALT:
125 if (record->event.pressed) {
126     mod_press(S(KC_9), KC_LALT, 0);
127 } else {
128     mod_lift(S(KC_9), KC_LALT, 0);
129 }
130 return false;
131 break;
132 case KC_T_RALT:
133 if (record->event.pressed) {
134     mod_press(S(KC_0), KC_RALT, 1);
135 } else {
136     mod_lift(S(KC_0), KC_RALT, 1);
137 }
138 return false;
139 break;
140
141 case KC_T_LGUI:
142 if (record->event.pressed) {
143     mod_press(KC_GRAVE, KC_LGUI, 2);
144 } else {
145     mod_lift(KC_GRAVE, KC_LGUI, 2);
146 }
147 return false;
148 break;
149 case KC_T_RGUI:
150 if (record->event.pressed) {
151     mod_press(KC_BSLASH, KC_RGUI, 3);
152 } else {
153     mod_lift(KC_BSLASH, KC_RGUI, 3);
154 }
155 return false;
156 break;
157
158 case KC_T_LCTL:
159 if (record->event.pressed) {
160     mod_press(KC_LBRACKET, KC_LCTL, 4);
161 } else {
162     mod_lift(KC_LBRACKET, KC_LCTL, 4);
163 }
164 return false;
165 break;
166 case KC_T_RCTL:
167 if (record->event.pressed) {
168     mod_press(KC_RBRACKET, KC_RCTL, 5);
169 } else {
170     mod_lift(KC_RBRACKET, KC_RCTL, 5);
171 }
172 return false;
173 break;
174
175 case KC_T_LSFT:
176 if (record->event.pressed) {
177     mod_press(KC_EQUAL, KC_LSFT, 6);
178 } else {
179     mod_lift(KC_EQUAL, KC_LSFT, 6);
180 }
181 return false;
182 break;
183 case KC_T_RSFT:
184 if (record->event.pressed) {
185     mod_press(KC_MINUS, KC_RSFT, 7);
186 } else {
187     mod_lift(KC_MINUS, KC_RSFT, 7);
188 }
189 return false;
190 break;
191
192 case KC_T_LRSE:
193 if (record->event.pressed) {
194     tap_timer = timer_read();
195     last_mod = 8;
196     layer_on(_RISE);
197 } else {
198     layer_off(_RISE);
199     if (last_mod == 8 && timer_elapsed(tap_timer) < TAPPING_TERM) {
200         tap_code16(KC_DELETE);
201         last_mod = 10;
202     }
203 }
204 return false;
205 break;
206 case KC_T_RRSE:
207 if (record->event.pressed) {
208     tap_timer = timer_read();
209     last_mod = 9;
210     layer_on(_RISE);
211 } else {
212     layer_off(_RISE);
213     if (last_mod == 9 && timer_elapsed(tap_timer) < TAPPING_TERM) {
214         tap_code16(KC_SLASH);
215         last_mod = 10;
216     }
217 }
218 return false;
219 break;
220
221 case KC_EZSHFT:
222 if (record->event.pressed) {
223     set_oneshot_mods(MOD_LSFT);
224     last_mod = 10;
225 }
226 return false;
227 break;
228 case KC_EZCTRL:
229 if (record->event.pressed) {
230     set_oneshot_mods(MOD_LCTL);
231     last_mod = 10;
232 }
233 return false;
234 break;
235 case KC_EZALT:
236 if (record->event.pressed) {
237     set_oneshot_mods(MOD_LALT);
238     last_mod = 10;
239 }
240 return false;
241 break;
242 case KC_EZGUI:
243 if (record->event.pressed) {
244     set_oneshot_mods(MOD_LGUI);
245     last_mod = 10;
246 }
247 return false;
248 break;
249
250 case KC_EZRGHT:
251 if (record->event.pressed) {
252     register_code(KC_LCTL);
253     tap_code16(S(KC_RGHT));
254     unregister_code(KC_LCTL);
255     last_mod = 10;
256 }
257 return false;
258 break;
259 case KC_EZLEFT:
260 if (record->event.pressed) {
261     register_code(KC_LCTL);
262     tap_code16(S(KC_LEFT));
263     unregister_code(KC_LCTL);
264     last_mod = 10;
265 }
266 return false;
267 break;
268 case KC_EZDOWN:
269 if (record->event.pressed) {
270     register_code(KC_LCTL);
271     tap_code16(S(KC_DOWN));
272     unregister_code(KC_LCTL);
273     last_mod = 10;
274 }
275 return false;
276 break;
277 case KC_EZUP:
278 if (record->event.pressed) {
279     register_code(KC_LCTL);
280     tap_code16(S(KC_UP));
281     unregister_code(KC_LCTL);
282     last_mod = 10;
283 }
284 return false;
285 break;
286
287 case KC_EZUNDO:
288 if (record->event.pressed) {
289     tap_code16(C(KC_Z));
290     last_mod = 10;
291 }
292 return false;
293 break;
294 case KC_EZCOPY:
295 if (record->event.pressed) {
296     tap_code16(C(KC_C));
297     last_mod = 10;
298 }
299 return false;
300 break;
301 case KC_EZCUT:
302 if (record->event.pressed) {
303     tap_code16(C(KC_X));
304     last_mod = 10;
305 }
306 return false;
307 break;
308 case KC_EZPSTE:
309 if (record->event.pressed) {
310     tap_code16(C(KC_V));
311     last_mod = 10;
312 }
313 return false;
314 break;
315
316 case KC_COM:
317 if (record->event.pressed) {
318     layer_on(_COMMAND);
319     set_oneshot_layer(_COMMAND, ONESHOT_START);
320     last_mod = 10;
321 } else {
322     clear_oneshot_layer_state (ONESHOT_PRESSED);
323 }
324 return false;
325 break;
326
327 case KC_USER:
328 if (record->event.pressed) {
329     send_string("mhostley");
330     last_mod = 10;
331 }
332 return true;
333 break;
334 case KC_EMAIL:
335 if (record->event.pressed) {
336     send_string("mhostley@gmail.com");
337     last_mod = 10;
338 }
339 return true;
340 break;
341 case KC_NAME:
342 if (record->event.pressed) {
343     send_string("Samuel Jahnke");
344     last_mod = 10;
345 }
346 return true;
347 break;
348 case KC_DIR:
349 if (record->event.pressed) {
350     send_string("home/mhostley/");
351     last_mod = 10;
352 }
353 return true;
354 break;
355
356 }
357 last_mod = 10;
358 return true;
359 }