1
0

keymap.c 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393
  1. #include QMK_KEYBOARD_H
  2. enum sofle_layers {
  3. /* _M_XYZ = Mac Os, _W_XYZ = Win/Linux */
  4. _QWERTY,
  5. _COLEMAK,
  6. _LOWER,
  7. _RAISE,
  8. _ADJUST,
  9. };
  10. enum custom_keycodes {
  11. KC_QWERTY = SAFE_RANGE,
  12. KC_COLEMAK,
  13. KC_LOWER,
  14. KC_RAISE,
  15. KC_ADJUST,
  16. KC_PRVWD,
  17. KC_NXTWD,
  18. KC_LSTRT,
  19. KC_LEND,
  20. KC_DLINE
  21. };
  22. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  23. /*
  24. * QWERTY
  25. * ,-----------------------------------------. ,-----------------------------------------.
  26. * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` |
  27. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  28. * | ESC | Q | W | E | R | T | | Y | U | I | O | P | Bspc |
  29. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  30. * | Tab | A | S | D | F | G |-------. ,-------| H | J | K | L | ; | ' |
  31. * |------+------+------+------+------+------| | | |------+------+------+------+------+------|
  32. * |LShift| Z | X | C | V | B |-------| |-------| N | M | , | . | / |RShift|
  33. * `-----------------------------------------/ / \ \-----------------------------------------'
  34. * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
  35. * | | | | |/ / \ \ | | | | |
  36. * `----------------------------------' '------''---------------------------'
  37. */
  38. [_QWERTY] = LAYOUT( \
  39. KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_GRV, \
  40. KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
  41. KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
  42. 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, \
  43. KC_LGUI,KC_LALT,KC_LCTRL, KC_LOWER, KC_ENT, KC_SPC, KC_RAISE, KC_RCTRL, KC_RALT, KC_RGUI \
  44. ),
  45. /*
  46. * COLEMAK
  47. * ,-----------------------------------------. ,-----------------------------------------.
  48. * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` |
  49. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  50. * | ESC | Q | W | F | P | G | | J | L | U | Y | ; | Bspc |
  51. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  52. * | TAB | A | R | S | T | D |-------. ,-------| H | N | E | I | O | ' |
  53. * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
  54. * |LShift| Z | X | C | V | B |-------| |-------| K | M | , | . | / |RShift|
  55. * `-----------------------------------------/ / \ \-----------------------------------------'
  56. * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
  57. * | | | | |/ / \ \ | | | | |
  58. * `----------------------------------' '------''---------------------------'
  59. */
  60. [_COLEMAK] = LAYOUT( \
  61. KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_GRV, \
  62. KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \
  63. KC_TAB, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
  64. 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, \
  65. KC_LGUI,KC_LALT,KC_LCTRL,KC_LOWER, KC_ENT, KC_SPC, KC_RAISE, KC_RCTRL, KC_RALT, KC_RGUI \
  66. ),
  67. /* LOWER
  68. * ,-----------------------------------------. ,-----------------------------------------.
  69. * | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
  70. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  71. * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | F12 |
  72. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  73. * | Tab | ! | @ | # | $ | % |-------. ,-------| ^ | & | * | ( | ) | | |
  74. * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
  75. * | Shift| = | - | + | { | } |-------| |-------| [ | ] | ; | : | \ | Shift|
  76. * `-----------------------------------------/ / \ \-----------------------------------------'
  77. * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
  78. * | | | | |/ / \ \ | | | | |
  79. * `----------------------------------' '------''---------------------------'
  80. */
  81. [_LOWER] = LAYOUT( \
  82. _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,\
  83. KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_F12, \
  84. _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PIPE, \
  85. _______, KC_EQL, KC_MINS, KC_PLUS, KC_LCBR, KC_RCBR, _______, _______, KC_LBRC, KC_RBRC, KC_SCLN, KC_COLN, KC_BSLS, _______, \
  86. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______\
  87. ),
  88. /* RAISE
  89. * ,----------------------------------------. ,-----------------------------------------.
  90. * | | | | | | | | | | | | | |
  91. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  92. * | Esc | Ins | Pscr | Menu | | | | | PWrd | Up | NWrd | DLine| Bspc |
  93. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  94. * | Tab | LAt | LCtl |LShift| | Caps |-------. ,-------| | Left | Down | Rigth| Del | Bspc |
  95. * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
  96. * |Shift | Undo | Cut | Copy | Paste| |-------| |-------| | LStr | | LEnd | | Shift|
  97. * `-----------------------------------------/ / \ \-----------------------------------------'
  98. * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
  99. * | | | | |/ / \ \ | | | | |
  100. * `----------------------------------' '------''---------------------------'
  101. */
  102. [_RAISE] = LAYOUT( \
  103. _______, _______ , _______ , _______ , _______ , _______, _______, _______ , _______, _______ , _______ ,_______, \
  104. _______, KC_INS, KC_PSCR, KC_APP, XXXXXXX, XXXXXXX, KC_PGUP, KC_PRVWD, KC_UP, KC_NXTWD,KC_DLINE, KC_BSPC, \
  105. _______, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, KC_CAPS, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, KC_BSPC, \
  106. _______,KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, XXXXXXX, _______, _______, XXXXXXX, KC_LSTRT, XXXXXXX, KC_LEND, XXXXXXX, _______, \
  107. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
  108. ),
  109. /* ADJUST
  110. * ,-----------------------------------------. ,-----------------------------------------.
  111. * | | | | | | | | | | | | | |
  112. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  113. * | RESET| |QWERTY|COLEMAK| | | | | | | | | |
  114. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  115. * | | |MACWIN| | | |-------. ,-------| | VOLDO| MUTE | VOLUP| | |
  116. * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
  117. * | | | | | | |-------| |-------| | PREV | PLAY | NEXT | | |
  118. * `-----------------------------------------/ / \ \-----------------------------------------'
  119. * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
  120. * | | | | |/ / \ \ | | | | |
  121. * `----------------------------------' '------''---------------------------'
  122. */
  123. [_ADJUST] = LAYOUT( \
  124. XXXXXXX , XXXXXXX, XXXXXXX , XXXXXXX , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
  125. RESET , XXXXXXX,KC_QWERTY,KC_COLEMAK,CG_TOGG,XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
  126. XXXXXXX , XXXXXXX,CG_TOGG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLD, KC_MUTE, KC_VOLU, XXXXXXX, XXXXXXX, \
  127. XXXXXXX , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX, \
  128. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
  129. )
  130. };
  131. #ifdef OLED_ENABLE
  132. static void render_logo(void) {
  133. static const char PROGMEM qmk_logo[] = {
  134. 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
  135. 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
  136. 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,0
  137. };
  138. oled_write_P(qmk_logo, false);
  139. }
  140. static void print_status_narrow(void) {
  141. // Print current mode
  142. oled_write_P(PSTR("\n\n"), false);
  143. oled_write_ln_P(PSTR("MODE"), false);
  144. oled_write_ln_P(PSTR(""), false);
  145. if (keymap_config.swap_lctl_lgui) {
  146. oled_write_ln_P(PSTR("MAC"), false);
  147. } else {
  148. oled_write_ln_P(PSTR("WIN"), false);
  149. }
  150. switch (get_highest_layer(default_layer_state)) {
  151. case _QWERTY:
  152. oled_write_ln_P(PSTR("Qwrt"), false);
  153. break;
  154. case _COLEMAK:
  155. oled_write_ln_P(PSTR("Clmk"), false);
  156. break;
  157. default:
  158. oled_write_P(PSTR("Undef"), false);
  159. }
  160. oled_write_P(PSTR("\n\n"), false);
  161. // Print current layer
  162. oled_write_ln_P(PSTR("LAYER"), false);
  163. switch (get_highest_layer(layer_state)) {
  164. case _COLEMAK:
  165. case _QWERTY:
  166. oled_write_P(PSTR("Base\n"), false);
  167. break;
  168. case _RAISE:
  169. oled_write_P(PSTR("Raise"), false);
  170. break;
  171. case _LOWER:
  172. oled_write_P(PSTR("Lower"), false);
  173. break;
  174. case _ADJUST:
  175. oled_write_P(PSTR("Adj\n"), false);
  176. break;
  177. default:
  178. oled_write_ln_P(PSTR("Undef"), false);
  179. }
  180. oled_write_P(PSTR("\n\n"), false);
  181. led_t led_usb_state = host_keyboard_led_state();
  182. oled_write_ln_P(PSTR("CPSLK"), led_usb_state.caps_lock);
  183. }
  184. oled_rotation_t oled_init_user(oled_rotation_t rotation) {
  185. if (is_keyboard_master()) {
  186. return OLED_ROTATION_270;
  187. }
  188. return rotation;
  189. }
  190. void oled_task_user(void) {
  191. if (is_keyboard_master()) {
  192. print_status_narrow();
  193. } else {
  194. render_logo();
  195. }
  196. }
  197. #endif
  198. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  199. switch (keycode) {
  200. case KC_QWERTY:
  201. if (record->event.pressed) {
  202. set_single_persistent_default_layer(_QWERTY);
  203. }
  204. return false;
  205. case KC_COLEMAK:
  206. if (record->event.pressed) {
  207. set_single_persistent_default_layer(_COLEMAK);
  208. }
  209. return false;
  210. case KC_LOWER:
  211. if (record->event.pressed) {
  212. layer_on(_LOWER);
  213. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  214. } else {
  215. layer_off(_LOWER);
  216. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  217. }
  218. return false;
  219. case KC_RAISE:
  220. if (record->event.pressed) {
  221. layer_on(_RAISE);
  222. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  223. } else {
  224. layer_off(_RAISE);
  225. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  226. }
  227. return false;
  228. case KC_ADJUST:
  229. if (record->event.pressed) {
  230. layer_on(_ADJUST);
  231. } else {
  232. layer_off(_ADJUST);
  233. }
  234. return false;
  235. case KC_PRVWD:
  236. if (record->event.pressed) {
  237. if (keymap_config.swap_lctl_lgui) {
  238. register_mods(mod_config(MOD_LALT));
  239. register_code(KC_LEFT);
  240. } else {
  241. register_mods(mod_config(MOD_LCTL));
  242. register_code(KC_LEFT);
  243. }
  244. } else {
  245. if (keymap_config.swap_lctl_lgui) {
  246. unregister_mods(mod_config(MOD_LALT));
  247. unregister_code(KC_LEFT);
  248. } else {
  249. unregister_mods(mod_config(MOD_LCTL));
  250. unregister_code(KC_LEFT);
  251. }
  252. }
  253. break;
  254. case KC_NXTWD:
  255. if (record->event.pressed) {
  256. if (keymap_config.swap_lctl_lgui) {
  257. register_mods(mod_config(MOD_LALT));
  258. register_code(KC_RIGHT);
  259. } else {
  260. register_mods(mod_config(MOD_LCTL));
  261. register_code(KC_RIGHT);
  262. }
  263. } else {
  264. if (keymap_config.swap_lctl_lgui) {
  265. unregister_mods(mod_config(MOD_LALT));
  266. unregister_code(KC_RIGHT);
  267. } else {
  268. unregister_mods(mod_config(MOD_LCTL));
  269. unregister_code(KC_RIGHT);
  270. }
  271. }
  272. break;
  273. case KC_LSTRT:
  274. if (record->event.pressed) {
  275. if (keymap_config.swap_lctl_lgui) {
  276. //CMD-arrow on Mac, but we have CTL and GUI swapped
  277. register_mods(mod_config(MOD_LCTL));
  278. register_code(KC_LEFT);
  279. } else {
  280. register_code(KC_HOME);
  281. }
  282. } else {
  283. if (keymap_config.swap_lctl_lgui) {
  284. unregister_mods(mod_config(MOD_LCTL));
  285. unregister_code(KC_LEFT);
  286. } else {
  287. unregister_code(KC_HOME);
  288. }
  289. }
  290. break;
  291. case KC_LEND:
  292. if (record->event.pressed) {
  293. if (keymap_config.swap_lctl_lgui) {
  294. //CMD-arrow on Mac, but we have CTL and GUI swapped
  295. register_mods(mod_config(MOD_LCTL));
  296. register_code(KC_RIGHT);
  297. } else {
  298. register_code(KC_END);
  299. }
  300. } else {
  301. if (keymap_config.swap_lctl_lgui) {
  302. unregister_mods(mod_config(MOD_LCTL));
  303. unregister_code(KC_RIGHT);
  304. } else {
  305. unregister_code(KC_END);
  306. }
  307. }
  308. break;
  309. case KC_DLINE:
  310. if (record->event.pressed) {
  311. register_mods(mod_config(MOD_LCTL));
  312. register_code(KC_BSPC);
  313. } else {
  314. unregister_mods(mod_config(MOD_LCTL));
  315. unregister_code(KC_BSPC);
  316. }
  317. break;
  318. case KC_COPY:
  319. if (record->event.pressed) {
  320. register_mods(mod_config(MOD_LCTL));
  321. register_code(KC_C);
  322. } else {
  323. unregister_mods(mod_config(MOD_LCTL));
  324. unregister_code(KC_C);
  325. }
  326. return false;
  327. case KC_PASTE:
  328. if (record->event.pressed) {
  329. register_mods(mod_config(MOD_LCTL));
  330. register_code(KC_V);
  331. } else {
  332. unregister_mods(mod_config(MOD_LCTL));
  333. unregister_code(KC_V);
  334. }
  335. return false;
  336. case KC_CUT:
  337. if (record->event.pressed) {
  338. register_mods(mod_config(MOD_LCTL));
  339. register_code(KC_X);
  340. } else {
  341. unregister_mods(mod_config(MOD_LCTL));
  342. unregister_code(KC_X);
  343. }
  344. return false;
  345. break;
  346. case KC_UNDO:
  347. if (record->event.pressed) {
  348. register_mods(mod_config(MOD_LCTL));
  349. register_code(KC_Z);
  350. } else {
  351. unregister_mods(mod_config(MOD_LCTL));
  352. unregister_code(KC_Z);
  353. }
  354. return false;
  355. }
  356. return true;
  357. }
  358. #ifdef ENCODER_ENABLE
  359. bool encoder_update_user(uint8_t index, bool clockwise) {
  360. if (index == 0) {
  361. if (clockwise) {
  362. tap_code(KC_VOLU);
  363. } else {
  364. tap_code(KC_VOLD);
  365. }
  366. } else if (index == 1) {
  367. if (clockwise) {
  368. tap_code(KC_PGDOWN);
  369. } else {
  370. tap_code(KC_PGUP);
  371. }
  372. }
  373. return true;
  374. }
  375. #endif