keymap.c 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330
  1. // pvinis ergodox ez
  2. // ,------------------------------------. ,------------------------------------.
  3. // | | | | | | | | | | | | | | | |
  4. // |------+----+----+----+----+---------| |----+----+----+----+----+----+------|
  5. // | | | | | | | | | | | | | | | |
  6. // |------+----+----+----x----x----| | | |----x----x----+----+----+------|
  7. // | | | | | | |----| |----| | | | | | |
  8. // |------+----+----+----x----x----| | | |----x----x----+----+----+------|
  9. // | | | | | | | | | | | | | | | |
  10. // `------+----+----+----+----+---------' `---------+----+----+----+----+------'
  11. // | | | | | | | | | | | |
  12. // `------------------------' `------------------------'
  13. // ,---------. ,---------.
  14. // | | | | | |
  15. // ,----+----+----| |----+----+----.
  16. // | | | | | | | |
  17. // | | |----| |----| | |
  18. // | | | | | | | |
  19. // `--------------' `--------------'
  20. #include QMK_KEYBOARD_H
  21. #include "pvinis.h"
  22. #include "mousekey.h"
  23. // layers
  24. enum {
  25. MOUSE = 8,
  26. };
  27. // extra keys
  28. enum {
  29. NONE = 30,
  30. TD_LAYR, // SYSCTL and MOUSE layer switch
  31. };
  32. // application selection
  33. // this is sending ctrl-alt-gui-<key>, and this is picked up by hammerspoon
  34. #define AP_SLCK ALLM(KC_S)
  35. #define AP_XCOD ALLM(KC_X)
  36. #define AP_MSGR ALLM(KC_M)
  37. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  38. // ,------------------------------------. ,------------------------------------.
  39. // |4xFLSH| | | | | |Opt | | | | | | | | |
  40. // |------+----+----+----+----+---------| |----+----+----+----+----+----+------|
  41. // | Tab | | | | | | | | | | | | | | |
  42. // |------+----+----+----x----x----| | | |----x----x----+----+----+------|
  43. // |EscCtl| | | | | |----| |----| | | | | | Ent |
  44. // |------+----+----+----x----x----| | | |----x----x----+----+----+------|
  45. // |LShift| | | | | | | | | | | | | |RShift|
  46. // `------+----+----+----+----+---------' `---------+----+----+----+----+------'
  47. // | | | | |Cmd | | | | | | |
  48. // `------------------------' `------------------------'
  49. // ,---------. ,---------.
  50. // |QWER| | | | |
  51. // ,----+----+----| |----+----+----.
  52. // | Ba | L | | | | | |
  53. // | ck |Shi |----| |----| |Spc |
  54. // | spc| ft | | | | | |
  55. // `--------------' `--------------'
  56. [LR_BASE] = LAYOUT_ergodox_pretty_wrapper(
  57. TD_3FLS, _______, _______, _______, _______, _______, KC_LALT, _______, _______, _______, _______, _______, _______, _______,
  58. KC_TAB , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  59. PV_ESCC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_ENT ,
  60. KC_LSFT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RSFT,
  61. _______, _______, _______, KC_LGUI, SYMBOL , SYSCTL , KC_RALT, _______, _______, _______,
  62. QWERTY , CARPALX, _______, _______,
  63. _______, _______,
  64. KC_BSPC, _______, _______, _______, _______, KC_SPC
  65. ),
  66. // ,------------------------------------. ,------------------------------------.
  67. // | | NUMBERS_L | | | - | NUMBERS_R | = |
  68. // |------+----+----+----+----+---------| |----+----+----+----+----+----+------|
  69. // | | | [ | | ] | | |
  70. // |------+ | | | | +------|
  71. // | | QWERTY_L |----| |----| QWERTY_R | |
  72. // |------+ | ( | | ) | +------|
  73. // | | | | | | | |
  74. // `------+----+----+----+----+---------' `---------+----+----+----+----+------'
  75. // | | ` | | | | | | | | ' | |
  76. // `------------------------' `------------------------'
  77. // ,---------. ,---------.
  78. // | | | | | |
  79. // ,----+----+----| |----+----+----.
  80. // | | | | | | | |
  81. // | | |----| |----| | |
  82. // | | | | | | | |
  83. // `--------------' `--------------'
  84. // See `users/pvinis/pvinis.h`
  85. [LR_QWERTY] = LAYOUT_ergodox_pretty_wrapper(
  86. _______, ________________NUMBERS_L__________________, _______, KC_MINS, ________________NUMBERS_R__________________, KC_EQL ,
  87. _______, _________________QWERTY_L1_________________, KC_LBRC, KC_RBRC, _________________QWERTY_R1_________________, _______,
  88. _______, _____________MOD_QWERTY_L2_________________, _____________MOD_QWERTY_R2_________________, _______,
  89. _______, _________________QWERTY_L3_________________, KC_LPRN, KC_RPRN, _________________QWERTY_R3_________________, _______,
  90. _______, KC_GRV, _______, _______, _______, _______, _______, _______, KC_QUOT , _______,
  91. _______, _______, _______, _______,
  92. _______, _______,
  93. _______, _______, _______, _______, _______, _______
  94. ),
  95. // ,------------------------------------. ,------------------------------------.
  96. // | | NUMBERS_L | | | | NUMBERS_R | |
  97. // |------+----+----+----+----+---------| |----+----+----+----+----+----+------|
  98. // | | | | | | | |
  99. // |------+ | | | | +------|
  100. // | | CARPALX_L |----| |----| CARPALX_R | |
  101. // |------+ | | | | +------|
  102. // | | | | | | | |
  103. // `------+----+----+----+----+---------' `---------+----+----+----+----+------'
  104. // | | | | | | | | | | | |
  105. // `------------------------' `------------------------'
  106. // ,---------. ,---------.
  107. // | | | | | |
  108. // ,----+----+----| |----+----+----.
  109. // | | | | | | | |
  110. // | | |----| |----| | |
  111. // | | | | | | | |
  112. // `--------------' `--------------'
  113. // See `users/pvinis/pvinis.h`
  114. [LR_CARPALX] = LAYOUT_ergodox_pretty_wrapper(
  115. _______, ________________NUMBERS_L__________________, _______, _______, ________________NUMBERS_R__________________, _______,
  116. _______, ________________CARPALX_L1_________________, _______, _______, ________________CARPALX_R1_________________, _______,
  117. _______, ________________CARPALX_L2_________________, ________________CARPALX_R2_________________, _______,
  118. _______, ________________CARPALX_L3_________________, _______, _______, ________________CARPALX_R3_________________, _______,
  119. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  120. _______, _______, _______, _______,
  121. _______, _______,
  122. _______, _______, _______, _______, _______, _______
  123. ),
  124. // See `users/pvinis/pvinis.h`
  125. [LR_SYMBOL] = LAYOUT_ergodox_pretty_wrapper(
  126. _______, ______________________F_L__________________, KC_F11 , KC_F12 , ______________________F_R__________________, _______,
  127. _______, _________________SYMBOL_L1_________________, _______, _______, _________________SYMBOL_R1_________________, _______,
  128. _______, _________________SYMBOL_L2_________________, _________________SYMBOL_R2_________________, _______,
  129. _______, _________________SYMBOL_L3_________________, _______, _______, _________________SYMBOL_R3_________________, _______,
  130. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  131. _______, _______, _______, _______,
  132. _______, _______,
  133. _______, _______, _______, _______, _______, _______
  134. ),
  135. // See `users/pvinis/pvinis.h`
  136. [LR_SYSCTL] = LAYOUT_ergodox_pretty_wrapper(
  137. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  138. _______, _______, _______, _______, _______, _______, _______, _______, _________________SYSCTL_R1_________________, _______,
  139. _______, _______, _______, _______, _______, _______, _________________SYSCTL_R2_________________, _______,
  140. _______, _______, _______, _______, _______, _______, _______, _______, _________________SYSCTL_R3_________________, _______,
  141. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  142. _______, _______, _______, _______,
  143. _______, _______,
  144. _______, _______, _______, _______, _______, _______
  145. ),
  146. // See `users/pvinis/pvinis.h`
  147. [LR_KBCTL] = LAYOUT_ergodox_pretty_wrapper(
  148. XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  149. XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, __________________KBCTL_R1_________________, XXXXXXX,
  150. XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, __________________KBCTL_R2_________________, XXXXXXX,
  151. XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, __________________KBCTL_R3_________________, XXXXXXX,
  152. XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  153. XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  154. XXXXXXX, XXXXXXX,
  155. XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
  156. ),
  157. /* MOUSE
  158. * a keymap to control my system.
  159. *
  160. * ,--------------------------------------------------. ,--------------------------------------------------.
  161. * | ^ | | | | | | | | | | | | | | |
  162. * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
  163. * | | | | | | | | | | | | MsUp | | | |
  164. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  165. * | | | | | | |------| |------| |MsLeft| MsDn |MsRght| | |
  166. * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
  167. * | | | | | | | | | | | | | | | |
  168. * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
  169. * | | | | | | | | | | | |
  170. * `----------------------------------' `----------------------------------'
  171. * ,-------------. ,-------------.
  172. * | | | | |MidClk|
  173. * ,------|------|------| |------+------+------.
  174. * | | | | | |Left |Right |
  175. * | | |------| |------| Click| Click|
  176. * | | | ^ | | | | |
  177. * `--------------------' `--------------------'
  178. */
  179. [MOUSE] = LAYOUT_ergodox_pretty(
  180. KC_TRNS ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  181. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  182. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  183. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  184. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  185. ,KC_NO ,KC_NO
  186. ,KC_NO
  187. ,KC_NO ,KC_NO ,KC_TRNS
  188. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  189. ,KC_NO ,KC_NO ,KC_NO ,KC_MS_U ,KC_NO ,KC_NO ,KC_NO
  190. ,KC_NO ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_NO ,KC_NO
  191. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  192. ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
  193. ,KC_NO ,KC_NO
  194. ,KC_NO
  195. ,KC_NO ,KC_NO ,KC_NO
  196. ),
  197. };
  198. // keyboard initialization
  199. void keyboard_post_init_user_local(void) {
  200. ergodox_led_all_on();
  201. for (int i = LED_BRIGHTNESS_HI; i > LED_BRIGHTNESS_LO; i--) {
  202. ergodox_led_all_set(i);
  203. wait_ms(5);
  204. }
  205. wait_ms(1000);
  206. for (int i = LED_BRIGHTNESS_LO; i > 0; i--) {
  207. ergodox_led_all_set(i);
  208. wait_ms(10);
  209. }
  210. ergodox_led_all_off();
  211. // restore default brightness for future use
  212. ergodox_led_all_set(LED_BRIGHTNESS_HI);
  213. }
  214. // light up leds based on the layer
  215. uint32_t layer_state_set_user_local(uint32_t state) {
  216. ergodox_right_led_1_off();
  217. ergodox_right_led_2_off();
  218. ergodox_right_led_3_off();
  219. switch (biton32(state)) {
  220. case LR_SYSCTL:
  221. ergodox_right_led_3_on(); // blue
  222. break;
  223. case LR_KBCTL:
  224. ergodox_right_led_1_on(); // red
  225. break;
  226. case LR_SYMBOL:
  227. ergodox_right_led_2_on(); // green
  228. break;
  229. default: break;
  230. }
  231. return state;
  232. }
  233. // extra keys
  234. // const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
  235. // switch (id) {
  236. // }
  237. // return MACRO_NONE;
  238. // }
  239. // tap dances
  240. // flash keyboard on 4x tap, with leds
  241. // void flash_each_tap(qk_tap_dance_state_t *state, void *user_data) {
  242. // switch (state->count) {
  243. // case 1:
  244. // ergodox_right_led_3_on();
  245. // break;
  246. // case 2:
  247. // ergodox_right_led_2_on();
  248. // break;
  249. // case 3:
  250. // ergodox_right_led_1_on();
  251. // break;
  252. // case 4:
  253. // ergodox_right_led_3_off();
  254. // wait_ms(50);
  255. // ergodox_right_led_2_off();
  256. // wait_ms(50);
  257. // ergodox_right_led_1_off();
  258. // break;
  259. // }
  260. // }
  261. // void flash_dance_finished(qk_tap_dance_state_t *state, void *user_data) {
  262. // if (state->count >= 4) {
  263. // reset_keyboard();
  264. // reset_tap_dance(state);
  265. // }
  266. // }
  267. // void flash_dance_reset(qk_tap_dance_state_t *state, void *user_data) {
  268. // ergodox_right_led_1_off();
  269. // wait_ms(50);
  270. // ergodox_right_led_2_off();
  271. // wait_ms(50);
  272. // ergodox_right_led_3_off();
  273. // }
  274. // SYSCTL on first tap, MOUSE ON second tap
  275. // void layers_dance_finished(qk_tap_dance_state_t *state, void *user_data) {
  276. // uint8_t layer = biton32(layer_state);
  277. // switch(state->count) {
  278. // case 1:
  279. // switch(layer) {
  280. // case LR_SYSCTL:
  281. // layer_off(LR_SYSCTL);
  282. // break;
  283. // case MOUSE:
  284. // layer_off(MOUSE);
  285. // break;
  286. // default:
  287. // layer_on(LR_SYSCTL);
  288. // break;
  289. // }
  290. // break;
  291. // case 2:
  292. // layer_on(MOUSE);
  293. // break;
  294. // }
  295. // }
  296. // qk_tap_dance_action_t tap_dance_actions[] = {
  297. // [TD_FLSH] = ACTION_TAP_DANCE_FN_ADVANCED( flash_each_tap, flash_dance_finished, flash_dance_reset ),
  298. // [TD_LAYR] = ACTION_TAP_DANCE_FN_ADVANCED( NULL, layers_dance_finished, NULL ),
  299. // };