1 #include QMK_KEYBOARD_H
3 #include "action_layer.h"
8 PLACEHOLDER
= SAFE_RANGE
, // can always be here
38 // NOTE: Cells marked with ACCESS must remain transparent, they're the keys that actually get to that layer
40 const uint16_t PROGMEM keymaps
[][MATRIX_ROWS
][MATRIX_COLS
] = {
41 /* Keymap 0: Basic layer
43 * ,--------------------------------------------------. ,--------------------------------------------------.
44 * | ` | 1 | 2 | 3 | 4 | 5 | = | | L1 | 6 | 7 | 8 | 9 | 0 | - |
45 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
46 * | TAB | Q | W | E | R | T | L1 | | L2 | Y | U | I | O | P | \ |
47 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
48 * | Esc | A | S | D |LT 3,F| G |------| |------| H | J | K | L | ; | ' |
49 * |--------+------+------+------+------+------| L2 | |MO(3) |------+------+------+------+------+--------|
50 * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift |
51 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
52 * |LCTRL | F4 | F5 | LGUI | LALT | | Left | Down | Up | Right| RGUI |
53 * `----------------------------------' `----------------------------------'
54 * ,-------------. ,-------------.
55 * | Copy | Paste| | Copy | Paste |
56 * ,------|------|------| |------+--------+------.
57 * | | | PgUp | | PgDn | | |
58 * | Bcksp|OSL(2)|------| |------| Ent |Space |
59 * | | VIM | Del | | RCtrl| | |
60 * `--------------------' `----------------------'
62 // If it accepts an argument (i.e, is a function), it doesn't need KC_.
63 // Otherwise, it needs KC_*
64 [BASE
] = LAYOUT_ergodox( // layer 0 : default
66 KC_GRV
, KC_1
, KC_2
, KC_3
, KC_4
, KC_5
, KC_EQL
,
67 KC_TAB
, KC_Q
, KC_W
, KC_E
, KC_R
, KC_T
, TG(CODE
),
68 KC_ESC
, KC_A
, KC_S
, KC_D
, LT(VIM
, KC_F
),KC_G
,
69 OSM(MOD_LSFT
), CTL_T(KC_Z
), KC_X
, KC_C
, KC_V
, KC_B
, TG(SYMB
),
70 OSM(MOD_LCTL
), KC_F4
, KC_F5
, KC_LGUI
,KC_LALT
,
71 LCTL(KC_C
), LCTL(KC_V
),
73 KC_BSPC
,TD(TD_SYM_VIM
), KC_DEL
,
75 TG(CODE
), KC_6
, KC_7
, KC_8
, KC_9
, KC_0
, KC_MINS
,
76 TG(SYMB
), KC_Y
, KC_U
, KC_I
, KC_O
, KC_P
, KC_BSLS
,
77 KC_H
, KC_J
, KC_K
, KC_L
, KC_SCLN
, KC_QUOT
,
78 MO(MDIA
), KC_N
, KC_M
, KC_COMM
,KC_DOT
, CTL_T(KC_SLSH
), OSM(MOD_RSFT
),
79 KC_LEFT
,KC_DOWN
,KC_UP
, KC_RIGHT
, KC_RGUI
,
80 LCTL(KC_C
), LCTL(KC_V
),
82 KC_RCTL
, KC_ENT
, KC_SPC
84 /* Keymap 1: Code Layer
86 * ,--------------------------------------------------. ,--------------------------------------------------.
87 * | | | | | | | | |ACCESS| | | | | | |
88 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
89 * | | | | | | | F10 | | F11 | | | | | | |
90 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
91 * | | | | | | |------| |------| | | | | | |
92 * |--------+------+------+------+------+------| L2 | | |------+------+------+------+------+--------|
93 * | | | | | | | | | | | | | | | |
94 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
95 * | | | | | | | F12 |GoToIm| FAR | | |
96 * `----------------------------------' `----------------------------------'
97 * ,-------------. ,---------------.
98 * |Format|Build | | Copy | Paste |
99 * ,------|------|------| |------+--------+------.
100 * | | |Refact| |Sort U| | |
101 * | |ACCESS|------| |------| | |
103 * `--------------------' `----------------------'
105 // If it accepts an argument (i.e, is a function), it doesn't need KC_.
106 // Otherwise, it needs KC_*
107 [CODE
] = LAYOUT_ergodox( // layer 1 : code
109 KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
,
110 KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_F10
,
111 KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
,
112 KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, TG(SYMB
),
113 KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
,
116 KC_TRNS
, KC_TRNS
, KC_TRNS
,
119 KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
,
120 KC_F11
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
,
121 KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
,
122 KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
,
123 KC_F12
, M(GO_TO_IMPL
),M(FIND_ALL_REF
),KC_TRNS
, KC_TRNS
,
124 LCTL(KC_C
), LCTL(KC_V
),
125 M(REMOVE_SORT_USINGS
),
126 KC_TRNS
, KC_TRNS
, KC_TRNS
128 /* Keymap 2: Symbol Layer
130 * ,---------------------------------------------------. ,--------------------------------------------------.
131 * |Version | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
132 * |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
133 * | | ! | @ | ( | ) | | |ACCESS| |ACCESS| Up | 7 | 8 | 9 | * | F12 |
134 * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
135 * | | # | $ | { | } | ` |------| |------| Down | 4 | 5 | 6 | + | |
136 * |---------+------+------+------+------+------|ACCESS| | |------+------+------+------+------+--------|
137 * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
138 * `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
139 * | EPRM | | | | | | 0 | 0 | . | = | |
140 * `-----------------------------------' `----------------------------------'
141 * ,-------------. ,-------------.
143 * ,------|------|------| |------+------+------.
144 * | | |APScr | | | | |
145 * | |ACCESS|------| |------| | |
146 * | | | PScr | |ACCESS| | |
147 * `--------------------' `--------------------'
150 [SYMB
] = LAYOUT_ergodox(
152 VRSN
, KC_F1
, KC_F2
, KC_F3
, KC_F4
, KC_F5
, KC_TRNS
,
153 KC_TRNS
,KC_EXLM
,KC_AT
, KC_LPRN
,KC_RPRN
,KC_PIPE
,KC_TRNS
,
154 KC_TRNS
,KC_HASH
,KC_DLR
, KC_LCBR
,KC_RCBR
,KC_GRV
,
155 KC_TRNS
,KC_PERC
,KC_CIRC
,KC_LBRC
,KC_RBRC
,KC_TILD
,KC_TRNS
,
156 EPRM
,KC_TRNS
,KC_TRNS
,KC_TRNS
,KC_TRNS
,
159 KC_TRNS
,KC_TRNS
,KC_PSCR
,
161 KC_TRNS
, KC_F6
, KC_F7
, KC_F8
, KC_F9
, KC_F10
, KC_F11
,
162 KC_TRNS
, KC_UP
, KC_7
, KC_8
, KC_9
, KC_ASTR
, KC_F12
,
163 KC_DOWN
, KC_4
, KC_5
, KC_6
, KC_PLUS
, KC_TRNS
,
164 KC_TRNS
, KC_AMPR
, KC_1
, KC_2
, KC_3
, KC_BSLS
, KC_TRNS
,
165 KC_0
, KC_0
, KC_DOT
, KC_EQL
, KC_TRNS
,
168 KC_TRNS
, KC_TRNS
, KC_TRNS
170 /* Keymap 3: Media and mouse keys
172 * ,--------------------------------------------------. ,--------------------------------------------------.
173 * | | | | | | | | | | | | | | | |
174 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
175 * | | | | MsUp | | | | | | | | | | | |
176 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
177 * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | |
178 * |--------+------+------+------+------+------| | |ACCESS|------+------+------+------+------+--------|
179 * | | | | | | | | | | | | | | | |
180 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
181 * | | | | Lclk | Rclk | | | | | | |
182 * `----------------------------------' `----------------------------------'
183 * ,-------------. ,-------------.
184 * | Back+| Back-| | Vol+ | |
185 * ,------|------|------| |------+------+------.
186 * | | |BackTg| | Vol- | | |
187 * | | |------| |------| PL/PS| Next |
188 * | | | | | Back | | |
189 * `--------------------' `--------------------'
192 [MDIA
] = LAYOUT_ergodox(
193 KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
,
194 KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_MS_U
, KC_TRNS
, KC_TRNS
, KC_TRNS
,
195 KC_TRNS
, KC_TRNS
, KC_MS_L
, KC_MS_D
, KC_MS_R
, KC_TRNS
,
196 KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
,
197 KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_BTN1
, KC_BTN2
,
200 KC_TRNS
, KC_TRNS
, KC_TRNS
,
202 KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
,
203 KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
,
204 KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
,
205 KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
,
206 KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
,
209 KC_MPRV
, KC_MPLY
, KC_MNXT
211 /* Keymap 4: Movement
213 * ,--------------------------------------------------. ,--------------------------------------------------.
214 * | | | | | | | | | | | | | | | |
215 * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
216 * | |KOpen |KType |LSHFT | | | | | | Copy | | | | Paste| |
217 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
218 * | |DLeft |DRight|LCTRL | LGUI | |------| |------| Left | Down | Up | Right| | |
219 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
220 * | |SFT_TB| TAB | | | | | | | | | | | | |
221 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
222 * | | | | | | | | | | | |
223 * `----------------------------------' `----------------------------------'
224 * ,-------------. ,-------------.
225 * | | | | Home | End |
226 * ,------|------|------| |------+------+------.
228 * | |ACCESS|------| |------| | |
230 * `--------------------' `--------------------'
233 [VIM
] = LAYOUT_ergodox(
234 KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
,
235 KC_TRNS
, M(KEEPASS_OPEN
),M(KEEPASS_TYPE
),KC_LSFT
, KC_TRNS
, KC_TRNS
, KC_TRNS
,
236 KC_TRNS
, M(DLEFT
), M(DRIGHT
), KC_LCTL
, KC_LGUI
, KC_TRNS
,
237 KC_TRNS
, M(LSFT_TAB
), KC_TAB
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
,
238 KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
,
241 KC_TRNS
, KC_TRNS
, KC_TRNS
,
243 KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
,
244 KC_TRNS
, LCTL(KC_C
),KC_TRNS
, KC_TRNS
, KC_TRNS
, LCTL(KC_V
),KC_TRNS
,
245 KC_LEFT
, KC_DOWN
, KC_UP
, KC_RIGHT
,KC_TRNS
, KC_TRNS
,
246 KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
,
247 KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
, KC_TRNS
,
250 KC_TRNS
, KC_TRNS
, KC_TRNS
255 const uint16_t PROGMEM fn_actions
[] = {
256 [1] = ACTION_LAYER_TAP_TOGGLE(SYMB
) // FN1 - Momentary Layer 1 (Symbols)
259 const macro_t
*action_get_macro(keyrecord_t
*record
, uint8_t id
, uint8_t opt
)
261 // MACRODOWN only works in this function
264 if (record
->event
.pressed
) {
265 SEND_STRING (QMK_KEYBOARD
"/" QMK_KEYMAP
" @ " QMK_VERSION
);
269 if (record
->event
.pressed
) { // For resetting EEPROM
274 if (record
->event
.pressed
) { // Windows move desktop left
275 return MACRO(D(LCTL
), D(LGUI
), T(LEFT
), U(LGUI
), U(LCTL
), END
);
279 if (record
->event
.pressed
) { // Windows move desktop right
280 return MACRO(D(LCTL
), D(LGUI
), T(RIGHT
), U(LGUI
), U(LCTL
), END
);
284 if (record
->event
.pressed
) {
285 return MACRO(D(LALT
), T(PSCR
), U(LALT
), END
);
289 if (record
->event
.pressed
) {
290 return MACRO(D(LSFT
), T(TAB
), U(LSFT
), END
);
293 if (record
->event
.pressed
) { // VS Refactor CTRL+R, R
294 return MACRO(D(LCTL
), T(R
), U(LCTL
), T(R
), END
);
298 if (record
->event
.pressed
) { // VS Run Tests CTRL+R, T
299 return MACRO(D(LCTL
), T(R
), U(LCTL
), T(T
), END
);
303 if (record
->event
.pressed
) { // VS Debug Tests CTRL+R, CTRL+T
304 return MACRO(D(LCTL
), T(R
), T(T
), U(LCTL
), END
);
308 if (record
->event
.pressed
) { // VS Format Document, CTRL+K, CTRL+D
309 return MACRO(D(LCTL
), T(K
), T(D
), U(LCTL
), END
);
313 if (record
->event
.pressed
) { // VS Build. Sends CTRL+SHFT+B
314 return MACRO(D(LCTL
), D(LSFT
), T(B
), U(LSFT
), U(LCTL
), END
);
318 if (record
->event
.pressed
) { // VS Go To Implementation. Sends CTRL+F12
319 return MACRO(D(LCTL
), T(F12
), U(LCTL
), END
);
323 if (record
->event
.pressed
) { // VS Find All References. Sends CTRL+K, R
324 return MACRO(D(LCTL
), T(K
), U(LCTL
), T(R
), END
);
327 case REMOVE_SORT_USINGS
:
328 if (record
->event
.pressed
) {
329 return MACRO(D(LCTL
), T(R
), T(G
), U(LCTL
), END
);
333 if (record
->event
.pressed
) { // Keepass open application
334 return MACRO(D(LCTL
), D(LALT
), T(K
), U(LALT
), U(LCTL
), END
);
338 if (record
->event
.pressed
) { // Keepass autotype
339 return MACRO(D(LCTL
), D(LALT
), T(A
), U(LALT
), U(LCTL
), END
);
346 bool process_record_user(uint16_t keycode
, keyrecord_t
*record
) {
347 tap_dance_process_record(keycode
);
349 // dynamically generate these.
351 if (record
->event
.pressed
) {
357 if (record
->event
.pressed
) {
358 SEND_STRING (QMK_KEYBOARD
"/" QMK_KEYMAP
" @ " QMK_VERSION
);
366 // Runs just one time when the keyboard initializes.
367 void matrix_init_user(void) {
372 // Runs constantly in the background, in a loop.
373 void matrix_scan_user(void) {
374 ergodox_board_led_on();
375 ergodox_led_all_on();