You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

199 lines
15 KiB

  1. // Copyright 2021 Christian Eiden, cykedev
  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. #include QMK_KEYBOARD_H
  16. #define CM_SPAL LGUI_T(KC_SPC)
  17. #define CM_SPAR RGUI_T(KC_SPC)
  18. #define SH_ENL LSFT_T(KC_ENT)
  19. #define SH_ENR RSFT_T(KC_ENT)
  20. #define RAISE MO(_RAISE)
  21. #define LOWER MO(_LOWER)
  22. #define QWERT DF(_QWERTY)
  23. #define COLEM DF(_COLEMAK_DH)
  24. enum layer_names {
  25. _COLEMAK_DH,
  26. _QWERTY,
  27. _RAISE,
  28. _LOWER,
  29. _ADJUST
  30. };
  31. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  32. [_COLEMAK_DH] = LAYOUT_split_4x6_5(
  33. /* COLEMAK_DH
  34. * .-----------------------------------------. .-----------------------------------------.
  35. * | Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bsp |
  36. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  37. * | Tab | Q | W | F | P | B | | J | L | U | Y | ; | \ |
  38. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  39. * | Del | A | R | S | T | G | | M | N | E | I | O | ' |
  40. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  41. * | Shft | Z | X | C | D | V | | K | H | , | . | / | Shft |
  42. * '-----------------------------------------/ \-----------------------------------------'
  43. * / RAISE /---------------. .---------------\ LOWER \
  44. * / / Cmd / Shift / \ Shift \ Cmd \ \
  45. * '-------/ Space / Enter / \ Enter \ Space \-------'
  46. * /---------------/ \---------------\
  47. * / Alt / Ctrl / \ Ctrl \ Alt \
  48. * / / / \ \ \
  49. * '---------------' '---------------'
  50. */
  51. KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_BSPC,
  52. KC_TAB , KC_Q , KC_W , KC_F , KC_P , KC_B , KC_J , KC_L , KC_U , KC_Y , KC_SCLN, KC_BSLS,
  53. KC_DEL , KC_A , KC_R , KC_S , KC_T , KC_G , KC_M , KC_N , KC_E , KC_I , KC_O , KC_QUOT,
  54. KC_LSFT, KC_Z , KC_X , KC_C , KC_D , KC_V , KC_K , KC_H , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT,
  55. RAISE , CM_SPAL, SH_ENL , SH_ENR , CM_SPAR, LOWER ,
  56. KC_LALT, KC_LCTL, KC_RCTL, KC_RALT
  57. ),
  58. [_QWERTY] = LAYOUT_split_4x6_5(
  59. /* QWERTY
  60. * .-----------------------------------------. .-----------------------------------------.
  61. * | Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bsp |
  62. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  63. * | Tab | Q | W | E | R | T | | Y | U | I | O | P | \ |
  64. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  65. * | Del | A | S | D | F | G | | H | J | K | L | ; | ' |
  66. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  67. * | Shft | Z | X | C | V | B | | N | M | , | . | / | Shft |
  68. * '-----------------------------------------/ \-----------------------------------------'
  69. * / RAISE /---------------. .---------------\ LOWER \
  70. * / / Cmd / Shift / \ Shift \ Cmd \ \
  71. * '-------/ Space / Enter / \ Enter \ Space \-------'
  72. * /---------------/ \---------------\
  73. * / Alt / Ctrl / \ Ctrl \ Alt \
  74. * / / / \ \ \
  75. * '---------------' '---------------'
  76. */
  77. KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_BSPC,
  78. KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_BSLS,
  79. KC_DEL , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT,
  80. KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_LSFT,
  81. RAISE , CM_SPAL, SH_ENL , SH_ENR , CM_SPAR, LOWER ,
  82. KC_LALT, KC_LCTL, KC_RCTL, KC_RALT
  83. ),
  84. [_RAISE] = LAYOUT_split_4x6_5(
  85. /* RAISE
  86. * .-----------------------------------------. .-----------------------------------------.
  87. * | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
  88. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  89. * | | | | [ | ] | | | $ | / | * | # | ~ | F12 |
  90. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  91. * | Ins | ! | @ | ( | ) | | | % | - | + | = | ? | |
  92. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  93. * | | | | { | } | | | ^ | & | | | | | |
  94. * '-----------------------------------------/ \-----------------------------------------'
  95. * / /---------------. .---------------\ \
  96. * / / / / \ \ \ \
  97. * '-------/ / / \ \ \-------'
  98. * /---------------/ \---------------\
  99. * / / / \ \ \
  100. * / / / \ \ \
  101. * '---------------' '---------------'
  102. */
  103. XXXXXXX, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 ,
  104. XXXXXXX, XXXXXXX, XXXXXXX, KC_LBRC, KC_RBRC, XXXXXXX, KC_DLR , KC_SLSH, KC_ASTR, KC_HASH, KC_TILD, KC_F12 ,
  105. KC_INS , KC_EXLM, KC_AT , KC_LPRN, KC_RPRN, XXXXXXX, KC_PERC, KC_MINS, KC_PPLS, KC_PEQL, KC_QUES, XXXXXXX,
  106. XXXXXXX, XXXXXXX, XXXXXXX, KC_LCBR, KC_RCBR, XXXXXXX, KC_CIRC, KC_AMPR, KC_PIPE, XXXXXXX, XXXXXXX, XXXXXXX,
  107. _______, _______, _______, _______, _______, _______,
  108. _______, _______, _______, _______
  109. ),
  110. [_LOWER] = LAYOUT_split_4x6_5(
  111. /* LOWER
  112. * .-----------------------------------------. .-----------------------------------------.
  113. * | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
  114. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  115. * | | | | [ | ] | + | | | | up | | | F12 |
  116. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  117. * | Ins | ! | @ | ( | ) | - | | | left | down | rght | ? | |
  118. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  119. * | | | | { | } | = | | | | | | | |
  120. * '-----------------------------------------/ \-----------------------------------------'
  121. * / /---------------. .---------------\ \
  122. * / / / / \ \ \ \
  123. * '-------/ / / \ \ \-------'
  124. * /---------------/ \---------------\
  125. * / / / \ \ \
  126. * / / / \ \ \
  127. * '---------------' '---------------'
  128. */
  129. XXXXXXX, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 ,
  130. XXXXXXX, XXXXXXX, XXXXXXX, KC_LBRC, KC_RBRC, KC_PPLS, XXXXXXX, XXXXXXX, KC_UP , XXXXXXX, XXXXXXX, KC_F12 ,
  131. KC_INS , KC_EXLM, KC_AT , KC_LPRN, KC_RPRN, KC_MINS, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_QUES, XXXXXXX,
  132. XXXXXXX, XXXXXXX, XXXXXXX, KC_LCBR, KC_RCBR, KC_PEQL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  133. _______, _______, _______, _______, _______, _______,
  134. _______, _______, _______, _______
  135. ),
  136. [_ADJUST] = LAYOUT_split_4x6_5(
  137. /* ADJUST
  138. * .-----------------------------------------. .-----------------------------------------.
  139. * | | | | | | QWERT| |COLEM | | | | | |
  140. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  141. * | | | | | | V+ | | B + | | | | | |
  142. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  143. * | | | | | | V- | | B - | << | play | >> | | |
  144. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  145. * | | | | | | Mute | | | | | | | |
  146. * '-----------------------------------------/ \-----------------------------------------'
  147. * / /---------------. .---------------\ \
  148. * / / / / \ \ \ \
  149. * '-------/ / / \ \ \-------'
  150. * /---------------/ \---------------\
  151. * / / / \ \ \
  152. * / / / \ \ \
  153. * '---------------' '---------------'
  154. */
  155. XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QWERT , COLEM , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  156. XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLU, KC_BRIU, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  157. XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLD, KC_BRID, KC_MRWD, KC_MPLY, KC_MFFD, XXXXXXX, XXXXXXX,
  158. XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  159. XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  160. XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
  161. )
  162. };
  163. bool get_hold_on_other_key_press(uint16_t keycode, keyrecord_t *record) {
  164. if (keycode == CM_SPAR) {
  165. return false;
  166. } else if (QK_MOD_TAP <= keycode && keycode <= QK_MOD_TAP_MAX) {
  167. return true;
  168. } else {
  169. return false;
  170. }
  171. }
  172. layer_state_t layer_state_set_user(layer_state_t state) {
  173. return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
  174. }
  175. // Flexible macOS-friendly Grave Escape
  176. // https://docs.qmk.fm/#/feature_key_overrides?id=flexible-macos-friendly-grave-escape
  177. const key_override_t tilde_esc_override = ko_make_basic(MOD_MASK_SHIFT, KC_ESC, S(KC_GRAVE));
  178. const key_override_t grave_esc_override = ko_make_basic(MOD_MASK_GUI, KC_ESC, KC_GRAVE);
  179. const key_override_t delete_key_override = ko_make_basic(MOD_MASK_SHIFT, KC_BSPC, KC_DELETE);
  180. const key_override_t **key_overrides = (const key_override_t *[]){
  181. &tilde_esc_override,
  182. &grave_esc_override,
  183. &delete_key_override,
  184. NULL
  185. };