2 Copyright 2018 Jacob Jerrell <jacob.jerrell@gmail.com>
3 This program is free software: you can redistribute it and/or modify
4 it under the terms of the GNU General Public License as published by
5 the Free Software Foundation, either version 2 of the License, or
6 (at your option) any later version.
7 This program is distributed in the hope that it will be useful,
8 but WITHOUT ANY WARRANTY; without even the implied warranty of
9 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 GNU General Public License for more details.
11 You should have received a copy of the GNU General Public License
12 along with this program. If not, see <http://www.gnu.org/licenses/>.
14 #include QMK_KEYBOARD_H
17 #ifdef UNICODEMAP_ENABLE
18 #include "bocaj_unicode.h"
19 #endif // UNICODEMAP_ENABLE
21 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
22 /* Software Workman / QWERTY - http://www.keyboard-layout-editor.com/#/gists/b6c016a22a9d31381a276a603a42fe5f
23 .---------------------------------------------. .---------------------------------------------.
24 | ESC | 1 | 2 | 3 | 4 | 5 | -> | ! - | 6 | 7 | 8 | 9 | 0 | = |
25 !-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
26 | DEL | Q | W | E | R | T | ( | ! ) | Y | U | I | O | P | \ |
27 !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
28 | ADJST | A | S | D | F | G |-------! !-------! H | J | K | L | ; | ' |
29 !-------+-----+-----+-----x-----x-----! HYP ! ! MEH !-----x-----x-----+-----+-----+-------!
30 | SHIFT | Z | X | C | V | B | { | ! } | N | M | , | . | / | SHIFT |
31 '-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
32 | GAME | NUM | VRS | UP | LFT | .---------------. .---------------. ! RGT | DWN | RSE | LWR | ADJ |
33 '------------------------------' | APP | HOME | ! PGUP | ESC | '------------------------------'
34 .-------+-------+-------! !-------+-------+-------.
35 ! SPACE ! | END | ! PGDN | ! ENTER !
36 ! / ! BSPCE !-------! !-------! TAB ! / !
37 | LOWER | | COPY | ! PASTE | | RAISE |
38 '-----------------------' '-----------------------'
40 [_SWRKMN] = LAYOUT_ergodox_pretty_wrapper(
41 KC_ESC, ______________________NUMBER_LEFT________________________, JJ_ARRW, KC_MINUS, ______________________NUMBER_RIGHT_______________________, KC_EQUAL,
42 KC_DEL, _______________________SWORKMAN_L1_______________________, KC_LPRN, KC_RPRN, _______________________SWORKMAN_R1_______________________, KC_BSLS,
43 KC_ADJS,_______________________SWORKMAN_L2_______________________, _______________________SWORKMAN_R2_______________________, KC_QUOTE,
44 KC_LSFT,_______________________SWORKMAN_L3_______________________, HYP_LBK, MEH_RBK, _______________________SWORKMAN_R3_______________________, KC_RSFT,
45 ___________________ERGODOX_BOTTOM_LEFT___________________, ___________________ERGODOX_BOTTOM_RIGHT__________________,
46 ______________________ERGODOX_THUMBS_____________________
48 /* Hardware Workman - http://www.keyboard-layout-editor.com/#/gists/7a07cb982ec3597ba3e3d947554225f1
49 .---------------------------------------------. .---------------------------------------------.
50 | ESC | 1 | 2 | 3 | 4 | 5 | -> | ! - | 6 | 7 | 8 | 9 | 0 | = |
51 !-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
52 | DEL | Q | D | R | W | B | ( | ! ) | J | F | U | P | ; | \ |
53 !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
54 | ADJST | A | S | H | T | G |-------! !-------! Y | N | E | O | I | ' |
55 !-------+-----+-----+-----x-----x-----! HYP ! ! MEH !-----x-----x-----+-----+-----+-------!
56 | SHIFT | Z | X | M | C | V | { | ! } | K | L | , | . | / | SHIFT |
57 '-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
58 | GAME | NUM | VRS | UP | LFT | .---------------. .---------------. ! RGT | DWN | RSE | LWR | ADJ |
59 '------------------------------' | APP | HOME | ! PGUP | ESC | '------------------------------'
60 .-------+-------+-------! !-------+-------+-------.
61 ! SPACE ! | END | ! PGDN | ! ENTER !
62 ! / ! BSPCE !-------! !-------! TAB ! / !
63 | LOWER | | COPY | ! PASTE | | RAISE |
64 '-----------------------' '-----------------------'
66 [_HWRKMN] = LAYOUT_ergodox_pretty_wrapper(
67 KC_ESC, ______________________NUMBER_LEFT________________________, JJ_ARRW, KC_MINUS, ______________________NUMBER_RIGHT_______________________, KC_EQUAL,
68 KC_DEL, _______________________HWORKMAN_L1_______________________, KC_LPRN, KC_RPRN, _______________________HWORKMAN_R1_______________________, KC_BSLS,
69 KC_ADJS,_______________________HWORKMAN_L2_______________________, _______________________HWORKMAN_R2_______________________, KC_QUOTE,
70 KC_LSFT,_______________________HWORKMAN_L3_______________________, HYP_LBK, MEH_RBK, _______________________HWORKMAN_R3_______________________, KC_RSFT,
71 ___________________ERGODOX_BOTTOM_LEFT___________________, ___________________ERGODOX_BOTTOM_RIGHT__________________,
72 ______________________ERGODOX_THUMBS_____________________
74 /* Lower - http://www.keyboard-layout-editor.com/#/gists/f1d745a88d1c48ab55e095efd9e7a43a
75 .---------------------------------------------. .---------------------------------------------.
76 | | F1 | F2 | F3 | F4 | F5 | | ! | F6 | F7 | F8 | F9 | F10 | |
77 !-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
78 | ` | 1 | 2 | 3 | 4 | 5 | | ! | 6 | 7 | 8 | 9 | 0 | |
79 !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
80 | | | | | | |-------! !-------! | | | | | |
81 !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
82 | | | | | | | | ! | | | | | | |
83 '-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
84 | | | | | | .---------------. .---------------. ! | | | | |
85 '------------------------------' | | | ! | | '------------------------------'
86 .-------+-------+-------! !-------+-------+-------.
88 ! ! !-------! !-------! ! !
90 '-----------------------' '-----------------------'
92 [_LOWER] = LAYOUT_ergodox_pretty_wrapper(
93 _______,_______________________FUNC_LEFT_________________________, _______, _______, _______________________FUNC_RIGHT________________________, _______,
94 KC_GRV ,______________________NUMBER_LEFT________________________, _______, _______, ______________________NUMBER_RIGHT_______________________, _______,
95 _______,_________________________________________________________, _________________________________________________________, _______,
96 _______,_________________________________________________________, _______, _______, _________________________________________________________, _______,
97 _________________________________________________________, _________________________________________________________,
98 ______________________ERGODOX_THUMBS_____________________
100 /* Raise - http://www.keyboard-layout-editor.com/#/gists/e0f591ec2ce9f24675a02d15c7048b25
101 .---------------------------------------------. .---------------------------------------------.
102 | | F1 | F2 | F3 | F4 | F5 | | ! _ | F6 | F7 | F8 | F9 | F10 | |
103 !-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
104 | ~ | ! | @ | # | $ | % | | ! | ^ | & | * | ( | ) | |
105 !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
106 | | | | | | |-------! !-------! | | | | | |
107 !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
108 | | | | | | | | ! | | | | | | |
109 '-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
110 | | | | | | .---------------. .---------------. ! | | | | |
111 '------------------------------' | | | ! | | '------------------------------'
112 .-------+-------+-------! !-------+-------+-------.
114 ! ! !-------! !-------! ! !
116 '-----------------------' '-----------------------'
118 [_RAISE] = LAYOUT_ergodox_pretty_wrapper(
119 _______,_______________________FUNC_LEFT_________________________, _______, KC_UNDS, _______________________FUNC_RIGHT________________________, _______,
120 KC_TILD,______________________SPECIAL_LEFT_______________________, _______, _______, ______________________SPECIAL_RIGHT______________________, _______,
121 _______,_________________________________________________________, _________________________________________________________, _______,
122 _______,_________________________________________________________, _______, _______, _________________________________________________________, _______,
123 _________________________________________________________, _________________________________________________________,
124 ______________________ERGODOX_THUMBS_____________________
126 /* Adjust - http://www.keyboard-layout-editor.com/#/gists/dedeae17b35a5d5f745a42aaea78f007
127 .---------------------------------------------. .---------------------------------------------.
128 | | | | | | | EPRM | ! EPRM | | | | | | |
129 !-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
130 | | | | | | | | ! | | 7 | 8 | 9 | * | |
131 !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
132 | | 🔇 | 🔉 | 🔊 | LCK | |-------! !-------! | 4 | 5 | 6 | + | SWRKM |
133 !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
134 | | | | | | | | ! | | 1 | 2 | 3 | - | HWRKM |
135 '-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
136 | | | | | | .---------------. .---------------. ! 0 | . | , | = | |
137 '------------------------------' | | | ! | | '------------------------------'
138 .-------+-------+-------! !-------+-------+-------.
140 ! ! !-------! !-------! ! !
142 '-----------------------' '-----------------------'
144 [_ADJUST] = LAYOUT_ergodox_pretty_wrapper(
145 XXXXXXX,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, KC_EPRM, KC_EPRM, XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, XXXXXXX,
146 XXXXXXX,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_7, KC_KP_8, KC_KP_9, KC_PAST, XXXXXXX,
147 _______,KC__MUTE, KC__VOLDOWN, KC__VOLUP, MC_LOCK, XXXXXXX, XXXXXXX, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, KC_SWRK,
148 XXXXXXX,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_1, KC_KP_2, KC_KP_3, KC_PMNS, KC_HWRK,
149 XXXXXXX,_______,XXXXXXX,XXXXXXX,XXXXXXX, KC_KP_0, KC_PDOT, KC_COMM, KC_PEQL, _______,
150 ______________________ERGODOX_THUMBS_____________________
152 // Diablo - http://www.keyboard-layout-editor.com/#/gists/28476e4237e77d4835ac8a9d7e5f9b2c
153 [_DIABLO] = LAYOUT_ergodox_pretty_wrapper(
154 KC_ESC , KC_V , KC_D ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
155 KC_TAB , KC_S , KC_I , KC_F , KC_T , KC_J ,XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_7, KC_KP_8, KC_KP_9, XXXXXXX, XXXXXXX,
156 KC_Q , KC_1 , KC_2 , KC_3 , KC_4 , KC_M , XXXXXXX, KC_KP_4, KC_KP_5, KC_KP_6, XXXXXXX, XXXXXXX,
157 KC_LSFT,KC_D3_1 ,KC_D3_2 ,KC_D3_3 ,KC_D3_4 ,XXXXXXX ,XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_1, KC_KP_2, KC_KP_3, XXXXXXX, XXXXXXX,
158 _______,ALT_T(KC_Z) ,KC_G ,KC_Y ,XXXXXXX , KC_KP_0, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
159 XXXXXXX, XXXXXXX, XXXXXXX,XXXXXXX,
161 KC_BTN1,KC_BTN2,KC_DIABLO_CLEAR, XXXXXXX,XXXXXXX,XXXXXXX
165 // Defines actions for my custom keycodes
166 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
168 // KC_COPY and KC_PASTE have problems with different hardware/software mappings
169 // e.g. If the mappings conflict, KC_COPY will send Cmd+M which minimizes the
170 // window and is very annoying. JJ_COPY and JJ_PASTE fix this by sending the
171 // raw character rather than the KC_* code
173 if (!record->event.pressed) {
174 SEND_STRING(SS_LGUI("c"));
179 if (!record->event.pressed) {
180 SEND_STRING(SS_LGUI("v"));
185 if (!record->event.pressed) {
191 if (!record->event.pressed) {
192 set_single_persistent_default_layer(_SWRKMN);
194 ergodox_blink_all_leds();
195 ergodox_blink_all_leds();
200 if (!record->event.pressed) {
201 set_single_persistent_default_layer(_HWRKMN);
203 ergodox_blink_all_leds();
204 ergodox_blink_all_leds();
209 if (!record->event.pressed) {
210 ergodox_blink_all_leds();
216 if (!record->event.pressed) {
218 SEND_STRING(SS_LCTRL(SS_LGUI("q")));
222 case KC_DIABLO_CLEAR:
223 #ifdef TAP_DANCE_ENABLE
224 if (record->event.pressed) {
226 for (dtime = 0; dtime < 4; dtime++) {
227 diablo_key_time[dtime] = diablo_times[0];
230 #endif // TAP_DANCE_ENABLE
237 void tap(uint16_t keycode){ register_code(keycode); unregister_code(keycode); };
239 // Diablo III Fun stuff
240 //define diablo macro timer variables
241 uint16_t diablo_timer[4];
242 uint8_t diablo_times[] = { 0, 1, 3, 5, 10, 30 };
243 uint8_t diablo_key_time[4];
245 // has the correct number of seconds elapsed (as defined by diablo_times)
246 bool check_dtimer(uint8_t dtimer) { return (timer_elapsed(diablo_timer[dtimer]) < (diablo_key_time[dtimer] * 1000)) ? false : true; };
248 // Cycle through the times for the macro, starting at 0, for disabled.
249 // Max of six values, so don't exceed
250 void diablo_tapdance_master(qk_tap_dance_state_t *state, void *user_data, uint8_t diablo_key) {
251 if (state->count >= 7) {
252 diablo_key_time[diablo_key] = diablo_times[0];
253 reset_tap_dance(state);
255 diablo_key_time[diablo_key] = diablo_times[state->count - 1];
259 // Would rather have one function for all of this, but no idea how to do that...
260 void diablo_tapdance1(qk_tap_dance_state_t *state, void *user_data) { diablo_tapdance_master(state, user_data, 0); }
261 void diablo_tapdance2(qk_tap_dance_state_t *state, void *user_data) { diablo_tapdance_master(state, user_data, 1); }
262 void diablo_tapdance3(qk_tap_dance_state_t *state, void *user_data) { diablo_tapdance_master(state, user_data, 2); }
263 void diablo_tapdance4(qk_tap_dance_state_t *state, void *user_data) { diablo_tapdance_master(state, user_data, 3); }
265 //Tap Dance Definitions
266 qk_tap_dance_action_t tap_dance_actions[] = {
267 // tap once to disable, and more to enable timed micros
268 [TD_D3_1] = ACTION_TAP_DANCE_FN(diablo_tapdance1),
269 [TD_D3_2] = ACTION_TAP_DANCE_FN(diablo_tapdance2),
270 [TD_D3_3] = ACTION_TAP_DANCE_FN(diablo_tapdance3),
271 [TD_D3_4] = ACTION_TAP_DANCE_FN(diablo_tapdance4),
274 // Sends the key press to system, but only if on the Diablo layer
275 void send_diablo_keystroke(uint8_t diablo_key) {
276 if (biton32(layer_state) == _DIABLO) {
277 switch (diablo_key) {
290 // Checks each of the 4 timers/keys to see if enough time has elapsed
291 // Runs the "send string" command if enough time has passed, and resets the timer.
292 void run_diablo_macro_check(void) {
294 for (dtime = 0; dtime < 4; dtime++) {
295 if (check_dtimer(dtime) && diablo_key_time[dtime]) {
296 diablo_timer[dtime] = timer_read();
297 send_diablo_keystroke(dtime);
302 void matrix_scan_user(void) {
303 uint8_t layer = biton32(layer_state);
304 ergodox_board_led_off();
305 ergodox_right_led_1_off();
306 ergodox_right_led_2_off();
307 ergodox_right_led_3_off();
310 Lights are treated as binary here for easy identification.
311 LED1 = 4; LED2 = 2; LED1 = 1
312 This allows for up to 8 identified layers (default layers being no lights on)
313 Which is way more than I should ever need
316 ergodox_right_led_3_on();
317 ergodox_right_led_3_set(10); // Default brightness is deadly in a dark room
320 ergodox_right_led_2_on();
321 ergodox_right_led_2_set(10);
324 ergodox_right_led_2_on();
325 ergodox_right_led_2_set(10);
326 ergodox_right_led_3_on();
327 ergodox_right_led_3_set(10);
330 ergodox_right_led_1_on();
331 ergodox_right_led_1_set(10);
337 #ifdef TAP_DANCE_ENABLE
338 run_diablo_macro_check();