keymap.c 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365
  1. #include QMK_KEYBOARD_H
  2. extern keymap_config_t keymap_config;
  3. /*
  4. * Each layer gets a name for readability, which is then used in the keymap matrix below.
  5. * The underscores don't mean anything - you can have a layer called STUFF or any other name.
  6. * Layer names don't all need to be of the same length, obviously, and you can also skip them
  7. * entirely and just use numbers.
  8. */
  9. #define _ADJUST 16
  10. #define _LOWER 3
  11. #define _MEDIA 8
  12. #define _MOUSECURSOR 7
  13. #define _QWERTY 0
  14. #define _RAISE 4
  15. #define _VIM 9
  16. // TODO: (bdietz) - make a symbols layer for fun emoji and ascii art
  17. // TODO: (bdietz) - make a symbol layer for greek symbols
  18. // Keycodes
  19. enum planck_keycodes
  20. {
  21. QWERTY = SAFE_RANGE,
  22. LOWER,
  23. RAISE,
  24. };
  25. enum macro_keycodes
  26. {
  27. KC_ALT_TAB,
  28. KC_CMD_TAB,
  29. KC_CTL_TAB,
  30. KC_CMD_SLSH,
  31. KC_AG_FIND,
  32. KC_AG_AGAIN,
  33. KC_AG_UNDO,
  34. KC_AG_CUT,
  35. KC_AG_COPY,
  36. KC_AG_PASTE,
  37. KC_AG_DESK_L,
  38. KC_AG_DESK_R,
  39. KC_AG_TAB_C,
  40. KC_AG_TAB_N,
  41. KC_AG_TAB_R,
  42. };
  43. /**
  44. * This section of macros is for tap or hold functionality. Keys will fire off the second symbol in the name if tapped
  45. * or fire the first symbol in the name if held. For example
  46. * GUI_Z
  47. *
  48. * - will fire z if tapped
  49. * - will fire cmd/super/win if held
  50. */
  51. #define ALT_DOT ALT_T(KC_DOT)
  52. #define ALT_X ALT_T(KC_X)
  53. #define CTL_SLSH CTL_T(KC_SLSH)
  54. #define CTL_Z CTL_T(KC_Z)
  55. #define GUI_C GUI_T(KC_C)
  56. #define GUI_COMM GUI_T(KC_COMM)
  57. #define HPR_ESC ALL_T(KC_ESC)
  58. #define HPR_QUO ALL_T(KC_QUOT)
  59. // Toggle to VIM when left space button is held, emit space keycode when left space is tapped
  60. #define TGL_VIM LT(_VIM, KC_SPC)
  61. // Toggle to the mouse layer when the right space button is held and emit enter when right space is tapped
  62. #define TGL_MOUSE LT(_MOUSECURSOR, KC_ENT)
  63. // TODO: (bdietz) - need to audit these keycodes to see what sort of cool things the default layout was doing.
  64. #define ALT_TAB M(KC_ALT_TAB) // Macro for Alt-Tab
  65. #define CMD_TAB M(KC_CMD_TAB) // Macro for Cmd-Tab
  66. #define CTL_TAB M(KC_CTL_TAB) // Macro for Ctl-Tab
  67. #define CMD_SLSH M(KC_CMD_SLSH) // Macro for Cmd-Slash (personal shortcut to toggle iTerm2 visibility)
  68. #define AG_FIND M(KC_AG_FIND) // Macros for Cmd-[x] vs Ctrl-[x] based on current AG_NORM or AG_SWAP settings
  69. #define AG_AGAIN M(KC_AG_AGAIN)
  70. #define AG_UNDO M(KC_AG_UNDO)
  71. #define AG_CUT M(KC_AG_CUT)
  72. #define AG_COPY M(KC_AG_COPY)
  73. #define AG_PASTE M(KC_AG_PASTE)
  74. #define AG_D_L M(KC_AG_DESK_L) // For Virtual Desktop Switching: Left, and
  75. #define AG_D_R M(KC_AG_DESK_R) // Right
  76. #define AG_T_C M(KC_AG_TAB_C) // For Chrome, etc. Tab Close,
  77. #define AG_T_N M(KC_AG_TAB_N) // Tab New, and
  78. #define AG_T_R M(KC_AG_TAB_R) // Tab Reopen Closed
  79. /* Qwerty
  80. *
  81. * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
  82. * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | |
  83. * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
  84. * |Hyper/Esc| A | S | D | F | G | H | J | K | L |MEDIA/;| Hyper/" |
  85. * |----------`------`------`------`------`------`------`------`------`------`------`------------|
  86. * | Shift |CTL/Zl|ALT/X |GUI/C | V | B | N | M |GUI/, | ALT/.|CTL// | Shift |
  87. * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
  88. * | | | | Lower | VIM/Space| MOUSE/Ent| Raise | | | |
  89. * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
  90. */
  91. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  92. [_QWERTY] = LAYOUT(
  93. /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
  94. KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, ALL_T(KC_NO),
  95. /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
  96. HPR_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(_MEDIA, KC_SCLN), HPR_QUO,
  97. /*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
  98. KC_LSFT, CTL_Z, ALT_X, GUI_C, KC_V, KC_B, KC_N, KC_M, GUI_COMM, ALT_DOT, CTL_SLSH, KC_RSFT,
  99. /*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
  100. _______, _______, _______, LOWER, TGL_VIM, TGL_MOUSE, RAISE, _______, _______, _______),
  101. /*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
  102. // TODO: (bdietz) - update the keymap documentation to include the modifier keys on the third row
  103. /* Lower
  104. * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
  105. * | ` | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | Bksp |
  106. * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
  107. * | [ | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | "|" |
  108. * |----------`------`------`------`------`------`------`------`------`------`------`------------|
  109. * | ] | F7 | F8 | F9 | F10 | F11 | F12 | - | = | [ | ] | \ |
  110. * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
  111. * | | | | | | | | Prev | Next | Mute |
  112. * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
  113. */
  114. [_LOWER] = LAYOUT(
  115. /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
  116. KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, KC_BSPC,
  117. /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
  118. KC_LBRC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
  119. /*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
  120. KC_RBRC, CTL_T(KC_F7), ALT_T(KC_F8), GUI_T(KC_F9), KC_F10, KC_F11, KC_F12, KC_MINS, GUI_T(KC_EQL), ALT_T(KC_LBRC), CTL_T(KC_RBRC), KC_BSLS,
  121. /*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
  122. _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_MUTE),
  123. /*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
  124. /* Raise
  125. * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
  126. * | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | Bksp |
  127. * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
  128. * | $ | 4 | 5 | 6 | . | + | . | 4 | 5 | 6 | * | "|" |
  129. * |----------`------`------`------`------`------`------`------`------`------`------`------------|
  130. * | = | 7 | 8 | 9 | 0 | - | . | 1 | 2 | 3 | / | \ |
  131. * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
  132. * | | | | | | | | Prev | Next | Mute |
  133. * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
  134. */
  135. [_RAISE] = LAYOUT(
  136. /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
  137. KC_TILD, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_BSPC,
  138. /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
  139. KC_DLR, KC_4, KC_5, KC_6, KC_DOT, KC_PLUS, KC_DOT, KC_4, KC_5, KC_6, KC_ASTR, KC_PIPE,
  140. /*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
  141. KC_EQL, CTL_T(KC_7), ALT_T(KC_8), GUI_T(KC_9), KC_0, KC_MINS, KC_DOT, KC_1, GUI_T(KC_2), ALT_T(KC_3), CTL_T(KC_SLSH), KC_BSLS,
  142. /*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
  143. _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_MUTE),
  144. /*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
  145. /* Mouse Layer
  146. * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
  147. * | | |ACCL0 | | | | |WHL_L | Up |WHL_R | BTN2 | | |
  148. * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
  149. * | |ACCL2 | BTN2 | | BTN1 |ACCL1 |WHL_Up| Left | Down |Right | BTN4 | BTN5 |
  150. * |----------`------`------`------`------`------`------`------`------`------`------`------------|
  151. * | | | | | BTN3 | |WHL_Dn| BTN1 | | | BTN3 | |
  152. * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
  153. * | | | | | | | | | | |
  154. * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
  155. */
  156. [_MOUSECURSOR] = LAYOUT(
  157. /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
  158. _______, _______, _______, KC_MS_U, _______, _______, _______, KC_ACL2, KC_ACL1, KC_ACL0, _______, _______, _______,
  159. /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
  160. _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, KC_BTN1, KC_BTN2, _______, _______, _______,
  161. /*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
  162. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  163. /*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
  164. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
  165. /*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
  166. /* Adjust (Lower + Raise)
  167. * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
  168. * | | | | | | | | | | | | | Del |
  169. * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
  170. * | | | | | |AGnorm|AGswap|Qwerty|Mouse | |Plover| |
  171. * |----------`------`------`------`------`------`------`------`------`------`------`------------|
  172. * | | | | | | | | | | | | |
  173. * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
  174. * | | | | | | | | | | Reset |
  175. * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
  176. */
  177. [_ADJUST] = LAYOUT(
  178. /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
  179. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL,
  180. /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
  181. _______, _______, _______, _______, _______, AG_NORM, AG_SWAP, QWERTY, _______, _______, _______, _______,
  182. /*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
  183. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  184. /*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
  185. _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET),
  186. /*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
  187. /* VIM
  188. * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
  189. * | | | | | | | | | | | | | |
  190. * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
  191. * | | | | | | | LEFT | DOWN | UP |RIGHT | | |
  192. * |----------`------`------`------`------`------`------`------`------`------`------`------------|
  193. * | | | | | | | | | | | | |
  194. * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
  195. * | | | | | | | | | | |
  196. * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
  197. */
  198. [_VIM] = LAYOUT(
  199. /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
  200. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  201. /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
  202. _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______,
  203. /*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
  204. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  205. /*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
  206. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
  207. /*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
  208. /* Media
  209. * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
  210. * | | | | | | | | | | | | | |
  211. * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
  212. * | | | | | | | | Prev | Next | Mute | | Play/Pause |
  213. * |----------`------`------`------`------`------`------`------`------`------`------`------------|
  214. * | | | | | | | | VolD | VolU | | | |
  215. * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
  216. * | | | | | | | | | | |
  217. * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
  218. */
  219. [_MEDIA] = LAYOUT(
  220. /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
  221. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  222. /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
  223. _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_MUTE, _______, KC_MPLY,
  224. /*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
  225. _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, _______, _______, _______,
  226. /*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
  227. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)
  228. /*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
  229. };
  230. void persistant_default_layer_set(uint16_t default_layer)
  231. {
  232. eeconfig_update_default_layer(default_layer);
  233. default_layer_set(default_layer);
  234. }
  235. bool process_record_user(uint16_t keycode, keyrecord_t *record)
  236. {
  237. switch (keycode)
  238. {
  239. case QWERTY:
  240. if (record->event.pressed)
  241. {
  242. default_layer_set(1UL << _QWERTY);
  243. }
  244. return false;
  245. break;
  246. case LOWER:
  247. if (record->event.pressed)
  248. {
  249. layer_on(_LOWER);
  250. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  251. }
  252. else
  253. {
  254. layer_off(_LOWER);
  255. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  256. }
  257. return false;
  258. break;
  259. case RAISE:
  260. if (record->event.pressed)
  261. {
  262. layer_on(_RAISE);
  263. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  264. }
  265. else
  266. {
  267. layer_off(_RAISE);
  268. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  269. }
  270. return false;
  271. break;
  272. }
  273. return true;
  274. }
  275. /*
  276. * Macro definition
  277. */
  278. const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
  279. {
  280. if (!eeconfig_is_enabled())
  281. {
  282. eeconfig_init();
  283. }
  284. bool use_cmd = true; // Use, for example, Cmd-Tab, Cmd-C, Cmd-V, etc.
  285. // Compare to MAGIC_SWAP_ALT_GUI and MAGIC_UNSWAP_ALT_GUI configs, set in:
  286. // quantum/quantum.c
  287. if (keymap_config.swap_lalt_lgui == 1 && keymap_config.swap_ralt_rgui == 1)
  288. {
  289. use_cmd = false; // ... or, Alt-Tab, Ctrl-C, Ctrl-V, etc.
  290. }
  291. switch (id)
  292. {
  293. case KC_ALT_TAB:
  294. if (use_cmd)
  295. {
  296. return (record->event.pressed ? MACRO(D(LALT), D(TAB), END) : MACRO(U(TAB), END));
  297. }
  298. else
  299. {
  300. return (record->event.pressed ? MACRO(D(LGUI), D(TAB), END) : MACRO(U(TAB), END));
  301. }
  302. case KC_CMD_TAB:
  303. if (use_cmd)
  304. {
  305. return (record->event.pressed ? MACRO(D(LGUI), D(TAB), END) : MACRO(U(TAB), END));
  306. }
  307. else
  308. {
  309. return (record->event.pressed ? MACRO(D(LALT), D(TAB), END) : MACRO(U(TAB), END));
  310. }
  311. case KC_CTL_TAB:
  312. return (record->event.pressed ? MACRO(D(LCTRL), D(TAB), END) : MACRO(U(TAB), END));
  313. case KC_CMD_SLSH:
  314. return (record->event.pressed ? MACRO(D(LGUI), D(SLSH), END) : MACRO(U(SLSH), END));
  315. case KC_AG_FIND:
  316. return use_cmd ? MACRODOWN(D(LGUI), T(F), END) : MACRODOWN(D(LCTRL), T(F), END);
  317. case KC_AG_AGAIN:
  318. return use_cmd ? MACRODOWN(D(LGUI), T(G), END) : MACRODOWN(D(LCTRL), T(G), END);
  319. case KC_AG_UNDO:
  320. return use_cmd ? MACRODOWN(D(LGUI), T(Z), END) : MACRODOWN(D(LCTRL), T(Z), END);
  321. case KC_AG_CUT:
  322. return use_cmd ? MACRODOWN(D(LGUI), T(X), END) : MACRODOWN(D(LCTRL), T(X), END);
  323. case KC_AG_COPY:
  324. return use_cmd ? MACRODOWN(D(LGUI), T(C), END) : MACRODOWN(D(LCTRL), T(C), END);
  325. case KC_AG_PASTE:
  326. return use_cmd ? MACRODOWN(D(LGUI), T(V), END) : MACRODOWN(D(LCTRL), T(V), END);
  327. case KC_AG_DESK_L:
  328. return use_cmd ? MACRODOWN(D(LGUI), D(LCTRL), T(SCLN), END) : MACRODOWN(D(LALT), D(LCTRL), T(SCLN), END);
  329. case KC_AG_DESK_R:
  330. return use_cmd ? MACRODOWN(D(LGUI), D(LCTRL), T(QUOT), END) : MACRODOWN(D(LALT), D(LCTRL), T(QUOT), END);
  331. case KC_AG_TAB_C:
  332. return use_cmd ? MACRODOWN(D(LGUI), T(W), END) : MACRODOWN(D(LCTRL), T(W), END);
  333. case KC_AG_TAB_N:
  334. return use_cmd ? MACRODOWN(D(LGUI), T(T), END) : MACRODOWN(D(LCTRL), T(T), END);
  335. case KC_AG_TAB_R:
  336. return use_cmd ? MACRODOWN(D(LGUI), D(LSHIFT), T(T), END) : MACRODOWN(D(LCTRL), D(LSHIFT), T(T), END);
  337. }
  338. return MACRO_NONE;
  339. }