keymap.c 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430
  1. // pvinis' ergodox keymap
  2. #include "ergodox.h"
  3. #include "mousekey.h"
  4. // easier name for left ctrl-alt-gui
  5. #define ALLM(kc) LCAG(kc)
  6. // layers
  7. enum {
  8. BASE = 0,
  9. BEGIN,
  10. QWERTY,
  11. CARPALX,
  12. SYSCTL,
  13. };
  14. // extra keys
  15. enum {
  16. NONE = 0,
  17. // mouse
  18. MS_UL, // up left
  19. MS_UR, // up right
  20. MS_DL, // down left
  21. MS_DR, // down right
  22. // tap dance
  23. TD_FLSH, // flash keyboard
  24. };
  25. // application selection
  26. // this is sending ctrl-alt-gui-<key>, and this is picked up by hammerspoon
  27. #define AP_SLCK ALLM(KC_S)
  28. #define AP_XCOD ALLM(KC_X)
  29. #define AP_MSGR ALLM(KC_M)
  30. // keymaps
  31. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  32. /* BASE
  33. * the base of the keyboard.
  34. *
  35. * ,--------------------------------------------------. ,--------------------------------------------------.
  36. * |4x FLASH| | | | | | | | | | | | | | |
  37. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  38. * | | | | | | | | | | | | | | | |
  39. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  40. * | | | | | | |------| |------| | | | | | |
  41. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  42. * | | | | | | | | | | | | | | | |
  43. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  44. * | | | | | | | | | | | |
  45. * `----------------------------------' `----------------------------------'
  46. * ,-------------. ,-------------.
  47. * |BEGIN |QWERTY| |SYSCTL| |
  48. * ,------|------|------| |------+--------+------.
  49. * | | |CARPAL| |Slack | | |
  50. * |Backsp|LShift|------| |------| Enter |Space |
  51. * | | |SYSCTL| |Msngr | | |
  52. * `--------------------' `----------------------'
  53. */
  54. [BASE] = KEYMAP(
  55. TD(TD_FLSH) ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  56. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  57. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  58. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  59. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  60. ,TG(BEGIN) ,TG(QWERTY)
  61. ,TG(CARPALX)
  62. ,KC_BSPC ,KC_LSFT ,TG(SYSCTL)
  63. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  64. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  65. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  66. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  67. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  68. ,TG(SYSCTL) ,KC_NO
  69. ,AP_SLCK
  70. ,AP_MSGR ,KC_ENT ,KC_SPC
  71. ),
  72. /* BEGIN
  73. * a beginner's keymap i currently use.
  74. *
  75. * ,--------------------------------------------------. ,--------------------------------------------------.
  76. * | | 1 | 2 | 3 | 4 | 5 | 6 | | 6 | 7 | 8 | 9 | 0 | - | = |
  77. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  78. * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \ |
  79. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  80. * |Esc/Ctrl| A | S | D | F | G |------| |------| H | J | K | L | ; | Enter |
  81. * |--------+------+------+------+------+------| ( | | ) |------+------+------+------+------+--------|
  82. * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift |
  83. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  84. * | | ` | Cmd | | Cmd | | | | | ' | |
  85. * `----------------------------------' `----------------------------------'
  86. * ,-------------. ,-------------.
  87. * | | | | | |
  88. * ,------|------|------| |------+--------+------.
  89. * | | | | | | | |
  90. * | | |------| |------| | |
  91. * | | | | | | | |
  92. * `--------------------' `----------------------'
  93. */
  94. [BEGIN] = KEYMAP(
  95. KC_TRNS ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,KC_6
  96. ,KC_TAB ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_LBRC
  97. ,CTL_T(KC_ESC) ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G
  98. ,KC_LSFT ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,KC_LPRN
  99. ,KC_TRNS ,KC_GRV ,KC_LGUI ,KC_LEFT ,KC_RIGHT
  100. ,KC_TRNS ,KC_TRNS
  101. ,KC_TRNS
  102. ,KC_TRNS ,KC_TRNS ,KC_TRNS
  103. ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_MINS ,KC_EQL
  104. ,KC_RBRC ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KC_BSLS
  105. ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,KC_ENT
  106. ,KC_RPRN ,KC_N ,KC_M ,KC_COMM ,KC_DOT ,KC_SLSH ,KC_RSFT
  107. ,KC_UP ,KC_DOWN ,KC_TRNS ,KC_QUOT ,KC_TRNS
  108. ,KC_TRNS ,KC_TRNS
  109. ,KC_TRNS
  110. ,KC_TRNS ,KC_TRNS ,KC_TRNS
  111. ),
  112. /* QWERTY
  113. * the default qwerty keymap. not really used, but i'll keep it here for now.
  114. *
  115. * ,--------------------------------------------------. ,--------------------------------------------------.
  116. * | | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | |
  117. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  118. * | | Q | W | E | R | T | | | | Y | U | I | O | P | |
  119. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  120. * | | A | S | D | F | G |------| |------| H | J | K | L | ; | |
  121. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  122. * | | Z | X | C | V | B | | | | N | M | , | . | / | |
  123. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  124. * | | | | | | | | | | | |
  125. * `----------------------------------' `----------------------------------'
  126. * ,-------------. ,-------------.
  127. * | | | | | |
  128. * ,------|------|------| |------+--------+------.
  129. * | | | | | | | |
  130. * | | |------| |------| | |
  131. * | | | | | | | |
  132. * `--------------------' `----------------------'
  133. */
  134. [QWERTY] = KEYMAP(
  135. KC_TRNS ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,KC_TRNS
  136. ,KC_TRNS ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_TRNS
  137. ,KC_TRNS ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G
  138. ,KC_TRNS ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,KC_TRNS
  139. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  140. ,KC_TRNS ,KC_TRNS
  141. ,KC_TRNS
  142. ,KC_TRNS ,KC_TRNS ,KC_TRNS
  143. ,KC_TRNS ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_TRNS
  144. ,KC_TRNS ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KC_TRNS
  145. ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,KC_TRNS
  146. ,KC_TRNS ,KC_N ,KC_M ,KC_COMM ,KC_DOT ,KC_SLSH ,KC_TRNS
  147. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  148. ,KC_TRNS ,KC_TRNS
  149. ,KC_TRNS
  150. ,KC_TRNS ,KC_TRNS ,KC_TRNS
  151. ),
  152. /* CARPALX
  153. * the keymap i would like to transition to.
  154. *
  155. * ,--------------------------------------------------. ,--------------------------------------------------.
  156. * | | 1 | 2 | 3 | 4 | 5 | | | RIGHT| 6 | 7 | 8 | 9 | 0 | |
  157. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  158. * | | Q | G | M | L | W | | | L1 | Y | F | U | B | ; | |
  159. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  160. * | | D | S | T | N | R |------| |------| I | A | E | O | H | |
  161. * |--------+------+------+------+------+------| | | Meh |------+------+------+------+------+--------|
  162. * | | Z | X | C | V | J | | | | K | P | , | . | / | |
  163. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  164. * | | | | | | | Up | | | | |
  165. * `----------------------------------' `----------------------------------'
  166. * ,-------------. ,-------------.
  167. * | | | | | |
  168. * ,------|------|------| |------+------+------.
  169. * | | | | | | | |
  170. * | | |------| |------| | |
  171. * | | | | | | | |
  172. * `--------------------' `--------------------'
  173. */
  174. [CARPALX] = KEYMAP(
  175. KC_TRNS ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,KC_TRNS
  176. ,KC_TRNS ,KC_Q ,KC_G ,KC_M ,KC_L ,KC_W ,KC_TRNS
  177. ,KC_TRNS ,KC_D ,KC_S ,KC_T ,KC_N ,KC_R
  178. ,KC_TRNS ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_J ,KC_TRNS
  179. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  180. ,KC_TRNS ,KC_TRNS
  181. ,KC_TRNS
  182. ,KC_TRNS ,KC_TRNS ,KC_TRNS
  183. ,KC_TRNS ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_TRNS
  184. ,KC_TRNS ,KC_Y ,KC_F ,KC_U ,KC_B ,KC_SCLN ,KC_TRNS
  185. ,KC_I ,KC_A ,KC_E ,KC_O ,KC_H ,KC_TRNS
  186. ,KC_TRNS ,KC_K ,KC_P ,KC_COMM ,KC_DOT ,KC_SLSH ,KC_TRNS
  187. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  188. ,KC_TRNS ,KC_TRNS
  189. ,KC_TRNS
  190. ,KC_TRNS ,KC_TRNS ,KC_TRNS
  191. ),
  192. /* SYSCTL
  193. * a keymap to control my system.
  194. *
  195. * ,--------------------------------------------------. ,--------------------------------------------------.
  196. * | | | | | | | | | | | | Mute |VolDn |VolUp | |
  197. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  198. * | | | | | | | | | | |MsUpL | MsUp |MsUpR | | |
  199. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  200. * | | | | | | |------| |------| |MsLeft| MsDn |MsRght| | Lock |
  201. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  202. * | | | | | | | | | | |MsDnL | MsDn | | | Sleep |
  203. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  204. * | | | | | | | | | | | Power|
  205. * `----------------------------------' `----------------------------------'
  206. * ,-------------. ,-------------.
  207. * | | | | |MidClk|
  208. * ,------|------|------| |------+------+------.
  209. * | | | | | |Left |Right |
  210. * | | |------| |------| Click| Click|
  211. * | | | | | | | |
  212. * `--------------------' `--------------------'
  213. */
  214. [SYSCTL] = KEYMAP(
  215. KC_TRNS ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  216. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  217. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  218. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  219. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  220. ,KC_NO ,KC_NO
  221. ,KC_NO
  222. ,KC_NO ,KC_NO ,KC_NO
  223. /*,KC_POP*/,KC_NO ,KC_NO ,KC_NO ,KC_MUTE ,KC_VOLD ,KC_VOLU ,KC_NO
  224. /*,KC_PTRN*/,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  225. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,LCTL(LSFT(KC_PWR))
  226. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_SLEP
  227. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_PWR
  228. ,KC_NO ,KC_NO
  229. ,KC_NO
  230. ,KC_NO ,KC_NO ,KC_NO
  231. ),
  232. /* TEMPLATE
  233. * keymap template with transparent and non-transparent keys
  234. *
  235. * ,--------------------------------------------------. ,--------------------------------------------------.
  236. * | | | | | | | | | | | | | | | |
  237. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  238. * | | | | | | | | | | | | | | | |
  239. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  240. * | | | | | | |------| |------| | | | | | |
  241. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  242. * | | | | | | | | | | | | | | | |
  243. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  244. * | | | | | | | | | | | |
  245. * `----------------------------------' `----------------------------------'
  246. * ,-------------. ,-------------.
  247. * | | | | | |
  248. * ,------|------|------| |------+--------+------.
  249. * | | | | | | | |
  250. * | | |------| |------| | |
  251. * | | | | | | | |
  252. * `--------------------' `----------------------'
  253. */
  254. /*
  255. [TEMPLATE] = KEYMAP(
  256. KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  257. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  258. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  259. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  260. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  261. ,KC_TRNS ,KC_TRNS
  262. ,KC_TRNS
  263. ,KC_TRNS ,KC_TRNS ,KC_TRNS
  264. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  265. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  266. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  267. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  268. ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
  269. ,KC_TRNS ,KC_TRNS
  270. ,KC_TRNS
  271. ,KC_TRNS ,KC_TRNS ,KC_TRNS
  272. ),
  273. [TEMPLATE] = KEYMAP(
  274. KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  275. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  276. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  277. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  278. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  279. ,KC_NO ,KC_NO
  280. ,KC_NO
  281. ,KC_NO ,KC_NO ,KC_NO
  282. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  283. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  284. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  285. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  286. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  287. ,KC_NO ,KC_NO
  288. ,KC_NO
  289. ,KC_NO ,KC_NO ,KC_NO
  290. ),
  291. */
  292. };
  293. // keyboard initialization
  294. void matrix_init_user() {
  295. ergodox_led_all_on();
  296. for (int i = LED_BRIGHTNESS_HI; i > LED_BRIGHTNESS_LO; i--) {
  297. ergodox_led_all_set(i);
  298. wait_ms(5);
  299. }
  300. wait_ms(1000);
  301. for (int i = LED_BRIGHTNESS_LO; i > 0; i--) {
  302. ergodox_led_all_set(i);
  303. wait_ms(10);
  304. }
  305. ergodox_led_all_off();
  306. }
  307. // extra keys
  308. const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
  309. switch (id) {
  310. // mouse
  311. case MS_UL:
  312. if (record->event.pressed) {
  313. mousekey_on(KC_MS_UP);
  314. mousekey_on(KC_MS_LEFT);
  315. } else {
  316. mousekey_off(KC_MS_UP);
  317. mousekey_off(KC_MS_LEFT);
  318. }
  319. break;
  320. case MS_UR:
  321. if (record->event.pressed) {
  322. mousekey_on(KC_MS_UP);
  323. mousekey_on(KC_MS_RIGHT);
  324. } else {
  325. mousekey_off(KC_MS_UP);
  326. mousekey_off(KC_MS_RIGHT);
  327. }
  328. break;
  329. case MS_DL:
  330. if (record->event.pressed) {
  331. mousekey_on(KC_MS_DOWN);
  332. mousekey_on(KC_MS_LEFT);
  333. } else {
  334. mousekey_off(KC_MS_DOWN);
  335. mousekey_off(KC_MS_LEFT);
  336. }
  337. break;
  338. case MS_DR:
  339. if (record->event.pressed) {
  340. mousekey_on(KC_MS_DOWN);
  341. mousekey_on(KC_MS_RIGHT);
  342. } else {
  343. mousekey_off(KC_MS_DOWN);
  344. mousekey_off(KC_MS_RIGHT);
  345. }
  346. break;
  347. }
  348. return MACRO_NONE;
  349. }
  350. // tap dances
  351. // flash keyboard on 4x tap, with leds
  352. void flash_each_tap(qk_tap_dance_state_t *state, void *user_data) {
  353. switch (state->count) {
  354. case 1:
  355. ergodox_right_led_3_on();
  356. break;
  357. case 2:
  358. ergodox_right_led_2_on();
  359. break;
  360. case 3:
  361. ergodox_right_led_1_on();
  362. break;
  363. case 4:
  364. ergodox_right_led_3_off();
  365. wait_ms(50);
  366. ergodox_right_led_2_off();
  367. wait_ms(50);
  368. ergodox_right_led_1_off();
  369. break;
  370. }
  371. }
  372. void flash_dance_finished(qk_tap_dance_state_t *state, void *user_data) {
  373. if (state->count >= 4) {
  374. reset_keyboard();
  375. reset_tap_dance(state);
  376. }
  377. }
  378. void flash_dance_reset(qk_tap_dance_state_t *state, void *user_data) {
  379. ergodox_right_led_1_off();
  380. wait_ms(50);
  381. ergodox_right_led_2_off();
  382. wait_ms(50);
  383. ergodox_right_led_3_off();
  384. }
  385. qk_tap_dance_action_t tap_dance_actions[] = {
  386. [TD_FLSH] = ACTION_TAP_DANCE_FN_ADVANCED( flash_each_tap, flash_dance_finished, flash_dance_reset ),
  387. };