2
0

keymap.c 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611
  1. #include QMK_KEYBOARD_H
  2. extern keymap_config_t keymap_config;
  3. enum kinesis_layers {
  4. _COLEMAK, // Colemak (default layer)
  5. _QWERTY, // Qwerty
  6. _NUMBERS, // Numbers & Symbols
  7. _NUMBERS2, // Numbers & Symbols 2 (identical as _NUMBERS; basically used for tri-layer access to _ADJUST)
  8. _FUNCTION, // Function
  9. _FUNCTION2, // Function 2 (identical as _FUNCTION; used to allow for easier use of space and backspace while using function layer arrows)
  10. _NUMPAD, // Numpad
  11. _COLEMAKGM, // Colemak gaming/vanilla (no dual-role keys with layer access)
  12. _QWERTYGM, // QWERTY gaming/vanilla (no dual-role keys with layer access)
  13. _ADJUST, // Adjust layer, accessed via tri-layer feature)
  14. _ADJUST2 // Second Adjust layer, accessed outside of tri-layer feature)
  15. };
  16. enum kinesis_keycodes {
  17. COLEMAK = SAFE_RANGE,
  18. QWERTY,
  19. COLEMAKGM,
  20. QWERTYGM,
  21. NUMPAD = TG(_NUMPAD),
  22. ADJUST = MO(_ADJUST2),
  23. SPCFN = LT(_FUNCTION, KC_SPC),
  24. BSPCFN = LT(_FUNCTION2, KC_BSPC),
  25. ENTNS = LT(_NUMBERS, KC_ENT),
  26. DELNS = LT(_NUMBERS2, KC_DEL),
  27. CTLESC = CTL_T(KC_ESC),
  28. ALTAPP = ALT_T(KC_APP),
  29. NKROTG = MAGIC_TOGGLE_NKRO
  30. };
  31. #define _______ KC_TRNS
  32. #define XXXXXXX KC_NO
  33. //Tap Dance Declarations
  34. enum {
  35. ADJ = 0,
  36. LBCB,
  37. RBCB,
  38. EQPL,
  39. PLEQ,
  40. MNUN,
  41. SLAS,
  42. GVTL,
  43. PPLEQ,
  44. PMNUN,
  45. PSLPAS
  46. };
  47. void dance_LAYER_finished(qk_tap_dance_state_t *state, void *user_data) {
  48. if (state->count == 2) {
  49. layer_on(_ADJUST2);
  50. set_oneshot_layer(_ADJUST2, ONESHOT_START);
  51. }
  52. }
  53. void dance_LAYER_reset(qk_tap_dance_state_t *state, void *user_data) {
  54. if (state->count == 2) {
  55. layer_off(_ADJUST2);
  56. clear_oneshot_layer_state(ONESHOT_PRESSED);
  57. }
  58. }
  59. qk_tap_dance_action_t tap_dance_actions[] = {
  60. [ADJ] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_LAYER_finished, dance_LAYER_reset), // Double-tap to activate Adjust layer via oneshot layer
  61. [LBCB] = ACTION_TAP_DANCE_DOUBLE(KC_LBRC, KC_LCBR), // Left bracket on a single-tap, left brace on a double-tap
  62. [RBCB] = ACTION_TAP_DANCE_DOUBLE(KC_RBRC, KC_RCBR), // Right bracket on a single-tap, right brace on a double-tap
  63. [EQPL] = ACTION_TAP_DANCE_DOUBLE(KC_EQL, KC_PLUS), // Plus sign on a single-tap, equal sign on a double-tap
  64. [PLEQ] = ACTION_TAP_DANCE_DOUBLE(KC_PLUS, KC_EQL), // Equal sign on a single-tap, plus sign on a double-tap
  65. [MNUN] = ACTION_TAP_DANCE_DOUBLE(KC_MINS, KC_UNDS), // Minus sign on a single-tap, underscore on a double-tap
  66. [SLAS] = ACTION_TAP_DANCE_DOUBLE(KC_SLSH, KC_ASTR), // Slash in a single-tap, asterisk in a double-tap
  67. [GVTL] = ACTION_TAP_DANCE_DOUBLE(KC_GRV, KC_TILD), // Grave on a single-tap, tilde on a double-tap
  68. [PPLEQ] = ACTION_TAP_DANCE_DOUBLE(KC_PPLS, KC_EQL), // Numpad plus sign on a single-tap, equal sign on a double-tap
  69. [PMNUN] = ACTION_TAP_DANCE_DOUBLE(KC_PMNS, KC_UNDS), // Numpad minus sign on a single-tap, underscore on a double-tap
  70. [PSLPAS] = ACTION_TAP_DANCE_DOUBLE(KC_PSLS, KC_PAST) // Numpad slash on a single-tap, numpad asterisk on a double-tap
  71. };
  72. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  73. /* Fundtion Row Keys
  74. / (Identical across layers, unless otherwise noted; Numpad is a toggle; Adjust is mometary)
  75. * ,-----------------------------------------------------------------------------------------------------------.
  76. * | ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | PScr| SLck| Paus|Numpd|Adjst|
  77. * `-----------------------------------------------------------------------------------------------------------'
  78. */
  79. /* Colemak
  80. * (Defauit layer; keys separated by /: tap for first, hold for second; uses Space Cadet Shifts)
  81. * ,-------------------------------------------. ,-------------------------------------------.
  82. * | = | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - |
  83. * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
  84. * | Tab | Q | W | F | P | G | | J | L | U | Y | ; | \ |
  85. * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
  86. * |Esc/Ctrl| A | R | S | T | D | | H | N | E | I | O | ' |
  87. * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
  88. * |SC Shift| Z | X | C | V | B | | K | M | , | . | / |SC Shift|
  89. * `--------+------+------+------+------+------' `------+------+------+------+------+--------'
  90. * | Ins | ` | [ | ] | | Left | Down | Up | Right|
  91. * `---------------------------' `---------------------------'
  92. * ,---------------. ,---------------.
  93. * |Esc/Ctl| Hyper | | RAlt | RCtl |
  94. * ,-------|-------|-------| |-------+-------+-------.
  95. * | Space | Enter |App/Alt| | RGUI | Delete| Bspc |
  96. * | / | / |-------| |-------| / | / |
  97. * | Fn | Number| Bspc | | Enter |Number2| Fn2 |
  98. * `-----------------------' `-----------------------'
  99. */
  100. [_COLEMAK] = LAYOUT(
  101. // Left Hand
  102. KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8,
  103. KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5,
  104. KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G,
  105. CTLESC, KC_A, KC_R, KC_S, KC_T, KC_D,
  106. KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B,
  107. KC_INS, KC_GRV, KC_LBRC, KC_RBRC,
  108. //Left Thumb
  109. CTLESC, ALL_T(KC_NO),
  110. ALTAPP,
  111. SPCFN, ENTNS, KC_BSPC,
  112. //Right Hand
  113. KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, NUMPAD, ADJUST,
  114. KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
  115. KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS,
  116. KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
  117. KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC,
  118. KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
  119. //Right Thumb
  120. KC_RALT, KC_RCTL,
  121. KC_RGUI,
  122. KC_ENT, DELNS, BSPCFN
  123. ),
  124. /* QWERTY
  125. * (Keys separated by /: tap for first, hold for second; uses Space Cadet Shifts)
  126. * ,-------------------------------------------. ,-------------------------------------------.
  127. * | = | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - |
  128. * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
  129. * | Tab | Q | W | E | R | T | | Y | U | I | O | P | \ |
  130. * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
  131. * |Esc/Ctrl| A | S | D | F | G | | H | J | K | L | ; | ' |
  132. * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
  133. * |SC Shift| Z | X | C | V | B | | N | M | , | . | / |SC Shift|
  134. * `--------+------+------+------+------+------' `------+------+------+------+------+--------'
  135. * | Ins | ` | [ | ] | | Left | Down | Up | Right|
  136. * `---------------------------' `---------------------------'
  137. * ,---------------. ,---------------.
  138. * |Esc/Ctl| Hyper | | RAlt | RCtl |
  139. * ,-------|-------|-------| |-------+-------+-------.
  140. * | Space | Enter |App/Alt| | RGUI | Delete| Bspc |
  141. * | / | / |-------| |-------| / | / |
  142. * | Fn | Number| Bspc | | Enter |Number2| Fn2 |
  143. * `-----------------------' `-----------------------'
  144. */
  145. [_QWERTY] = LAYOUT(
  146. // Left Hand
  147. KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8,
  148. KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5,
  149. KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T,
  150. CTLESC, KC_A, KC_S, KC_D, KC_F, KC_G,
  151. KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B,
  152. KC_INS, KC_GRV, KC_LBRC, KC_RBRC,
  153. //Left Thumb
  154. CTLESC, ALL_T(KC_NO),
  155. ALTAPP,
  156. SPCFN, ENTNS, KC_BSPC,
  157. //Right Hand
  158. KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, NUMPAD, ADJUST,
  159. KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
  160. KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
  161. KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
  162. KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC,
  163. KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
  164. //Right Thumb
  165. KC_RALT, KC_RCTL,
  166. KC_RGUI,
  167. KC_ENT, DELNS, BSPCFN
  168. ),
  169. /* Number/symbol layer
  170. * (Multiple characters: single-tap for first, double-tap for second)
  171. * ,-------------------------------------------. ,-------------------------------------------.
  172. * | F12 | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
  173. * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
  174. * | | 6 | 7 | 8 | 9 | 0 | | ^ | & | * | ( | ) | |
  175. * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
  176. * | | 1 | 2 | 3 | 4 | 5 | | ! | @ | # | $ | % | |
  177. * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
  178. * | | | . | / * | - _ | + = | | ` ~ | [ { | ] } | | | |
  179. * `--------+------+------+------+------+------' `------+------+------+------+------+--------'
  180. * | ( | ) | [ { | ] } | | | | | |
  181. * `---------------------------' `---------------------------'
  182. * ,---------------. ,---------------.
  183. * | | | | | |
  184. * ,-------|-------|-------| |-------+-------+-------.
  185. * | | | | | | | |
  186. * | | |-------| |-------| | |
  187. * | | | | | | | |
  188. * `-----------------------' `-----------------------'
  189. */
  190. [_NUMBERS] = LAYOUT(
  191. // Left Hand
  192. _______, _______, _______, _______, _______, _______, _______, _______, _______,
  193. KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5,
  194. _______, KC_6, KC_7, KC_8, KC_9, KC_0,
  195. _______, KC_1, KC_2, KC_3, KC_4, KC_5,
  196. _______, _______, KC_DOT, TD(SLAS), TD(MNUN), TD(PLEQ),
  197. KC_LPRN, KC_RPRN, TD(LBCB), TD(RBCB),
  198. // Left Thumb
  199. _______, _______,
  200. _______,
  201. _______, _______, _______,
  202. // Right Hand
  203. _______, _______, _______, _______, _______, _______, _______, _______, _______,
  204. KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
  205. KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
  206. KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______,
  207. TD(GVTL), TD(LBCB), TD(RBCB), _______, _______, _______,
  208. _______, _______, _______, _______,
  209. // Right Thumb
  210. _______, _______,
  211. _______,
  212. _______, _______, _______
  213. ),
  214. [_NUMBERS2] = LAYOUT(
  215. // Left Hand
  216. _______, _______, _______, _______, _______, _______, _______, _______, _______,
  217. KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5,
  218. _______, KC_6, KC_7, KC_8, KC_9, KC_0,
  219. _______, KC_1, KC_2, KC_3, KC_4, KC_5,
  220. _______, _______, KC_DOT, TD(SLAS), TD(MNUN), TD(PLEQ),
  221. KC_LPRN, KC_RPRN, TD(LBCB), TD(RBCB),
  222. // Left Thumb
  223. _______, _______,
  224. _______,
  225. _______, _______, _______,
  226. // Right Hand
  227. _______, _______, _______, _______, _______, _______, _______, _______, _______,
  228. KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
  229. KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
  230. KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______,
  231. TD(GVTL), TD(LBCB), TD(RBCB), _______, _______, _______,
  232. _______, _______, _______, _______,
  233. // Right Thumb
  234. _______, _______,
  235. _______,
  236. _______, _______, _______
  237. ),
  238. /* Function layer
  239. * ,-------------------------------------------. ,-------------------------------------------.
  240. * | F12 | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
  241. * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
  242. * | | | | Up | | | | | | Up |Ctrl+Y| | |
  243. * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
  244. * | |Ctrl+A| Left | Down | Right|C+A+Tb| | PgUp | Right| Down | Left | Home | |
  245. * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
  246. * | |Ctrl+Z|Ctrl+X|Ctrl+C|Ctrl+V| Bspc | | PgDn | Mute | Vol- | Vol+ | End | |
  247. * `--------+------+------+------+------+------' `------+------+------+------+------+--------'
  248. * | | | | | | Prev | Play | Next | Stop |
  249. * `---------------------------' `---------------------------'
  250. * ,---------------. ,---------------.
  251. * | | | | | |
  252. * ,-------|-------|-------| |-------+-------+-------.
  253. * | | | | | | | |
  254. * | | |-------| |-------| | |
  255. * | | | | | | | |
  256. * `-----------------------' `-----------------------'
  257. */
  258. [_FUNCTION] = LAYOUT(
  259. // Left Hand
  260. _______, _______, _______, _______, _______, _______, _______, _______, _______,
  261. KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5,
  262. _______, _______, _______, KC_UP, _______, _______,
  263. _______, LCTL(KC_A), KC_LEFT, KC_DOWN, KC_RGHT, LCA(KC_TAB),
  264. _______, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), KC_BSPC,
  265. _______, _______, _______, _______,
  266. // Left Thumb
  267. _______, _______,
  268. _______,
  269. _______, _______, _______,
  270. // Right Hand
  271. _______, _______, _______, _______, _______, _______, _______, _______, _______,
  272. KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
  273. _______, _______, KC_UP, LCTL(KC_Y), _______, _______,
  274. KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, _______,
  275. KC_PGDN, KC_MUTE, KC_VOLD, KC_VOLU, KC_END, _______,
  276. KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP,
  277. // Right Thumb
  278. _______, _______,
  279. _______,
  280. _______, _______, _______
  281. ),
  282. [_FUNCTION2] = LAYOUT(
  283. // Left Hand
  284. _______, _______, _______, _______, _______, _______, _______, _______, _______,
  285. KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5,
  286. _______, _______, _______, KC_UP, _______, _______,
  287. _______, LCTL(KC_A), KC_LEFT, KC_DOWN, KC_RGHT, LCA(KC_TAB),
  288. _______, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), KC_BSPC,
  289. _______, _______, _______, _______,
  290. // Left Thumb
  291. _______, _______,
  292. _______,
  293. _______, _______, _______,
  294. // Right Hand
  295. _______, _______, _______, _______, _______, _______, _______, _______, _______,
  296. KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
  297. _______, _______, KC_UP, LCTL(KC_Y), _______, _______,
  298. KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, _______,
  299. KC_PGDN, KC_MUTE, KC_VOLD, KC_VOLU, KC_END, _______,
  300. KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP,
  301. // Right Thumb
  302. _______, _______,
  303. _______,
  304. _______, _______, _______
  305. ),
  306. /* Numpad layer
  307. * (Left side duplicates layout from the Numbers layer, just with numpad output; right side layout close to PC numpad layout)
  308. * ,-------------------------------------------. ,-------------------------------------------.
  309. * | | NumLk| | | | | | Tab | NumLk| KP / | KP * | KP - | |
  310. * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
  311. * | | KP 6 | KP 7 | KP 8 | KP 9 | KP 0 | | | KP 7 | KP 8 | KP 9 | KP + | |
  312. * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
  313. * | | KP 1 | KP 2 | KP 3 | KP 4 | KP 5 | | | KP 4 | KP 5 | KP 6 | = | |
  314. * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
  315. * | | | KP . |KP/KP*| KP- _| KP+ =| | | KP 1 | KP 2 | KP 3 |KP Ent| |
  316. * `--------+------+------+------+------+------' `------+------+------+------+------+--------'
  317. * | ( | ) | [ { | ] } | | KP 0 | , | KP . |KP Ent|
  318. * `---------------------------' `---------------------------'
  319. * ,---------------. ,---------------.
  320. * | | | | | |
  321. * ,-------|-------|-------| |-------+-------+-------.
  322. * | | | | | | | |
  323. * | | |-------| |-------| | |
  324. * | | | | | KP Ent| | |
  325. * `-----------------------' `-----------------------'
  326. */
  327. [_NUMPAD] = LAYOUT(
  328. // Left Hand
  329. _______, _______, _______, _______, _______, _______, _______, _______, _______,
  330. _______, KC_NLCK, _______, _______, _______, _______,
  331. _______, KC_P6, KC_P7, KC_P8, KC_P9, KC_P0,
  332. _______, KC_P1, KC_P2, KC_P3, KC_P4, KC_P5,
  333. _______, _______, KC_PDOT, TD(PSLPAS), TD(PMNUN), TD(PPLEQ),
  334. KC_LPRN, KC_RPRN, TD(LBCB), TD(RBCB),
  335. // Left Thumb
  336. _______, _______,
  337. _______,
  338. _______, _______, _______,
  339. // Right Hand
  340. _______, _______, _______, _______, _______, _______, _______, _______, _______,
  341. KC_TAB, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, _______,
  342. _______, KC_P7, KC_P8, KC_P9, KC_PPLS, _______,
  343. _______, KC_P4, KC_P5, KC_P6, KC_EQL, _______,
  344. _______, KC_P1, KC_P2, KC_P3, KC_PENT, _______,
  345. KC_P0, KC_COMM, KC_PDOT, KC_PENT,
  346. // Right Thumb
  347. _______, _______,
  348. _______,
  349. _______, _______, _______
  350. ),
  351. /* Colemak gaming/vanilla
  352. * (No access to Function or Numbers layers; mainly used for gaming; double-tap and hold TD(ADJ) above LAlt to access Adjust layer)
  353. * ,-------------------------------------------. ,-------------------------------------------.
  354. * | = | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - |
  355. * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
  356. * | Tab | Q | W | F | P | G | | J | L | U | Y | ; | \ |
  357. * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
  358. * | Ctrl | A | R | S | T | D | | H | N | E | I | O | ' |
  359. * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
  360. * | Shift | Z | X | C | V | B | | K | M | , | . | / | Shift |
  361. * `--------+------+------+------+------+------' `------+------+------+------+------+--------'
  362. * | Ins | ` | [ | ] | | Left | Down | Up | Right|
  363. * `---------------------------' `---------------------------'
  364. * ,---------------. ,---------------.
  365. * |Esc/Ctl|TD(ADJ)| | RAlt | RCtl |
  366. * ,-------|-------|-------| |-------+-------+-------.
  367. * | | | LAlt | | RGUI | | |
  368. * | Space | Enter |-------| |-------| Delete| Bspc |
  369. * | | | Bspc | | Enter | | |
  370. * `-----------------------' `-----------------------'
  371. */
  372. [_COLEMAKGM] = LAYOUT(
  373. // Left Hand
  374. KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8,
  375. KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5,
  376. KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G,
  377. KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D,
  378. KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B,
  379. KC_INS, KC_GRV, KC_LBRC, KC_RBRC,
  380. //Left Thumb
  381. CTLESC, TD(ADJ),
  382. KC_LALT,
  383. KC_SPC, KC_ENT, KC_BSPC,
  384. //Right Hand
  385. KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, NUMPAD, ADJUST,
  386. KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
  387. KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS,
  388. KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
  389. KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
  390. KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
  391. //Right Thumb
  392. KC_RALT, KC_RCTL,
  393. KC_RGUI,
  394. KC_ENT, KC_DEL, KC_BSPC
  395. ),
  396. /* QWERTY gaming/vanilla
  397. * (No access to Function or Numbers layers; mainly used for gaming; double-tap and hold TD(ADJ) above LAlt to access Adjust layer)
  398. * ,-------------------------------------------. ,-------------------------------------------.
  399. * | = | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - |
  400. * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
  401. * | Tab | Q | W | E | R | T | | Y | U | I | O | P | \ |
  402. * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
  403. * | Ctrl | A | S | D | F | G | | H | J | K | L | ; | ' |
  404. * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
  405. * | Shift | Z | X | C | V | B | | N | M | , | . | / | Shift |
  406. * `--------+------+------+------+------+------' `------+------+------+------+------+--------'
  407. * | Ins | ` | [ | ] | | Left | Down | Up | Right|
  408. * `---------------------------' `---------------------------'
  409. * ,---------------. ,---------------.
  410. * |Esc/Ctl|TD(ADJ)| | RAlt | RCtl |
  411. * ,-------|-------|-------| |-------+-------+-------.
  412. * | | | LAlt | | RGUI | | |
  413. * | Space | Enter |-------| |-------| Delete| Bspc |
  414. * | | | Bspc | | Enter | | |
  415. * `-----------------------' `-----------------------'
  416. */
  417. [_QWERTYGM] = LAYOUT(
  418. // Left Hand
  419. KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8,
  420. KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5,
  421. KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T,
  422. KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G,
  423. KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B,
  424. KC_INS, KC_GRV, KC_LBRC, KC_RBRC,
  425. //Left Thumb
  426. CTLESC, TD(ADJ),
  427. KC_LALT,
  428. KC_SPC, KC_ENT, KC_BSPC,
  429. //Right Hand
  430. KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, NUMPAD, ADJUST,
  431. KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
  432. KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
  433. KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
  434. KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
  435. KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
  436. //Right Thumb
  437. KC_RALT, KC_RCTL,
  438. KC_RGUI,
  439. KC_ENT, KC_DEL, KC_BSPC
  440. ),
  441. /* Adjust layer
  442. * (Enter/Number + Delete/Number2 under non-gaming/vanilla layers; Numpad is a toggle)
  443. * ,-------------------------------------------. ,-------------------------------------------.
  444. * | |Colmak|Qwerty| |ClmkGM| QWGM | |Numpad| | | | | RESET |
  445. * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
  446. * | | | | | | | | | | | | | |
  447. * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
  448. * | | | | | | | | |NKROTG| | | | |
  449. * |--------+------+------+------+------+------| |------+------+------+------+------+--------|
  450. * | | | | | | | | | | | | | |
  451. * `--------+------+------+------+------+------' `------+------+------+------+------+--------'
  452. * | | | | | | | | | |
  453. * `---------------------------' `---------------------------'
  454. * ,---------------. ,---------------.
  455. * | | | | | |
  456. * ,-------|-------|-------| |-------+-------+-------.
  457. * | | | | | | | |
  458. * | | |-------| |-------| | |
  459. * | | | | | | | |
  460. * `-----------------------' `-----------------------'
  461. */
  462. [_ADJUST] = LAYOUT(
  463. // Left Hand
  464. _______, _______, _______, _______, _______, _______, _______, _______, _______,
  465. _______, COLEMAK, QWERTY, _______, COLEMAKGM, QWERTYGM,
  466. _______, _______, _______, _______, _______, _______,
  467. _______, _______, _______, _______, _______, _______,
  468. _______, _______, _______, _______, _______, _______,
  469. _______, _______, _______, _______,
  470. // Left Thumb
  471. _______, _______,
  472. _______,
  473. _______, _______, _______,
  474. // Right Hand
  475. _______, _______, _______, _______, _______, _______, _______, _______, _______,
  476. NUMPAD, _______, _______, _______, _______, RESET,
  477. _______, _______, _______, _______, _______, _______,
  478. _______, NKROTG, _______, _______, _______, _______,
  479. _______, _______, _______, _______, _______, _______,
  480. _______, _______, _______, _______,
  481. // Right Thumb
  482. _______, _______,
  483. _______,
  484. _______, _______, _______
  485. ),
  486. [_ADJUST2] = LAYOUT(
  487. // Left Hand
  488. _______, _______, _______, _______, _______, _______, _______, _______, _______,
  489. _______, COLEMAK, QWERTY, _______, COLEMAKGM, QWERTYGM,
  490. _______, _______, _______, _______, _______, _______,
  491. _______, _______, _______, _______, _______, _______,
  492. _______, _______, _______, _______, _______, _______,
  493. _______, _______, _______, _______,
  494. // Left Thumb
  495. _______, _______,
  496. _______,
  497. _______, _______, _______,
  498. // Right Hand
  499. _______, _______, _______, _______, _______, _______, _______, _______, _______,
  500. NUMPAD, _______, _______, _______, _______, RESET,
  501. _______, _______, _______, _______, _______, _______,
  502. _______, NKROTG, _______, _______, _______, _______,
  503. _______, _______, _______, _______, _______, _______,
  504. _______, _______, _______, _______,
  505. // Right Thumb
  506. _______, _______,
  507. _______,
  508. _______, _______, _______
  509. )
  510. };
  511. uint32_t layer_state_set_user(uint32_t state) {
  512. return update_tri_layer_state(state, _NUMBERS, _NUMBERS2, _ADJUST);
  513. }
  514. void persistent_default_layer_set(uint16_t default_layer) {
  515. eeconfig_update_default_layer(default_layer);
  516. default_layer_set(default_layer);
  517. }
  518. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  519. switch (keycode) {
  520. case COLEMAK:
  521. if (record->event.pressed) {
  522. persistent_default_layer_set(1UL << _COLEMAK);
  523. layer_off ( _QWERTY);
  524. layer_off ( _NUMBERS);
  525. layer_off ( _NUMBERS2);
  526. layer_off ( _FUNCTION);
  527. layer_off ( _FUNCTION2);
  528. layer_off ( _NUMPAD);
  529. layer_off ( _COLEMAKGM);
  530. layer_off ( _QWERTYGM);
  531. layer_off ( _ADJUST);
  532. layer_off ( _ADJUST2);
  533. }
  534. return false;
  535. break;
  536. case QWERTY:
  537. if (record->event.pressed) {
  538. persistent_default_layer_set(1UL << _QWERTY);
  539. layer_off ( _COLEMAK);
  540. layer_off ( _NUMBERS);
  541. layer_off ( _NUMBERS2);
  542. layer_off ( _FUNCTION);
  543. layer_off ( _FUNCTION2);
  544. layer_off ( _NUMPAD);
  545. layer_off ( _COLEMAKGM);
  546. layer_off ( _QWERTYGM);
  547. layer_off ( _ADJUST);
  548. layer_off ( _ADJUST2);
  549. }
  550. return false;
  551. break;
  552. case COLEMAKGM:
  553. if (record->event.pressed) {
  554. default_layer_set(1UL << _COLEMAKGM);
  555. layer_off ( _QWERTY);
  556. layer_off ( _COLEMAK);
  557. layer_off ( _NUMBERS);
  558. layer_off ( _NUMBERS2);
  559. layer_off ( _FUNCTION);
  560. layer_off ( _FUNCTION2);
  561. layer_off ( _NUMPAD);
  562. layer_off ( _QWERTYGM);
  563. layer_off ( _ADJUST);
  564. layer_off ( _ADJUST2);
  565. }
  566. return false;
  567. break;
  568. case QWERTYGM:
  569. if (record->event.pressed) {
  570. default_layer_set(1UL << _QWERTYGM);
  571. layer_off ( _QWERTY);
  572. layer_off ( _COLEMAK);
  573. layer_off ( _NUMBERS);
  574. layer_off ( _NUMBERS2);
  575. layer_off ( _FUNCTION);
  576. layer_off ( _FUNCTION2);
  577. layer_off ( _NUMPAD);
  578. layer_off ( _COLEMAKGM);
  579. layer_off ( _ADJUST);
  580. layer_off ( _ADJUST2);
  581. }
  582. return false;
  583. break;
  584. }
  585. return true;
  586. }