logo

qmk_firmware

custom branch of QMK firmware git clone https://anongit.hacktivis.me/git/qmk_firmware.git

keymap.c (20971B)


  1. #include QMK_KEYBOARD_H
  2. typedef union {
  3. uint32_t raw;
  4. struct {
  5. bool thumb_alt :1;
  6. bool iso :1;
  7. };
  8. } user_config_t;
  9. user_config_t user_config;
  10. #ifdef STENO_ENABLE
  11. #endif // STENO_ENABLE
  12. #define QWERTY_base KC_GRV, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, \
  13. KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
  14. KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH
  15. #define DVORAK_base KC_GRV, KC_QUOT, KC_COMM, KC_DOT,KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_LBRC, KC_RBRC, \
  16. KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \
  17. KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z
  18. #define COLEMAK_base KC_GRV, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, \
  19. KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
  20. KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH
  21. #define WORKMAN_base KC_GRV, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_LBRC, KC_RBRC, \
  22. KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, KC_QUOT, \
  23. KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMM, KC_DOT, KC_SLSH
  24. #ifdef ALT_LAYOUTS_ENABLE
  25. #include "keymap_dvorak.h"
  26. #include "keymap_colemak.h"
  27. #include "keymap_workman.h"
  28. #define DVK2QWE_base DV_GRV, DV_Q, DV_W, DV_E, DV_R, DV_T, DV_Y, DV_U, DV_I, DV_O, DV_P, DV_LBRC, DV_RBRC, \
  29. DV_A, DV_S, DV_D, DV_F, DV_G, DV_H, DV_J, DV_K, DV_L, DV_SCLN, DV_QUOT, \
  30. DV_Z, DV_X, DV_C, DV_V, DV_B, DV_N, DV_M, DV_COMM, DV_DOT, DV_SLSH
  31. #define CMK2QWE_base KC_GRV, CM_Q, CM_W, CM_E, CM_R, CM_T, CM_Y, CM_U, CM_I, CM_O, CM_P, KC_LBRC, KC_RBRC, \
  32. CM_A, CM_S, CM_D, CM_F, CM_G, CM_H, CM_J, CM_K, CM_L, CM_SCLN, KC_QUOT, \
  33. CM_Z, CM_X, CM_C, CM_V, CM_B, CM_N, CM_M, CM_COMM, CM_DOT, CM_SLSH
  34. #define WMN2QWE_base KC_GRV, WK_Q, WK_W, WK_E, WK_R, WK_T, WK_Y, WK_U, WK_I, WK_O, WK_P, KC_LBRC, KC_RBRC, \
  35. WK_A, WK_S, WK_D, WK_F, WK_G, WK_H, WK_J, WK_K, WK_L, WK_SCLN, KC_QUOT, \
  36. WK_Z, WK_X, WK_C, WK_V, WK_B, WK_N, WK_M, KC_COMM, KC_DOT, KC_SLSH
  37. #define CMK2DVK_base KC_GRV, KC_QUOT, KC_COMM, KC_DOT,CM_P, CM_Y, CM_F, CM_G, CM_C, CM_R, CM_L, KC_LBRC, KC_RBRC, \
  38. CM_A, CM_O, CM_E, CM_U, CM_I, CM_D, CM_H, CM_T, CM_N, CM_S, CM_SLSH, \
  39. CM_SCLN, CM_Q, CM_J, CM_K, CM_X, CM_B, CM_M, CM_W, CM_V, CM_Z
  40. #define WMN2DVK_base KC_GRV, KC_QUOT, KC_COMM, KC_DOT,WK_P, WK_Y, WK_F, WK_G, WK_C, WK_R, WK_L, KC_LBRC, KC_RBRC, \
  41. WK_A, WK_O, WK_E, WK_U, WK_I, WK_D, WK_H, WK_T, WK_N, WK_S, KC_SLSH, \
  42. WK_SCLN, WK_Q, WK_J, WK_K, WK_X, WK_B, WK_M, WK_W, WK_V, WK_Z
  43. #define DVK2CMK_base DV_GRV, DV_Q, DV_W, DV_F, DV_P, DV_G, DV_J, DV_L, DV_U, DV_Y, DV_SCLN, DV_LBRC, DV_RBRC, \
  44. DV_A, DV_R, DV_S, DV_T, DV_D, DV_H, DV_N, DV_E, DV_I, DV_O, DV_QUOT, \
  45. DV_Z, DV_X, DV_C, DV_V, DV_B, DV_K, DV_M, DV_COMM, DV_DOT, DV_SLSH
  46. #define WMN2CMK_base KC_GRV, WK_Q, WK_W, WK_F, WK_P, WK_G, WK_J, WK_L, WK_U, WK_Y, WK_SCLN, KC_LBRC, KC_RBRC, \
  47. WK_A, WK_R, WK_S, WK_T, WK_D, WK_H, WK_N, WK_E, WK_I, WK_O, KC_QUOT, \
  48. WK_Z, WK_X, WK_C, WK_V, WK_B, WK_K, WK_M, KC_COMM, KC_DOT, KC_SLSH
  49. #define DVK2WMN_base DV_GRV, DV_Q, DV_D, DV_R, DV_W, DV_B, DV_J, DV_F, DV_U, DV_P, DV_SCLN, DV_LBRC, DV_RBRC, \
  50. DV_A, DV_S, DV_H, DV_T, DV_G, DV_Y, DV_N, DV_E, DV_O, DV_I, DV_QUOT, \
  51. DV_Z, DV_X, DV_M, DV_C, DV_V, DV_K, DV_L, DV_COMM, DV_DOT, DV_SLSH
  52. #define CMK2WMN_base KC_GRV, CM_Q, CM_D, CM_R, CM_W, CM_B, CM_J, CM_F, CM_U, CM_P, CM_SCLN, KC_LBRC, KC_RBRC, \
  53. CM_A, CM_S, CM_H, CM_T, CM_G, CM_Y, CM_N, CM_E, CM_O, CM_I, KC_QUOT, \
  54. CM_Z, CM_X, CM_M, CM_C, CM_V, CM_K, CM_L, CM_COMM, CM_DOT, CM_SLSH
  55. #endif // ALT_LAYOUTS_ENABLE
  56. enum jian_layers {
  57. _QWERTY,
  58. #ifdef ALT_LAYOUTS_ENABLE
  59. _DVORAK,
  60. _COLEMAK,
  61. _WORKMAN,
  62. _DVK2QWE,
  63. _DVK2CMK,
  64. _DVK2WMN,
  65. _CMK2QWE,
  66. _CMK2DVK,
  67. _CMK2WMN,
  68. _WMN2QWE,
  69. _WMN2DVK,
  70. _WMN2CMK,
  71. #endif // ALT_LAYOUTS_ENABLE
  72. _ISO,
  73. _LOWER,
  74. _RAISE,
  75. _ADJUST,
  76. _BCKLT_ADJ,
  77. _THUMB_ALT,
  78. #ifdef TRAINING_HALFES_LOCK
  79. _LEFT,
  80. _RIGHT,
  81. #endif //TRAINING_HALFES_LOCK
  82. #ifdef STENO_ENABLE
  83. _PLOVER
  84. #endif // STENO_ENABLE
  85. };
  86. enum jian_keycodes {
  87. QWERTY = SAFE_RANGE,
  88. PLOVER,
  89. EXT_PLV,
  90. EXT_RGB,
  91. ISO,
  92. THUMB_ALT,
  93. //ifdef ALT_LAYOUTS_ENABLE
  94. CH_WMN,
  95. CH_CMK,
  96. CH_QWE,
  97. CH_DVK,
  98. //endif // ALT_LAYOUTS_ENABLE
  99. #ifdef DIP_SWITCH_ENABLE
  100. LAYOUT0,
  101. LAYOUT1,
  102. LAYOUT2,
  103. LAYOUT3,
  104. DIP_ISO,
  105. FLIP_TH,
  106. DIP6,
  107. DIP7,
  108. DIP8,
  109. DIP9,
  110. DIP10,
  111. DIP11,
  112. #endif // DIP_SWITCH_ENABLE
  113. };
  114. #ifdef TRAINING_HALFES_LOCK
  115. static uint8_t lock_timeout = 1;
  116. static uint8_t lock_cooldown = 0;
  117. #endif //TRAINING_HALFES_LOCK
  118. #ifdef DIP_SWITCH_ENABLE
  119. #ifdef ALT_LAYOUTS_ENABLE
  120. static uint8_t layout_conversion_dip_state = 0;
  121. #endif // ALT_LAYOUTS_ENABLE
  122. #endif // DIP_SWITCH_ENABLE
  123. #define LOWER MO(_LOWER)
  124. #define RAISE MO(_RAISE)
  125. #define BL_ADJ TG(_BCKLT_ADJ)
  126. #define TG_LWR TG(_LOWER)
  127. #define TG_RSE TG(_RAISE)
  128. #define RBR_RGU MT(MOD_RGUI, KC_RBRC)
  129. #define F12_RGU MT(MOD_RGUI, KC_F12)
  130. #define EQL_LCT MT(MOD_LCTL, KC_EQL)
  131. #define APP_LCT MT(MOD_LCTL, KC_APP)
  132. #define EQL_RCT MT(MOD_RCTL, KC_EQL)
  133. #define QUO_RCT MT(MOD_RCTL, KC_QUOT)
  134. #define APP_RCT MT(MOD_RCTL, KC_APP)
  135. #define MIN_RCT MT(MOD_RCTL, KC_MINS)
  136. #define PLS_LAL MT(MOD_LALT, KC_PPLS)
  137. #define BSL_RAL MT(MOD_RALT, KC_BSLS)
  138. #define NBS_LCT MT(MOD_LCTL, KC_NUBS)
  139. #define BSH_LAL MT(MOD_LALT, KC_BSLS)
  140. #define APP_RAL MT(MOD_RALT, KC_APP)
  141. #define BSP_LSH MT(MOD_LSFT, KC_BSPC)
  142. #define BSP_RSH MT(MOD_RSFT, KC_BSPC)
  143. #define SPC_LSH MT(MOD_LSFT, KC_SPC)
  144. #define SPC_RSH MT(MOD_RSFT, KC_SPC)
  145. #define DEL_RSE LT(_RAISE, KC_DEL)
  146. #define TAB_RSE LT(_RAISE, KC_TAB)
  147. #define ENT_LWR LT(_LOWER, KC_ENT)
  148. #define ESC_LWR LT(_LOWER, KC_ESC)
  149. #define RGU_RBR RGUI_T(KC_RBRC)
  150. #define RCT_QUO RCTL_T(KC_QUOT)
  151. #define LAYOUT_base( \
  152. GRV, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, \
  153. A, S, D, F, G, H, J, K, L, SCLN, QUOT, \
  154. Z, X, C, V, B, N, M, COMM, DOT, SLSH \
  155. ) \
  156. LAYOUT( \
  157. KC_LGUI, GRV, Q, W, E, R, T, Y, U, I, O, P, LBRC, RGU_RBR, \
  158. KC_LCTL, A, S, D, F, G, H, J, K, L, SCLN, RCT_QUO, \
  159. KC_LALT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, BSL_RAL, \
  160. TAB_RSE, SPC_LSH, ENT_LWR, ESC_LWR, BSP_RSH, DEL_RSE \
  161. )
  162. #define LAYOUT_base_wrapper(...) LAYOUT_base(__VA_ARGS__)
  163. #ifdef SWAP_HANDS_ENABLE
  164. #define SW_TG SH_TOGG
  165. #else
  166. #define SW_TG _______
  167. #endif
  168. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  169. [_QWERTY] = LAYOUT_base_wrapper(QWERTY_base),
  170. [_LOWER] = LAYOUT(
  171. _______, KC_UNDS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, F12_RGU,
  172. EQL_LCT, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, MIN_RCT,
  173. PLS_LAL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
  174. _______, _______, _______, _______, _______, _______
  175. ),
  176. [_RAISE] = LAYOUT(
  177. _______, KC_NUM, KC_PSLS, KC_P7, KC_P8, KC_P9, KC_PMNS, KC_VOLU, KC_HOME, KC_PSCR, KC_PGUP, KC_SCRL, KC_CAPS, _______,
  178. EQL_LCT, KC_PAST, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_MUTE, KC_LEFT, KC_UP, KC_RGHT, KC_INS, APP_RCT,
  179. _______, KC_P0, KC_P1, KC_P2, KC_P3, KC_PCMM, KC_VOLD, KC_END, KC_DOWN, KC_PGDN, KC_PAUS, _______,
  180. _______, _______, _______, _______, _______, _______
  181. ),
  182. [_ADJUST] = LAYOUT(
  183. QK_BOOT, DB_TOGG, AS_UP, CH_WMN, CH_CMK, CH_QWE, CH_DVK, CH_DVK, CH_QWE, CH_CMK, CH_WMN, AS_UP, DB_TOGG, QK_BOOT,
  184. AS_RPT, AS_TOGG, XXXXXXX, XXXXXXX, QWERTY, PLOVER, PLOVER, QWERTY, XXXXXXX, XXXXXXX, AS_TOGG, AS_RPT,
  185. BL_ADJ, AS_DOWN, XXXXXXX, XXXXXXX, ISO, THUMB_ALT, THUMB_ALT, ISO, XXXXXXX, XXXXXXX, AS_DOWN, BL_ADJ,
  186. _______, SW_TG, _______, _______, SW_TG, _______
  187. ),
  188. #if defined(RGBLIGHT) | defined(BACKLIGHT_ENABLE)
  189. [_BCKLT_ADJ] = LAYOUT(
  190. XXXXXXX, XXXXXXX, XXXXXXX, BL_UP, UG_VALU, UG_HUED, UG_HUEU, UG_HUEU, UG_HUED, UG_VALU, BL_UP, XXXXXXX, XXXXXXX, XXXXXXX,
  191. XXXXXXX, XXXXXXX, BL_DOWN, UG_VALD, UG_SATD, UG_SATU, UG_SATU, UG_SATD, UG_VALD, BL_DOWN, XXXXXXX, XXXXXXX,
  192. BL_ADJ, BL_BRTG, BL_TOGG, UG_TOGG, UG_PREV, UG_NEXT, UG_NEXT, UG_PREV, UG_TOGG, BL_TOGG, BL_BRTG, BL_ADJ,
  193. _______, _______, _______, _______, _______, _______
  194. ),
  195. #endif // defined(RGBLIGHT) | defined(BACKLIGHT_ENABLE)
  196. #ifdef TRAINING_HALFES_LOCK
  197. [_LEFT] = LAYOUT_base(
  198. _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
  199. _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
  200. _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
  201. ),
  202. [_RIGHT] = LAYOUT_base(
  203. XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______, _______, _______,
  204. XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______, _______,
  205. XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______
  206. ),
  207. #endif // TRAINING_HALFES_LOCK
  208. #ifdef STENO_ENABLE
  209. [_PLOVER] = LAYOUT(
  210. EXT_PLV, STN_N1, STN_N2, STN_N3, STN_N4, STN_N5, STN_N6, STN_N7, STN_N8, STN_N9, STN_NA, STN_NB, STN_NC, EXT_PLV,
  211. STN_FN, STN_S1, STN_TL, STN_PL, STN_HL, STN_ST1, STN_ST3, STN_FR, STN_PR, STN_LR, STN_TR, STN_DR,
  212. XXXXXXX, STN_S2, STN_KL, STN_WL, STN_RL, STN_ST2, STN_ST4, STN_RR, STN_BR, STN_GR, STN_SR, STN_ZR,
  213. XXXXXXX, STN_A, STN_O, STN_E, STN_U, XXXXXXX
  214. ),
  215. #endif // STENO_ENABLE
  216. [_THUMB_ALT] = LAYOUT(
  217. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  218. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  219. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  220. DEL_RSE, BSP_LSH, ESC_LWR, ENT_LWR, SPC_RSH, TAB_RSE
  221. ),
  222. [_ISO] = LAYOUT(
  223. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  224. LCTL_T(KC_NUBS), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  225. LALT_T(KC_NUHS), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RALT,
  226. _______, _______, _______, _______, _______, _______
  227. ),
  228. #ifdef ALT_LAYOUTS_ENABLE
  229. [_DVORAK] = LAYOUT_base_wrapper(DVORAK_base),
  230. [_COLEMAK] = LAYOUT_base_wrapper(COLEMAK_base),
  231. [_WORKMAN] = LAYOUT_base_wrapper(WORKMAN_base),
  232. [_DVK2QWE] = LAYOUT_base_wrapper(DVK2QWE_base),
  233. [_CMK2QWE] = LAYOUT_base_wrapper(CMK2QWE_base),
  234. [_WMN2QWE] = LAYOUT_base_wrapper(WMN2QWE_base),
  235. [_CMK2DVK] = LAYOUT_base_wrapper(CMK2DVK_base),
  236. [_WMN2DVK] = LAYOUT_base_wrapper(WMN2DVK_base),
  237. [_DVK2CMK] = LAYOUT_base_wrapper(DVK2CMK_base),
  238. [_WMN2CMK] = LAYOUT_base_wrapper(WMN2CMK_base),
  239. [_DVK2WMN] = LAYOUT_base_wrapper(DVK2WMN_base),
  240. [_CMK2WMN] = LAYOUT_base_wrapper(CMK2WMN_base)
  241. #endif // ALT_LAYOUTS_ENABLE
  242. };
  243. layer_state_t layer_state_set_user(layer_state_t state) {
  244. return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
  245. }
  246. #ifdef DIP_SWITCH_ENABLE
  247. #ifdef ALT_LAYOUTS_ENABLE
  248. void layout_convert(uint8_t statuses) {
  249. switch (0b1111 & statuses) {
  250. case 0b0000:
  251. set_single_persistent_default_layer(_QWERTY);
  252. break;
  253. case 0b0001:
  254. set_single_persistent_default_layer(_DVORAK);
  255. break;
  256. case 0b0010:
  257. set_single_persistent_default_layer(_COLEMAK);
  258. break;
  259. case 0b0011:
  260. set_single_persistent_default_layer(_WORKMAN);
  261. break;
  262. case 0b0100:
  263. set_single_persistent_default_layer(_DVK2QWE);
  264. break;
  265. case 0b0101:
  266. set_single_persistent_default_layer(_QWERTY);
  267. break;
  268. case 0b0110:
  269. set_single_persistent_default_layer(_DVK2CMK);
  270. break;
  271. case 0b0111:
  272. set_single_persistent_default_layer(_DVK2WMN);
  273. break;
  274. case 0b1000:
  275. set_single_persistent_default_layer(_CMK2QWE);
  276. break;
  277. case 0b1001:
  278. set_single_persistent_default_layer(_CMK2DVK);
  279. break;
  280. case 0b1010:
  281. set_single_persistent_default_layer(_QWERTY);
  282. break;
  283. case 0b1011:
  284. set_single_persistent_default_layer(_CMK2WMN);
  285. break;
  286. case 0b1100:
  287. set_single_persistent_default_layer(_WMN2QWE);
  288. break;
  289. case 0b1101:
  290. set_single_persistent_default_layer(_WMN2DVK);
  291. break;
  292. case 0b1110:
  293. set_single_persistent_default_layer(_WMN2CMK);
  294. break;
  295. case 0b1111:
  296. set_single_persistent_default_layer(_QWERTY);
  297. break;
  298. }
  299. }
  300. #endif // ALT_LAYOUTS_ENABLE
  301. #endif // DIP_SWITCH_ENABLE
  302. void keyboard_post_init_user(void) {
  303. user_config.raw = eeconfig_read_user();
  304. if (user_config.thumb_alt) {
  305. layer_on(_THUMB_ALT);
  306. } else {
  307. layer_off(_THUMB_ALT);
  308. }
  309. if (user_config.iso) {
  310. layer_on(_ISO);
  311. } else {
  312. layer_off(_ISO);
  313. }
  314. }
  315. #ifdef ALT_LAYOUTS_ENABLE
  316. static char change_layout_input = 0;
  317. static bool change_layout_keystroke = 0;
  318. void change_layout_conversion(uint16_t keycode) {
  319. switch (keycode) {
  320. case CH_WMN:
  321. change_layout_input |= 0b1000 << (change_layout_keystroke << 2);
  322. break;
  323. case CH_CMK:
  324. change_layout_input |= 0b0100 << (change_layout_keystroke << 2);
  325. break;
  326. case CH_DVK:
  327. change_layout_input |= 0b0010 << (change_layout_keystroke << 2);
  328. break;
  329. case CH_QWE:
  330. change_layout_input |= 0b0001 << (change_layout_keystroke << 2);
  331. break;
  332. }
  333. if (change_layout_keystroke == 1) {
  334. switch (change_layout_input) {
  335. case 0b00010001:
  336. set_single_persistent_default_layer(_QWERTY);
  337. break;
  338. case 0b00100001:
  339. set_single_persistent_default_layer(_DVORAK);
  340. break;
  341. case 0b01000001:
  342. set_single_persistent_default_layer(_COLEMAK);
  343. break;
  344. case 0b10000001:
  345. set_single_persistent_default_layer(_WORKMAN);
  346. break;
  347. case 0b00010010:
  348. set_single_persistent_default_layer(_DVK2QWE);
  349. break;
  350. case 0b00100010:
  351. set_single_persistent_default_layer(_QWERTY);
  352. break;
  353. case 0b01000010:
  354. set_single_persistent_default_layer(_DVK2CMK);
  355. break;
  356. case 0b10000010:
  357. set_single_persistent_default_layer(_DVK2WMN);
  358. break;
  359. case 0b00010100:
  360. set_single_persistent_default_layer(_CMK2QWE);
  361. break;
  362. case 0b00100100:
  363. set_single_persistent_default_layer(_CMK2DVK);
  364. break;
  365. case 0b01000100:
  366. set_single_persistent_default_layer(_QWERTY);
  367. break;
  368. case 0b10000100:
  369. set_single_persistent_default_layer(_CMK2WMN);
  370. break;
  371. case 0b00011000:
  372. set_single_persistent_default_layer(_WMN2QWE);
  373. break;
  374. case 0b00101000:
  375. set_single_persistent_default_layer(_WMN2DVK);
  376. break;
  377. case 0b01001000:
  378. set_single_persistent_default_layer(_WMN2CMK);
  379. break;
  380. case 0b10001000:
  381. set_single_persistent_default_layer(_QWERTY);
  382. break;
  383. }
  384. change_layout_input = 0;
  385. }
  386. change_layout_keystroke ^= 1;
  387. }
  388. #endif // ALT_LAYOUTS_ENABLE
  389. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  390. #ifdef TRAINING_HALFES_LOCK
  391. if (!record->event.pressed) {
  392. lock_cooldown = --lock_cooldown < 0 ? 0 : lock_cooldown;
  393. }
  394. if (lock_cooldown == 0) {
  395. layer_off(_LEFT);
  396. layer_off(_RIGHT);
  397. }
  398. #endif // TRAINING_HALFES_LOCK
  399. switch (keycode) {
  400. #ifdef TRAINING_HALFES_LOCK
  401. case SPC_RSH:
  402. case BSP_RSH:
  403. case DEL_RSE:
  404. case ESC_LWR:
  405. case BSL_RAL:
  406. case RGU_RBR:
  407. case RCT_QUO:
  408. if (record->event.pressed) {
  409. layer_on(_LEFT);
  410. lock_cooldown = lock_timeout;
  411. }
  412. else {
  413. lock_cooldown = 0;
  414. layer_off(_LEFT);
  415. }
  416. break;
  417. case BSP_LSH:
  418. case SPC_LSH:
  419. case TAB_RSE:
  420. case ENT_LWR:
  421. case KC_LCTL:
  422. case KC_LGUI:
  423. case KC_LALT:
  424. if (record->event.pressed) {
  425. layer_on(_RIGHT);
  426. lock_cooldown = lock_timeout;
  427. }
  428. else {
  429. lock_cooldown = 0;
  430. layer_off(_RIGHT);
  431. }
  432. break;
  433. #endif // TRAINING_HALFES_LOCK
  434. #ifdef STENO_ENABLE
  435. case PLOVER:
  436. if (!record->event.pressed) {
  437. layer_off(_RAISE);
  438. layer_off(_LOWER);
  439. layer_off(_ADJUST);
  440. layer_on(_PLOVER);
  441. if (!eeconfig_is_enabled()) {
  442. eeconfig_init();
  443. }
  444. eeconfig_read_keymap(&keymap_config);
  445. keymap_config.nkro = 1;
  446. eeconfig_update_keymap(&keymap_config);
  447. }
  448. return false;
  449. case EXT_PLV:
  450. if (record->event.pressed) {
  451. layer_off(_PLOVER);
  452. }
  453. return false;
  454. #endif // STENO_ENABLE
  455. case QWERTY:
  456. if (record->event.pressed) {
  457. set_single_persistent_default_layer(_QWERTY);
  458. }
  459. return false;
  460. #ifdef ALT_LAYOUTS_ENABLE
  461. case CH_WMN:
  462. case CH_CMK:
  463. case CH_QWE:
  464. case CH_DVK:
  465. if (record->event.pressed) {
  466. change_layout_conversion(keycode);
  467. }
  468. return false;
  469. #endif // ALT_LAYOUTS_ENABLE
  470. case THUMB_ALT:
  471. if (record->event.pressed) {
  472. layer_invert(_THUMB_ALT);
  473. user_config.thumb_alt ^= 1;
  474. eeconfig_update_user(user_config.raw);
  475. }
  476. return false;
  477. case ISO:
  478. if (record->event.pressed) {
  479. layer_invert(_ISO);
  480. user_config.iso ^= 1;
  481. eeconfig_update_user(user_config.raw);
  482. }
  483. return false;
  484. }
  485. return true;
  486. }
  487. #if defined(DIP_SWITCH_ENABLE)
  488. bool dip_switch_update_user(uint8_t index, bool active) {
  489. switch (index) {
  490. # if defined(ALT_LAYOUTS_ENABLE)
  491. case 0: // LAYOUT0
  492. case 6:
  493. if (active) {
  494. layout_conversion_dip_state |= 1 << 0;
  495. } else {
  496. layout_conversion_dip_state &= ~(1 << 0);
  497. }
  498. layout_convert(layout_conversion_dip_state);
  499. break;
  500. case 1: // LAYOUT1
  501. case 7:
  502. if (active) {
  503. layout_conversion_dip_state |= 1 << 1;
  504. } else {
  505. layout_conversion_dip_state &= ~(1 << 1);
  506. }
  507. layout_convert(layout_conversion_dip_state);
  508. break;
  509. case 2: // LAYOUT2
  510. case 8:
  511. if (active) {
  512. layout_conversion_dip_state |= 1 << 2;
  513. } else {
  514. layout_conversion_dip_state &= ~(1 << 2);
  515. }
  516. layout_convert(layout_conversion_dip_state);
  517. break;
  518. case 3: // LAYOUT3
  519. case 9:
  520. if (active) {
  521. layout_conversion_dip_state |= 1 << 3;
  522. } else {
  523. layout_conversion_dip_state &= ~(1 << 3);
  524. }
  525. layout_convert(layout_conversion_dip_state);
  526. break;
  527. case 4: // DIP_ISO
  528. case 10:
  529. if (active) {
  530. layer_on(_ISO);
  531. } else {
  532. layer_off(_ISO);
  533. }
  534. break;
  535. case 5: // FLIP_TH
  536. case 11:
  537. if (active) {
  538. layer_on(_THUMB_ALT);
  539. } else {
  540. layer_off(_THUMB_ALT);
  541. }
  542. break;
  543. # endif
  544. }
  545. return true;
  546. }
  547. #endif