parent
011039afca
commit
59c68702d5
@ -0,0 +1,122 @@
|
||||
/*
|
||||
Copyright 2018 Jacob Jerrell <jacob.jerrell@gmail.com>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "quantum.h"
|
||||
#include "sendstring_workman.h"
|
||||
|
||||
// Layers
|
||||
#define _HWRKMN 0
|
||||
#define _SWRKMN 1
|
||||
#define _NUMPAD 2
|
||||
#define _MOUSE 3
|
||||
#define _TOOLS 4
|
||||
|
||||
enum custom_keycodes {
|
||||
KC_EPRM = SAFE_RANGE,
|
||||
KC_SWRK,
|
||||
KC_HWRK,
|
||||
KC_VRSN,
|
||||
JJ_COPY,
|
||||
JJ_PASTE,
|
||||
KC_SECRET_1,
|
||||
KC_SECRET_2,
|
||||
KC_SECRET_3,
|
||||
KC_SECRET_4,
|
||||
KC_SECRET_5,
|
||||
};
|
||||
|
||||
enum {
|
||||
TD_ARRW = 0
|
||||
};
|
||||
|
||||
void dance_arrow (qk_tap_dance_state_t *state, void *user_data) {
|
||||
switch (state->count) {
|
||||
case 1:
|
||||
SEND_STRING("-");
|
||||
reset_tap_dance(state);
|
||||
break;
|
||||
case 2:
|
||||
SEND_STRING("->");
|
||||
reset_tap_dance(state);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
qk_tap_dance_action_t tap_dance_actions[] = {
|
||||
[TD_ARRW] = ACTION_TAP_DANCE_FN(dance_arrow)
|
||||
};
|
||||
|
||||
#define KC_SEC1 KC_SECRET_1
|
||||
#define KC_SEC2 KC_SECRET_2
|
||||
#define KC_SEC3 KC_SECRET_3
|
||||
#define KC_SEC4 KC_SECRET_4
|
||||
#define KC_SEC5 KC_SECRET_5
|
||||
|
||||
// Space Cadet Hyper/Meh and [/]
|
||||
#define HYP_LBK ALL_T(KC_LBRACKET)
|
||||
#define MEH_RBK MEH_T(KC_RBRACKET)
|
||||
|
||||
#define XXXXXXX KC_NO
|
||||
|
||||
#define LAYOUT_ergodox_pretty_wrapper(...) LAYOUT_ergodox_pretty(__VA_ARGS__)
|
||||
|
||||
/* Pretty Layout
|
||||
.---------------------------------------------. .---------------------------------------------.
|
||||
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | ! 8 | 9 | 10 | 11 | 12 | 13 | 14 |
|
||||
!-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
|
||||
| 15 | 16 | 17 | 18 | 19 | 20 | 21 | ! 22 | 23 | 24 | 25 | 26 | 27 | 28 |
|
||||
!-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
|
||||
| 29 | 30 | 31 | 32 | 33 | 34 |-------! !-------! 35 | 36 | 37 | 38 | 39 | 40 |
|
||||
!-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
|
||||
| 41 | 42 | 43 | 44 | 45 | 46 | 47 | ! 48 | 49 | 50 | 51 | 52 | 53 | 54 |
|
||||
'-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
|
||||
| 55 | 56 | 57 | 58 | 59 | .---------------. .---------------. ! 60 | 61 | 62 | 63 | 64 |
|
||||
'------------------------------' | 65 | 66 | ! 67 | 68 | '------------------------------'
|
||||
.-------+-------+-------! !-------+-------+-------.
|
||||
! ! | 69 | ! 70 | ! !
|
||||
! ! !-------! !-------! ! !
|
||||
| 71 | 72 | 73 | ! 74 | 75 | 76 |
|
||||
'-----------------------' '-----------------------'
|
||||
*/
|
||||
|
||||
#define _____________________ERGODOX_TOP_LEFT__________________ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, SH_TG
|
||||
#define _____________________ERGODOX_TOP_RIGHT_________________ TD_ARRW, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQUAL
|
||||
#define _____________________ERGODOX_BOTTOM_LEFT_______________ TG(_MOUSE), TG(_NUMPAD), XXXXXXX, KC_UP, KC_LEFT
|
||||
#define _____________________ERGODOX_BOTTOM_RIGHT______________ KC_RIGHT, KC_DOWN, KC_SEC1, KC_SEC2, TT(_TOOLS)
|
||||
|
||||
// LEFT | RIGHT
|
||||
#define _____________ERGODOX_THUMBS____________ KC_APP,KC_HOME, KC_PGUP,KC_ESC, \
|
||||
KC_END, KC_PGDOWN, \
|
||||
KC_SPACE,KC_BSPACE,JJ_COPY, JJ_PASTE,KC_TAB,KC_ENTER
|
||||
|
||||
// Software Driven Workman (basically QWERTY but I'm a purist)
|
||||
#define ______________SWORKMAN_L1______________ WK_Q, WK_D, WK_R, WK_W, WK_B
|
||||
#define ______________SWORKMAN_L2______________ WK_A, SFT_T(WK_S), GUI_T(WK_H), ALT_T(WK_T), WK_G
|
||||
#define ______________SWORKMAN_L3______________ CTL_T(WK_Z), WK_X, WK_M, WK_C, WK_V
|
||||
|
||||
#define ______________SWORKMAN_R1______________ WK_J, WK_F, WK_U, WK_P, WK_SCLN
|
||||
#define ______________SWORKMAN_R2______________ WK_Y, ALT_T(WK_N), GUI_T(WK_E), SFT_T(WK_O), WK_I
|
||||
#define ______________SWORKMAN_R3______________ WK_K, WK_L, KC_COMM, KC_DOT, CTL_T(KC_SLASH)
|
||||
|
||||
// Hardware Driven Workman
|
||||
#define ______________HWORKMAN_L1______________ KC_Q, KC_D, KC_R, KC_W, KC_B
|
||||
#define ______________HWORKMAN_L2______________ KC_A, SFT_T(KC_S), GUI_T(KC_H), ALT_T(KC_T), KC_G
|
||||
#define ______________HWORKMAN_L3______________ CTL_T(KC_Z), KC_X, KC_M, KC_C, KC_V
|
||||
|
||||
#define ______________HWORKMAN_R1______________ KC_J, KC_F, KC_U, KC_P, KC_SCLN
|
||||
#define ______________HWORKMAN_R2______________ KC_Y, ALT_T(KC_N), GUI_T(KC_E), SFT_T(KC_O), KC_I
|
||||
#define ______________HWORKMAN_R3______________ KC_K, KC_L, KC_COMM, KC_DOT, CTL_T(KC_SLASH)
|
@ -0,0 +1,43 @@
|
||||
#ifndef USERSPACE_CONFIG_H
|
||||
#define USERSPACE_CONFIG_H
|
||||
|
||||
#ifndef ONESHOT_TAP_TOGGLE
|
||||
#define ONESHOT_TAP_TOGGLE 2
|
||||
#endif // ONESHOT_TAP_TOGGLE
|
||||
|
||||
#ifndef ONESHOT_TIMEOUT
|
||||
#define ONESHOT_TIMEOUT 3000
|
||||
#endif // ONESHOT_TIMEOUT
|
||||
|
||||
#ifndef QMK_KEYS_PER_SCAN
|
||||
#define QMK_KEYS_PER_SCAN 4
|
||||
#endif // QMK KEYS PER SCAN
|
||||
|
||||
// Testing Autoshift
|
||||
#define NO_AUTO_SHIFT_SPECIAL
|
||||
#define NO_AUTO_SHIFT_NUMERIC
|
||||
#define AUTO_SHIFT_SETUP
|
||||
|
||||
// this makes it possible to do rolling combos (zx) with keys that
|
||||
// convert to other keys on hold (z becomes ctrl when you hold it,
|
||||
// and when this option isn't enabled, z rapidly followed by x
|
||||
// actually sends Ctrl-x. That's bad.)
|
||||
#define IGNORE_MOD_TAP_INTERRUPT
|
||||
#undef PERMISSIVE_HOLD
|
||||
#undef PREVENT_STUCK_MODIFIERS
|
||||
|
||||
#ifndef TAPPING_TOGGLE
|
||||
#define TAPPING_TOGGLE 2
|
||||
#endif
|
||||
|
||||
#ifdef TAPPING_TERM
|
||||
#undef TAPPING_TERM
|
||||
#endif
|
||||
#define TAPPING_TERM 200
|
||||
|
||||
// Disable action_get_macro and fn_actions, since we don't use these
|
||||
// and it saves on space in the firmware.
|
||||
#define NO_ACTION_MACRO
|
||||
#define NO_ACTION_FUNCTION
|
||||
|
||||
#endif // !USERSPACE_CONFIG_H
|
@ -0,0 +1,170 @@
|
||||
/*
|
||||
Copyright 2018 Jacob Jerrell <jacob.jerrell@gmail.com>
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include QMK_KEYBOARD_H
|
||||
#include "bocaj.h"
|
||||
#include "version.h"
|
||||
#include "action_layer.h"
|
||||
#include "secrets.h"
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[_HWRKMN] = LAYOUT_ergodox_pretty_wrapper(
|
||||
_____________________ERGODOX_TOP_LEFT__________________, _____________________ERGODOX_TOP_RIGHT_________________,
|
||||
KC_DEL,______________HWORKMAN_L1______________,KC_LPRN, KC_RPRN,______________HWORKMAN_R1______________,KC_BSLS,
|
||||
TT(_NUMPAD),______________HWORKMAN_L2______________, ______________HWORKMAN_R2______________,KC_QUOT,
|
||||
KC_LSFT,______________HWORKMAN_L3______________,HYP_LBK, MEH_RBK,______________HWORKMAN_R3______________,KC_RSFT,
|
||||
_____________________ERGODOX_BOTTOM_LEFT_______________, _____________________ERGODOX_BOTTOM_RIGHT______________,
|
||||
_____________ERGODOX_THUMBS____________
|
||||
),
|
||||
[_SWRKMN] = LAYOUT_ergodox_pretty_wrapper(
|
||||
_____________________ERGODOX_TOP_LEFT__________________, _____________________ERGODOX_TOP_RIGHT_________________,
|
||||
KC_DEL,______________SWORKMAN_L1______________,KC_LPRN, KC_RPRN,______________SWORKMAN_R1______________,KC_BSLS,
|
||||
TT(_NUMPAD),______________SWORKMAN_L2______________, ______________SWORKMAN_R2______________,KC_QUOT,
|
||||
KC_LSFT,______________SWORKMAN_L3______________,HYP_LBK, MEH_RBK,______________SWORKMAN_R3______________,KC_RSFT,
|
||||
_____________________ERGODOX_BOTTOM_LEFT_______________, _____________________ERGODOX_BOTTOM_RIGHT______________,
|
||||
_____________ERGODOX_THUMBS____________
|
||||
),
|
||||
[_NUMPAD] = LAYOUT_ergodox_pretty_wrapper(
|
||||
XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,_______, XXXXXXX,XXXXXXX,KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS,XXXXXXX,
|
||||
XXXXXXX,XXXXXXX,XXXXXXX, KC_UP ,XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX,XXXXXXX,KC_KP_7,KC_KP_8,KC_KP_9,KC_PPLS,XXXXXXX,
|
||||
_______,XXXXXXX,KC_LEFT,KC_DOWN,KC_RGHT,XXXXXXX, XXXXXXX,KC_KP_4,KC_KP_5,KC_KP_6,KC_PEQL,XXXXXXX,
|
||||
KC_LSFT,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX,XXXXXXX,KC_KP_1,KC_KP_2,KC_KP_3,KC_PENT,XXXXXXX,
|
||||
XXXXXXX,_______,XXXXXXX,KC_LALT,KC_LGUI, KC_KP_0,KC_PDOT,KC_COMM,KC_PENT,XXXXXXX,
|
||||
_____________ERGODOX_THUMBS____________
|
||||
),
|
||||
[_MOUSE] = LAYOUT_ergodox_pretty_wrapper(
|
||||
XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,_______, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,
|
||||
XXXXXXX,XXXXXXX,XXXXXXX,KC_MS_U,XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX,XXXXXXX,KC_WH_L,KC_WH_U,KC_WH_R,XXXXXXX,XXXXXXX,
|
||||
XXXXXXX,XXXXXXX,KC_MS_L,KC_MS_D,KC_MS_R,XXXXXXX, XXXXXXX,KC_ACL0,KC_ACL1,KC_ACL2,XXXXXXX,XXXXXXX,
|
||||
XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX,KC_WH_D,XXXXXXX,XXXXXXX,XXXXXXX,
|
||||
_______,XXXXXXX,XXXXXXX,XXXXXXX,KC_BTN1, KC_BTN2,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,
|
||||
_____________ERGODOX_THUMBS____________
|
||||
),
|
||||
[_TOOLS] = LAYOUT_ergodox_pretty_wrapper(
|
||||
XXXXXXX,KC_SEC1,KC_SEC2,KC_SEC3,KC_SEC4,KC_SEC5,KC_EPRM, KC_EPRM,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,
|
||||
XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,
|
||||
KC_ASTG,KC_ASDN,KC_ASUP,KC_ASRP,XXXXXXX,XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,
|
||||
XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,
|
||||
XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX,XXXXXXX,KC_HWRK,KC_SWRK,_______,
|
||||
_____________ERGODOX_THUMBS____________
|
||||
)
|
||||
};
|
||||
|
||||
const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* Left hand, matrix positions */
|
||||
{{0,13}, {1,13}, {2,13}, {3,13}, {4,13}, {5,13}},
|
||||
{{0,12}, {1,12}, {2,12}, {3,12}, {4,12}, {5,12}},
|
||||
{{0,11}, {1,11}, {2,11}, {3,11}, {4,11}, {5,11}},
|
||||
{{0,10}, {1,10}, {2,10}, {3,10}, {4,10}, {5,10}},
|
||||
{{0,9}, {1,9}, {2,9}, {3,9}, {4,9}, {5,9}},
|
||||
{{0,8}, {1,8}, {2,8}, {3,8}, {4,8}, {5,8}},
|
||||
{{0,7}, {1,7}, {2,7}, {3,7}, {4,7}, {5,7}},
|
||||
/* Right hand, matrix positions */
|
||||
{{0,6}, {1,6}, {2,6}, {3,6}, {4,6}, {5,6}},
|
||||
{{0,5}, {1,5}, {2,5}, {3,5}, {4,5}, {5,5}},
|
||||
{{0,4}, {1,4}, {2,4}, {3,4}, {4,4}, {5,4}},
|
||||
{{0,3}, {1,3}, {2,3}, {3,3}, {4,3}, {5,3}},
|
||||
{{0,2}, {1,2}, {2,2}, {3,2}, {4,2}, {5,2}},
|
||||
{{0,1}, {1,1}, {2,1}, {3,1}, {4,1}, {5,1}},
|
||||
{{0,0}, {1,0}, {2,0}, {3,0}, {4,0}, {5,0}},
|
||||
};
|
||||
|
||||
void matrix_init_keymap(void) { // Runs boot tasks for keyboard
|
||||
};
|
||||
|
||||
// Defines actions for my custom keycodes
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
switch (keycode) {
|
||||
// KC_COPY and KC_PASTE have problems with different hardware/software mappings
|
||||
// e.g. If the mappings conflict, KC_COPY will send Cmd+M which minimizes the window
|
||||
// JJ_COPY and JJ_PASTE fix this
|
||||
case JJ_COPY:
|
||||
if (!record->event.pressed) {
|
||||
SEND_STRING(SS_LGUI("c"));
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case JJ_PASTE:
|
||||
if (!record->event.pressed) {
|
||||
SEND_STRING(SS_LGUI("v"));
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case KC_SWRK:
|
||||
if (!record->event.pressed) {
|
||||
set_single_persistent_default_layer(_SWRKMN);
|
||||
layer_move(_SWRKMN);
|
||||
ergodox_blink_all_leds();
|
||||
ergodox_blink_all_leds();
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case KC_HWRK:
|
||||
if (!record->event.pressed) {
|
||||
set_single_persistent_default_layer(_HWRKMN);
|
||||
layer_move(_HWRKMN);
|
||||
ergodox_blink_all_leds();
|
||||
ergodox_blink_all_leds();
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case KC_EPRM:
|
||||
if (!record->event.pressed) {
|
||||
ergodox_blink_all_leds();
|
||||
eeconfig_init();
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case KC_VRSN:
|
||||
if (!record->event.pressed) {
|
||||
SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION ", Built on: " QMK_BUILDDATE);
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
case KC_SECRET_1 ... KC_SECRET_5: // Secrets! Externally defined strings, not stored in repo
|
||||
if (!record->event.pressed) {
|
||||
clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED);
|
||||
send_string_P(secret[keycode - KC_SECRET_1]);
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void matrix_scan_user(void) {
|
||||
uint8_t layer = biton32(layer_state);
|
||||
ergodox_board_led_off();
|
||||
ergodox_right_led_1_off();
|
||||
ergodox_right_led_2_off();
|
||||
ergodox_right_led_3_off();
|
||||
switch (layer) {
|
||||
case _NUMPAD:
|
||||
ergodox_right_led_3_on();
|
||||
ergodox_right_led_3_set(10);
|
||||
break;
|
||||
case _MOUSE:
|
||||
ergodox_right_led_2_on();
|
||||
ergodox_right_led_2_set(10);
|
||||
break;
|
||||
case _TOOLS:
|
||||
ergodox_right_led_3_on();
|
||||
ergodox_right_led_2_on();
|
||||
ergodox_right_led_3_set(10);
|
||||
ergodox_right_led_2_set(10);
|
||||
break;
|
||||
default:
|
||||
// none
|
||||
break;
|
||||
}
|
||||
};
|
@ -0,0 +1,5 @@
|
||||
AUTO_SHIFT_ENABLE = no
|
||||
COMMAND_ENABLE = no
|
||||
SWAP_HANDS_ENABLE = yes
|
||||
TAP_DANCE_ENABLE = yes
|
||||
EXTRAKEY_ENABLE = no
|
Loading…
Reference in new issue