keymap.c 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603
  1. /* Laurent's Preonic Layout
  2. */
  3. // For IntelliSense
  4. #ifdef __INTELLISENSE__
  5. #include "../../rev3/config.h"
  6. #include "../../rev3/rev3.h"
  7. enum dynamic_macro_keycodes {
  8. DYN_REC_START1 = DYNAMIC_MACRO_RANGE,
  9. DYN_REC_START2,
  10. DYN_REC_STOP,
  11. DYN_MACRO_PLAY1,
  12. DYN_MACRO_PLAY2,
  13. };
  14. #define QMK_KEYBOARD_H "rev3.h"
  15. #endif
  16. #include QMK_KEYBOARD_H
  17. #include "muse.h"
  18. // ==== These keys allows usage of the home row as modifiers (when held) ====
  19. // Very bad for gaming, switch to gaming layout
  20. // For _QWERTY_MAC
  21. // S and L into Ctrl
  22. #define LCT_S LCTL_T(KC_S)
  23. #define LCT_L LCTL_T(KC_L)
  24. // F, J and Z into CMD
  25. #define LWN_F LGUI_T(KC_F)
  26. #define LWN_Z LGUI_T(KC_Z)
  27. #define LWN_J LGUI_T(KC_J)
  28. // For _QWERTY_WIN
  29. // S and L into WIN
  30. #define LWN_S LGUI_T(KC_S)
  31. #define LWN_L LGUI_T(KC_L)
  32. // F, J and Z into Ctrl
  33. #define LCT_F LCTL_T(KC_F)
  34. #define LCT_Z LCTL_T(KC_Z)
  35. #define LCT_J LCTL_T(KC_J)
  36. // ============================================================================
  37. // ==== For All ====
  38. // Layout helper
  39. #define __LYB__ KC_TRANSPARENT
  40. // Mod Tap
  41. // Changing K and D into Alt
  42. #define LAT_D LALT_T(KC_D)
  43. #define LAT_K LALT_T(KC_K)
  44. // Equal into Ctrl+Alt+Cmd
  45. #define LCAGEQ LCAG_T(KC_EQUAL)
  46. // Esc into Meh
  47. #define LMHESC MEH_T(KC_ESC)
  48. // Space into Shift
  49. #define LSHFSP SFT_T(KC_SPACE)
  50. // Backspace into Shift
  51. #define LSHFBK SFT_T(KC_BSPACE)
  52. // Switching layers
  53. #define LTO_BS TO(_QWERTY_MAC) // Go to Base Layer
  54. // Go to _NAV
  55. #define LLY_SC LT(_NAV, KC_SCLN) // From ;
  56. #define LLY_A LT(_NAV, KC_A) // From A
  57. // Go to _PUNC
  58. #define LLY_TB LT(_PUNC, KC_TAB) // From Tab
  59. #define LLY_BK LT(_PUNC, KC_BSPACE) // From Backspace
  60. #define LLY_BS LT(_PUNC, KC_BSLASH) // From Backslash
  61. // Others
  62. #define LLY_GR LT(_ONEHD, KC_GRV) // Go to _ONEHD from `
  63. #define LLY_ET LT(_EXTRA, KC_ENT) // Go to _EXTRA from Enter
  64. #define LLSWIT MO(_LYSWT) // Layer Switcher
  65. #define LLY_DL LT(_NUM, KC_DEL) // Go to _NUM from Delete
  66. // Shortcuts
  67. // Mac Windows Resizing
  68. #define LMW_L3 LCA(KC_E) // Resize to 2/3 and move to the left
  69. #define LMW_FS LCA(KC_ENTER) // Resize to full screen
  70. #define LMW_R3 LCA(KC_T) // Resize to 2/3 and move to the right
  71. #define LMW_L1 LCA(KC_D) // Resize to 1/3 and move to the left
  72. #define LMW_M1 LCA(KC_F) // Resize to 1/3 and move to middle
  73. #define LMW_R1 LCA(KC_G) // Resize to 1/3 and move to right
  74. #define LMW_TL LCA(KC_U) // Fit on Top Left corner
  75. #define LMW_TR LCA(KC_I) // Fit on Top Left corner
  76. #define LMW_BL LCA(KC_J) // Fit on Top Left corner
  77. #define LMW_BR LCA(KC_K) // Fit on Top Left corner
  78. #define LMW_LT LCA(KC_LEFT) // Resize to 1/2 horizontally and move to the left
  79. #define LMW_BT LCA(KC_DOWN) // Resize to 1/2 vertically and move to the bottom
  80. #define LMW_TP LCA(KC_UP) // Resize to 1/2 vertically and move to the top
  81. #define LMW_RT LCA(KC_RIGHT) // Resize to 1/2 horizontally and move to the right
  82. // ==== Audio ====
  83. #ifdef AUDIO_ENABLE
  84. #include "audio.h"
  85. float tone_macro1_record[][2] = SONG(CAPS_LOCK_ON_SOUND);
  86. float tone_macro2_record[][2] = SONG(SCROLL_LOCK_ON_SOUND);
  87. float tone_macro_record_stop[][2] = SONG(SCROLL_LOCK_OFF_SOUND);
  88. #endif
  89. enum preonic_layers {
  90. _QWERTY_MAC,
  91. _QWERTY_WIN,
  92. _GAMING,
  93. _MUSIC,
  94. _LOWER,
  95. _RAISE,
  96. _ADJUST,
  97. _PUNC,
  98. _EXTRA,
  99. _NUM,
  100. _NAV,
  101. _ONEHD,
  102. _LYSWT };
  103. enum preonic_keycodes {
  104. QWERTY = SAFE_RANGE,
  105. QWWIN,
  106. // COLEMAK,
  107. // DVORAK,
  108. LOWER,
  109. RAISE,
  110. BACKLIT,
  111. DYNAMIC_MACRO_RANGE,
  112. };
  113. #include "dynamic_macro.h"
  114. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  115. /* Qwerty for Mac
  116. * ,-----------------------------------------------------------------------------------.
  117. * | CAG= | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - |
  118. * |------+------+------+------+------+------+------+------+------+------+------+------|
  119. * | LY|TB| Q | W | E | R | T | Y | U | I | O | P | LY|\ |
  120. * |------+------+------+------+------+-------------+------+------+------+------+------|
  121. * | Hyper| LY|A | CT/S | AT/D | WN/F | G | H | WN/J | AT/K | CT/L | LY|; | " |
  122. * |------+------+------+------+------+------|------+------+------+------+------+------|
  123. * | Shift| WN/Z | X | C | V | B | N | M | , | . | / | Sh/Bk|
  124. * |------+------+------+------+------+------+------+------+------+------+------+------|
  125. * | LY|` |ESCMEH| LY|DL|LW|Bkp|LY|Bkp| Shift/Space |LY|ENT|RS|Bkp| [ | ] |LY_SW |
  126. * `-----------------------------------------------------------------------------------'
  127. * LY|` -> To _NUM
  128. * LY|; -> To _NAV
  129. * LY|A -> To _NAV
  130. * LY|TB -> To _PUNC
  131. * LY|\ -> To _PUNC
  132. * LY|Bkp -> To _PUNC
  133. * LY|ENT -> To_EXTRA
  134. */
  135. [_QWERTY_MAC] = LAYOUT_preonic_grid( \
  136. LCAGEQ, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS,
  137. LLY_TB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, LLY_BS,
  138. KC_HYPR, LLY_A, LCT_S, LAT_D, LWN_F, KC_G, KC_H, LWN_J, LAT_K, LCT_L, LLY_SC, KC_QUOT,
  139. KC_LSFT, LWN_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, LSHFBK,
  140. LLY_GR, LMHESC, LLY_DL, LOWER, LLY_BK, LSHFSP, LSHFSP, LLY_ET, RAISE, KC_LBRC, KC_RBRC, LLSWIT
  141. ),
  142. /* Qwerty for Windows
  143. * ,-----------------------------------------------------------------------------------.
  144. * | CAG= | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - |
  145. * |------+------+------+------+------+------+------+------+------+------+------+------|
  146. * | LY|TB| Q | W | E | R | T | Y | U | I | O | P | LY|\ |
  147. * |------+------+------+------+------+-------------+------+------+------+------+------|
  148. * | Hyper| LY|A | WN/S | AT/D | CT/F | G | H | CT/J | AT/K | WN/L | LY/; | " |
  149. * |------+------+------+------+------+------|------+------+------+------+------+------|
  150. * | Shift| CT/Z | X | C | V | B | N | M | , | . | / | Sh/Bk|
  151. * |------+------+------+------+------+------+------+------+------+------+------+------|
  152. * | LY|` |MH/ESC| LY|DL|LW|Bkp|LY|Bk | Space |LY|ENT|RS|Bkp| [ | ] |LY_SW |
  153. * `-----------------------------------------------------------------------------------'
  154. */
  155. [_QWERTY_WIN] = LAYOUT_preonic_grid( \
  156. LCAGEQ, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS,
  157. LLY_TB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, LLY_BS,
  158. KC_HYPR, LLY_A, LWN_S, LAT_D, LCT_F, KC_G, KC_H, LCT_J, LAT_K, LWN_L, LLY_SC, KC_QUOT,
  159. KC_LSFT, LCT_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, LSHFBK,
  160. LLY_GR, LMHESC, LLY_DL, LOWER, LLY_BK, LSHFSP, LSHFSP, LLY_ET, RAISE, KC_LBRC, KC_RBRC, LLSWIT
  161. ),
  162. /* Gaming
  163. * ,-----------------------------------------------------------------------------------.
  164. * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - |
  165. * |------+------+------+------+------+------+------+------+------+------+------+------|
  166. * | Tab | Q | W | E | R | T | Y | U | I | O | P | \ |
  167. * |------+------+------+------+------+-------------+------+------+------+------+------|
  168. * | Ctrl | A | S | D | F | G | H | J | K | L | LY|; | " |
  169. * |------+------+------+------+------+------|------+------+------+------+------+------|
  170. * | Shift| Z | X | C | V | B | N | M | , | . | / | = |
  171. * |------+------+------+------+------+------+------+------+------+------+------+------|
  172. * | Ctrl | ESC | Alt |LW|Bkp|LY|Bk | Space |LY|ENT|RS|Bkp| [ | ] |LY_SW |
  173. * `-----------------------------------------------------------------------------------'
  174. */
  175. [_GAMING] = LAYOUT_preonic_grid( \
  176. KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS,
  177. KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH,
  178. KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LLY_SC, KC_QUOT,
  179. KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_EQUAL,
  180. KC_LCTL, KC_ESC, KC_LALT, LOWER, LLY_BK, KC_SPC, KC_SPC, LLY_ET, RAISE, KC_LBRC, KC_RBRC, LLSWIT
  181. ),
  182. /* Music Layer (Switch to this layer if want to use music mode)
  183. * ,-----------------------------------------------------------------------------------.
  184. * | Esc | XXXX | XXXX | XXXX | XXXX | XXXX | XXXX | XXXX | XXXX | XXXX | XXXX | XXXX |
  185. * |------+------+------+------+------+------+------+------+------+------+------+------|
  186. * | XXXX | XXXX | XXXX | XXXX | XXXX | XXXX | XXXX | XXXX | XXXX | XXXX | XXXX | XXXX |
  187. * |------+------+------+------+------+-------------+------+------+------+------+------|
  188. * | | XXXX | XXXX | XXXX | XXXX | XXXX | XXXX | XXXX | XXXX | XXXX | XXXX | XXXX |
  189. * |------+------+------+------+------+------|------+------+------+------+------+------|
  190. * | | XXXX | XXXX | XXXX | XXXX | XXXX | XXXX | XXXX | XXXX | XXXX | XXXX | XXXX |
  191. * |------+------+------+------+------+------+------+------+------+------+------+------|
  192. * | CTRL | ALT | CMD | | XXXX | Space | XXXX | | XXXX | XXXX |LY_SW |
  193. * `-----------------------------------------------------------------------------------'
  194. */
  195. [_MUSIC] = LAYOUT_preonic_grid( \
  196. KC_ESC , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  197. XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  198. _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  199. _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  200. KC_LCTL, KC_LALT, KC_LGUI, _______, XXXXXXX, KC_SPC, KC_SPC, XXXXXXX, _______, XXXXXXX, XXXXXXX, LLSWIT
  201. ),
  202. /* Lower
  203. * ,-----------------------------------------------------------------------------------.
  204. * | ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 |
  205. * |------+------+------+------+------+-------------+------+------+------+------+------|
  206. * | Tab | Home | Up | End | PGUP | XXXX | XXXX | XXXX | PrSc | Home | PGUP | Del |
  207. * |------+------+------+------+------+-------------+------+------+------+------+------|
  208. * | " | Left | Down | Right|PGDWN | XXXX | XXXX | XXXX | Pause| End |PGDWN | F12 |
  209. * |------+------+------+------+------+------|------+------+------+------+------+------|
  210. * | | CTRL | Alt | CMD | XXXX | XXXX | XXXX | XXXX | Prev | Play | Next | INS |
  211. * |------+------+------+------+------+------+------+------+------+------+------+------|
  212. * | CTRL | Alt | CMD | !!!! | Bksp | Space | Enter| | Vol- | Vol+ |LY_SW |
  213. * `-----------------------------------------------------------------------------------'
  214. */
  215. [_LOWER] = LAYOUT_preonic_grid( \
  216. KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
  217. KC_TAB, KC_HOME, KC_UP, KC_END, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, KC_PSCR, KC_HOME, KC_PGUP, KC_DEL,
  218. KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, XXXXXXX, XXXXXXX, XXXXXXX, KC_PAUS, KC_END, KC_PGDN, KC_F12,
  219. _______, KC_LCTL, KC_LALT, KC_LGUI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MPRV, KC_MPLY, KC_MNXT, KC_INS,
  220. KC_LCTL, KC_LALT, KC_LGUI, __LYB__, KC_BSPC, KC_SPC, KC_SPC, KC_ENT, _______, KC_VOLD, KC_VOLU, LLSWIT\
  221. ),
  222. /* Raise
  223. * ,-----------------------------------------------------------------------------------.
  224. * | ESC | F1 | F2 | F3 | F4 | F5 | SCLK | & | * | ( | ) | Bksp |
  225. * |------+------+------+------+------+------+------+------+------+------+------+------|
  226. * | Tab | F7 | F8 | F9 | F10 | F11 | XXXX | & | * | { | } | Del |
  227. * |------+------+------+------+------+-------------+------+------+------+------+------|
  228. * | Caps | F1 | F2 | F3 | F4 | F5 | XXXX | - | = | [ | ] | XXXX |
  229. * |------+------+------+------+------+------|------+------+------+------+------+------|
  230. * | | F7 | F8 | F9 | F10 | F11 | XXXX |ISO # |ISO \ | MRC1 | MRC2 | MRSP |
  231. * |------+------+------+------+------+------+------+------+------+------+------+------|
  232. * | CTRL | Alt | CMD | | Bksp | Space | Enter| !!!! | MPL1 | MPL2 |LY_SW |
  233. * `-----------------------------------------------------------------------------------'
  234. */
  235. [_RAISE] = LAYOUT_preonic_grid( \
  236. KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_SLCK, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
  237. KC_TAB, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, XXXXXXX, KC_AMPR, KC_ASTR, KC_LCBR, KC_RCBR, KC_DEL,
  238. KC_CLCK, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, XXXXXXX, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, XXXXXXX,
  239. _______, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, XXXXXXX, KC_NUHS, KC_NUBS, DYN_REC_START1, DYN_REC_START2, DYN_REC_STOP,
  240. KC_LCTL, KC_LALT, KC_LGUI, _______, KC_BSPC, KC_SPC, KC_SPC, KC_ENT, __LYB__, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, LLSWIT
  241. ),
  242. /* Adjust (Lower + Raise)
  243. * ,-----------------------------------------------------------------------------------.
  244. * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 |
  245. * |------+------+------+------+------+------+------+------+------+------+------+------|
  246. * | Tab | Reset| | | | | | | | | | XXXX |
  247. * |------+------+------+------+------+-------------+------+------+------+------+------|
  248. * | | | |Aud on|AudOff|QWmac |QWwin |QWmac |QWin | | | F12 |
  249. * |------+------+------+------+------+------|------+------+------+------+------+------|
  250. * | |Voice-|Voice+|Mus on|MusOff|MidiOn|MidOff| | | | | |
  251. * |------+------+------+------+------+------+------+------+------+------+------+------|
  252. * | | | | | | | | | | |LY_SW |
  253. * `-----------------------------------------------------------------------------------'
  254. */
  255. [_ADJUST] = LAYOUT_preonic_grid( \
  256. KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
  257. KC_TAB, RESET, DEBUG, _______, _______, _______, _______, TERM_ON, TERM_OFF,_______, _______, XXXXXXX,
  258. /*_______, _______, MU_MOD, AU_ON, AU_OFF, QWERTY, QWWIN, QWERTY, COLEMAK, DVORAK, _______, _______, \ Remove this if adding Colemak and Dvorak*/
  259. _______, _______, MU_MOD, AU_ON, AU_OFF, QWERTY, QWWIN, QWERTY, QWWIN, _______, _______, KC_F12,
  260. _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______,
  261. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, LLSWIT
  262. ),
  263. /* Punctuation Layer
  264. * ,-----------------------------------------------------------------------------------.
  265. * | + | ! | @ | # | $ | % | ^ | & | * | ( | ) | _ |
  266. * |------+------+------+------+------+------+------+------+------+------+------+------|
  267. * | !!!! | & | | | { | } | - | - | XXXX | XXXX | { | } | |(!)|
  268. * |------+------+------+------+------+-------------+------+------+------+------+------|
  269. * | " | / | * | ( | ) | + | + | XXXX | XXXX | [ | ] | " |
  270. * |------+------+------+------+------+------|------+------+------+------+------+------|
  271. * | | \ | % | [ | ] | = | = | XXXX | < | > | ? | INS |
  272. * |------+------+------+------+------+------+------+------+------+------+------+------|
  273. * | ~ | _ | ^ | Del | !!!! | Space | Enter| XXXX | [ | ] |LY_SW |
  274. * `-----------------------------------------------------------------------------------'
  275. */
  276. [_PUNC] = LAYOUT_preonic_grid( \
  277. KC_PLUS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_UNDS,
  278. __LYB__, KC_AMPR, KC_PIPE, KC_LCBR, KC_RCBR, KC_MINS, KC_MINS, XXXXXXX, XXXXXXX, KC_LCBR, KC_RCBR, KC_PIPE,
  279. KC_DQUO, KC_SLSH, KC_ASTR, KC_LPRN, KC_RPRN, KC_PLUS, KC_PLUS, XXXXXXX, XXXXXXX, KC_LBRC, KC_RBRC, KC_DQUO,
  280. _______, KC_BSLS, KC_PERC, KC_LBRC, KC_RBRC, KC_EQL, KC_EQL, XXXXXXX, KC_LABK, KC_RABK, KC_QUES, KC_INS,
  281. KC_TILDE, KC_UNDS, KC_CIRC, KC_DEL, __LYB__, KC_SPC, KC_SPC, KC_ENT, XXXXXXX, KC_LBRC, KC_RBRC, LLSWIT
  282. ),
  283. /* Extra Layer
  284. * ,-----------------------------------------------------------------------------------.
  285. * | ESC | | | | | | SCLK | | | | | |
  286. * |------+------+------+------+------+------+------+------+------+------+------+------|
  287. * | Tab | | | | | | | | | | | Del |
  288. * |------+------+------+------+------+-------------+------+------+------+------+------|
  289. * | Caps | | | | | | | | | | | |
  290. * |------+------+------+------+------+------|------+------+------+------+------+------|
  291. * | | | | | | | | | MRC1 | MRC2 | MRSP | |
  292. * |------+------+------+------+------+------+------+------+------+------+------+------|
  293. * | CTRL | ALT | CMD | Del | Bksp | Space | !!!! | | MPL1 | MPL2 |LY_SW |
  294. * `-----------------------------------------------------------------------------------'
  295. */
  296. [_EXTRA] = LAYOUT_preonic_grid( \
  297. KC_ESC, _______, _______, _______, _______, KC_SLCK, _______, _______, _______, _______, _______, _______,
  298. KC_TAB, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL,
  299. KC_CLCK, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  300. _______, _______, _______, _______, _______, _______, _______, _______, _______, DYN_REC_START1, DYN_REC_START2, DYN_REC_STOP,
  301. KC_LCTL, KC_LALT, KC_LGUI, KC_DEL, KC_BSPC, KC_SPC, KC_SPC, __LYB__, _______, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, LLSWIT
  302. ),
  303. /* Numeric Pad
  304. * ,-----------------------------------------------------------------------------------.
  305. * | ESC | XXXX | XXXX | XXXX | XXXX | XXXX | XXXX | NMLK | NUM/ | NUM* | NUM- | XXXX |
  306. * |------+------+------+------+------+------+------+------+------+------+------+------|
  307. * | | Home | Up | End | PGUP | XXXX | XXXX | NUM7 | NUM8 | NUM9 | NUM+ | XXXX |
  308. * |------+------+------+------+------+-------------+------+------+------+------+------|
  309. * | XXXX | Left | Down | Right| PGDWN| XXXX | XXXX | NUM4 | NUM5 | NUM6 | NUM+ | XXXX |
  310. * |------+------+------+------+------+------|------+------+------+------+------+------|
  311. * | | CTRL | ALT | CMD | XXXX | XXXX | XXXX | NUM1 | NUM2 | NUM3 | NENT | Bksp |
  312. * |------+------+------+------+------+------+------+------+------+------+------+------|
  313. * | | XXXX | !!!! | XXXX | Bksp | Space | NUM0 | NUM0 | NUM. | NENT | QMAC |
  314. * `-----------------------------------------------------------------------------------'
  315. */
  316. [_NUM] = LAYOUT_preonic_grid( \
  317. KC_ESC , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, XXXXXXX,
  318. _______, KC_HOME, KC_UP, KC_END, KC_PGUP, XXXXXXX, XXXXXXX, KC_P7, KC_P8, KC_P9, KC_PPLS, XXXXXXX,
  319. KC_DQUO, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, XXXXXXX, XXXXXXX, KC_P4, KC_P5, KC_P6, KC_PPLS, XXXXXXX,
  320. _______, KC_LCTL, KC_LALT, KC_LGUI, XXXXXXX, XXXXXXX, XXXXXXX, KC_P1, KC_P2, KC_P3, KC_PENT, KC_BSPC,
  321. _______, XXXXXXX, __LYB__, XXXXXXX, KC_BSPC, KC_SPC, KC_SPC, KC_P0, KC_P0, KC_PDOT, KC_PENT, LTO_BS
  322. ),
  323. /* NAV
  324. * ,-----------------------------------------------------------------------------------.
  325. * | ESC | | | MOB3 | | | | | | | | |
  326. * |------+------+------+------+------+------+------+------+------+------+------+------|
  327. * | | A | MOB2 | MOUP | MOB1 | MOSU | PGUP | Home | Up | End | | Del |
  328. * |------+------+------+------+------+-------------+------+------+------+------+------|
  329. * | | !!!! | MOLF | MODN | MORT | MOSD | PGDN | Left | Down | Right| !!!! | |
  330. * |------+------+------+------+------+------|------+------+------+------+------+------|
  331. * | | | MOB4 | MOB5 | MOSL | MOSR | MOA2 | MOA0 | MPRV | MPLY | MNXT | |
  332. * |------+------+------+------+------+------+------+------+------+------+------+------|
  333. * | CTRL | ALT | CMD | | Bksp | Space | Enter| VILM | VOLD | VOLU | QMAC |
  334. * `-----------------------------------------------------------------------------------'
  335. */
  336. [_NAV] = LAYOUT_preonic_grid( \
  337. KC_ESC, _______, _______, KC_BTN3, _______, _______, _______, _______, _______, _______, _______, _______,
  338. _______, KC_A, KC_BTN2, KC_MS_U, KC_BTN1, KC_WH_U, KC_PGUP, KC_HOME, KC_UP, KC_END, _______, KC_DEL,
  339. _______, __LYB__, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, __LYB__, _______,
  340. _______, _______, KC_BTN4, KC_BTN5, KC_WH_L, KC_WH_R, KC_ACL2, KC_ACL0, KC_MPRV, KC_MPLY, KC_MNXT, _______,
  341. KC_LCTL, KC_LALT, KC_LGUI, _______, KC_BSPC, KC_SPC, KC_SPC, KC_ENT, KC_MUTE, KC_VOLD, KC_VOLU, LTO_BS
  342. ),
  343. /* One-Handed
  344. * ,-----------------------------------------------------------------------------------.
  345. * | Esc | 6 | 7 | 8 | 9 | 0 | - | XXXX | XXXX | XXXX | XXXX | XXXX |
  346. * |------+------+------+------+------+------+------+------+------+------+------+------|
  347. * | | Y | U | I | O | P | MWL3 | MWFS | MWR3 | MWTL | MWTR | XXXX |
  348. * |------+------+------+------+------+-------------+------+------+------+------+------|
  349. * | | H | J | K | L | : | MWL1 | MWM1 | MWR1 | MWBL | MWBR | XXXX |
  350. * |------+------+------+------+------+------|------+------+------+------+------+------|
  351. * | | N | M | , | . | / | XXXX | XXXX | XXXX | XXXX | XXXX | XXXX |
  352. * |------+------+------+------+------+------+------+------+------+------+------+------|
  353. * | !!!! | Esc | Del | Ent | Bksp | | MWLT | MWBT | MWUP | MWRT |LY_SW |
  354. * `-----------------------------------------------------------------------------------'
  355. */
  356. [_ONEHD] = LAYOUT_preonic_grid( \
  357. KC_ESC , KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  358. _______, KC_Y, KC_U, KC_I, KC_O, KC_P, LMW_L3, LMW_FS, LMW_R3, LMW_TL, LMW_TR, XXXXXXX,
  359. _______, KC_H, KC_J, KC_K, KC_L, KC_SCLN, LMW_L1, LMW_M1, LMW_R1, LMW_BL, LMW_BR, XXXXXXX,
  360. _______, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  361. __LYB__, KC_ESC, KC_DEL, KC_ENT, KC_BSPACE, KC_SPC, KC_SPC, LMW_LT, LMW_BT, LMW_TP, LMW_RT, LLSWIT
  362. ),
  363. /* Layer Switcher
  364. * ,-----------------------------------------------------------------------------------.
  365. * | Esc | XXXX | XXXX | XXXX | XXXX | XXXX | XXXX | XXXX | XXXX | XXXX | XXXX | XXXX |
  366. * |------+------+------+------+------+------+------+------+------+------+------+------|
  367. * |Brite | XXXX | XXXX | XXXX | XXXX | XXXX | XXXX | XXXX | XXXX | XXXX | XXXX | XXXX |
  368. * |------+------+------+------+------+-------------+------+------+------+------+------|
  369. * | XXXX | XXXX | XXXX | XXXX | XXXX | GAME | XXXX | XXXX | XXXX | XXXX | NAV | XXXX |
  370. * |------+------+------+------+------+------|------+------+------+------+------+------|
  371. * | | XXXX | XXXX | XXXX | XXXX | QMAC | XXXX | MUSC | XXXX | XXXX | XXXX | XXXX |
  372. * |------+------+------+------+------+------+------+------+------+------+------+------|
  373. * | XXXX | XXXX | NUM | XXXX | XXXX | XXXXX | XXXX | XXXX | XXXX | XXXX | !!!! |
  374. * `-----------------------------------------------------------------------------------'
  375. */
  376. [_LYSWT] = LAYOUT_preonic_grid( \
  377. KC_ESC , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  378. BACKLIT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  379. XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TO(_GAMING), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TO(_NAV), XXXXXXX,
  380. XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LTO_BS, XXXXXXX, TO(_MUSIC), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  381. XXXXXXX, XXXXXXX, TO(_NUM), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______
  382. ) //, //Don't forget to add the comma if going to add more layers here
  383. };
  384. static uint16_t key_timer;
  385. static uint16_t timer_thresh = 200;
  386. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  387. // For dynamic macros
  388. if (!process_record_dynamic_macro(keycode, record)) {
  389. // Play sound on Macro stop
  390. #ifdef AUDIO_ENABLE
  391. switch (keycode) {
  392. case DYN_REC_STOP:
  393. if (record->event.pressed) {
  394. PLAY_SONG(tone_macro_record_stop);
  395. }
  396. return false;
  397. break;
  398. }
  399. #endif
  400. return false;
  401. }
  402. switch (keycode) {
  403. case QWERTY:
  404. if (record->event.pressed) {
  405. set_single_persistent_default_layer(_QWERTY_MAC);
  406. }
  407. return false;
  408. break;
  409. case QWWIN:
  410. if (record->event.pressed) {
  411. set_single_persistent_default_layer(_QWERTY_WIN);
  412. }
  413. return false;
  414. break;
  415. // Reinstate these cases if COLEMAK, DVORAK are included in the layouts
  416. /*case COLEMAK:
  417. if (record->event.pressed) {
  418. set_single_persistent_default_layer(_COLEMAK);
  419. }
  420. return false;
  421. break;
  422. case DVORAK:
  423. if (record->event.pressed) {
  424. set_single_persistent_default_layer(_DVORAK);
  425. }
  426. return false;
  427. break;
  428. */
  429. case LOWER:
  430. if (record->event.pressed) {
  431. key_timer = timer_read(); // For Backspace on tap
  432. layer_on(_LOWER);
  433. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  434. } else {
  435. // Backspace on tap
  436. if (timer_elapsed(key_timer) < timer_thresh) {
  437. tap_code(KC_BSPC);
  438. }
  439. layer_off(_LOWER);
  440. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  441. }
  442. return false;
  443. break;
  444. case RAISE:
  445. if (record->event.pressed) {
  446. key_timer = timer_read(); // For Backspace on tap
  447. layer_on(_RAISE);
  448. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  449. } else {
  450. // Backspace on tap
  451. if (timer_elapsed(key_timer) < timer_thresh) {
  452. tap_code(KC_BSPC);
  453. }
  454. layer_off(_RAISE);
  455. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  456. }
  457. return false;
  458. break;
  459. case BACKLIT:
  460. if (record->event.pressed) {
  461. register_code(KC_RSFT);
  462. #ifdef BACKLIGHT_ENABLE
  463. backlight_step();
  464. #endif
  465. #ifdef __AVR__
  466. PORTE &= ~(1 << 6);
  467. #endif
  468. } else {
  469. unregister_code(KC_RSFT);
  470. #ifdef __AVR__
  471. PORTE |= (1 << 6);
  472. #endif
  473. }
  474. return false;
  475. break;
  476. #ifdef AUDIO_ENABLE
  477. // Play sound on Macro record start
  478. case DYN_REC_START1:
  479. if (record->event.pressed) {
  480. PLAY_SONG(tone_macro1_record);
  481. }
  482. return false;
  483. break;
  484. case DYN_REC_START2:
  485. if (record->event.pressed) {
  486. PLAY_SONG(tone_macro2_record);
  487. }
  488. return false;
  489. break;
  490. #endif
  491. }
  492. return true;
  493. };
  494. bool muse_mode = false;
  495. uint8_t last_muse_note = 0;
  496. uint16_t muse_counter = 0;
  497. uint8_t muse_offset = 70;
  498. uint16_t muse_tempo = 50;
  499. void encoder_update_user(uint8_t index, bool clockwise) {
  500. if (muse_mode) {
  501. if (IS_LAYER_ON(_RAISE)) {
  502. if (clockwise) {
  503. muse_offset++;
  504. } else {
  505. muse_offset--;
  506. }
  507. } else {
  508. if (clockwise) {
  509. muse_tempo += 1;
  510. } else {
  511. muse_tempo -= 1;
  512. }
  513. }
  514. } else {
  515. if (clockwise) {
  516. tap_code(KC_PGDN);
  517. } else {
  518. tap_code(KC_PGUP);
  519. }
  520. }
  521. }
  522. void dip_switch_update_user(uint8_t index, bool active) {
  523. switch (index) {
  524. case 0:
  525. if (active) {
  526. layer_on(_ADJUST);
  527. } else {
  528. layer_off(_ADJUST);
  529. }
  530. break;
  531. case 1:
  532. if (active) {
  533. muse_mode = true;
  534. } else {
  535. muse_mode = false;
  536. }
  537. }
  538. }
  539. void matrix_scan_user(void) {
  540. #ifdef AUDIO_ENABLE
  541. if (muse_mode) {
  542. if (muse_counter == 0) {
  543. uint8_t muse_note = muse_offset + SCALE[muse_clock_pulse()];
  544. if (muse_note != last_muse_note) {
  545. stop_note(compute_freq_for_midi_note(last_muse_note));
  546. play_note(compute_freq_for_midi_note(muse_note), 0xF);
  547. last_muse_note = muse_note;
  548. }
  549. }
  550. muse_counter = (muse_counter + 1) % muse_tempo;
  551. } else {
  552. if (muse_counter) {
  553. stop_all_notes();
  554. muse_counter = 0;
  555. }
  556. }
  557. #endif
  558. }
  559. bool music_mask_user(uint16_t keycode) {
  560. switch (keycode) {
  561. case RAISE:
  562. case LOWER:
  563. return false;
  564. default:
  565. return true;
  566. }
  567. }