keymap.c 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461
  1. /* Copyright 2020 mtei
  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. #include "util.h"
  18. #include "bootloader.h"
  19. #ifdef PROTOCOL_LUFA
  20. #include "lufa.h"
  21. #include "split_util.h"
  22. #endif
  23. #ifdef CONSOLE_ENABLE
  24. #include <print.h>
  25. #endif
  26. #include "layer_number.h"
  27. extern keymap_config_t keymap_config;
  28. extern uint8_t is_master;
  29. enum custom_keycodes {
  30. QWERTY = SAFE_RANGE,
  31. COLEMAK,
  32. DVORAK,
  33. EUCALYN,
  34. KEYPAD,
  35. xEISU,
  36. xKANA,
  37. ZERO2,
  38. RGBRST
  39. };
  40. // clang-format off
  41. #define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__)
  42. //Macros
  43. #define KC_LOWER MO(_LOWER)
  44. #define XXXX XXXXXXX
  45. #define ____ _______
  46. #define KC_ADJ MO(_ADJUST)
  47. #define _1_____2_____3_____4_____5 KC_1, KC_2, KC_3, KC_4, KC_5
  48. #define _6_____7_____8_____9_____0 KC_6, KC_7, KC_8, KC_9, KC_0
  49. #define LOWER__LOWER__CAPS__LALT__LGUI__SPC__RABS \
  50. KC_LOWER, KC_LOWER, KC_CAPS, KC_LALT, KC_LGUI, KC_SPC, LT(_RAISE,KC_BSPC)
  51. #define RAEN___SPC___RGUI__RALT__APP___LOWER__LOWER \
  52. LT(_RAISE,KC_ENT), KC_SPC, KC_RGUI, KC_RALT, KC_APP, KC_LOWER, KC_LOWER
  53. #define GRV__QUOT KC_GRV, KC_QUOT
  54. #if MATRIX_ROWS == 10 // HELIX_ROWS == 5
  55. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  56. /* Qwerty */
  57. #define Q_____W_____E_____R_____T KC_Q, KC_W, KC_E, KC_R, KC_T
  58. #define Y_____U_____I_____O_____P KC_Y, KC_U, KC_I, KC_O, KC_P
  59. #define A_____S_____D_____F_____G KC_A, KC_S, KC_D, KC_F, KC_G
  60. #define H_____J_____K_____L____SCLN KC_H, KC_J, KC_K, KC_L, KC_SCLN
  61. #define Z_____X_____C_____V_____B KC_Z, KC_X, KC_C, KC_V, KC_B
  62. #define N_____M____COMM__DOT___SLSH KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH
  63. /* ,-----------------------------------. ,-----------------------------------.
  64. * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | BS |
  65. * |-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
  66. * | Tab | Q | W | E | R | T | | Y | U | I | O | P | \ |
  67. * |-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
  68. * | Ctrl| A | S | D | F | G | | H | J | K | L | ; |Ctrl |
  69. * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
  70. * |Shift| Z | X | C | V | B | ` | ' | N | M | , | . | / |Shift|
  71. * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
  72. * |Lower|Lower|Caps | Alt | GUI |Space| BS |Enter|Space| GUI | Alt |Menu |Lower|Lower|
  73. * `-----------------------------------------------------------------------------------'
  74. */
  75. [_QWERTY] = LAYOUT_wrapper(
  76. KC_ESC, _1_____2_____3_____4_____5, _6_____7_____8_____9_____0, KC_BSPC,
  77. KC_TAB, Q_____W_____E_____R_____T, Y_____U_____I_____O_____P, KC_BSLS,
  78. KC_LCTL, A_____S_____D_____F_____G, H_____J_____K_____L____SCLN, KC_RCTL,
  79. KC_LSFT, Z_____X_____C_____V_____B, GRV__QUOT, N_____M____COMM__DOT___SLSH, KC_RSFT,
  80. LOWER__LOWER__CAPS__LALT__LGUI__SPC__RABS, RAEN___SPC___RGUI__RALT__APP___LOWER__LOWER
  81. ),
  82. /* Colemak */
  83. #define Q_____W_____F_____P_____G KC_Q, KC_W, KC_F, KC_P, KC_G
  84. #define J_____L_____U_____Y____SCLN KC_J, KC_L, KC_U, KC_Y, KC_SCLN
  85. #define A_____R_____S_____T_____D KC_A, KC_R, KC_S, KC_T, KC_D
  86. #define H_____N_____E_____I_____O KC_H, KC_N, KC_E, KC_I, KC_O
  87. #define Z_____X_____C_____V_____B KC_Z, KC_X, KC_C, KC_V, KC_B
  88. #define K_____M____COMM__DOT___SLSH KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH
  89. /* ,-----------------------------------. ,-----------------------------------.
  90. * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | BS |
  91. * |-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
  92. * | Tab | Q | W | F | P | G | | J | L | U | Y | ; | \ |
  93. * |-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
  94. * | Ctrl| A | R | S | T | D | | H | N | E | I | O |Ctrl |
  95. * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
  96. * |Shift| Z | X | C | V | B | ` | ' | K | M | , | . | / |Shift|
  97. * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
  98. * |Lower|Lower|Caps | Alt | GUI |Space| BS |Enter|Space| GUI | Alt |Menu |Lower|Lower|
  99. * `-----------------------------------------------------------------------------------'
  100. */
  101. [_COLEMAK] = LAYOUT_wrapper(
  102. KC_ESC, _1_____2_____3_____4_____5, _6_____7_____8_____9_____0, KC_BSPC,
  103. KC_TAB, Q_____W_____F_____P_____G, J_____L_____U_____Y____SCLN, KC_BSLS,
  104. KC_LCTL, A_____R_____S_____T_____D, H_____N_____E_____I_____O, KC_RCTL,
  105. KC_LSFT, Z_____X_____C_____V_____B, GRV__QUOT, K_____M____COMM__DOT___SLSH, KC_RSFT,
  106. LOWER__LOWER__CAPS__LALT__LGUI__SPC__RABS, RAEN___SPC___RGUI__RALT__APP___LOWER__LOWER
  107. ),
  108. /* Dvorak */
  109. #define QUOT_COMM___DOT____P_____Y KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y
  110. #define F_____G_____C_____R_____L KC_F, KC_G, KC_C, KC_R, KC_L
  111. #define A_____O_____E_____U_____I KC_A, KC_O, KC_E, KC_U, KC_I
  112. #define D_____H_____T_____N_____S KC_D, KC_H, KC_T, KC_N, KC_S
  113. #define SCLN___Q_____J_____K_____X KC_SCLN, KC_Q, KC_J, KC_K, KC_X
  114. #define B_____M_____W_____V_____Z KC_B, KC_M, KC_W, KC_V, KC_Z
  115. #define GRV__SLSH KC_GRV, KC_SLSH
  116. /* ,-----------------------------------. ,-----------------------------------.
  117. * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | BS |
  118. * |-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
  119. * | Tab | ' | , | . | P | Y | | F | G | C | R | L | \ |
  120. * |-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
  121. * | Ctrl| A | O | E | U | I | | D | H | T | N | S |Ctrl |
  122. * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
  123. * |Shift| ; | Q | J | K | X | ` | / | B | M | W | V | Z |Shift|
  124. * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
  125. * |Lower|Lower|Caps | Alt | GUI |Space| BS |Enter|Space| GUI | Alt |Menu |Lower|Lower|
  126. * `-----------------------------------------------------------------------------------'
  127. */
  128. [_DVORAK] = LAYOUT_wrapper(
  129. KC_ESC, _1_____2_____3_____4_____5, _6_____7_____8_____9_____0, KC_BSPC,
  130. KC_TAB, QUOT_COMM___DOT____P_____Y, F_____G_____C_____R_____L, KC_BSLS,
  131. KC_LCTL, A_____O_____E_____U_____I, D_____H_____T_____N_____S, KC_RCTL,
  132. KC_LSFT, SCLN___Q_____J_____K_____X, GRV__SLSH, B_____M_____W_____V_____Z, KC_RSFT,
  133. LOWER__LOWER__CAPS__LALT__LGUI__SPC__RABS, RAEN___SPC___RGUI__RALT__APP___LOWER__LOWER
  134. ),
  135. /* Eucalyn (http://eucalyn.hatenadiary.jp/entry/about-eucalyn-layout) */
  136. #define Q_____W___COMM___DOT__SCLN KC_Q, KC_W, KC_COMM, KC_DOT, KC_SCLN
  137. #define M_____R_____D_____Y_____P KC_M, KC_R, KC_D, KC_Y, KC_P
  138. #define A_____O_____E_____I_____U KC_A, KC_O, KC_E, KC_I, KC_U
  139. #define G_____T_____K_____S_____N KC_G, KC_T, KC_K, KC_S, KC_N
  140. #define Z_____X_____C_____V_____F KC_Z, KC_X, KC_C, KC_V, KC_F
  141. #define B_____H_____J_____L____SLSH KC_B, KC_H, KC_J, KC_L, KC_SLSH
  142. /* ,-----------------------------------. ,-----------------------------------.
  143. * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | BS |
  144. * |-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
  145. * | Tab | Q | W | , | . | ; | | M | R | D | Y | P | \ |
  146. * |-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
  147. * | Ctrl| A | O | E | I | U | | G | T | K | S | N |Ctrl |
  148. * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
  149. * |Shift| Z | X | C | V | F | ` | ' | B | H | J | L | / |Shift|
  150. * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
  151. * |Lower|Lower|Caps | Alt | GUI |Space| BS |Enter|Space| GUI | Alt |Menu |Lower|Lower|
  152. * `-----------------------------------------------------------------------------------'
  153. */
  154. [_EUCALYN] = LAYOUT_wrapper(
  155. KC_ESC, _1_____2_____3_____4_____5, _6_____7_____8_____9_____0, KC_BSPC,
  156. KC_TAB, Q_____W___COMM___DOT__SCLN, M_____R_____D_____Y_____P, KC_BSLS,
  157. KC_LCTL, A_____O_____E_____I_____U, G_____T_____K_____S_____N, KC_RCTL,
  158. KC_LSFT, Z_____X_____C_____V_____F, GRV__QUOT, B_____H_____J_____L____SLSH, KC_RSFT,
  159. LOWER__LOWER__CAPS__LALT__LGUI__SPC__RABS, RAEN___SPC___RGUI__RALT__APP___LOWER__LOWER
  160. ),
  161. /* Keypad */
  162. #define KP_TAB__PSLS_PAST KC_TAB, KC_PSLS, KC_PAST
  163. #define KP__7_____8_____9 KC_KP_7, KC_KP_8, KC_KP_9
  164. #define KP__4_____5_____6 KC_KP_4, KC_KP_5, KC_KP_6
  165. #define KP__1_____2_____3 KC_KP_1, KC_KP_2, KC_KP_3
  166. #define KP__0___COMM_PDOT KC_KP_0, KC_COMM, KC_PDOT
  167. #define F1___F6 KC_F1, KC_F6
  168. #define F2___F7 KC_F2, KC_F7
  169. #define F3___F8 KC_F3, KC_F8
  170. #define F4___F9 KC_F4, KC_F9
  171. #define F5__F10 KC_F5, KC_F10
  172. #define FF12 LT(_PADFUNC,KC_F12)
  173. /* ,-----------------------------------. ,-----------------------------------.
  174. * | Tab | / | * | Del | F1 | F6 | | F1 | F6 | Del | Tab | / | * |
  175. * |-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
  176. * | 7 | 8 | 9 | BS | F2 | F7 | | F2 | F7 | BS | 7 | 8 | 9 |
  177. * |-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
  178. * | 4 | 5 | 6 | - | F3 | F8 | | F3 | F8 | - | 4 | 5 | 6 |
  179. * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
  180. * | 1 | 2 | 3 | + | F4 | F9 | F11 | F11 | F4 | F9 | + | 1 | 2 | 3 |
  181. * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
  182. * | 0 | , | . |Enter| F5 | F10| F12 | F12 | F5 | F10|Enter| 0 | , | . |
  183. * `-----------------------------------------------------------------------------------'
  184. */
  185. [_KEYPAD] = LAYOUT_wrapper(
  186. KP_TAB__PSLS_PAST, KC_DEL, F1___F6, F1___F6, KC_DEL, KP_TAB__PSLS_PAST,
  187. KP__7_____8_____9, KC_BSPC, F2___F7, F2___F7, KC_BSPC, KP__7_____8_____9,
  188. KP__4_____5_____6, KC_PMNS, F3___F8, F3___F8, KC_PMNS, KP__4_____5_____6,
  189. KP__1_____2_____3, KC_PPLS, F4___F9, KC_F11,KC_F11, F4___F9, KC_PPLS, KP__1_____2_____3,
  190. KP__0___COMM_PDOT, KC_PENT, F5__F10, FF12, FF12, F5__F10, KC_PENT, KP__0___COMM_PDOT
  191. ),
  192. /* AUX modifier key layer
  193. * ,-----------------------------------. ,-----------------------------------.
  194. * | | | | | | | | | | | | | |
  195. * |-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
  196. * | | | | | | | | | | | | | |
  197. * |-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----|
  198. * | | | | | | | | | | | | | |
  199. * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
  200. * | | | | | | | | | | | | | | |
  201. * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
  202. * | | 00 | | | | | | | | | | | 00 | |
  203. * `-----------------------------------------------------------------------------------'
  204. */
  205. [_KAUX] = LAYOUT(
  206. ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
  207. ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
  208. ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
  209. ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
  210. ____,ZERO2, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,ZERO2, ____
  211. ),
  212. /* Keypad function layer */
  213. #define PAUS__SLCK__PSCR KC_PAUS, KC_SLCK, KC_PSCR
  214. #define PSCR__SLCK__PAUS KC_PSCR, KC_SLCK, KC_PAUS
  215. #define HOME___UP___PGUP KC_HOME, KC_UP, KC_PGUP
  216. #define PGUP___UP___HOME KC_PGUP, KC_UP, KC_HOME
  217. #define DEL____INS__LEFT__DOWN__RGHT KC_DEL, KC_INS, KC_LEFT, KC_DOWN, KC_RGHT
  218. #define LEFT__DOWN__RGHT___INS___DEL KC_LEFT, KC_DOWN, KC_RGHT, KC_INS, KC_DEL
  219. #define PGDN___ADJ___ADJ__PGDN KC_PGDN, KC_ADJ, KC_ADJ, KC_PGDN
  220. /* ,-----------------------------------------. ,-----------------------------------------.
  221. * | | | | Pause| ScrLk| PtrSc| | PtrSc| ScrLk| Pause| | | |
  222. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  223. * | | | | Home | Up | PgUp | | PgUp | Up | Home | | | |
  224. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  225. * | |Delete|Insert| Left | Down | Right| | Left | Down | Right|Insert|Delete| |
  226. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  227. * | | | | End | | PgDn |Adjust|Adjust| PgDn | | End | | | |
  228. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  229. * | | | | | | | | | | | | | | |
  230. * `-------------------------------------------------------------------------------------------------'
  231. */
  232. [_PADFUNC] = LAYOUT_wrapper(
  233. XXXX, XXXX, XXXX, PAUS__SLCK__PSCR, PSCR__SLCK__PAUS, XXXX, XXXX, XXXX,
  234. XXXX, XXXX, XXXX, HOME___UP___PGUP, PGUP___UP___HOME, XXXX, XXXX, XXXX,
  235. XXXX, DEL____INS__LEFT__DOWN__RGHT, LEFT__DOWN__RGHT___INS___DEL, XXXX,
  236. XXXX, XXXX, XXXX,KC_END,XXXX, PGDN___ADJ___ADJ__PGDN, XXXX,KC_END,XXXX, XXXX, XXXX,
  237. XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, ____, ____, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX
  238. ),
  239. /* Lower */
  240. #define F1____F2____F3____F4____F5 KC_F1, KC_F2, KC_F3, KC_F4, KC_F5
  241. #define F6____F7____F8____F9____F10 KC_F6, KC_F7, KC_F8, KC_F9, KC_F10
  242. #define XXXX__PAUS__SLCK___INS XXXX, KC_PAUS, KC_SLCK, KC_INS
  243. #define XXXX___INS__SLCK__PAUS__XXXX XXXX, KC_INS, KC_SLCK, KC_PAUS, XXXX
  244. #define ADJ___ADJ KC_ADJ, KC_ADJ
  245. #define HOME__XXXX___UP____DEL__PGUP KC_HOME, XXXX, KC_UP, KC_DEL, KC_PGUP
  246. #define PGUP___DEL___UP___XXXX__HOME KC_PGUP, KC_DEL, KC_UP, XXXX, KC_HOME
  247. #define END__LEFT__DOWN__RGHT__PGDN KC_END, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN
  248. #define PGDN__LEFT__DOWN__RGHT___END KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_END
  249. /* ,-----------------------------------------. ,-----------------------------------------.
  250. * | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
  251. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  252. * | | |Pause | ScrLk| Ins | | | | Ins | ScrLk|Pause | | F12 |
  253. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  254. * | | Home | | Up |Delete| PgUp | | PgUp |Delete| Up | | Home | |
  255. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  256. * | | End | Left | Down | Right| PgDn |Adjust|Adjust| PgDn | Left | Down | Right| End | |
  257. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  258. * | | | PrtSc| | | | | | | | | PrtSc| | |
  259. * `-------------------------------------------------------------------------------------------------'
  260. */
  261. [_LOWER] = LAYOUT_wrapper(
  262. XXXX, F1____F2____F3____F4____F5, F6____F7____F8____F9____F10, KC_F11,
  263. XXXX, XXXX__PAUS__SLCK___INS, XXXX, XXXX___INS__SLCK__PAUS__XXXX, KC_F12,
  264. ____, HOME__XXXX___UP____DEL__PGUP, PGUP___DEL___UP___XXXX__HOME, ____,
  265. ____, END__LEFT__DOWN__RGHT__PGDN, XXXX, XXXX, PGDN__LEFT__DOWN__RGHT___END, ____,
  266. ____, ____,KC_PSCR,____, ____, ____, ADJ___ADJ, ____, ____, ____,KC_PSCR,____, ____
  267. ),
  268. /* Raise */
  269. #define UNDS__MINS KC_UNDS, KC_MINS
  270. #define EQL___PLUS KC_EQL, KC_PLUS
  271. #define LCBR__LBRC KC_LCBR, KC_LBRC
  272. #define RBRC__RCBR KC_RBRC, KC_RCBR
  273. #define MNXT__VOLD__VOLU__MPLY KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
  274. #define EISU__EISU xEISU, xEISU
  275. #define KANA__KANA xKANA, xKANA
  276. /* ,-----------------------------------------. ,-----------------------------------------.
  277. * | | | | | | | | | | | | | |
  278. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  279. * | | | | | _ | - | | = | + | | | | |
  280. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  281. * | | | | | { | [ | | ] | } | | | | |
  282. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  283. * | | | | | | EISU | EISU | KANA | KANA | Next | Vol- | Vol+ | Play | |
  284. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  285. * | | | | | | | | | | | | | | |
  286. * `-------------------------------------------------------------------------------------------------'
  287. */
  288. [_RAISE] = LAYOUT_wrapper(
  289. XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX,
  290. XXXX, XXXX, XXXX, XXXX, UNDS__MINS, EQL___PLUS, XXXX, XXXX, XXXX, XXXX,
  291. ____, XXXX, XXXX, XXXX, LCBR__LBRC, RBRC__RCBR, XXXX, XXXX, XXXX, ____,
  292. ____, XXXX, XXXX, XXXX, XXXX, EISU__EISU, KANA__KANA, MNXT__VOLD__VOLU__MPLY, ____,
  293. ADJ___ADJ, XXXX, ____, ____, XXXX, ____, ____, XXXX, ____, ____, XXXX, ADJ___ADJ
  294. ),
  295. /* Adjust (Lower + Raise)
  296. * ,-----------------------------------------. ,-----------------------------------------.
  297. * | |Keypad|Dvorak|Colemk|Euclyn|Qwerty| |Qwerty|Euclyn|Colemk|Dvorak|Keypad| |
  298. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  299. * | | Reset|RGBRST|RGB ON|Aud on| Win | | Win |Aud on|RGB ON|RGBRST| | |
  300. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  301. * | HUE+ | SAT+ | VAL+ |RGB md|Audoff| Mac | | Mac |Audoff|RGB md| VAL+ | SAT+ | HUE+ |
  302. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  303. * | HUE- | SAT- | VAL- | | | | | | | | | VAL- | SAT- | HUE- |
  304. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  305. * | | | | | | | | | | | | | | |
  306. * `-------------------------------------------------------------------------------------------------'
  307. */
  308. [_ADJUST] = LAYOUT(
  309. XXXXXXX, KEYPAD, DVORAK, COLEMAK, EUCALYN, QWERTY, QWERTY, EUCALYN, COLEMAK, DVORAK, KEYPAD, XXXXXXX,
  310. XXXXXXX, RESET, RGBRST, RGB_TOG, AU_ON, AG_SWAP, AG_SWAP, AU_ON, RGB_TOG, RGBRST, XXXXXXX, XXXXXXX,
  311. RGB_HUI, RGB_SAI, RGB_VAI, RGB_MOD, AU_OFF, AG_NORM, AG_NORM, AU_OFF, RGB_MOD, RGB_VAI, RGB_SAI, RGB_HUI,
  312. RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX,____,____,XXXXXXX, XXXXXXX, XXXXXXX, RGB_VAD, RGB_SAD, RGB_HUD,
  313. _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,____,____,XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______
  314. ),
  315. /* AUX modifier key layer */
  316. #define BSPC__RAEN KC_BSPC, LT(_RAISE,KC_ENT)
  317. /* ,-----------------------------------------. ,-----------------------------------------.
  318. * | | | | | | | | | | | | | |
  319. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  320. * | | | | | | | | | | | | | |
  321. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  322. * | | | | | | | | | | | | | |
  323. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  324. * | | | | | | | | | | | | | | |
  325. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  326. * | | | | | | BS | Enter| | | | | | | |
  327. * `-------------------------------------------------------------------------------------------------'
  328. */
  329. [_AUX] = LAYOUT_wrapper(
  330. ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
  331. ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
  332. ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
  333. ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
  334. ____, ____, ____, ____, ____, BSPC__RAEN, ____, ____, ____, ____, ____, ____, ____
  335. )
  336. };
  337. #else
  338. #error "undefined keymaps"
  339. #endif
  340. int current_default_layer;
  341. uint32_t default_layer_state_set_user(uint32_t state) {
  342. current_default_layer = biton32(state);
  343. return state;
  344. }
  345. void update_base_layer(int base)
  346. {
  347. if( current_default_layer != base ) {
  348. eeconfig_update_default_layer(1UL<<base);
  349. default_layer_set(1UL<<base);
  350. layer_off(_AUX);
  351. layer_off(_KAUX);
  352. } else {
  353. if( base < _KEYPAD )
  354. layer_invert(_AUX);
  355. else
  356. layer_invert(_KAUX);
  357. }
  358. }
  359. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  360. switch (keycode) {
  361. case QWERTY:
  362. if (record->event.pressed) {
  363. update_base_layer(_QWERTY);
  364. }
  365. return false;
  366. break;
  367. case COLEMAK:
  368. if (record->event.pressed) {
  369. update_base_layer(_COLEMAK);
  370. }
  371. return false;
  372. break;
  373. case DVORAK:
  374. if (record->event.pressed) {
  375. update_base_layer(_DVORAK);
  376. }
  377. return false;
  378. break;
  379. case EUCALYN:
  380. if (record->event.pressed) {
  381. update_base_layer(_EUCALYN);
  382. }
  383. return false;
  384. break;
  385. case KEYPAD:
  386. if (record->event.pressed) {
  387. update_base_layer(_KEYPAD);
  388. }
  389. return false;
  390. break;
  391. case ZERO2:
  392. if (record->event.pressed) {
  393. SEND_STRING("00");
  394. }
  395. return false;
  396. break;
  397. case xEISU:
  398. if (record->event.pressed) {
  399. if(keymap_config.swap_lalt_lgui==false){
  400. register_code(KC_LANG2);
  401. }else{
  402. SEND_STRING(SS_LALT("`"));
  403. }
  404. } else {
  405. unregister_code(KC_LANG2);
  406. }
  407. return false;
  408. break;
  409. case xKANA:
  410. if (record->event.pressed) {
  411. if(keymap_config.swap_lalt_lgui==false){
  412. register_code(KC_LANG1);
  413. }else{
  414. SEND_STRING(SS_LALT("`"));
  415. }
  416. } else {
  417. unregister_code(KC_LANG1);
  418. }
  419. return false;
  420. break;
  421. case RGBRST:
  422. #ifdef RGBLIGHT_ENABLE
  423. if (record->event.pressed) {
  424. eeconfig_update_rgblight_default();
  425. rgblight_enable();
  426. }
  427. #endif
  428. break;
  429. }
  430. return true;
  431. }
  432. void matrix_init_user(void) {
  433. INIT_HELIX_OLED(); /* define in layer_number.h */
  434. }