keymap.c 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. #include "tv44.h"
  2. #include "action_layer.h"
  3. #include "debug.h"
  4. #include "eeconfig.h"
  5. // Layer names. We stick to 3 letters if possible so MO(NAME) fits in 7
  6. // characters and doesn't mess with the grid.
  7. #define _QW 0
  8. #define _L1 1
  9. #define _L2 2
  10. #define _L3 3
  11. // Curly braces have their own keys. These are defined so they don't mess up the
  12. // grid in layer 2.
  13. #define L_CURBR LSFT(KC_LBRC)
  14. #define R_CURBR LSFT(KC_RBRC)
  15. #define L1_TAB LT(_L1, KC_TAB)
  16. #define L2_ESC LT(_L2, KC_ESC)
  17. #define L2_SLSH LT(_L2, KC_SLSH)
  18. #define L3_QUOT LT(_L3, KC_QUOT)
  19. // Tap dance magic
  20. #define TD_LGUI TD(BE_TD_GUI)
  21. #define TD_LCTL TD(BE_TD_CTL)
  22. #define TD_LALT TD(BE_TD_ALT)
  23. enum belak_td {
  24. BE_TD_GUI = 0,
  25. BE_TD_CTL,
  26. BE_TD_ALT,
  27. };
  28. void mod_tap_fn(qk_tap_dance_state_t *state, void *user_data);
  29. void mod_reset_fn(qk_tap_dance_state_t *state, void *user_data);
  30. qk_tap_dance_action_t tap_dance_actions[] = {
  31. [BE_TD_GUI] = ACTION_TAP_DANCE_FN_ADVANCED(mod_tap_fn, NULL, mod_reset_fn),
  32. [BE_TD_CTL] = ACTION_TAP_DANCE_FN_ADVANCED(mod_tap_fn, NULL, mod_reset_fn),
  33. [BE_TD_ALT] = ACTION_TAP_DANCE_FN_ADVANCED(mod_tap_fn, NULL, mod_reset_fn),
  34. };
  35. uint16_t tap_dance_keys[] = {
  36. [BE_TD_GUI] = KC_LGUI,
  37. [BE_TD_CTL] = KC_LCTL,
  38. [BE_TD_ALT] = KC_LALT,
  39. };
  40. // Fillers to make layering more clear
  41. #define _______ KC_TRNS
  42. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  43. [_QW] = LAYOUT_arrow_command( /* Qwerty */
  44. L2_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
  45. L1_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
  46. KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, L2_SLSH,
  47. TD_LCTL, MO(_L3), TD_LALT, TD_LGUI, KC_SPC, KC_SPC, MO(_L1), KC_LEFT, KC_DOWN, KC_RGHT
  48. ),
  49. [_L1] = LAYOUT_arrow_command( /* LAYER 1 */
  50. KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
  51. _______, KC_BSLS, KC_QUOT, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_DOWN, KC_UP, KC_LEFT, KC_RGHT, KC_QUOT,
  52. _______, KC_ESC, _______, KC_PSCR, _______, _______, _______, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, KC_RSFT,
  53. _______, KC_LGUI, _______, _______, _______, _______, _______, _______, _______, _______
  54. ),
  55. [_L2] = LAYOUT_arrow_command( /* LAYER 2 */
  56. _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
  57. KC_ESC, KC_PIPE, KC_DQUO, KC_UNDS, KC_PLUS, L_CURBR, R_CURBR, KC_4, KC_5, KC_6, KC_VOLU, _______,
  58. _______, _______, _______, _______, _______, _______, KC_0, KC_1, KC_2, KC_3, KC_VOLD, _______,
  59. _______, _______, _______, _______, _______, _______, KC_RALT, _______, _______, _______
  60. ),
  61. [_L3] = LAYOUT_arrow_command( /* LAYER 3 */
  62. _______, _______, _______, _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F4, _______,
  63. KC_ESC, _______, _______, _______, _______, _______, _______, KC_F5, KC_F6, KC_F7, KC_F8, _______,
  64. _______, _______, _______, _______, _______, _______, _______, KC_F9, KC_F10, KC_F11, KC_F12, KC_RSFT,
  65. _______, _______, _______, _______, _______, _______, KC_RALT, _______, _______, _______
  66. )
  67. };
  68. const uint16_t PROGMEM fn_actions[] = {};
  69. // Tap dance functions
  70. void mod_tap_fn(qk_tap_dance_state_t *state, void *user_data) {
  71. switch (state->count) {
  72. case 1:
  73. register_mods(MOD_BIT(tap_dance_keys[state->keycode - QK_TAP_DANCE]));
  74. send_keyboard_report();
  75. break;
  76. case 2:
  77. layer_on(_L2);
  78. break;
  79. case 3:
  80. layer_off(_L2);
  81. layer_on(_L1);
  82. break;
  83. default:
  84. reset_tap_dance(state);
  85. }
  86. }
  87. void mod_reset_fn(qk_tap_dance_state_t *state, void *user_data) {
  88. layer_off(_L1);
  89. layer_off(_L2);
  90. unregister_mods(MOD_BIT(tap_dance_keys[state->keycode - QK_TAP_DANCE]));
  91. send_keyboard_report();
  92. }