keymap.c 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. // Copyright 2023 QMK
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #include QMK_KEYBOARD_H
  4. enum sofle_layers {
  5. /* _M_XYZ = Mac Os, _W_XYZ = Win/Linux */
  6. _QWERTY,
  7. _COLEMAK,
  8. _LOWER,
  9. _RAISE,
  10. _ADJUST,
  11. };
  12. enum custom_keycodes {
  13. KC_QWERTY = QK_USER,
  14. KC_COLEMAK,
  15. KC_PRVWD,
  16. KC_NXTWD,
  17. KC_LSTRT,
  18. KC_LEND
  19. };
  20. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  21. /*
  22. * QWERTY
  23. * ,-----------------------------------------. ,-----------------------------------------.
  24. * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` |
  25. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  26. * | ESC | Q | W | E | R | T | | Y | U | I | O | P | Bspc |
  27. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  28. * | Tab | A | S | D | F | G |-------. ,-------| H | J | K | L | ; | ' |
  29. * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
  30. * |LShift| Z | X | C | V | B |-------| |-------| N | M | , | . | / |RShift|
  31. * `-----------------------------------------/ / \ \-----------------------------------------'
  32. * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
  33. * | | | | |/ / \ \ | | | | |
  34. * `----------------------------------' '------''---------------------------'
  35. */
  36. [_QWERTY] = LAYOUT(
  37. KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_GRV,
  38. KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
  39. KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
  40. KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MUTE, XXXXXXX,KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
  41. KC_LGUI,KC_LALT,KC_LCTL, TL_LOWR, KC_ENT, KC_SPC, TL_UPPR, KC_RCTL, KC_RALT, KC_RGUI
  42. ),
  43. /*
  44. * COLEMAK
  45. * ,-----------------------------------------. ,-----------------------------------------.
  46. * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` |
  47. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  48. * | ESC | Q | W | F | P | G | | J | L | U | Y | ; | Bspc |
  49. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  50. * | TAB | A | R | S | T | D |-------. ,-------| H | N | E | I | O | ' |
  51. * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
  52. * |LShift| Z | X | C | V | B |-------| |-------| K | M | , | . | / |RShift|
  53. * `-----------------------------------------/ / \ \-----------------------------------------'
  54. * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
  55. * | | | | |/ / \ \ | | | | |
  56. * `----------------------------------' '------''---------------------------'
  57. */
  58. [_COLEMAK] = LAYOUT(
  59. KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_GRV,
  60. KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
  61. KC_TAB, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
  62. KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MUTE, XXXXXXX,KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
  63. KC_LGUI,KC_LALT,KC_LCTL,TL_LOWR, KC_ENT, KC_SPC, TL_UPPR, KC_RCTL, KC_RALT, KC_RGUI
  64. ),
  65. /* LOWER
  66. * ,-----------------------------------------. ,-----------------------------------------.
  67. * | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
  68. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  69. * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | F12 |
  70. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  71. * | Tab | ! | @ | # | $ | % |-------. ,-------| ^ | & | * | ( | ) | | |
  72. * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
  73. * | Shift| = | - | + | { | } |-------| |-------| [ | ] | ; | : | \ | Shift|
  74. * `-----------------------------------------/ / \ \-----------------------------------------'
  75. * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
  76. * | | | | |/ / \ \ | | | | |
  77. * `----------------------------------' '------''---------------------------'
  78. */
  79. [_LOWER] = LAYOUT(
  80. _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
  81. KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_F12,
  82. _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PIPE,
  83. _______, KC_EQL, KC_MINS, KC_PLUS, KC_LCBR, KC_RCBR, _______, _______, KC_LBRC, KC_RBRC, KC_SCLN, KC_COLN, KC_BSLS, _______,
  84. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
  85. ),
  86. /* RAISE
  87. * ,----------------------------------------. ,-----------------------------------------.
  88. * | | | | | | | | | | | | | |
  89. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  90. * | Esc | Ins | Pscr | Menu | | | | | PWrd | Up | NWrd | DLine| Bspc |
  91. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  92. * | Tab | LAt | LCtl |LShift| | Caps |-------. ,-------| | Left | Down | Rigth| Del | Bspc |
  93. * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
  94. * |Shift | Undo | Cut | Copy | Paste| |-------| |-------| | LStr | | LEnd | | Shift|
  95. * `-----------------------------------------/ / \ \-----------------------------------------'
  96. * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
  97. * | | | | |/ / \ \ | | | | |
  98. * `----------------------------------' '------''---------------------------'
  99. */
  100. [_RAISE] = LAYOUT(
  101. _______, _______ , _______ , _______ , _______ , _______, _______, _______ , _______, _______ , _______ ,_______,
  102. _______, KC_INS, KC_PSCR, KC_APP, XXXXXXX, XXXXXXX, KC_PGUP, KC_PRVWD, KC_UP, KC_NXTWD,C(KC_BSPC), KC_BSPC,
  103. _______, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, KC_CAPS, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, KC_BSPC,
  104. _______, C(KC_Z), C(KC_X), C(KC_C), C(KC_V), XXXXXXX, _______, _______, XXXXXXX, KC_LSTRT, XXXXXXX, KC_LEND, XXXXXXX, _______,
  105. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
  106. ),
  107. /* ADJUST
  108. * ,-----------------------------------------. ,-----------------------------------------.
  109. * | | | | | | | | | | | | | |
  110. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  111. * | QK_BOOT| |QWERTY|COLEMAK| | | | | | | | | |
  112. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  113. * | | |MACWIN| | | |-------. ,-------| | VOLDO| MUTE | VOLUP| | |
  114. * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
  115. * | | | | | | |-------| |-------| | PREV | PLAY | NEXT | | |
  116. * `-----------------------------------------/ / \ \-----------------------------------------'
  117. * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
  118. * | | | | |/ / \ \ | | | | |
  119. * `----------------------------------' '------''---------------------------'
  120. */
  121. [_ADJUST] = LAYOUT(
  122. XXXXXXX , XXXXXXX, XXXXXXX , XXXXXXX , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  123. QK_BOOT , XXXXXXX,KC_QWERTY,KC_COLEMAK,CG_TOGG,XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  124. XXXXXXX , XXXXXXX,CG_TOGG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLD, KC_MUTE, KC_VOLU, XXXXXXX, XXXXXXX,
  125. XXXXXXX , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX,
  126. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
  127. )
  128. };
  129. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  130. switch (keycode) {
  131. case KC_QWERTY:
  132. if (record->event.pressed) {
  133. set_single_persistent_default_layer(_QWERTY);
  134. }
  135. return false;
  136. case KC_COLEMAK:
  137. if (record->event.pressed) {
  138. set_single_persistent_default_layer(_COLEMAK);
  139. }
  140. return false;
  141. case KC_PRVWD:
  142. if (record->event.pressed) {
  143. if (keymap_config.swap_lctl_lgui) {
  144. register_mods(mod_config(MOD_LALT));
  145. register_code(KC_LEFT);
  146. } else {
  147. register_mods(mod_config(MOD_LCTL));
  148. register_code(KC_LEFT);
  149. }
  150. } else {
  151. if (keymap_config.swap_lctl_lgui) {
  152. unregister_mods(mod_config(MOD_LALT));
  153. unregister_code(KC_LEFT);
  154. } else {
  155. unregister_mods(mod_config(MOD_LCTL));
  156. unregister_code(KC_LEFT);
  157. }
  158. }
  159. break;
  160. case KC_NXTWD:
  161. if (record->event.pressed) {
  162. if (keymap_config.swap_lctl_lgui) {
  163. register_mods(mod_config(MOD_LALT));
  164. register_code(KC_RIGHT);
  165. } else {
  166. register_mods(mod_config(MOD_LCTL));
  167. register_code(KC_RIGHT);
  168. }
  169. } else {
  170. if (keymap_config.swap_lctl_lgui) {
  171. unregister_mods(mod_config(MOD_LALT));
  172. unregister_code(KC_RIGHT);
  173. } else {
  174. unregister_mods(mod_config(MOD_LCTL));
  175. unregister_code(KC_RIGHT);
  176. }
  177. }
  178. break;
  179. case KC_LSTRT:
  180. if (record->event.pressed) {
  181. if (keymap_config.swap_lctl_lgui) {
  182. //CMD-arrow on Mac, but we have CTL and GUI swapped
  183. register_mods(mod_config(MOD_LCTL));
  184. register_code(KC_LEFT);
  185. } else {
  186. register_code(KC_HOME);
  187. }
  188. } else {
  189. if (keymap_config.swap_lctl_lgui) {
  190. unregister_mods(mod_config(MOD_LCTL));
  191. unregister_code(KC_LEFT);
  192. } else {
  193. unregister_code(KC_HOME);
  194. }
  195. }
  196. break;
  197. case KC_LEND:
  198. if (record->event.pressed) {
  199. if (keymap_config.swap_lctl_lgui) {
  200. //CMD-arrow on Mac, but we have CTL and GUI swapped
  201. register_mods(mod_config(MOD_LCTL));
  202. register_code(KC_RIGHT);
  203. } else {
  204. register_code(KC_END);
  205. }
  206. } else {
  207. if (keymap_config.swap_lctl_lgui) {
  208. unregister_mods(mod_config(MOD_LCTL));
  209. unregister_code(KC_RIGHT);
  210. } else {
  211. unregister_code(KC_END);
  212. }
  213. }
  214. break;
  215. }
  216. return true;
  217. }