keymap.c 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. /* Copyright 2021 Mykyta Poturai <ddone@aruko.org>
  2. *
  3. * This program is free software: you can redistribute it and/or modify
  4. * it under the terms of the GNU General Public License as published by
  5. * the Free Software Foundation, either version 2 of the License, or
  6. * (at your option) any later version.
  7. *
  8. * This program is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. * GNU General Public License for more details
  12. *
  13. * You should have received a copy of the GNU General Public License
  14. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  15. */
  16. #include QMK_KEYBOARD_H
  17. enum custom_layers {
  18. _QWERTY,
  19. _LOWER,
  20. _RAISE,
  21. _ADJUST,
  22. };
  23. #define SPCFN1 LT(_LOWER, KC_SPC)
  24. #define SFTESC LSFT_T(KC_ESC)
  25. enum custom_keycodes {
  26. LOWER = SAFE_RANGE,
  27. RAISE,
  28. ADJUST,
  29. };
  30. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  31. [_QWERTY] = LAYOUT(
  32. //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
  33. KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
  34. //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
  35. KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL,
  36. //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
  37. SFTESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, SC_SENT,
  38. //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
  39. KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, SPCFN1, KC_DEL, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RCTL,
  40. //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
  41. LOWER , KC_LWIN,SPCFN1, RAISE, RAISE, KC_RALT
  42. // └────────┴────────┴────────┘ └────────┴────────┴────────┘
  43. ),
  44. [_LOWER] = LAYOUT(
  45. //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
  46. KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PGUP,
  47. //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
  48. _______, KC_1, KC_2, KC_3, KC_4, KC_LT, KC_GT, KC_7, KC_8, KC_9, KC_0, KC_PIPE,
  49. //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
  50. _______, _______, _______, _______,_______, KC_LBRC, KC_RBRC, KC_4, KC_5, KC_6, KC_PLUS, KC_MINS,
  51. //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
  52. _______, _______, _______, _______, _______, KC_LPRN, LOWER, _______, KC_RPRN, KC_1, KC_2, KC_3, KC_PAST, KC_PSLS,
  53. //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
  54. _______, _______, LOWER, _______, _______, KC_0
  55. // └────────┴────────┴────────┘ └────────┴────────┴────────┘
  56. ),
  57. [_RAISE] = LAYOUT(
  58. //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
  59. KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
  60. //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
  61. _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
  62. //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
  63. _______, _______, KC_BSLS, KC_EQUAL,KC_QUOTE,KC_UNDS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______,
  64. //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
  65. _______, _______, _______, _______, _______, KC_MINS, LOWER, _______, KC_PLUS, _______, _______, _______, _______, _______,
  66. //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
  67. _______, _______, LOWER, _______, _______, _______
  68. // └────────┴────────┴────────┘ └────────┴────────┴────────┘
  69. ),
  70. [_ADJUST] = LAYOUT(
  71. //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
  72. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT,
  73. //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
  74. _______, _______, _______, RGB_VAD, RGB_VAI ,_______ , KC_PSCR, KC_BTN1, KC_BTN2, KC_BTN3, _______, _______,
  75. //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
  76. _______, _______, _______, RGB_RMOD,RGB_MOD, RGB_TOG , KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, _______, _______,
  77. //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
  78. _______, _______, _______, RGB_HUD, RGB_HUI, _______, LOWER, _______, _______, _______, _______, _______, _______, _______,
  79. //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
  80. _______, _______, LOWER, _______, _______, _______
  81. // └────────┴────────┴────────┘ └────────┴────────┴────────┘
  82. )
  83. };
  84. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  85. switch (keycode) {
  86. case LOWER:
  87. if (record->event.pressed) {
  88. layer_on(_LOWER);
  89. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  90. } else {
  91. layer_off(_LOWER);
  92. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  93. }
  94. return false;
  95. break;
  96. case RAISE:
  97. if (record->event.pressed) {
  98. layer_on(_RAISE);
  99. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  100. } else {
  101. layer_off(_RAISE);
  102. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  103. }
  104. return false;
  105. break;
  106. case ADJUST:
  107. if (record->event.pressed) {
  108. layer_on(_ADJUST);
  109. } else {
  110. layer_off(_ADJUST);
  111. }
  112. return false;
  113. break;
  114. }
  115. return true;
  116. }
  117. bool get_permissive_hold(uint16_t keycode, keyrecord_t *record) {
  118. switch (keycode) {
  119. case SFTESC:
  120. return true;
  121. default:
  122. return false;
  123. }
  124. }
  125. bool encoder_update_user(uint8_t index, bool clockwise) {
  126. switch (get_highest_layer(layer_state)) {
  127. case _LOWER:
  128. if (clockwise) {
  129. tap_code(KC_WH_D);
  130. } else {
  131. tap_code(KC_WH_U);
  132. }
  133. break;
  134. default:
  135. if (clockwise) {
  136. tap_code(KC_PGDN);
  137. } else {
  138. tap_code(KC_PGUP);
  139. }
  140. }
  141. return true;
  142. }