keymap.c 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389
  1. /* My (demuredemeanor) sofle RGB conf
  2. * Based on Josef Adamcik's work
  3. */
  4. #include QMK_KEYBOARD_H
  5. /// Defines /// {{{
  6. // Define Layer Names
  7. enum sofleRGB_layers {
  8. _QWERTY,
  9. _COLEMAK,
  10. _GAME,
  11. _LOWER,
  12. _RAISE,
  13. _ADJUST,
  14. _MOUSE,
  15. };
  16. // Define Custom 'Keys'
  17. enum custom_keycodes {
  18. KC_QWERTY = SAFE_RANGE,
  19. KC_COLEMAK,
  20. KC_GAME,
  21. KC_MOUSE,
  22. KC_LWR,
  23. KC_RSE,
  24. KC_ADJUST,
  25. KC_PRVWD,
  26. KC_NXTWD,
  27. KC_LSTRT,
  28. KC_LEND,
  29. KC_DLINE,
  30. };
  31. bool shift_held = false;
  32. static uint16_t held_shift = 0;
  33. /// End Defines /// }}}
  34. #include "oled.c" // Requires layouts defined before sourcing
  35. #include "encoder.c"
  36. #include "led_layers.c" // Requires layouts defined before sourcing
  37. /// Layers /// {{{
  38. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  39. /*
  40. * QWERTY
  41. * ,-----------------------------------------. ,-----------------------------------------.
  42. * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | \ |
  43. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  44. * | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bspc |
  45. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  46. * | ESC | A | S | D | F | G | | H | J | K | L | ; | ' |
  47. * |------+------+------+------+------+------|-------. ,-------|------+------+------+------+------+------|
  48. * |LShift| Z | X | C | V | B | Mute | | | N | M | , | . | / |RShift|
  49. * `-------------+------+------+------\------\--------\ /--------/------/------+------+------+-------------'
  50. * \| LGUI | LAlt | LCtrl| LOWER \ Enter / \ Space / RAISE | RCtrl| RAlt | RGUI |/
  51. * `-----------------------------------' `-----------------------------------'
  52. */
  53. [_QWERTY] = LAYOUT(
  54. KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
  55. KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
  56. KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
  57. 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,
  58. KC_LGUI, KC_LALT, KC_LCTL, KC_LWR, KC_ENT, KC_SPC, KC_RSE, KC_RCTL, KC_RALT, KC_RGUI
  59. ),
  60. /*
  61. * COLEMAK
  62. * ,-----------------------------------------. ,-----------------------------------------.
  63. * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | \ |
  64. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  65. * | Tab | Q | W | F | P | G | | J | L | U | Y | ; | Bspc |
  66. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  67. * | ESC | A | R | S | T | D | | H | N | E | I | O | ' |
  68. * |------+------+------+------+------+------|-------. ,-------|------+------+------+------+------+------|
  69. * |LShift| Z | X | C | V | B | Mute | | | K | M | , | . | / |RShift|
  70. * `-------------+------+------+------\------\--------\ /--------/------/------+------+------+-------------'
  71. * \| LGUI | LAlt | LCtrl| LOWER \ Enter / \ Space / RAISE | RCtrl| RAlt | RGUI |/
  72. * `-----------------------------------' `-----------------------------------'
  73. */
  74. [_COLEMAK] = LAYOUT(
  75. KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
  76. KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
  77. KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
  78. 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,
  79. KC_LGUI, KC_LALT, KC_LCTL, KC_LWR, KC_ENT, KC_SPC, KC_RSE, KC_RCTL, KC_RALT, KC_RGUI
  80. ),
  81. /*
  82. * GAME
  83. * ,-----------------------------------------. ,-----------------------------------------.
  84. * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | \ |
  85. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  86. * | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bspc |
  87. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  88. * | ESC | A | S | D | F | G | | H | J | K | L | Up | ' |
  89. * |------+------+------+------+------+------|-------. ,-------|------+------+------+------+------+------|
  90. * |LShift| Z | X | C | V | B | Mute | | | N | M | , | Left | Down | Right|
  91. * `-------------+------+------+------\------\--------\ /--------/------/------+------+------+-------------'
  92. * \| Enter| LAlt | LCtrl| LOWER \ Space / \ Space / RAISE | RCtrl| RAlt | RGUI |/
  93. * `-----------------------------------' `-----------------------------------'
  94. */
  95. [_GAME] = LAYOUT(
  96. KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
  97. KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
  98. KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_UP, KC_QUOT,
  99. KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MUTE, XXXXXXX, KC_N, KC_M, KC_COMM, KC_LEFT, KC_DOWN, KC_RGHT,
  100. KC_ENT, KC_LALT, KC_LCTL, KC_LWR, KC_SPC, KC_SPC, KC_RSE, KC_RCTL, KC_RALT, KC_RGUI
  101. ),
  102. /*
  103. * LOWER
  104. * ,-----------------------------------------. ,-----------------------------------------.
  105. * | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
  106. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  107. * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | F12 |
  108. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  109. * | | ! | @ | # | $ | % | | ^ | & | * | ( | ) | | |
  110. * |------+------+------+------+------+------|-------. ,-------|------+------+------+------+------+------|
  111. * | | = | - | + | { | } | | | | [ | ] | ; | : | \ | |
  112. * `-------------+------+------+------\------\--------\ /--------/------/------+------+------+-------------'
  113. * \| LGUI | LAlt | LCtrl| LOWER \ Enter / \ Space / RAISE | RCtrl| RAlt | RGUI |/
  114. * `-----------------------------------' `-----------------------------------'
  115. */
  116. [_LOWER] = LAYOUT(
  117. _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
  118. KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_F12,
  119. _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PIPE,
  120. _______, KC_EQL, KC_MINS, KC_PLUS, KC_LCBR, KC_RCBR, _______, _______, KC_LBRC, KC_RBRC, KC_SCLN, KC_COLN, KC_BSLS, _______,
  121. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
  122. ),
  123. /*
  124. * RAISE
  125. * ,-----------------------------------------. ,-----------------------------------------.
  126. * | | | | | | | | | | | | | MOUSE|
  127. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  128. * | | Ins | Pscr | Menu | | | | PgUp | PWrd | Up | NWrd | DLine| Bspc |
  129. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  130. * | | LAlt | LCtrl|LShift| | CAPS | | PgDn | Left | Down | Right| Del | Bspc |
  131. * |------+------+------+------+------+------|-------. ,-------|------+------+------+------+------+------|
  132. * | | Undo | Cut | Copy | Paste| | | | | | LStr | | LEnd | |RShift|
  133. * `-------------+------+------+------\------\--------\ /--------/------/------+------+------+-------------'
  134. * \| LGUI | LAlt | LCtrl| LOWER \ Enter / \ Space / RAISE | RCtrl| RAlt | RGUI |/
  135. * `-----------------------------------' `-----------------------------------'
  136. */
  137. [_RAISE] = LAYOUT(
  138. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MOUSE,
  139. _______, KC_INS, KC_PSCR, KC_APP, XXXXXXX, XXXXXXX, KC_PGUP, KC_PRVWD,KC_UP, KC_NXTWD,KC_DLINE,KC_BSPC,
  140. _______, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, KC_CAPS, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, KC_BSPC,
  141. _______, KC_UNDO, KC_CUT, KC_COPY, KC_PSTE, XXXXXXX, _______, _______, XXXXXXX, KC_LSTRT,XXXXXXX, KC_LEND, XXXXXXX, _______,
  142. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
  143. ),
  144. /*
  145. * ADJUST
  146. * ,-----------------------------------------. ,-----------------------------------------.
  147. * | | | | | | | | | R Hue| R Sat| R Bri|R Mode| R Tog|
  148. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  149. * | RESET| |QWERTY|COLEMK| GAME | | | | | | | | |
  150. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  151. * | | |MacMod| | | | | | VolDn| Mute | VolUp| | |
  152. * |------+------+------+------+------+------|-------. ,-------|------+------+------+------+------+------|
  153. * |LShift| | | | | | | | | | Prev | Play | Next | |RShift|
  154. * `-------------+------+------+------\------\--------\ /--------/------/------+------+------+-------------'
  155. * \| LGUI | LAlt | LCtrl| LOWER \ Enter / \ Space / RAISE | RCtrl| RAlt | RGUI |/
  156. * `-----------------------------------' `-----------------------------------'
  157. */
  158. [_ADJUST] = LAYOUT(
  159. XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_HUI, RGB_SAI, RGB_VAI, RGB_MOD, RGB_TOG,
  160. RESET, XXXXXXX, KC_QWERTY,KC_COLEMAK,KC_GAME,XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  161. XXXXXXX, XXXXXXX, CG_TOGG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLD, KC_MUTE, KC_VOLU, XXXXXXX, XXXXXXX,
  162. KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, KC_RSFT,
  163. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
  164. ),
  165. /*
  166. * MOUSE
  167. * ,-----------------------------------------. ,-----------------------------------------.
  168. * | | | | | | | | | | | | | MOUSE|
  169. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  170. * | | | | | | | | | | | | | |
  171. * |------+------+------+------+------+------| |------+------+------+------+------+------|
  172. * | | | | | | | | MLeft| MDown| MUp |MRight| | |
  173. * |------+------+------+------+------+------|-------. ,-------|------+------+------+------+------+------|
  174. * | | | | | | | | | | | | | | |RShift|
  175. * `-------------+------+------+------\------\--------\ /--------/------/------+------+------+-------------'
  176. * \| LGUI | LAlt | LCtrl| LOWER \ Enter / \ Space / RAISE | Btn1 | Btn2 | |/
  177. * `-----------------------------------' `-----------------------------------'
  178. */
  179. [_MOUSE] = LAYOUT(
  180. XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MOUSE,
  181. _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  182. _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, XXXXXXX, XXXXXXX,
  183. _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
  184. _______, _______, _______, _______, _______, _______, _______, KC_BTN1, KC_BTN2, XXXXXXX
  185. )
  186. };
  187. /// End Layers /// }}}
  188. /// Fancy Actions /// {{{
  189. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  190. switch (keycode) {
  191. case KC_QWERTY:
  192. if (record->event.pressed) {
  193. set_single_persistent_default_layer(_QWERTY);
  194. }
  195. return false;
  196. case KC_COLEMAK:
  197. if (record->event.pressed) {
  198. set_single_persistent_default_layer(_COLEMAK);
  199. }
  200. return false;
  201. case KC_GAME:
  202. if (record->event.pressed) {
  203. set_single_persistent_default_layer(_GAME);
  204. }
  205. return false;
  206. case KC_LWR:
  207. if (record->event.pressed) {
  208. layer_on(_LOWER);
  209. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  210. } else {
  211. layer_off(_LOWER);
  212. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  213. }
  214. return false;
  215. case KC_RSE:
  216. if (record->event.pressed) {
  217. layer_on(_RAISE);
  218. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  219. } else {
  220. layer_off(_RAISE);
  221. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  222. }
  223. return false;
  224. case KC_ADJUST:
  225. if (record->event.pressed) {
  226. layer_on(_ADJUST);
  227. } else {
  228. layer_off(_ADJUST);
  229. }
  230. return false;
  231. case KC_MOUSE:
  232. if (record->event.pressed) {
  233. layer_invert(_MOUSE);
  234. }
  235. return false;
  236. case KC_PRVWD:
  237. if (record->event.pressed) {
  238. if (keymap_config.swap_lctl_lgui) {
  239. register_mods(mod_config(MOD_LALT));
  240. register_code(KC_LEFT);
  241. } else {
  242. register_mods(mod_config(MOD_LCTL));
  243. register_code(KC_LEFT);
  244. }
  245. } else {
  246. if (keymap_config.swap_lctl_lgui) {
  247. unregister_mods(mod_config(MOD_LALT));
  248. unregister_code(KC_LEFT);
  249. } else {
  250. unregister_mods(mod_config(MOD_LCTL));
  251. unregister_code(KC_LEFT);
  252. }
  253. }
  254. break;
  255. case KC_NXTWD:
  256. if (record->event.pressed) {
  257. if (keymap_config.swap_lctl_lgui) {
  258. register_mods(mod_config(MOD_LALT));
  259. register_code(KC_RIGHT);
  260. } else {
  261. register_mods(mod_config(MOD_LCTL));
  262. register_code(KC_RIGHT);
  263. }
  264. } else {
  265. if (keymap_config.swap_lctl_lgui) {
  266. unregister_mods(mod_config(MOD_LALT));
  267. unregister_code(KC_RIGHT);
  268. } else {
  269. unregister_mods(mod_config(MOD_LCTL));
  270. unregister_code(KC_RIGHT);
  271. }
  272. }
  273. break;
  274. case KC_LSTRT:
  275. if (record->event.pressed) {
  276. if (keymap_config.swap_lctl_lgui) {
  277. //CMD-arrow on Mac, but we have CTL and GUI swapped
  278. register_mods(mod_config(MOD_LCTL));
  279. register_code(KC_LEFT);
  280. } else {
  281. register_code(KC_HOME);
  282. }
  283. } else {
  284. if (keymap_config.swap_lctl_lgui) {
  285. unregister_mods(mod_config(MOD_LCTL));
  286. unregister_code(KC_LEFT);
  287. } else {
  288. unregister_code(KC_HOME);
  289. }
  290. }
  291. break;
  292. case KC_LEND:
  293. if (record->event.pressed) {
  294. if (keymap_config.swap_lctl_lgui) {
  295. //CMD-arrow on Mac, but we have CTL and GUI swapped
  296. register_mods(mod_config(MOD_LCTL));
  297. register_code(KC_RIGHT);
  298. } else {
  299. register_code(KC_END);
  300. }
  301. } else {
  302. if (keymap_config.swap_lctl_lgui) {
  303. unregister_mods(mod_config(MOD_LCTL));
  304. unregister_code(KC_RIGHT);
  305. } else {
  306. unregister_code(KC_END);
  307. }
  308. }
  309. break;
  310. case KC_DLINE:
  311. if (record->event.pressed) {
  312. register_mods(mod_config(MOD_LCTL));
  313. register_code(KC_BSPC);
  314. } else {
  315. unregister_mods(mod_config(MOD_LCTL));
  316. unregister_code(KC_BSPC);
  317. }
  318. break;
  319. case KC_COPY:
  320. if (record->event.pressed) {
  321. register_mods(mod_config(MOD_LCTL));
  322. register_code(KC_C);
  323. } else {
  324. unregister_mods(mod_config(MOD_LCTL));
  325. unregister_code(KC_C);
  326. }
  327. return false;
  328. case KC_PSTE:
  329. if (record->event.pressed) {
  330. register_mods(mod_config(MOD_LCTL));
  331. register_code(KC_V);
  332. } else {
  333. unregister_mods(mod_config(MOD_LCTL));
  334. unregister_code(KC_V);
  335. }
  336. return false;
  337. case KC_CUT:
  338. if (record->event.pressed) {
  339. register_mods(mod_config(MOD_LCTL));
  340. register_code(KC_X);
  341. } else {
  342. unregister_mods(mod_config(MOD_LCTL));
  343. unregister_code(KC_X);
  344. }
  345. return false;
  346. break;
  347. case KC_UNDO:
  348. if (record->event.pressed) {
  349. register_mods(mod_config(MOD_LCTL));
  350. register_code(KC_Z);
  351. } else {
  352. unregister_mods(mod_config(MOD_LCTL));
  353. unregister_code(KC_Z);
  354. }
  355. return false;
  356. /*break; //added break?*/
  357. // Store shift held
  358. case KC_RSFT:
  359. case KC_LSFT:
  360. shift_held = record->event.pressed;
  361. held_shift = keycode;
  362. break;
  363. }
  364. return true;
  365. }
  366. /// End Fancy Actions /// }}}