1 // This is the canonical layout file for the Quantum project. If you want to add another keyboard,
2 // this is the style you want to emulate.
4 // To flash planck firmware
5 // ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
6 // Reset keyboard or press hw reset button on base (hole)
8 // cd qmk_firmware/keyboards/planck
9 // sudo make KEYMAP=sdothum dfu
11 // sudo make clean (good practice before flashing)
12 // sudo make KEYMAP=sdothum (to compile check)
14 // Package requirements (for arch linux)
15 // ▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
22 // ** E R G O W I D E S P L I T ** Layout
24 // Autocompletion tap dance key pairs (),[],{} are available from the
25 // number/symbol layer, as well as, numerous (un)shift key values
27 // The navigation pad provides a single hand right thumb activated cluster
28 // with left hand modifiers
30 // #define PRIVATE_STRING includes private_string.h, a user defined code
31 // block for the PRIV tap dance e.g. SEND_STRING("secret messape"),
32 // see function private()
36 // The num and sym keys together access the navigation pad layer
38 // ,-----------------------------------------------------------------------------------.
39 // | Ctrl | GUI | Alt | Esc | Space| Tab | Bksp | Ent | Left | Down | Up | Right|
40 // `-----------------------------------------------------------------------------------'
44 // For sculpted keycaps such as Cherry or OEM profile, reverse the Alt, Num,
45 // Shift, Shift, Nav, Sym keycaps for more ergonomic thumb orientation and
50 // This source is shamelessly based on the "default" planck layout
52 // #ifdef/#endif block structures are not indented, as syntax highlighting
53 // in vim is sufficient for identification
55 // c++ commenting style is used throughout
59 // See http://thedarnedestthing.com/planck%20constant
60 // See http://thedarnedestthing.com/planck%20done
66 // sudo CPATH=<keymap.c directory>/common make ...
69 #include QMK_KEYBOARD_H
71 #include "keymap_steno.h"
74 extern keymap_config_t keymap_config
;
103 enum planck_keycodes
{
109 ,SM_CIRC
// pseudo GUI_T(S(KC_6)) for shifted key-codes, see process_record_user()
110 ,SM_DLR
// pseudo SFT_T(S(KC_4)) for shifted key-codes, see process_record_user()
111 ,SM_G
// pseudo MT (MOD_LALT | MOD_LSFT, S(KC_G)) for shifted key-codes, see process_record_user()
112 ,SM_PERC
// pseudo ALT_T(S(KC_5)) for shifted key-codes, see process_record_user()
113 ,SM_LPRN
// pseudo CTL_T(S(KC_9)) for shifted key-codes, see process_record_user()
114 ,SL_LEFT
// pseudo LT (_MOUSE, S(KC_LEFT)) for shifted key-codes, see process_record_user()
115 ,SP_DEL
// pseudo LT (_MOUSE, KC_DEL) for shifted key-codes, see process_record_user()
116 ,SL_PIPE
// pseudo LT (_ADJUST, S(KC_BSLS)) for shifted key-codes, see process_record_user()
117 ,SL_TAB
// pseudo LT (_FNCKEY, S(KC_TAB)) for shifted key-codes, see process_record_user()
127 ,LT_C
= LT (_NUMBER
, KC_C
)
128 ,LT_V
= LT (_FNCKEY
, KC_V
)
129 ,LT_N
= LT (_EDIT
, KC_N
)
130 ,LT_M
= LT (_SYMBOL
, KC_M
)
136 #define AT_B ALT_T(KC_B)
137 #define AT_DOWN ALT_T(KC_DOWN)
138 #define CT_RGHT CTL_T(KC_RGHT)
139 #define GT_C GUI_T(KC_C)
140 #define GT_UP GUI_T(KC_UP)
141 #define MT_E MT (MOD_LCTL | MOD_LALT, KC_E)
142 #define MT_X MT (MOD_LALT | MOD_LSFT, KC_X)
143 #define ST_A SFT_T(KC_A)
145 #define HOME_K CTL_T(KC_K)
146 #define HOME_H GUI_T(KC_H)
147 #define HOME_E ALT_T(KC_E)
148 #define HOME_A SFT_T(KC_A)
149 #if defined(BEAKLMU) || defined(BEAKLSP)
150 #define HOME_T SFT_T(KC_T)
151 #define HOME_R ALT_T(KC_R)
152 #define HOME_S GUI_T(KC_S)
153 #define HOME_W CTL_T(KC_W)
155 #define HOME_T SFT_T(KC_T)
156 #define HOME_S ALT_T(KC_S)
157 #define HOME_N GUI_T(KC_N)
158 #define HOME_B CTL_T(KC_B)
171 #define S_DOWN S (KC_DOWN)
172 #define S_LEFT S (KC_LEFT)
173 #define S_RGHT S (KC_RGHT)
174 #define S_TAB S (KC_TAB)
175 #define S_UP S (KC_UP)
177 #include "common/tapdance.h"
180 #define ___x___ KC_TRNS
181 #define ___fn__ KC_TRNS
183 #define _______ KC_NO
185 #define COPY LCTL(KC_C)
186 #define CUT LCTL(KC_X)
187 #define EOT LCTL(KC_D)
188 #define NAK LCTL(KC_U)
189 #define PASTE LCTL(KC_V)
190 #define UNDO LCTL(KC_Z)
191 #define TMCOPY LALT(LCTL(KC_C))
192 #define TMPASTE LALT(LCTL(KC_V))
193 #define LT_BSLS LT (_MOUSE, KC_BSLS) // see process_record_user() for extended handling
194 #define LT_BSPC LT (_EDIT, KC_BSPC)
195 #define SP_LEFT LT (_EDIT, KC_LEFT)
196 #define LT_ESC LT (_NUMBER, KC_ESC)
197 #define LT_LEFT LT (_SYMBOL, KC_LEFT) // see process_record_user() for extended handling
198 #define SP_BSPC LT (_SYMBOL, KC_BSPC) // see process_record_user() for extended handling
199 #define LT_TAB LT (_FNCKEY, KC_TAB)
200 #define LT_INS LT (_FNCKEY, KC_INS)
201 #define LT_ALTG LT (_FNCKEY, KC_RALT)
202 #define ADJUST MO (_ADJUST)
203 #define OS_ALT OSM (MOD_LALT)
204 #define OS_CTL OSM (MOD_LCTL)
205 #define OS_GUI OSM (MOD_LGUI)
206 #define OS_SFT OSM (MOD_LSFT)
207 #define OS_CALT OSM (MOD_LALT | MOD_LCTL)
208 #define OS_CGUI OSM (MOD_LGUI | MOD_LCTL)
209 #define OS_CSFT OSM (MOD_LSFT | MOD_LCTL)
210 #define OS_SALT OSM (MOD_LALT | MOD_LSFT)
211 #define OS_SGUI OSM (MOD_LGUI | MOD_LSFT)
215 #define CNTR_TL OSM (MOD_LSFT)
217 #define CNTR_TL TT (_TTFNCKEY)
219 #define CNTR_TR KC_CAPS
220 #define CNTR_HL TT (_TTCURSOR)
221 #define CNTR_HR TT (_TTMOUSE)
222 #define CNTR_BL TT (_TTNUMBER)
223 #define CNTR_BR TT (_TTREGEX)
225 #define CNTR_TL OSM (MOD_LALT | MOD_LCTL)
226 #define CNTR_TR OSM (MOD_LGUI | MOD_LCTL)
227 #define CNTR_HL OSM (MOD_LALT | MOD_LSFT)
228 #define CNTR_HR OSM (MOD_LGUI | MOD_LSFT)
229 #define CNTR_BL TD (_CAPS)
230 #define CNTR_BR OSM (MOD_LSFT | MOD_LCTL)
234 #define LT_EQL LT (_ADJUST, KC_EQL)
236 #define LT_0 LT (_ADJUST, KC_0)
238 #ifndef SHIFT_SYMBOLS
239 #define LT_A LT (_NUMSYM, KC_A)
240 #define LT_LFTX LT (_SYMREG, KC_LEFT)
243 // ........................................................ Default Alpha Layout
245 const uint16_t PROGMEM keymaps
[][MATRIX_ROWS
][MATRIX_COLS
] = {
250 #include "common/steno_layout.h"
252 // ...................................................... Number / Function Keys
254 #include "common/number_fkey_layout.h"
256 // ......................................................... Symbol / Navigation
258 #include "common/symbol_guifn_layout.h"
260 // ............................................................... Toggle Layers
263 #include "common/toggle_layout.h"
266 // ......................................................... Short Cuts / Adjust
268 #include "common/chord_layout.h"
272 // ...................................................................... Sounds
274 #include "common/sounds.h"
276 // ........................................................... User Keycode Trap
278 #include "common/keycode_functions.h"
283 static uint8_t base_n
= 0;
285 bool process_record_user(uint16_t keycode
, keyrecord_t
*record
)
289 if (record
->event
.pressed
) {
290 base_n
= base_n
| BASE_1
;
291 if (base_n
== BASE_12
) {
296 base_n
= base_n
& ~BASE_1
;
300 if (record
->event
.pressed
) {
301 base_n
= base_n
| BASE_2
;
302 if (base_n
== BASE_12
) {
307 base_n
= base_n
& ~BASE_2
;
313 #if defined(BEAKLMU) || defined(BEAKLSP)
319 tap_mods(record
, KC_LALT
);
324 #if defined(BEAKLMU) || defined(BEAKLSP)
330 tap_mods(record
, KC_LCTL
);
335 #if defined(BEAKLMU) || defined(BEAKLSP)
341 tap_mods(record
, KC_LGUI
);
346 tap_mods(record
, KC_LSFT
);
351 clear_tt(); // exit TT layer
356 if (tt_keycode
!= 0) {
357 clear_tt(); // exit TT layer
361 tap_layer(record
, _NUMBER
);
365 tap_layer(record
, _SYMBOL
);
366 // LT (_SYMBOL, KC_LEFT) left right combination layer
367 thumb_layer(record
, RIGHT
, 0, 0, _SYMBOL
, _LSHIFT
);
370 tap_mods(record
, KC_LALT
);
373 tap_mods(record
, KC_LCTL
);
376 tap_mods(record
, KC_LGUI
);
380 mt_shift(record
, KC_LGUI
, 0, KC_6
);
384 mt_shift(record
, KC_LSFT
, 0, KC_4
);
387 // MT(MOD_LALT | MOD_LSFT, S(KC_G))
388 mt_shift(record
, KC_LALT
, KC_LSFT
, KC_G
);
392 mt_shift(record
, KC_LCTL
, 0, KC_9
);
396 mt_shift(record
, KC_LALT
, 0, KC_5
);
399 tap_layer(record
, _MOUSE
);
400 // LT (_MOUSE, KC_BSLS) left right combination layer, see #define LT_BSLS
401 thumb_layer(record
, LEFT
, 0, 0, _MOUSE
, _SYMBOL
);
404 tap_layer(record
, _MOUSE
);
405 // LT (_MOUSE, S(KC_LEFT)) left right combination layer
406 thumb_layer(record
, RIGHT
, SHIFT
, KC_LEFT
, _MOUSE
, _LSHIFT
);
409 tap_layer(record
, _MOUSE
);
410 // LT (_MOUSE, S(KC_LEFT)) left right combination layer
411 thumb_layer(record
, RIGHT
, NOSHIFT
, KC_DEL
, _MOUSE
, _LSHIFT
);
414 // LT (_ADJUST, S(KC_BSLS)) emulation
415 lt_shift(record
, KC_BSLS
, _ADJUST
);
418 // LT (_FNCKEY, S(KC_TAB)) emulation
419 lt_shift(record
, KC_TAB
, _FNCKEY
);
422 tap_layer(record
, _RSHIFT
);
423 // LT (_RSHIFT, KC_ENT) emulation, see tap dance enter
426 tap_layer(record
, _LSHIFT
);
427 // LT (_LSHIFT, KC_SPC) left right combination layer, see tap dance TD_SPC
428 thumb_layer(record
, LEFT
, 0, 0, _LSHIFT
, _SYMBOL
);
437 if (tt_keycode
!= keycode
&& tt_keycode
!= 0) {
438 clear_tt(); // return to base layer first if different TT layer selected
440 tt_keycode
= keycode
;
443 // #ifdef STENO_ENABLE
445 // stn_layer(record, STN_A, _NUMBER);
448 // stn_layer(record, STN_O, _FNCKEY);
451 // stn_layer(record, STN_E, _EDIT);
454 // stn_layer(record, STN_U, _SYMBOL);
458 if (record
->event
.pressed
) {
472 #include "common/init.h"