@ -8,13 +8,14 @@
# define NUMP 2 // numpad
# define NUMP 2 // numpad
# define INTL 3 // international symbols
# define INTL 3 // international symbols
# define _______ KC_TRNS // Make the layouts easier to read
// Fillers to make layering more clear
# define _______ KC_TRNS
# define XXXXXXX KC_NO
enum custom_keycodes {
// Tap Dance Codes
PLACEHOLDER = SAFE_RANGE , // can always be here
enum {
EPRM ,
SLASH ,
VRSN ,
WHACK ,
RGB_SLD
} ;
} ;
const uint16_t PROGMEM keymaps [ ] [ MATRIX_ROWS ] [ MATRIX_COLS ] = {
const uint16_t PROGMEM keymaps [ ] [ MATRIX_ROWS ] [ MATRIX_COLS ] = {
@ -23,51 +24,51 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* layer 0 : default
/* layer 0 : default
*
*
* , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .
* , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .
* | ESC | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 8 | 9 | 0 | - | = | BCKSPC |
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 8 | 9 | 0 | - | = | BCKSPC |
* | - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - - - - - - | | - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - |
* | - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - - - - - - | | - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - |
* | TAB | Q | W | E | R | T | HOME | | PGUP | Y | U | I | O | P | DELETE |
* | TAB | Q | W | E | R | T | HOME | | PGUP | Y | U | I | O | P | DELETE |
* | - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - | | | | - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - |
* | - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - | | | | - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - |
* | INSERT | A | S | D | F | G | - - - - - - | | - - - - - - | H | J | K | L | ; | ENTER |
* | NOOP | A | S | D | F | G | - - - - - - | | - - - - - - | H | J | K | L | ; | ENTER |
* | - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - | END | | PGDN | - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - |
* | - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - | END | | PGDN | - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - |
* | ( / LSFT | Z | X | C | V | B | | | | N | M | , | . | / | ) / RSFT |
* | ( / LSFT | Z | X | C | V | B | | | | N | M | , | . | UP | ) / RSFT |
* ` - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - - - - - - ' ` - - - - - - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - '
* ` - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - - - - - - ' ` - - - - - - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - '
* | LCTRL | LGUI | | ' | PRTSCR | | [ | ] | \ | RGUI | RCTRL |
* | LCTRL | LGUI | MENU | ' | NOOP | | [ | ] | LEFT | DOWN | RIGHT |
* ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ' ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - '
* ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ' ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - '
* , - - - - - - - - - - - - - . , - - - - - - - - - - - - - .
* , - - - - - - - - - - - - - . , - - - - - - - - - - - - - .
* | VOL - | VOL + | | BRT - | BRT + |
* | PRTSCR | ESC | | VOL - | VOL + |
* , - - - - - - | - - - - - - | - - - - - - | | - - - - - - + - - - - - - + - - - - - - .
* , - - - - - - | - - - - - - | - - - - - - | | - - - - - - + - - - - - - + - - - - - - .
* | ALT / | | MUTE | | NUMLK | | ALT / |
* | ALT / | | NUMLK| | MUTE | | ALT / |
* | SPC | LAY1 | - - - - - - | | - - - - - - | LAY1 | SPC |
* | SPC | SLASH | - - - - - - | | - - - - - - | WHACK | SPC |
* | | | LAY3 | | LAY2 | | |
* | | | LAY3 | | LAY2 | | |
* ` - - - - - - - - - - - - - - - - - - - - ' ` - - - - - - - - - - - - - - - - - - - - '
* ` - - - - - - - - - - - - - - - - - - - - ' ` - - - - - - - - - - - - - - - - - - - - '
*/
*/
[ BASE ] = KEYMAP (
[ BASE ] = KEYMAP (
// left hand
// left hand
KC_ ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 ,
KC_ GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 ,
KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_HOME ,
KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_HOME ,
KC_INS, KC_A , KC_S , KC_D , KC_F , KC_G ,
XXXXXXX, KC_A , KC_S , KC_D , KC_F , KC_G ,
KC_LSPO , KC_Z , KC_X , KC_C , KC_V , KC_B , KC_END ,
KC_LSPO , KC_Z , KC_X , KC_C , KC_V , KC_B , KC_END ,
KC_LCTL , KC_LGUI , _______, KC_QUOT , KC_PSCR ,
KC_LCTL , KC_LGUI , KC_MENU, KC_QUOT , XXXXXXX ,
KC_ VOLD, KC_VOLU ,
KC_ INS, KC_ESC ,
KC_ MUTE ,
KC_ NLCK ,
ALT_T ( KC_SPC ) , MO( ARRW ) , TG ( INTL ) ,
ALT_T ( KC_SPC ) , TD( SLASH ) , TG ( INTL ) ,
// right hand
// right hand
KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS , KC_EQL , KC_BSPC ,
KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS , KC_EQL , KC_BSPC ,
KC_PGUP , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_DEL ,
KC_PGUP , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_DEL ,
KC_H , KC_J , KC_K , KC_L , KC_SCLN , KC_ENTER ,
KC_H , KC_J , KC_K , KC_L , KC_SCLN , KC_ENTER ,
KC_PGDN , KC_N , KC_M , KC_COMM , KC_DOT , KC_ SLSH, KC_RSPC ,
KC_PGDN , KC_N , KC_M , KC_COMM , KC_DOT , KC_ UP, KC_RSPC ,
KC_LBRC , KC_RBRC , KC_ BSLS, KC_RGUI , KC_RCTL ,
KC_LBRC , KC_RBRC , KC_ LEFT, KC_DOWN , KC_RGHT ,
KC_VOLD , KC_VOLU ,
KC_VOLD , KC_VOLU ,
KC_ NLCK ,
KC_ MUTE ,
TG ( NUMP ) , MO( ARRW ) , ALT_T ( KC_SPC )
TG ( NUMP ) , TD( WHACK ) , ALT_T ( KC_SPC )
) ,
) ,
/* layer 1 : functions and arrows
/* layer 1 : functions and arrows
*
*
* , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .
* , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .
* | SYSREQ | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | PAUSE |
* | | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | |
* | - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - - - - - - | | - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - |
* | - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - - - - - - | | - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - |
* | | | | UP | | | | | | | | | | | |
* | | | | UP | | | | | | | | | | | INSERT |
* | - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - | | | | - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - |
* | - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - | | | | - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - |
* | | | LEFT | DOWN | RIGHT | | - - - - - - | | - - - - - - | LEFT | DOWN | UP | RIGHT | | |
* | | | LEFT | DOWN | RIGHT | | - - - - - - | | - - - - - - | LEFT | DOWN | UP | RIGHT | | |
* | - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - | | | | - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - |
* | - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - | | | | - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - |
@ -76,26 +77,26 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | LEFT | DOWN | RIGHT |
* | | | | | | | | | LEFT | DOWN | RIGHT |
* ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ' ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - '
* ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ' ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - '
* , - - - - - - - - - - - - - . , - - - - - - - - - - - - - .
* , - - - - - - - - - - - - - . , - - - - - - - - - - - - - .
* | | | | | |
* | SYSREQ | PAUSE | | | |
* , - - - - - - | - - - - - - | - - - - - - | | - - - - - - + - - - - - - + - - - - - - .
* , - - - - - - | - - - - - - | - - - - - - | | - - - - - - + - - - - - - + - - - - - - .
* | | | | | | | |
* | | | SCRLK | | | | |
* | | | - - - - - - | | - - - - - - | | |
* | | | - - - - - - | | - - - - - - | | |
* | | | | | | | |
* | | | | | | | |
* ` - - - - - - - - - - - - - - - - - - - - ' ` - - - - - - - - - - - - - - - - - - - - '
* ` - - - - - - - - - - - - - - - - - - - - ' ` - - - - - - - - - - - - - - - - - - - - '
*/
*/
[ ARRW ] = KEYMAP (
[ ARRW ] = KEYMAP (
// left hand
// left hand
KC_SYSREQ, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 ,
_______, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 ,
_______ , _______ , _______ , KC_UP , _______ , _______ , _______ ,
_______ , _______ , _______ , KC_UP , _______ , _______ , _______ ,
_______ , _______ , KC_LEFT , KC_DOWN , KC_RGHT , _______ ,
_______ , _______ , KC_LEFT , KC_DOWN , KC_RGHT , _______ ,
_______ , _______ , _______ , _______ , _______ , _______ , _______ ,
_______ , _______ , _______ , _______ , _______ , _______ , _______ ,
_______ , _______ , _______ , _______ , _______ ,
_______ , _______ , _______ , _______ , _______ ,
_______, _______ ,
KC_SYSREQ, KC_PAUSE ,
_______ ,
KC_SLCK ,
_______ , _______ , _______ ,
_______ , _______ , _______ ,
// right hand
// right hand
KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_PAUSE ,
KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , _______ ,
_______ , _______ , _______ , _______ , _______ , _______ , _______ ,
_______ , _______ , _______ , _______ , _______ , _______ , KC_INS ,
KC_LEFT , KC_DOWN , KC_UP , KC_RGHT , _______ , _______ ,
KC_LEFT , KC_DOWN , KC_UP , KC_RGHT , _______ , _______ ,
_______ , _______ , _______ , _______ , _______ , KC_UP , _______ ,
_______ , _______ , _______ , _______ , _______ , KC_UP , _______ ,
_______ , _______ , KC_LEFT , KC_DOWN , KC_RGHT ,
_______ , _______ , KC_LEFT , KC_DOWN , KC_RGHT ,
@ -189,6 +190,87 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
) ,
) ,
} ;
} ;
// See https://github.com/algernon/ergodox-layout/blob/master/keymap.c
// When holding the SLASH or WHACK key, the ARRW layer activates while the key is held.
// Tapping the key produces the / or \ key. Double-tapping it toggles the ARRW layer
// on until a third tap.
typedef struct {
bool layer_toggle ;
bool sticky ;
} td_ta_state_t ;
static void ang_tap_dance_s_finished ( qk_tap_dance_state_t * state , void * user_data ) {
td_ta_state_t * td_ta = ( td_ta_state_t * ) user_data ;
if ( td_ta - > sticky ) {
td_ta - > sticky = false ;
td_ta - > layer_toggle = false ;
layer_off ( ARRW ) ;
return ;
}
if ( state - > count = = 1 & & ! state - > pressed ) {
register_code ( KC_SLSH ) ;
td_ta - > sticky = false ;
td_ta - > layer_toggle = false ;
} else {
td_ta - > layer_toggle = true ;
layer_on ( ARRW ) ;
td_ta - > sticky = ( state - > count = = 2 ) ;
}
}
static void ang_tap_dance_s_reset ( qk_tap_dance_state_t * state , void * user_data ) {
td_ta_state_t * td_ta = ( td_ta_state_t * ) user_data ;
if ( ! td_ta - > layer_toggle )
unregister_code ( KC_SLSH ) ;
if ( ! td_ta - > sticky )
layer_off ( ARRW ) ;
}
static void ang_tap_dance_w_finished ( qk_tap_dance_state_t * state , void * user_data ) {
td_ta_state_t * td_ta = ( td_ta_state_t * ) user_data ;
if ( td_ta - > sticky ) {
td_ta - > sticky = false ;
td_ta - > layer_toggle = false ;
layer_off ( ARRW ) ;
return ;
}
if ( state - > count = = 1 & & ! state - > pressed ) {
register_code ( KC_BSLS ) ;
td_ta - > sticky = false ;
td_ta - > layer_toggle = false ;
} else {
td_ta - > layer_toggle = true ;
layer_on ( ARRW ) ;
td_ta - > sticky = ( state - > count = = 2 ) ;
}
}
static void ang_tap_dance_w_reset ( qk_tap_dance_state_t * state , void * user_data ) {
td_ta_state_t * td_ta = ( td_ta_state_t * ) user_data ;
if ( ! td_ta - > layer_toggle )
unregister_code ( KC_BSLS ) ;
if ( ! td_ta - > sticky )
layer_off ( ARRW ) ;
}
qk_tap_dance_action_t tap_dance_actions [ ] = {
[ SLASH ] = {
. fn = { NULL , ang_tap_dance_s_finished , ang_tap_dance_s_reset } ,
. user_data = ( void * ) & ( ( td_ta_state_t ) { false , false } )
} ,
[ WHACK ] = {
. fn = { NULL , ang_tap_dance_w_finished , ang_tap_dance_w_reset } ,
. user_data = ( void * ) & ( ( td_ta_state_t ) { false , false } )
}
} ;
// Runs just one time when the keyboard initializes.
// Runs just one time when the keyboard initializes.
void matrix_init_user ( void ) {
void matrix_init_user ( void ) {