keymap.c 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381
  1. /**
  2. * Copyright 2021 Rob Hilgefort <@rjhilgefort>
  3. *
  4. * This program is free software: you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License as published by
  6. * the Free Software Foundation, either version 2 of the License, or
  7. * (at your option) any later version.
  8. *
  9. * This program is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * GNU General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU General Public License
  15. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  16. */
  17. #include QMK_KEYBOARD_H
  18. #include "version.h"
  19. enum custom_layers {
  20. BASEMAC, // Base Mac Layer
  21. BASELNX, // Base Linux Layer
  22. SYMB, // Symbols Layer
  23. MANMAC, // Media Numbers Mac Layer
  24. MANLNX, // Media Numbers Linux Layer
  25. EXA, // Extra Layer
  26. };
  27. enum custom_keycodes {
  28. PLACEHOLDER = SAFE_RANGE, // can always be here
  29. VRSN,
  30. };
  31. #define ALT_ESC ALT_T(KC_ESC)
  32. #define CTL_ESC CTL_T(KC_ESC)
  33. #define GUI_ESC GUI_T(KC_ESC)
  34. #define HYPER LGUI(LSFT(KC_LALT))
  35. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  36. /* Keymap 0: Base (Mac)
  37. *
  38. * ,--------------------------------------------------. ,--------------------------------------------------.
  39. * | | | | | | | | | | | | | | | |
  40. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  41. * | Tab | Q | W | E | R | T | | | | Y | U | I | O | P | Bksp |
  42. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  43. * | Ct/Esc | A | S | D | F | G |------| |------| H | J | K | L |Ctrl/;| ' |
  44. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  45. * | Shift | Z | X | C | V | B | | | | N | M | , | . |Ctrl//| Enter |
  46. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  47. * | |Shift | Tab | ↑ L3 |Alt/Ec| | ↑ L2 |Hyper | ' |Enter | |
  48. * `----------------------------------' `----------------------------------'
  49. * ,-------------. ,---------------.
  50. * | | | | | |
  51. * ,------+------+------| |------+--------+------.
  52. * | | | | | | | |
  53. * | LGui | Bksp |------| |------| Bksp | Spc |
  54. * | | | | | | | |
  55. * `--------------------' `----------------------'
  56. */
  57. [BASEMAC] = LAYOUT_ergodox(
  58. // left hand
  59. _______, _______, _______, _______, _______, _______, _______,
  60. KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, _______,
  61. CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G,
  62. KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, _______,
  63. _______, KC_LSFT, KC_TAB, MO(MANMAC), ALT_ESC,
  64. _______, _______,
  65. _______,
  66. KC_LGUI, KC_BSPC, _______,
  67. // right hand
  68. _______, _______, _______, _______, _______, _______, _______,
  69. _______, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
  70. KC_H, KC_J, KC_K, KC_L, CTL_T(KC_SCLN), KC_QUOT,
  71. _______, KC_N, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLSH), KC_ENTER,
  72. MO(SYMB), HYPER, KC_QUOT, KC_ENTER, _______,
  73. _______, _______,
  74. _______,
  75. _______, KC_BSPC, KC_SPC
  76. ),
  77. /* Keymap 1: Base (Linux)
  78. *
  79. * ,--------------------------------------------------. ,--------------------------------------------------.
  80. * | | | | | | | | | | | | | | | |
  81. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  82. * | Tab | Q | W | E | R | T | | | | Y | U | I | O | P | Bksp |
  83. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  84. * | Ct/Esc | A | S | D | F | G |------| |------| H | J | K | L |Ctrl/;| ' |
  85. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  86. * | Shift | Z | X | C | V | B | | | | N | M | , | . |Ctrl//| Enter |
  87. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  88. * | |Shift | Tab | ↑ L4 |Gui/Ec| | ↑ L2 | Hyper| ' |Enter | |
  89. * `-----------------------------------' `----------------------------------'
  90. * ,-------------. ,---------------.
  91. * | | | | | |
  92. * ,------+------+------| |------+--------+------.
  93. * | | | | | | | |
  94. * | Ctrl | Bksp |------| |------| Bksp | Spc |
  95. * | | | | | | | |
  96. * `--------------------' `----------------------'
  97. */
  98. [BASELNX] = LAYOUT_ergodox(
  99. // left hand
  100. _______, _______, _______, _______, _______, _______, _______,
  101. KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, _______,
  102. ALT_ESC, KC_A, KC_S, KC_D, KC_F, KC_G,
  103. KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, _______,
  104. _______, KC_LSFT, KC_TAB, MO(MANLNX), GUI_ESC,
  105. _______, _______,
  106. _______,
  107. KC_LCTRL, KC_BSPC, _______,
  108. // right hand
  109. _______, _______, _______, _______, _______, _______, _______,
  110. _______, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
  111. KC_H, KC_J, KC_K, KC_L, CTL_T(KC_SCLN), KC_QUOT,
  112. _______, KC_N, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLSH), KC_ENTER,
  113. MO(SYMB), HYPER, KC_QUOT, KC_ENTER, _______,
  114. _______, _______,
  115. _______,
  116. _______, KC_BSPC, KC_SPC
  117. ),
  118. /* Keymap 2: Symbol Layer
  119. *
  120. * ,---------------------------------------------------. ,--------------------------------------------------.
  121. * | | | | | | | | | | | | | | | |
  122. * |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
  123. * | | \ | / | [ | ] | ~ | | | | | | = | + | - | _ | |
  124. * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  125. * | | { | } | ( | ) | ` |------| |------| ← | ↓ | ↑ | → | | |
  126. * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  127. * | | ! | @ | # | $ | % | | | | ^ | & | * | ( | ) | |
  128. * `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  129. * | | | | ↑ L5 | | | TRNS | | | | |
  130. * `-----------------------------------' `----------------------------------'
  131. * ,-------------. ,-------------.
  132. * | | | | | |
  133. * ,------+------+------| |------+------+------.
  134. * | | | | | | | |
  135. * | | Del |------| |------| Del | |
  136. * | | | | | | | |
  137. * `--------------------' `--------------------'
  138. */
  139. [SYMB] = LAYOUT_ergodox(
  140. // left hand
  141. _______, _______, _______, _______, _______, _______, _______,
  142. _______, KC_BSLS, KC_SLSH, KC_LBRC, KC_RBRC, KC_TILD, _______,
  143. _______, KC_LCBR, KC_RCBR, KC_LPRN, KC_RPRN, KC_GRV,
  144. _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______,
  145. _______, _______, _______, MO(EXA), _______,
  146. _______, _______,
  147. _______,
  148. _______, KC_DEL, _______,
  149. // right hand
  150. _______, _______, _______, _______, _______, _______, _______,
  151. _______, KC_PIPE, KC_EQL, KC_PLUS, KC_MINS, KC_UNDS, _______,
  152. KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______,
  153. _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
  154. KC_TRNS, _______, _______, _______, _______,
  155. _______, _______,
  156. _______,
  157. _______, KC_DEL, _______
  158. ),
  159. /* Keymap 3: Media & Numbers (MAC)
  160. *
  161. * ,--------------------------------------------------. ,--------------------------------------------------.
  162. * | | | | | | | | | | | | | | | |
  163. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  164. * | | |Scrn -| Vol+ |Scrn +| | | | | | 7 | 8 | 9 | * | |
  165. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  166. * | |VolMut|Trak ←|Ply/Ps|Trak →| |------| |------| | 4 | 5 | 6 | + | |
  167. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  168. * | | | | Vol- | | | | | | | 1 | 2 | 3 | \ | |
  169. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  170. * | | | | TRNS | | | ↑ L5 | 0 | . | = | |
  171. * `----------------------------------' `----------------------------------'
  172. * ,-------------. ,-------------.
  173. * | | | | | |
  174. * ,------+------+------| |------+------+------.
  175. * | | | | | | | |
  176. * | | |------| |------| | 0 |
  177. * | | | | | | | |
  178. * `--------------------' `--------------------'
  179. */
  180. [MANMAC] = LAYOUT_ergodox(
  181. // left hand
  182. _______, _______, _______, _______, _______, _______, _______,
  183. _______, _______, KC_BRMD, KC_VOLU, KC_BRMU, _______, _______,
  184. _______, KC_MUTE, KC_MRWD, KC_MPLY, KC_MFFD, _______,
  185. _______, _______, _______, KC_VOLD, _______, _______, _______,
  186. _______, _______, _______, KC_TRNS, _______,
  187. _______, _______,
  188. _______,
  189. _______, _______, _______,
  190. // right hand
  191. _______, _______, _______, _______, _______, _______, _______,
  192. _______, _______, KC_7, KC_8, KC_9, KC_ASTR, _______,
  193. _______, KC_4, KC_5, KC_6, KC_PLUS, _______,
  194. _______, _______, KC_1, KC_2, KC_3, KC_BSLS, _______,
  195. MO(EXA), KC_0, KC_DOT, KC_EQL, _______,
  196. _______, _______,
  197. _______,
  198. _______, _______, KC_0
  199. ),
  200. /* Keymap 4: Media & Numbers (Linux)
  201. *
  202. * ,--------------------------------------------------. ,--------------------------------------------------.
  203. * | | | | | | | | | | | | | | | |
  204. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  205. * | | |Scrn -| Vol+ |Scrn +| | | | | | 7 | 8 | 9 | * | |
  206. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  207. * | |VolMut|Trak ←|Ply/Ps|Trak →| |------| |------| | 4 | 5 | 6 | + | |
  208. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  209. * | | | | Vol- | | | | | | | 1 | 2 | 3 | \ | |
  210. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  211. * | | | | TRNS | | | ↑ L5 | 0 | . | = | |
  212. * `----------------------------------' `----------------------------------'
  213. * ,-------------. ,-------------.
  214. * | | | | | |
  215. * ,------+------+------| |------+------+------.
  216. * | | | | | | | |
  217. * | | |------| |------| | 0 |
  218. * | | | | | | | |
  219. * `--------------------' `--------------------'
  220. */
  221. [MANLNX] = LAYOUT_ergodox(
  222. // left hand
  223. _______, _______, _______, _______, _______, _______, _______,
  224. _______, _______, KC_BRID, KC_VOLU, KC_BRIU, _______, _______,
  225. _______, KC_MUTE, KC_MPRV, KC_MPLY, KC_MNXT, _______,
  226. _______, _______, _______, KC_VOLD, _______, _______, _______,
  227. _______, _______, _______, KC_TRNS, _______,
  228. _______, _______,
  229. _______,
  230. _______, _______, _______,
  231. // right hand
  232. _______, _______, _______, _______, _______, _______, _______,
  233. _______, _______, KC_7, KC_8, KC_9, KC_ASTR, _______,
  234. _______, KC_4, KC_5, KC_6, KC_PLUS, _______,
  235. _______, _______, KC_1, KC_2, KC_3, KC_BSLS, _______,
  236. MO(EXA), KC_0, KC_DOT, KC_EQL, _______,
  237. _______, _______,
  238. _______,
  239. _______, _______, KC_0
  240. ),
  241. /* Keymap 5: Extra
  242. *
  243. * ,--------------------------------------------------. ,--------------------------------------------------.
  244. * | | | | | | | | | | | | | | | |
  245. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  246. * | | → L0 | → L1 | | | | | | | | | | | | |
  247. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  248. * | | | | | | |------| |------| Home | PGDN | PGUP | End | | |
  249. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  250. * | | | | | | | | | | | | | | | |
  251. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  252. * | | | | TRNS | | | TRNS | | | | |
  253. * `----------------------------------' `----------------------------------'
  254. * ,-------------. ,-------------.
  255. * | | | | | |
  256. * ,------|------+------+ |------+------+------.
  257. * | | | | | | | |
  258. * | | |------| |------| | |
  259. * | | | | | | | |
  260. * `--------------------' `--------------------'
  261. */
  262. [EXA] = LAYOUT_ergodox(
  263. // left hand
  264. _______, _______, _______, _______, _______, _______, _______,
  265. _______, DF(BASEMAC), DF(BASELNX), _______, _______, _______, _______,
  266. _______, _______, _______, _______, _______, _______,
  267. _______, _______, _______, _______, _______, _______, _______,
  268. _______, _______, _______, KC_TRNS, _______,
  269. _______, _______,
  270. _______,
  271. _______, _______, _______,
  272. // right hand
  273. _______, _______, _______, _______, _______, _______, _______,
  274. _______, _______, _______, _______, _______, _______, _______,
  275. KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______,
  276. _______, _______, _______, _______, _______, _______, _______,
  277. KC_TRNS, _______, _______, _______, _______,
  278. _______, _______,
  279. _______,
  280. _______, _______, _______
  281. ),
  282. };
  283. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  284. switch (keycode) {
  285. // dynamically generate these.
  286. case VRSN:
  287. if (record->event.pressed) {
  288. SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
  289. }
  290. return false;
  291. break;
  292. }
  293. return true;
  294. }
  295. // Runs constantly in the background, in a loop.
  296. void matrix_scan_user(void) {
  297. uint8_t layer = biton32(layer_state);
  298. ergodox_board_led_off();
  299. ergodox_right_led_1_off();
  300. ergodox_right_led_2_off();
  301. ergodox_right_led_3_off();
  302. switch (layer) {
  303. // TODO: Make this relevant to the ErgoDox EZ.
  304. case 2:
  305. ergodox_right_led_2_on();
  306. break;
  307. case 3:
  308. ergodox_right_led_3_on();
  309. break;
  310. case 4:
  311. ergodox_right_led_3_on();
  312. break;
  313. case 5:
  314. ergodox_right_led_1_on();
  315. break;
  316. default:
  317. // none
  318. break;
  319. }
  320. };
  321. /*
  322. * ,--------------------------------------------------. ,--------------------------------------------------.
  323. * | | | | | | | | | | | | | | | |
  324. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  325. * | | | | | | | | | | | | | | | |
  326. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  327. * | | | | | | |------| |------| | | | | | |
  328. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  329. * | | | | | | | | | | | | | | | |
  330. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  331. * | | | | | | | | | | | |
  332. * `----------------------------------' `----------------------------------'
  333. * ,-------------. ,-------------.
  334. * | | | | | |
  335. * ,------|------+------+ |------+------+------.
  336. * | | | | | | | |
  337. * | | |------| |------| | |
  338. * | | | | | | | |
  339. * `--------------------' `--------------------'
  340. */
  341. /*
  342. * [EXTRA] = LAYOUT_ergodox(
  343. * // left hand
  344. * _______, _______, _______, _______, _______, _______, _______,
  345. * _______, _______, _______, _______, _______, _______, _______,
  346. * _______, _______, _______, _______, _______, _______,
  347. * _______, _______, _______, _______, _______, _______, _______,
  348. * _______, _______, _______, _______, _______,
  349. * _______, _______,
  350. * _______,
  351. * _______, _______, _______,
  352. * // right hand
  353. * _______, _______, _______, _______, _______, _______, _______,
  354. * _______, _______, _______, _______, _______, _______, _______,
  355. * _______, _______, _______, _______, _______, _______,
  356. * _______, _______, _______, _______, _______, _______, _______,
  357. * _______, _______, _______, _______, _______, _______, _______,
  358. * _______, _______, _______, _______, _______,
  359. * _______, _______,
  360. * _______,
  361. * _______, _______, _______
  362. * ),
  363. */