losinggeneration-keymap.h 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378
  1. #pragma once
  2. #include "action_layer.h"
  3. #include "eeconfig.h"
  4. #include "losinggeneration-common.h"
  5. /* Tap dance keycodes */
  6. enum tap_dance_keycodes {
  7. TD_CTL_CTLALT = 0,
  8. TD_LGUI_RGUI,
  9. TD_LALT_RALT,
  10. TD_ADJUST,
  11. };
  12. /*
  13. Used to indicate a CTRL should be pressed on one press, or CTRL+ALT on
  14. a double tap
  15. */
  16. void dance_ctl_ctlalt_each(qk_tap_dance_state_t *state, void *user_data) {
  17. register_code(KC_LCTL);
  18. if(state->count > 1) {
  19. register_code(KC_LALT);
  20. }
  21. }
  22. /* Used to release CTRL or the double tapped variant CTRL+ALT */
  23. void dance_ctl_ctlalt_reset(qk_tap_dance_state_t *state, void *user_data) {
  24. unregister_code(KC_LCTL);
  25. if(state->count > 1) {
  26. unregister_code(KC_LALT);
  27. }
  28. }
  29. /*
  30. Set ADJUST layer on the first press and off after that.
  31. Each is used to make sure ADJUST activates as soon as it's pressed the first
  32. time.
  33. */
  34. void dance_adj_each(qk_tap_dance_state_t *state, void *user_data) {
  35. if(state->count == 1) {
  36. layer_on(_ADJUST);
  37. } else {
  38. layer_off(_ADJUST);
  39. }
  40. }
  41. /* Set NUMPAD layer on second tap and MOUSE layer on 3rd */
  42. void dance_adj_finish(qk_tap_dance_state_t *state, void *user_data) {
  43. switch(state->count) {
  44. case 1: break;
  45. case 2:
  46. layer_on(_NUMPAD);
  47. break;
  48. case 3:
  49. layer_on(_MOUSE);
  50. break;
  51. default:
  52. reset_tap_dance(state);
  53. break;
  54. }
  55. }
  56. /* Turn off any layer that may have been tapped on */
  57. void dance_adj_reset(qk_tap_dance_state_t *state, void *user_data) {
  58. switch(state->count) {
  59. case 1:
  60. layer_off(_ADJUST);
  61. break;
  62. case 2:
  63. layer_off(_NUMPAD);
  64. break;
  65. case 3:
  66. layer_off(_MOUSE);
  67. break;
  68. }
  69. }
  70. qk_tap_dance_action_t tap_dance_actions[] = {
  71. [TD_CTL_CTLALT] = ACTION_TAP_DANCE_FN_ADVANCED(dance_ctl_ctlalt_each, NULL, dance_ctl_ctlalt_reset),
  72. [TD_LGUI_RGUI] = ACTION_TAP_DANCE_DOUBLE(KC_LGUI, KC_RGUI),
  73. [TD_LALT_RALT] = ACTION_TAP_DANCE_DOUBLE(KC_LALT, KC_RALT),
  74. [TD_ADJUST] = ACTION_TAP_DANCE_FN_ADVANCED(dance_adj_each, dance_adj_finish, dance_adj_reset),
  75. };
  76. /*
  77. * ,-----------------------------------------..-----------------------------------------.
  78. * |Adjust| Ctrl | Alt | GUI |Lower | Del ||Space |Raise | Left | Down | Up |Right |
  79. * `-----------------------------------------'`-----------------------------------------'
  80. */
  81. #define BOTTOM_GRID_ROW \
  82. TD_ADJ ,TD_CTL , TD_ALT , TD_GUI , LOWER , KC_DEL , KC_SPC , RAISE , KC_LEFT, KC_DOWN, KC_UP , KC_RGHT
  83. /*
  84. * ,-----------------------------------------..-----------------------------------------.
  85. * |Adjust| Ctrl | Alt | GUI |Lower |Space ||Space |Raise | Left | Down | Up |Right |
  86. * `-----------------------------------------'`-----------------------------------------'
  87. */
  88. #define BOTTOM_MIT_ROW \
  89. TD_ADJ ,TD_CTL , TD_ALT , TD_GUI , LOWER , KC_SPC , KC_SPC , RAISE , KC_LEFT, KC_DOWN, KC_UP , KC_RGHT
  90. #ifdef USE_MIT_LAYOUT
  91. #define BOTTOM_ROW BOTTOM_MIT_ROW
  92. /*
  93. * ,-----------------------------------------..-----------------------------------------.
  94. * | | F7 | F8 | F9 | F10 | F11 || F12 | PgUp | PgDn | Home | End | ⏹ |
  95. * |------+------+------+------+------+------||------+------+------+------+------+------|
  96. * | | | | | | || | | Mute | Vol- | Vol+ | ⏯ |
  97. * `-----------------------------------------'`-----------------------------------------'
  98. */
  99. #define BOTTOM_RAISE_LOWER_ROWS \
  100. _______, KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_PGUP, KC_PGDN, KC_HOME, KC_END , KC_MSTP, \
  101. _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPLY
  102. #else
  103. #define BOTTOM_ROW BOTTOM_GRID_ROW
  104. /*
  105. * ,-----------------------------------------..-----------------------------------------.
  106. * | | F7 | F8 | F9 | F10 | F11 || F12 | PgUp | PgDn | Home | End | ⏹ |
  107. * |------+------+------+------+------+------||------+------+------+------+------+------|
  108. * | | | | | | || Bksp | | Mute | Vol- | Vol+ | ⏯ |
  109. * `-----------------------------------------'`-----------------------------------------'
  110. */
  111. #define BOTTOM_RAISE_LOWER_ROWS \
  112. _______, KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_PGUP, KC_PGDN, KC_HOME, KC_END , KC_MSTP, \
  113. _______, _______, _______, _______, _______, KC_BSPC, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPLY
  114. #endif
  115. /*
  116. * ,-----------------------------------------..-----------------------------------------.
  117. * | Tab | || | Bksp |
  118. * `-----------------------------------------'`-----------------------------------------'
  119. */
  120. #define STD_TAB_ROW(...) KC_TAB, __VA_ARGS__, KC_BSPC
  121. /*
  122. * ,-----------------------------------------..-----------------------------------------.
  123. * | Esc | || |
  124. * `-----------------------------------------'`-----------------------------------------'
  125. */
  126. #define STD_ESC_ROW(...) MT_ESC, __VA_ARGS__
  127. /*
  128. * ,-----------------------------------------..-----------------------------------------.
  129. * | Shift| || |Enter |
  130. * `-----------------------------------------'`-----------------------------------------'
  131. */
  132. #define STD_LSFT_ROW(...) OSM_LSFT, __VA_ARGS__, MT_ENT
  133. /* Qwerty
  134. * ,-----------------------------------------..-----------------------------------------.
  135. * | Tab | Q | W | E | R | T || Y | U | I | O | P | Bksp |
  136. * |------+------+------+------+------+------||------+------+------+------+------+------|
  137. * | Esc | A | S | D | F | G || H | J | K | L | ; | " |
  138. * |------+------+------+------+------+------||------+------+------+------+------+------|
  139. * | Shift| Z | X | C | V | B || N | M | , | . | / |Enter |
  140. * |------+------+------+------+------+------||------+------+------+------+------+------|
  141. * |Adjust| Ctrl | Alt | GUI |Lower | Del ||Space |Raise | Left | Down | Up |Right |
  142. * `-----------------------------------------'`-----------------------------------------'
  143. */
  144. #define QWERTY_LAYER \
  145. STD_TAB_ROW( KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P ), \
  146. STD_ESC_ROW( KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN , KC_QUOT), \
  147. STD_LSFT_ROW(KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH), \
  148. BOTTOM_ROW
  149. /* Colemak
  150. * ,-----------------------------------------.,-----------------------------------------.
  151. * | Tab | Q | W | F | P | G || J | L | U | Y | ; | Bksp |
  152. * |------+------+------+------+------+------||------+------+------+------+------+------|
  153. * | Esc | A | R | S | T | D || H | N | E | I | O | " |
  154. * |------+------+------+------+------+------||------+------+------+------+------+------|
  155. * | Shift| Z | X | C | V | B || K | M | , | . | / |Enter |
  156. * |------+------+------+------+------+------||------+------+------+------+------+------|
  157. * |Adjust| Ctrl | Alt | GUI |Lower | Del ||Space |Raise | Left | Down | Up |Right |
  158. * `-----------------------------------------'`-----------------------------------------'
  159. */
  160. #define COLEMAK_LAYER \
  161. STD_TAB_ROW( KC_Q , KC_W , KC_F , KC_P , KC_G , KC_J , KC_L , KC_U , KC_Y , KC_SCLN), \
  162. STD_ESC_ROW( KC_A , KC_R , KC_S , KC_T , KC_D , KC_H , KC_N , KC_E , KC_I , KC_O , KC_QUOT), \
  163. STD_LSFT_ROW(KC_Z , KC_X , KC_C , KC_V , KC_B , KC_K , KC_M , KC_COMM, KC_DOT , KC_SLSH), \
  164. BOTTOM_ROW
  165. /* Workman
  166. * ,-----------------------------------------..-----------------------------------------.
  167. * | Tab | Q | D | R | W | B || J | F | U | P | ; | Bksp |
  168. * |------+------+------+------+------+------||------+------+------+------+------+------|
  169. * | Esc | A | S | H | T | G || Y | N | E | O | I | " |
  170. * |------+------+------+------+------+------||------+------+------+------+------+------|
  171. * | Shift| Z | X | M | C | V || K | L | , | . | / |Enter |
  172. * |------+------+------+------+------+------||------+------+------+------+------+------|
  173. * |Adjust| Ctrl | Alt | GUI |Lower | Del ||Space |Raise | Left | Down | Up |Right |
  174. * `-----------------------------------------'`-----------------------------------------'
  175. */
  176. #define WORKMAN_LAYER \
  177. STD_TAB_ROW( KC_Q , KC_D , KC_R , KC_W , KC_B , KC_J , KC_F , KC_U , KC_P , KC_SCLN), \
  178. STD_ESC_ROW( KC_A , KC_S , KC_H , KC_T , KC_G , KC_Y , KC_N , KC_E , KC_O , KC_I , KC_QUOT), \
  179. STD_LSFT_ROW(KC_Z , KC_X , KC_M , KC_C , KC_V , KC_K , KC_L , KC_COMM, KC_DOT , KC_SLSH), \
  180. BOTTOM_ROW
  181. /* Dvorak
  182. * ,-----------------------------------------..-----------------------------------------.
  183. * | Tab | " | , | . | P | Y || F | G | C | R | L | Bksp |
  184. * |------+------+------+------+------+------||------+------+------+------+------+------|
  185. * | Esc | A | O | E | U | I || D | H | T | N | S | / |
  186. * |------+------+------+------+------+------||------+------+------+------+------+------|
  187. * | Shift| ; | Q | J | K | X || B | M | W | V | Z |Enter |
  188. * |------+------+------+------+------+------||------+------+------+------+------+------|
  189. * |Adjust| Ctrl | Alt | GUI |Lower | Del ||Space |Raise | Left | Down | Up |Right |
  190. * `-----------------------------------------'`-----------------------------------------'
  191. */
  192. #define DVORAK_LAYER \
  193. STD_TAB_ROW( KC_QUOT, KC_COMM, KC_DOT , KC_P , KC_Y , KC_F , KC_G , KC_C , KC_R , KC_L), \
  194. STD_ESC_ROW( KC_A , KC_O , KC_E , KC_U , KC_I , KC_D , KC_H , KC_T , KC_N , KC_S , KC_SLSH), \
  195. STD_LSFT_ROW(KC_SCLN, KC_Q , KC_J , KC_K , KC_X , KC_B , KC_M , KC_W , KC_V , KC_Z), \
  196. BOTTOM_ROW
  197. /* Game (Qwerty without one shot modifiers & tap dancing)
  198. * ,-----------------------------------------..-----------------------------------------.
  199. * | Tab | Q | W | E | R | T || Y | U | I | O | P | Bksp |
  200. * |------+------+------+------+------+------||------+------+------+------+------+------|
  201. * | Esc | A | S | D | F | G || H | J | K | L | ; | " |
  202. * |------+------+------+------+------+------||------+------+------+------+------+------|
  203. * | Shift| Z | X | C | V | B || N | M | , | . | / |Enter |
  204. * |------+------+------+------+------+------||------+------+------+------+------+------|
  205. * |Adjust| Ctrl | Alt | GUI |Lower |Space ||Space |Raise | Left | Down | Up |Right |
  206. * `-----------------------------------------'`-----------------------------------------'
  207. */
  208. #define GAME_LAYER \
  209. KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_BSPC, \
  210. KC_ESC , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, \
  211. KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_ENT , \
  212. MO_ADJ , KC_LCTL, KC_LALT, KC_LGUI, LOWER , KC_SPC , KC_SPC , RAISE , KC_LEFT, KC_DOWN, KC_UP , KC_RGHT
  213. /* Number pad
  214. * ,-----------------------------------------..-----------------------------------------.
  215. * | Tab | XXX | XXX | XXX | XXX | XXX || NLCK | 7 | 8 | 9 | - | BKSP |
  216. * |------+------+------+------+------+------||------+------+------+------+------+------|
  217. * | Esc | XXX | XXX | XXX | XXX | XXX || * | 4 | 5 | 6 | + | BKSP |
  218. * |------+------+------+------+------+------||------+------+------+------+------+------|
  219. * |Shift | XXX | XXX | XXX | XXX | XXX || / | 1 | 2 | 3 | ENT | XXX |
  220. * |------+------+------+------+------+------||------+------+------+------+------+------|
  221. * |Adjust| Ctrl | Alt | GUI | XXX |Space ||Space | 0 | 0 | . | ENT | XXX |
  222. * `-----------------------------------------''-----------------------------------------'
  223. */
  224. #define NUMPAD_LAYER \
  225. KC_TAB , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_NLCK, KC_P7 , KC_P8 , KC_P9 , KC_PMNS, KC_BSPC, \
  226. KC_ESC , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PAST, KC_P4 , KC_P5 , KC_P6 , KC_PPLS, KC_BSPC, \
  227. KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PSLS, KC_P1 , KC_P2 , KC_P3 , KC_PENT, XXXXXXX, \
  228. TD_ADJ , TD_CTL , TD_ALT , TD_GUI , XXXXXXX, KC_SPC , KC_SPC , KC_P0 , KC_P0 , KC_PDOT, KC_PENT, XXXXXXX
  229. /* Mouse movement
  230. * ,-----------------------------------------..-----------------------------------------.
  231. * | Tab | MB_1 | MB_3 | MB_2 | MB_4 | MB_5 || MA_0 | MB_1 | MB_3 | MB_2 | MB_4 | MB_5 |
  232. * |------+------+------+------+------+------||------+------+------+------+------+------|
  233. * | Esc | MW_L | MW_U | MW_D | MW_R | XXX || MA_1 | M_LT | M_UP | M_DN | M_RT | XXX |
  234. * |------+------+------+------+------+------||------+------+------+------+------+------|
  235. * |Shift | MA_0 | MA_1 | MA_2 | XXX | XXX || MA_2 | MW_L | MW_U | MW_D | MW_R | XXX |
  236. * |------+------+------+------+------+------||------+------+------+------+------+------|
  237. * |Adjust| Ctrl | Alt | GUI | XXX |Space || XXX | XXX | XXX | XXX | XXX | XXX |
  238. * `-----------------------------------------''-----------------------------------------'
  239. */
  240. #define MOUSE_LAYER \
  241. KC_TAB , MS_BTN1, MS_BTN3, MS_BTN2, MS_BTN4, MS_BTN5, MS_ACL0, MS_BTN1, MS_BTN3, MS_BTN2, MS_BTN4, MS_BTN5, \
  242. KC_ESC , MW_LEFT, MW_DOWN, MW_UP , MW_RGHT, XXXXXXX, MS_ACL1, MS_LEFT, MS_DOWN, MS_UP , MS_RGHT, XXXXXXX, \
  243. KC_LSFT, MS_ACL0, MS_ACL1, MS_ACL2, XXXXXXX, XXXXXXX, MS_ACL2, MW_LEFT, MW_DOWN, MW_UP , MW_RGHT, XXXXXXX, \
  244. TD_ADJ , TD_CTL , TD_ALT , TD_GUI , XXXXXXX, KC_SPC , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
  245. /* Lower
  246. * ,-----------------------------------------..-----------------------------------------.
  247. * | ~ | ! | @ | # | $ | % || ^ | & | * | ( | ) | Bksp |
  248. * |------+------+------+------+------+------||------+------+------+------+------+------|
  249. * | Del | F1 | F2 | F3 | F4 | F5 || F6 | _ | + | | \ | | |
  250. * |------+------+------+------+------+------||------+------+------+------+------+------|
  251. * | | F7 | F8 | F9 | F10 | F11 || F12 | PgUp | PgDn | Home | End | ⏹ |
  252. * |------+------+------+------+------+------||------+------+------+------+------+------|
  253. * | | | | | | || | | Mute | Vol- | Vol+ | ⏯ |
  254. * `-----------------------------------------'`-----------------------------------------'
  255. */
  256. #define LOWER_LAYER \
  257. KC_TILD, KC_EXLM, KC_AT , KC_HASH, KC_DLR , KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
  258. KC_DEL , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
  259. BOTTOM_RAISE_LOWER_ROWS
  260. /* Raise
  261. * ,-----------------------------------------..-----------------------------------------.
  262. * | ` | 1 | 2 | 3 | 4 | 5 || 6 | 7 | 8 | 9 | 0 | Bksp |
  263. * |------+------+------+------+------+------||------+------+------+------+------+------|
  264. * | Del | F1 | F2 | F3 | F4 | F5 || F6 | - | = | [ | ] | \ |
  265. * |------+------+------+------+------+------||------+------+------+------+------+------|
  266. * | | F7 | F8 | F9 | F10 | F11 || F12 | PgUp | PgDn | Home | End | ⏹ |
  267. * |------+------+------+------+------+------||------+------+------+------+------+------|
  268. * | | | | | | || | | Mute | Vol- | Vol+ | ⏯ |
  269. * `-----------------------------------------''-----------------------------------------'
  270. */
  271. #define RAISE_LAYER \
  272. KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_BSPC, \
  273. KC_DEL , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_MINS, KC_EQL , KC_LBRC, KC_RBRC, KC_BSLS, \
  274. BOTTOM_RAISE_LOWER_ROWS
  275. #ifdef AUDIO_ENABLE
  276. float tone_qwerty[][2] = SONG(QWERTY_SOUND);
  277. float tone_dvorak[][2] = SONG(DVORAK_SOUND);
  278. float tone_colemak[][2] = SONG(COLEMAK_SOUND);
  279. float tone_workman[][2] = SONG(PLOVER_SOUND);
  280. #else
  281. float tone_qwerty;
  282. float tone_dvorak;
  283. float tone_colemak;
  284. float tone_workman;
  285. #define PLAY_SONG(tone)
  286. #endif
  287. void persistent_default_layer_set(uint16_t default_layer) {
  288. layer_state_set(default_layer);
  289. eeconfig_update_default_layer(default_layer);
  290. default_layer_set(default_layer);
  291. }
  292. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  293. switch (keycode) {
  294. case QWERTY:
  295. if (record->event.pressed) {
  296. PLAY_SONG(tone_qwerty);
  297. persistent_default_layer_set(1UL<<_QWERTY);
  298. }
  299. return false;
  300. break;
  301. case COLEMAK:
  302. if (record->event.pressed) {
  303. PLAY_SONG(tone_colemak);
  304. persistent_default_layer_set(1UL<<_COLEMAK);
  305. }
  306. return false;
  307. break;
  308. case WORKMAN:
  309. if (record->event.pressed) {
  310. PLAY_SONG(tone_workman);
  311. persistent_default_layer_set(1UL<<_WORKMAN);
  312. }
  313. return false;
  314. break;
  315. case DVORAK:
  316. if (record->event.pressed) {
  317. PLAY_SONG(tone_dvorak);
  318. persistent_default_layer_set(1UL<<_DVORAK);
  319. }
  320. return false;
  321. break;
  322. case LOWER:
  323. if (record->event.pressed) {
  324. layer_on(_LOWER);
  325. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  326. } else {
  327. layer_off(_LOWER);
  328. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  329. }
  330. return false;
  331. break;
  332. case RAISE:
  333. if (record->event.pressed) {
  334. layer_on(_RAISE);
  335. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  336. } else {
  337. layer_off(_RAISE);
  338. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  339. }
  340. return false;
  341. break;
  342. }
  343. return true;
  344. }