keymap.c 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. // Copyright 2021 Christoph Rehmann (crehmann)
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #include QMK_KEYBOARD_H
  4. #include "keymap_swiss_de.h"
  5. #include "features/haptic_utils.h"
  6. #ifdef PS2_MOUSE_ENABLE
  7. #include "ps2_mouse.h"
  8. #endif
  9. enum layers {
  10. _BASE = 0,
  11. _NAVR,
  12. _SYMB,
  13. _NUMR,
  14. _FUNL,
  15. _MOAJ
  16. };
  17. // Aliases for readability
  18. #define BASE DF(_BASE)
  19. #define NAVR MO(_NAVR)
  20. #define SYMB MO(_SYMB)
  21. #define NUMR MO(_NUMR)
  22. #define FUNL MO(_FUNL)
  23. #define MOAD MO(_MOAJ)
  24. // Left-hand home row mods
  25. #define RALT_X RALT_T(KC_X)
  26. #define GUI_A LGUI_T(KC_A)
  27. #define ALT_S LALT_T(KC_S)
  28. #define CTL_D LCTL_T(KC_D)
  29. #define SFT_F LSFT_T(KC_F)
  30. // Right-hand home row mods
  31. #define SFT_J RSFT_T(KC_J)
  32. #define CTL_K RCTL_T(KC_K)
  33. #define ALT_L LALT_T(KC_L)
  34. #define GUI_SCL RGUI_T(KC_SCLN)
  35. #define RALT_DT RALT_T(KC_DOT)
  36. // Left-hand outer column
  37. #define CTL_ESC MT(MOD_LCTL, KC_ESC)
  38. // Thumbcluster
  39. #define UC_TL1 CTL_ESC
  40. #define UC_TL2 LT(NAVR, KC_SPC)
  41. #define UC_TL3 LT(NUMR, KC_TAB)
  42. #define UC_TR3 LT(FUNL, KC_BSPC)
  43. #define UC_TR2 LT(SYMB, KC_ENT)
  44. #define UC_TR1 KC_DEL
  45. // Shortcuts
  46. #define UC_COPY LCTL(KC_C)
  47. #define UC_PSTE LCTL(KC_V)
  48. #define UC_CUT LCTL(KC_X)
  49. #define UC_MUTE SGUI(KC_M)
  50. #define UC_OSFT OSM(MOD_LSFT)
  51. // clang-format off
  52. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  53. // /*
  54. // * Base Layer
  55. // *
  56. // * ,----------------------------------. ,----------------------------------.
  57. // * | Q | W | E | R | T | | Z | U | I | O | P |
  58. // * | | | | | | | | | | | |
  59. // * ,------+------+------+------+------+------| |------+------+------+------+------+------.
  60. // * | OSM | A | S | D | F | G | | H | J | K | L | ; : | Bksp |
  61. // * | Shift| GUI | LALT | LCTL | LSFT | | | | LSFT | LCTL | LALT | GUI | |
  62. // * |------+------+------+------+------+------| |------+------+------+------+------+------|
  63. // * | ESC | Y | X | C | F | B | | N | M | , < | . > | / ? | Mute |
  64. // * | CTL | | RALT | | | | | | | | RALT | | Mic |
  65. // * `----------------------------------+------+-------------. ,-------------+------+----------------------------------'
  66. // * | ESC | Space| TAB | | Bksp| Enter| Del |
  67. // * | CTL | NAVR | NUMR | | FUNL| SYML | |
  68. // * `--------------------' `--------------------'
  69. // */
  70. [_BASE] = LAYOUT(
  71. KC_Q , KC_W , KC_E , KC_R , KC_T , CH_Z , KC_U , KC_I , KC_O , KC_P ,
  72. UC_OSFT, GUI_A , ALT_S , CTL_D , SFT_F , KC_G , KC_H , SFT_J , CTL_K , ALT_L , GUI_SCL, KC_BSPC,
  73. CTL_ESC, CH_Y , RALT_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, RALT_DT, KC_SLSH, UC_MUTE,
  74. UC_TL1 , UC_TL2 , UC_TL3 , UC_TR3 , UC_TR2 , UC_TR1
  75. ),
  76. // /*
  77. // * Symbol Layer
  78. // *
  79. // * ,----------------------------------. ,----------------------------------.
  80. // * | ` | @ | { | } | $ | | ¨ | ü | / | \ | ^ |
  81. // * | | | | | | | | | | | |
  82. // * ,------+------+------+------+------+------| |------+------+------+------+------+------.
  83. // * | | ä | & | ( | ) | | | | ' | " | ? | ! | + | |
  84. // * | | | | | | | | | | | | | |
  85. // * |------+------+------+------+------+------| |------+------+------+------+------+------|
  86. // * | | % | # | [ | ] | ~ | | € | = | * | < | > | |
  87. // * | | | | | | | | | | | | | |
  88. // * `----------------------------------+------+-------------. ,-------------+------+----------------------------------'
  89. // * | | | TAB | | | | |
  90. // * | | | | | | | |
  91. // * `--------------------' `--------------------'
  92. // */
  93. [_SYMB] = LAYOUT(
  94. CH_GRV , CH_AT , CH_LCBR, CH_RCBR, CH_DLR , CH_DIAE, CH_UDIA, CH_SLSH, CH_BSLS, KC_CIRC,
  95. _______, CH_ADIA, CH_AMPR, CH_LPRN, CH_RPRN, CH_PIPE, CH_QUOT, CH_DQUO, CH_QUES, CH_EXLM, CH_PLUS, _______,
  96. _______, CH_PERC, CH_HASH, CH_LBRC, CH_RBRC, CH_TILD, CH_EURO, CH_EQL , CH_ASTR, CH_LABK, CH_RABK, _______,
  97. _______, _______, KC_TAB, _______, _______ , _______
  98. ),
  99. // /*
  100. // * Navigation Layer (Right)
  101. // *
  102. // * ,----------------------------------. ,----------------------------------.
  103. // * | | | | | | |Insert| Cut | PgUp | PgDn | |
  104. // * | | | | | | | | | | | |
  105. // * ,------+------+------+------+------+------| |------+------+------+------+------+------.
  106. // * | | | | | | | | Copy | ← | ↑ | ↓ | → | |
  107. // * | | | | | | | | | | | | | |
  108. // * |------+------+------+------+------+------| |------+------+------+------+------+------|
  109. // * | | | | | | | | Paste| Home | WH_U | WH_D | End | |
  110. // * | | | | | | | | | | | | | |
  111. // * `----------------------------------+------+-------------. ,-------------+------+----------------------------------'
  112. // * | | | | | Bksp | | Del |
  113. // * | | | | | | | |
  114. // * `--------------------' `--------------------'
  115. // */
  116. [_NAVR] = LAYOUT(
  117. _______, _______, _______, _______, _______, KC_INS , UC_CUT , KC_PGUP, KC_PGDN, _______,
  118. _______, _______, _______, _______, _______, _______, UC_COPY, KC_LEFT, KC_UP , KC_DOWN, KC_RGHT, _______,
  119. _______, _______, _______, _______, _______, _______, UC_PSTE, KC_HOME, KC_WH_U, KC_WH_D, KC_END , _______,
  120. _______, _______, _______, KC_BSPC, _______, _______
  121. ),
  122. // --------------------------------------------------------------------------------------------------------------------------------------------------------
  123. // /*
  124. // * Number Layer (Right)
  125. // *
  126. // * ,----------------------------------. ,----------------------------------.
  127. // * | | | | | | | / | 7 | 8 | 9 | - |
  128. // * | | | | | | | | | | | |
  129. // * ,------+------+------+------+------+------| |------+------+------+------+------+------.
  130. // * | | | | | | | | * | 4 | 5 | 6 | + | |
  131. // * | | | | | | | | | | | | | |
  132. // * |------+------+------+------+------+------| |------+------+------+------+------+------|
  133. // * | | | | | | | | 0 | 1 | 2 | 3 | . | |
  134. // * | | | | | | | | | | | | | |
  135. // * `----------------------------------+------+-------------. ,-------------+------+----------------------------------'
  136. // * | | | | | Bksp | Enter| |
  137. // * | | | | | | | |
  138. // * `--------------------' `--------------------'
  139. // */
  140. [_NUMR] = LAYOUT(
  141. _______, _______, _______, _______, _______, KC_SLSH, KC_7 , KC_8 , KC_9 , KC_MINS,
  142. _______, _______, _______, _______, _______, _______, KC_ASTR, KC_4 , KC_5 , KC_6 , KC_PLUS, _______,
  143. _______, _______, _______, _______, _______, _______, KC_0 , KC_1 , KC_2 , KC_3 , KC_DOT , _______,
  144. _______, _______, _______, KC_BSPC, KC_ENT , _______
  145. ),
  146. // /*
  147. // * Function Layer (Left)
  148. // *
  149. // * ,----------------------------------. ,----------------------------------.
  150. // * | F12 | F7 | F8 | F9 | Pause| | | | | | |
  151. // * | | | | | | | | | | | |
  152. // * ,------+------+------+------+------+------| |------+------+------+------+------+------.
  153. // * | | F11 | F4 | F5 | F6 | PrScr| | | | | | | |
  154. // * | | | | | | | | | | | | | |
  155. // * |------+------+------+------+------+------| |------+------+------+------+------+------|
  156. // * | | F10 | F1 | F2 | F3 | CapsL| | | | | | | |
  157. // * | | | | | | | | | | | | | |
  158. // * `----------------------------------+------+-------------. ,-------------+------+----------------------------------'
  159. // * | | Space| TAB | | | | |
  160. // * | | | | | | | |
  161. // * `--------------------' `--------------------'
  162. // */
  163. [_FUNL] = LAYOUT(
  164. KC_F12 , KC_F7 , KC_F8 , KC_F9 , KC_PAUS, _______, _______, _______, _______, _______,
  165. _______, KC_F11 , KC_F4 , KC_F5 , KC_F6 , KC_PSCR, _______, _______, _______, _______, _______, _______,
  166. _______, KC_F10 , KC_F1 , KC_F2 , KC_F3 , KC_CAPS, _______, _______, _______, _______, _______, _______,
  167. _______, KC_SPC , KC_TAB , _______, _______, _______
  168. ),
  169. // /*
  170. // * Mouse & Adjustment Layer
  171. // *
  172. // * ,----------------------------------. ,----------------------------------.
  173. // * | | | | | | | | | | | |
  174. // * | | | | | | | | | | | |
  175. // * ,------+------+------+------+------+------| |------+------+------+------+------+------.
  176. // * | | | BTN3 | BTN2 | BTN1 | | | | | | | | |
  177. // * | | | | | | | | | | | | | |
  178. // * |------+------+------+------+------+------| |------+------+------+------+------+------|
  179. // * | | | Cut | Copy | Paste| | | Play |M Prev| VolDn| VolUp|M Next| |
  180. // * | | | | | | | | | | | | | |
  181. // * `----------------------------------+------+-------------. ,-------------+------+----------------------------------'
  182. // * | | | | | | | |
  183. // * | | | | | | | |
  184. // * `--------------------' `--------------------'
  185. // */
  186. [_MOAJ] = LAYOUT(
  187. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  188. _______, _______, KC_BTN3, KC_BTN2, KC_BTN1, _______, _______, _______, _______, _______, _______, _______,
  189. _______, _______, UC_CUT , UC_COPY, UC_PSTE, _______, KC_MPLY, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, _______,
  190. _______, _______, _______, _______, _______, _______
  191. ),
  192. // -------------------------------------------------------- TEMPLATE -------------------------------------------------------------------------------------
  193. // /*
  194. // * Layer
  195. // *
  196. // * ,----------------------------------. ,----------------------------------.
  197. // * | | | | | | | | | | | |
  198. // * | | | | | | | | | | | |
  199. // * ,------+------+------+------+------+------| |------+------+------+------+------+------.
  200. // * | | | | | | | | | | | | | |
  201. // * | | | | | | | | | | | | | |
  202. // * |------+------+------+------+------+------| |------+------+------+------+------+------|
  203. // * | | | | | | | | | | | | | |
  204. // * | | | | | | | | | | | | | |
  205. // * `----------------------------------+------+-------------. ,-------------+------+----------------------------------'
  206. // * | | | | | | | |
  207. // * | | | | | | | |
  208. // * `--------------------' `--------------------'
  209. // */
  210. // [_LAYERINDEX] = LAYOUT(
  211. // _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  212. // _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  213. // _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  214. // _______, _______, _______, _______, _______, _______
  215. // ),
  216. // --------------------------------------------------------------------------------------------------------------------------------------------------------
  217. };
  218. layer_state_t layer_state_set_user(layer_state_t state) {
  219. process_layer_pulse(state);
  220. return update_tri_layer_state(state, _NAVR, _SYMB, _MOAJ);
  221. }
  222. uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
  223. switch (keycode) {
  224. case GUI_A:
  225. return TAPPING_TERM + 150;
  226. case ALT_S:
  227. return TAPPING_TERM + 50;
  228. case ALT_L:
  229. return TAPPING_TERM + 50;
  230. case GUI_SCL:
  231. return TAPPING_TERM + 150;
  232. default:
  233. return TAPPING_TERM;
  234. }
  235. }