1 #include QMK_KEYBOARD_H
3 #include "action_layer.h"
7 #define BASE 0 // default layer
8 #define FLOCK 1 // symbols arrows and F keys on F held down
9 #define JLOCK 2 // same as Flock but with fall thru J and mapped to J held down
10 #define CAPLOCK 3 //caps on until space / enter / esc
11 #define SFLOCK 11 // symbols arrows and F keys on F held down
12 #define SJLOCK 12 // same as Flock but with fall thru J and mapped to J held down
14 // Sends macro when key is tapped, presses mod when key is held
15 #define tap_mod_macro(record, mod, macro) ( ((record)->event.pressed) ? \
16 ( ((record)->tap.count <= 0 || (record)->tap.interrupted) ? MACRO(D(mod), END) : MACRO_NONE ) : \
17 ( ((record)->tap.count > 0 && !((record)->tap.interrupted)) ? (macro) : MACRO(U(mod), END) ) )
19 #define tap_mod_shift(record, mod, macro) ( ((record)->event.pressed) ? \
20 ( ((record)->tap.count <= 0 || (record)->tap.interrupted) ? MACRO(D(mod), END) : MACRO_NONE ) : \
21 ( ((record)->tap.count > 0 && !((record)->tap.interrupted)) ? (MACRO( D(LSFT), T(LBRC), U(LSFT), END)) : MACRO(U(mod), END) ) )
23 const uint16_t PROGMEM keymaps
[][MATRIX_ROWS
][MATRIX_COLS
] = {
26 * ,--------------------------------------------------. ,--------------------------------------------------.
27 * | | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | |
28 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
29 * | | Q | W | E | R | T | | | | Y | U | I | O | P | |
30 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
31 * | | A | S | D | F | G |------| |------| H | J | K | L |; | |
32 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
33 * | | Z | X | C | V | B | | | | N | M | , | . | | |
34 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
35 * | | | | | | | | | | | |
36 * `----------------------------------' `----------------------------------'
37 * ,-------------. ,-------------.
39 * ,------|------|------| |------+--------+------.
41 * | | |------| |------| | |
43 * `--------------------' `----------------------'
45 [BASE
] = LAYOUT_ergodox(
47 GUI_T(KC_ESC
), KC_1
, KC_2
, KC_3
, KC_4
, KC_5
, KC_MINS
,
48 _______
, KC_Q
, KC_W
, KC_E
, KC_R
, KC_T
, KC_TAB
,
49 _______
, SFT_T(KC_A
), ALT_T(KC_S
), CTL_T(KC_D
), F(FLOCK
), GUI_T(KC_G
),
50 _______
, KC_Z
, KC_X
, KC_C
, KC_V
, KC_B
, KC_BSPC
,
51 _______
, _______
, _______
, _______
,_______
,
54 KC_SPC
, _______
, _______
,
57 KC_EQL
, KC_6
, KC_7
, KC_8
, KC_9
, KC_0
, _______
,
58 KC_TAB
, KC_Y
, KC_U
, KC_I
, KC_O
, KC_P
, _______
,
59 GUI_T(KC_H
), F(JLOCK
), CTL_T(KC_K
), ALT_T(KC_L
), SFT_T(KC_SCLN
), _______
,
60 KC_DELETE
, KC_N
, KC_M
, KC_COMM
,KC_DOT
, KC_QUOT
, _______
,
61 _______
, _______
,_______
,_______
, _______
,
64 _______
,_______
, KC_ENT
66 [FLOCK
] = LAYOUT_ergodox(
68 XXXXXXX
, KC_F1
, KC_F2
, KC_F3
, KC_F4
, KC_F5
, KC_F11
,
69 XXXXXXX
,KC_LBRC
,XXXXXXX
, XXXXXXX
,XXXXXXX
,XXXXXXX
,XXXXXXX
,
70 XXXXXXX
,S(KC_LBRC
),XXXXXXX
, XXXXXXX
,_______
,XXXXXXX
,
71 XXXXXXX
,XXXXXXX
,XXXXXXX
,XXXXXXX
,XXXXXXX
,TO(CAPLOCK
),XXXXXXX
,
72 XXXXXXX
,XXXXXXX
,XXXXXXX
,XXXXXXX
,XXXXXXX
,
75 KC_ESC
,XXXXXXX
,XXXXXXX
,
77 KC_F12
, KC_F6
, KC_F7
, KC_F8
, KC_F9
, KC_F10
, XXXXXXX
,
78 XXXXXXX
, XXXXXXX
, KC_HOME
, KC_PGUP
, XXXXXXX
, KC_RBRC
, XXXXXXX
,
79 KC_LEFT
, KC_DOWN
, KC_UP
, KC_RIGHT
, S(KC_RBRC
), XXXXXXX
,
80 XXXXXXX
, XXXXXXX
, KC_END
, KC_PGDOWN
, KC_QUES
, KC_SLSH
, XXXXXXX
,
81 XXXXXXX
, XXXXXXX
, XXXXXXX
, XXXXXXX
, XXXXXXX
,
84 XXXXXXX
, XXXXXXX
, XXXXXXX
86 [JLOCK
] = LAYOUT_ergodox(
88 XXXXXXX
, KC_F1
, KC_F2
, KC_F3
, KC_F4
, KC_F5
, KC_F11
,
89 XXXXXXX
,KC_LBRC
,KC_GRV
, KC_TILD
,XXXXXXX
,XXXXXXX
,XXXXXXX
,
90 XXXXXXX
,S(KC_LBRC
),XXXXXXX
, XXXXXXX
,XXXXXXX
,XXXXXXX
,
91 XXXXXXX
,KC_BSLS
,KC_PIPE
,XXXXXXX
,XXXXXXX
,TO(CAPLOCK
),XXXXXXX
,
92 XXXXXXX
,XXXXXXX
,XXXXXXX
,XXXXXXX
,XXXXXXX
,
95 KC_ESC
,XXXXXXX
,XXXXXXX
,
97 KC_F12
, KC_F6
, KC_F7
, KC_F8
, KC_F9
, KC_F10
, XXXXXXX
,
98 XXXXXXX
, XXXXXXX
, XXXXXXX
, XXXXXXX
, XXXXXXX
, KC_RBRC
, XXXXXXX
,
99 XXXXXXX
, _______
, XXXXXXX
, XXXXXXX
, S(KC_RBRC
), XXXXXXX
,
100 XXXXXXX
, XXXXXXX
, XXXXXXX
, XXXXXXX
, XXXXXXX
, XXXXXXX
, XXXXXXX
,
101 XXXXXXX
,XXXXXXX
, XXXXXXX
, XXXXXXX
, XXXXXXX
,
104 XXXXXXX
, XXXXXXX
, XXXXXXX
106 [CAPLOCK
] = LAYOUT_ergodox(
108 TO(BASE
), _______
, _______
, _______
, _______
, _______
, _______
,
109 _______
, S(KC_Q
), S(KC_W
), S(KC_E
), S(KC_R
), S(KC_T
), _______
,
110 // _______, SFT_T(S(KC_A)), ALT_T(KC_S), CTL_T(KC_D), F(FLOCK), GUI_T(KC_G),
111 _______
, S(KC_A
), S(KC_S
), S(KC_D
), S(KC_F
), S(KC_G
),
112 _______
, S(KC_Z
), S(KC_X
), S(KC_C
), S(KC_V
), S(KC_B
), _______
,
113 _______
, _______
, _______
, _______
,_______
,
116 TO(BASE
), _______
, _______
,
119 _______
, _______
, _______
, _______
, _______
, _______
, _______
,
120 _______
, S(KC_Y
), S(KC_U
), S(KC_I
), S(KC_O
), S(KC_P
), _______
,
121 S(KC_H
), S(KC_J
), S(KC_K
), S(KC_L
), S(KC_SCLN
), _______
,
122 _______
, S(KC_N
), S(KC_M
), S(KC_COMM
),S(KC_DOT
), S(KC_QUOT
), _______
,
123 _______
, _______
,_______
,_______
, _______
,
126 _______
,_______
, TO(BASE
)
130 const macro_t
*action_get_macro(keyrecord_t
*record
, uint8_t id
, uint8_t opt
)
132 // MACRODOWN only works in this function
135 if (record
->event
.pressed
) {
136 SEND_STRING (QMK_KEYBOARD
"/" QMK_KEYMAP
" @ " QMK_VERSION
);
144 // Runs just one time when the keyboard initializes.
145 void matrix_init_user(void) {
150 // Runs constantly in the background, in a loop.
151 void matrix_scan_user(void) {
152 uint8_t layer
= biton32(layer_state
);
155 // TODO: Make this relevant to the ErgoDox EZ.