keymap.c 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. /* Copyright 2021 HellSingCoder
  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. #ifdef COMBO_ENABLE
  18. # include "combos.h"
  19. #endif
  20. enum layers
  21. {
  22. _ALPHA_QWERTY = 0,
  23. _SYM,
  24. _NAV,
  25. _NUM,
  26. };
  27. enum custom_keycodes {
  28. KC_THUMB_SWAP,
  29. };
  30. /* Space Enter swap */
  31. bool swap_space_enter = false;
  32. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  33. /*
  34. * QWERTY
  35. *
  36. * _____________________ _____________________
  37. * __|__ | | __|__
  38. * _____ | | v v | | _____
  39. * .-----| E |-----._____ _____.-----| I |-----.
  40. * .-----| W |_____| R | T | __ ( ) __ | Y | U |_____| O |-----.
  41. * __ | Q |-----| D |-----|_____| __|--> + - <--|__ |_____|-----| K |-----| P | __
  42. * ESC <--|__ |-----| S |_____| F | G | [ ] | H | J |_____| L |-----| __|--> '
  43. * __ | A |-----| C |-----|_____| __ __ |_____|-----| , < |-----| ; : | __
  44. * TAB <--|__ |-----| X |_____| V | B | __|--> * { } = <--|__ | N | M |_____| . > |-----| __|--> "
  45. * | Z |-----' '-----|_____| |_____|-----' '-----| / ? |
  46. * '-----' .-----. _____ .-.._ _..-. _____ .-----. '-----'
  47. * | | WIN ||CTRL | / / \ \ | BSp || Del | |
  48. * SHIFT '-----':_____|/ ENT / \ SPC \|_____:'-----' SHIFT
  49. * | '--.._/ \_..--' | |
  50. * NUM NAV SYM
  51. */
  52. [_ALPHA_QWERTY] = LAYOUT(
  53. KC_Q, KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P ,
  54. KC_A, KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN ,
  55. LSFT_T(KC_Z), KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , RSFT_T(KC_SLSH),
  56. LT(_NUM, KC_LGUI), KC_LCTL, KC_ENT, KC_SPC, LT(_NAV, KC_BSPC), LT(_SYM, KC_DEL)
  57. ),
  58. /*
  59. * Symbols
  60. * _____ _____
  61. * .-----| # |-----._____ _____.-----| * |-----.
  62. * .-----| @ |_____| $ | % | | ^ | & |_____| ( |-----.
  63. * | ! |-----| |-----|_____| |_____|-----| [ { |-----| ) |
  64. * |-----| |_____| | | | { | } |_____| ] } |-----|
  65. * | ` ~ |-----| |-----|_____| |_____|-----| |-----| ' " |
  66. * |-----| |_____| | | | - _ | = + |_____| | |-----|
  67. * | ~ |-----' '-----|_____| |_____|-----' '-----| \ | |
  68. * '-----' .-----. _____ .-.._ _..-. _____ .-----. '-----'
  69. * SHIFT | ||CTRL | / / \ \ | BSp || | SHIFT
  70. * '-----':_____|/ ENT / \ SPC \|_____:'-----'
  71. * '--.._/ \_..--'
  72. */
  73. [_SYM] = LAYOUT(
  74. KC_EXLM, KC_AT , KC_HASH, KC_DLR , KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN ,
  75. KC_GRV , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_QUOT ,
  76. LSFT_T(KC_TILD), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MINS, KC_EQL , XXXXXXX, KC_PIPE, RSFT_T(KC_BSLS),
  77. XXXXXXX, _______, _______, _______, KC_BSPC, XXXXXXX
  78. ),
  79. /*
  80. * Navigation
  81. * _____ _____
  82. * .-----|Mute |-----._____ _____.-----| Up |-----.
  83. * .-----|VDown|_____| VUp | | | |PDown|_____| PUp |-----.
  84. * | Esc |-----|Play |-----|_____| |_____|-----|Down |-----| BSp |
  85. * |-----|Prev |_____|Next | | |Home |Left |_____|Right|-----|
  86. * | Tab |-----|Stop |-----|_____| |_____|-----| |-----| ' " |
  87. * |-----| |_____| | | | | |_____| End |-----|
  88. * | CPS |-----' '-----|_____| |_____|-----' '-----| Del |
  89. * '-----' .-----. _____ .-.._ _..-. _____ .-----. '-----'
  90. * SHIFT | ||CTRL | / / \ \ | BSp || | SHIFT
  91. * '-----':_____|/ ENT / \ SPC \|_____:'-----'
  92. * '--.._/ \_..--'
  93. */
  94. [_NAV] = LAYOUT(
  95. KC_ESC , KC_VOLD, KC_MUTE, KC_VOLU, XXXXXXX, XXXXXXX, KC_PGDN, KC_UP , KC_PGUP, KC_BSPC,
  96. KC_TAB , KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_QUOT,
  97. LSFT_T(KC_CAPS), XXXXXXX, KC_MSTP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_END , RSFT_T(KC_DEL) ,
  98. XXXXXXX, _______, _______, _______, KC_BSPC, XXXXXXX
  99. ),
  100. /*
  101. * Numbers
  102. * _____ _____
  103. * .-----| 3 |-----._____ _____.-----| 8 |-----.
  104. * .-----| 2 |_____| 4 | 5 | | 6 | 7 |_____| 9 |-----.
  105. * | 1 |-----| F3 |-----|_____| |_____|-----| F8 |-----| 0 |
  106. * |-----| F2 |_____| F4 | F5 | | F6 | F7 |_____| F9 |-----|
  107. * | F1 |-----| Scr |-----|_____| |_____|-----| |-----| F10 |
  108. * |-----| TMg |_____| |Swap | | | |_____| F11 |-----|
  109. * |Shift|-----' '-----|_____| |_____|-----' '-----| F12 |
  110. * '-----' .-----. _____ .-.._ _..-. _____ .-----. '-----'
  111. * | ||CTRL | / / \ \ | BSp || | SHIFT
  112. * '-----':_____|/ ENT / \ SPC \|_____:'-----'
  113. * '--.._/ \_..--'
  114. */
  115. [_NUM] = LAYOUT(
  116. KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 ,
  117. KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 ,
  118. KC_LSFT, LCA(KC_DEL), SWIN(KC_S), XXXXXXX, KC_THUMB_SWAP, XXXXXXX, XXXXXXX, XXXXXXX, KC_F11 , RSFT_T(KC_F12) ,
  119. XXXXXXX, _______, _______, _______, KC_BSPC, XXXXXXX
  120. ),
  121. };
  122. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  123. switch (keycode) {
  124. /* Space Enter swap */
  125. case KC_THUMB_SWAP:
  126. if (record->event.pressed) {
  127. unregister_code(KC_SPC);
  128. unregister_code(KC_ENT);
  129. swap_space_enter = !swap_space_enter;
  130. }
  131. return false;
  132. break;
  133. case KC_ENT:
  134. if (swap_space_enter) {
  135. if (record->event.pressed) {
  136. register_code(KC_SPC);
  137. } else {
  138. unregister_code(KC_SPC);
  139. }
  140. return false;
  141. }
  142. break;
  143. case KC_SPC:
  144. if (swap_space_enter) {
  145. if (record->event.pressed) {
  146. register_code(KC_ENT);
  147. } else {
  148. unregister_code(KC_ENT);
  149. }
  150. return false;
  151. }
  152. break;
  153. }
  154. return true;
  155. }