keymap.c 25 KB

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