2
0

keymap.c 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680
  1. // This is the canonical layout file for the Quantum project. If you want to add another keyboard,
  2. // this is the style you want to emulate.
  3. #include "planck.h"
  4. #include "action_layer.h"
  5. #ifdef AUDIO_ENABLE
  6. #include "audio.h"
  7. #include "musical_notes.h"
  8. #endif
  9. #include "eeconfig.h"
  10. #include "process_unicode.h"
  11. #include "quantum.h"
  12. // #define TOLELOT_ENABLE
  13. extern keymap_config_t keymap_config;
  14. enum layers {
  15. _QWERTY,
  16. _COLEMAK,
  17. _WORKMAN,
  18. _PUNC,
  19. _NUM,
  20. _FUNC,
  21. _EMOJI,
  22. _GREEKU,
  23. _GREEKL,
  24. _GUI,
  25. };
  26. enum planck_keycodes {
  27. // layouts
  28. QWERTY = SAFE_RANGE,
  29. COLEMAK,
  30. WORKMAN,
  31. // layer switchers
  32. PUNC,
  33. NUM,
  34. FUNC,
  35. EMOJI,
  36. GUI,
  37. GREEK,
  38. // os switchers
  39. LINUX,
  40. WIN,
  41. OSX,
  42. };
  43. // Fillers to make layering clearer
  44. #define _______ KC_TRNS
  45. #define XXXXXXX KC_NO
  46. // unicode map
  47. enum unicode_name {
  48. GRIN, // grinning face 😊
  49. TJOY, // tears of joy 😂
  50. SMILE, // grining face with smiling eyes 😁
  51. HEART, // heart ❤
  52. EYERT, // smiling face with heart shaped eyes 😍
  53. CRY, // crying face 😭
  54. SMEYE, // smiling face with smiling eyes 😊
  55. UNAMU, // unamused 😒
  56. KISS, // kiss 😘
  57. HART2, // two hearts 💕
  58. WEARY, // weary 😩
  59. OKHND, // ok hand sign 👌
  60. PENSV, // pensive 😔
  61. SMIRK, // smirk 😏
  62. RECYC, // recycle ♻
  63. WINK, // wink 😉
  64. THMUP, // thumb up 👍
  65. THMDN, // thumb down 👎
  66. PRAY, // pray 🙏
  67. PHEW, // relieved 😌
  68. MUSIC, // musical notes
  69. FLUSH, // flushed 😳
  70. CELEB, // celebration 🙌
  71. CRY2, // crying face 😢
  72. COOL, // smile with sunglasses 😎
  73. NOEVS, // see no evil
  74. NOEVH, // hear no evil
  75. NOEVK, // speak no evil
  76. POO, // pile of poo
  77. EYES, // eyes
  78. VIC, // victory hand
  79. BHART, // broken heart
  80. SLEEP, // sleeping face
  81. SMIL2, // smiling face with open mouth & sweat
  82. HUNRD, // 100
  83. CONFU, // confused
  84. TONGU, // face with tongue & winking eye
  85. DISAP, // disappointed
  86. YUMMY, // face savoring delicious food
  87. CLAP, // hand clapping
  88. FEAR, // face screaming in fear
  89. HORNS, // smiling face with horns
  90. HALO, // smiling face with halo
  91. BYE, // waving hand
  92. SUN, // sun
  93. MOON, // moon
  94. SKULL, // skull
  95. // greek letters
  96. UALPH,
  97. UBETA,
  98. UGAMM,
  99. UDELT,
  100. UEPSI,
  101. UZETA,
  102. UETA,
  103. UTHET,
  104. UIOTA,
  105. UKAPP,
  106. ULAMB,
  107. UMU,
  108. UNU,
  109. UXI,
  110. UOMIC,
  111. UPI,
  112. URHO,
  113. USIGM,
  114. UTAU,
  115. UUPSI,
  116. UPHI,
  117. UCHI,
  118. UPSI,
  119. UOMEG,
  120. LALPH,
  121. LBETA,
  122. LGAMM,
  123. LDELT,
  124. LEPSI,
  125. LZETA,
  126. LETA,
  127. LTHET,
  128. LIOTA,
  129. LKAPP,
  130. LLAMB,
  131. LMU,
  132. LNU,
  133. LXI,
  134. LOMIC,
  135. LPI,
  136. LRHO,
  137. LSIGM,
  138. LTAU,
  139. LUPSI,
  140. LPHI,
  141. LCHI,
  142. LPSI,
  143. LOMEG,
  144. FSIGM,
  145. };
  146. const uint32_t PROGMEM unicode_map[] = {
  147. [GRIN] = 0x1F600,
  148. [TJOY] = 0x1F602,
  149. [SMILE] = 0x1F601,
  150. [HEART] = 0x2764,
  151. [EYERT] = 0x1f60d,
  152. [CRY] = 0x1f62d,
  153. [SMEYE] = 0x1F60A,
  154. [UNAMU] = 0x1F612,
  155. [KISS] = 0x1F618,
  156. [HART2] = 0x1F495,
  157. [WEARY] = 0x1F629,
  158. [OKHND] = 0x1F44C,
  159. [PENSV] = 0x1F614,
  160. [SMIRK] = 0x1F60F,
  161. [RECYC] = 0x267B,
  162. [WINK] = 0x1F609,
  163. [THMUP] = 0x1F44D,
  164. [THMDN] = 0x1F44E,
  165. [PRAY] = 0x1F64F,
  166. [PHEW] = 0x1F60C,
  167. [MUSIC] = 0x1F3B6,
  168. [FLUSH] = 0x1F633,
  169. [CELEB] = 0x1F64C,
  170. [CRY2] = 0x1F622,
  171. [COOL] = 0x1F60E,
  172. [NOEVS] = 0x1F648,
  173. [NOEVH] = 0x1F649,
  174. [NOEVK] = 0x1F64A,
  175. [POO] = 0x1F4A9,
  176. [EYES] = 0x1F440,
  177. [VIC] = 0x270C,
  178. [BHART] = 0x1F494,
  179. [SLEEP] = 0x1F634,
  180. [SMIL2] = 0x1F605,
  181. [HUNRD] = 0x1F4AF,
  182. [CONFU] = 0x1F615,
  183. [TONGU] = 0x1F61C,
  184. [DISAP] = 0x1F61E,
  185. [YUMMY] = 0x1F60B,
  186. [CLAP] = 0x1F44F,
  187. [FEAR] = 0x1F631,
  188. [HORNS] = 0x1F608,
  189. [HALO] = 0x1F607,
  190. [BYE] = 0x1F44B,
  191. [SUN] = 0x2600,
  192. [MOON] = 0x1F314,
  193. [SKULL] = 0x1F480,
  194. // greek letters
  195. [UALPH] = 0x0391,
  196. [UBETA] = 0x0392,
  197. [UGAMM] = 0x0393,
  198. [UDELT] = 0x0394,
  199. [UEPSI] = 0x0395,
  200. [UZETA] = 0x0396,
  201. [UETA] = 0x0397,
  202. [UTHET] = 0x0398,
  203. [UIOTA] = 0x0399,
  204. [UKAPP] = 0x039A,
  205. [ULAMB] = 0x039B,
  206. [UMU] = 0x039C,
  207. [UNU] = 0x039D,
  208. [UXI] = 0x039E,
  209. [UOMIC] = 0x039F,
  210. [UPI] = 0x03A0,
  211. [URHO] = 0x03A1,
  212. [USIGM] = 0x03A3,
  213. [UTAU] = 0x03A4,
  214. [UUPSI] = 0x03A5,
  215. [UPHI] = 0x03A6,
  216. [UCHI] = 0x03A7,
  217. [UPSI] = 0x03A8,
  218. [UOMEG] = 0x03A9,
  219. [LALPH] = 0x03B1,
  220. [LBETA] = 0x03B2,
  221. [LGAMM] = 0x03B3,
  222. [LDELT] = 0x03B4,
  223. [LEPSI] = 0x03B5,
  224. [LZETA] = 0x03B6,
  225. [LETA] = 0x03B7,
  226. [LTHET] = 0x03B8,
  227. [LIOTA] = 0x03B9,
  228. [LKAPP] = 0x03BA,
  229. [LLAMB] = 0x03BB,
  230. [LMU] = 0x03BC,
  231. [LNU] = 0x03BD,
  232. [LXI] = 0x03BE,
  233. [LOMIC] = 0x03BF,
  234. [LPI] = 0x03C0,
  235. [LRHO] = 0x03C1,
  236. [LSIGM] = 0x03C3,
  237. [LTAU] = 0x03C4,
  238. [LUPSI] = 0x03C5,
  239. [LPHI] = 0x03C6,
  240. [LCHI] = 0x03C7,
  241. [LPSI] = 0x03C8,
  242. [LOMEG] = 0x03C9,
  243. [FSIGM] = 0x03C2,
  244. };
  245. // hybrid shift - =
  246. // #undef KC_LSFT
  247. // #define KC_LSFT MT(MOD_LSFT, KC_MINS)
  248. // #undef KC_RSFT
  249. // #define KC_RSFT MT(MOD_LSFT, KC_EQL)
  250. // hybrid right-gui & scroll lock (mapped to Compose in OS)
  251. #undef KC_RCTL
  252. #define KC_RCTL MT(MOD_LCTL, KC_SLCK)
  253. // keymaps
  254. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  255. /* Qwerty
  256. * ,-----------------------------------------------------------------------------------.
  257. * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
  258. * |------+------+------+------+------+-------------+------+------+------+------+------|
  259. * | Esc | A | S | D | F | G | H | J | K | L | ; |Enter |
  260. * |------+------+------+------+------+------|------+------+------+------+------+------|
  261. * | Shift| Z | X | C | V | B | N | M | , | . | / |Shift |
  262. * |------+------+------+------+------+------+------+------+------+------+------+------|
  263. * | Ctrl | GUI | Alt | Punc | Num | Space | Func |Emoji |Greek |AltGr | Ctrl |
  264. * `-----------------------------------------------------------------------------------'
  265. */
  266. [_QWERTY] = {
  267. {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
  268. {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT },
  269. {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT},
  270. {KC_LCTL, KC_LALT, KC_LGUI, PUNC, NUM, KC_SPC, KC_SPC, FUNC, EMOJI, GREEK, KC_RALT, KC_RCTL}
  271. },
  272. /* Colemak
  273. * ,-----------------------------------------------------------------------------------.
  274. * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
  275. * |------+------+------+------+------+-------------+------+------+------+------+------|
  276. * | Esc | A | R | S | T | D | H | N | E | I | O |Enter |
  277. * |------+------+------+------+------+------|------+------+------+------+------+------|
  278. * | Shift| Z | X | C | V | B | K | M | , | . | / |Shift |
  279. * |------+------+------+------+------+------+------+------+------+------+------+------|
  280. * | Ctrl | GUI | Alt | Punc | Num | Space | Func |Emoji |AltGr | GUI | Ctrl |
  281. * `-----------------------------------------------------------------------------------'
  282. */
  283. [_COLEMAK] = {
  284. {_______, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_QUOT, _______},
  285. {_______, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, _______},
  286. {_______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______},
  287. {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
  288. },
  289. /* Workman
  290. * ,-----------------------------------------------------------------------------------.
  291. * | Tab | Q | D | R | W | B | J | F | U | P | ; | Bksp |
  292. * |------+------+------+------+------+-------------+------+------+------+------+------|
  293. * | Esc | A | S | H | T | G | Y | N | E | O | I |Enter |
  294. * |------+------+------+------+------+------|------+------+------+------+------+------|
  295. * | Shift| Z | X | M | C | V | K | K | , | . | / |Shift |
  296. * |------+------+------+------+------+------+------+------+------+------+------+------|
  297. * | Ctrl | GUI | Alt | Punc | Num | Space | Func |Emoji |AltGr | GUI | Ctrl |
  298. * `-----------------------------------------------------------------------------------'
  299. */
  300. [_WORKMAN] = {
  301. {_______, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_QUOT, _______},
  302. {_______, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, _______},
  303. {_______, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMM, KC_DOT, KC_SLSH, _______},
  304. {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
  305. },
  306. /* Uppercase Greek
  307. * ,-----------------------------------------------------------------------------------.
  308. * | | | | | | | | | | | | |
  309. * |------+------+------+------+------+-------------+------+------+------+------+------|
  310. * | | | | | | | | | | | | |
  311. * |------+------+------+------+------+------+------+------+------+------+------+------|
  312. * | | | | | | | | | | | | |
  313. * |------+------+------+------+------+------+------+------+------+------+------+------|
  314. * | | | | | | | | | | | | |
  315. * `-----------------------------------------------------------------------------------'
  316. */
  317. [_GREEKU] = {
  318. {_______, _______, _______,X(UEPSI), X(URHO), X(UTAU),X(UUPSI),X(UTHET),X(UIOTA),X(UOMIC), X(UPI), _______},
  319. {_______,X(UALPH),X(USIGM),X(UDELT), X(UPHI),X(UGAMM), X(UETA), X(UXI),X(UKAPP),X(ULAMB), _______, _______},
  320. {_______,X(UZETA), X(UCHI), X(UPSI),X(UOMEG),X(UBETA), X(UNU), X(UMU), _______, _______, _______, _______},
  321. {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
  322. },
  323. /* Lowercase Greek
  324. * ,-----------------------------------------------------------------------------------.
  325. * | | | | | | | | | | | | |
  326. * |------+------+------+------+------+-------------+------+------+------+------+------|
  327. * | | | | | | | | | | | | |
  328. * |------+------+------+------+------+------+------+------+------+------+------+------|
  329. * | | | | | | | | | | | | |
  330. * |------+------+------+------+------+------+------+------+------+------+------+------|
  331. * | | | | | | | | | | | | |
  332. * `-----------------------------------------------------------------------------------'
  333. */
  334. [_GREEKL] = {
  335. {_______, _______,X(FSIGM),X(LEPSI), X(LRHO), X(LTAU),X(LUPSI),X(LTHET),X(LIOTA),X(LOMIC), X(LPI), _______},
  336. {_______,X(LALPH),X(LSIGM),X(LDELT), X(LPHI),X(LGAMM), X(LETA), X(LXI),X(LKAPP),X(LLAMB), _______, _______},
  337. {_______,X(LZETA), X(LCHI), X(LPSI),X(LOMEG),X(LBETA), X(LNU), X(LMU), _______, _______, _______, _______},
  338. {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
  339. },
  340. /* Punc
  341. * ,-----------------------------------------------------------------------------------.
  342. * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | ` |
  343. * |------+------+------+------+------+-------------+------+------+------+------+------|
  344. * | | | \ | - | = | < | > | ( | ) | ' | | |
  345. * |------+------+------+------+------+------|------+------+------+------+------+------|
  346. * | | | | | _ | + | { | } | [ | ] | " | | |
  347. * |------+------+------+------+------+------+------+------+------+------+------+------|
  348. * | | | | | | | | | | | |
  349. * `-----------------------------------------------------------------------------------'
  350. */
  351. [_PUNC] = {
  352. {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_GRV },
  353. {XXXXXXX, XXXXXXX, KC_BSLS, KC_MINS, KC_EQL, KC_LABK, KC_RABK, KC_LPRN, KC_RPRN, KC_QUOT, XXXXXXX, XXXXXXX},
  354. {XXXXXXX, XXXXXXX, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_DQUO, XXXXXXX, XXXXXXX},
  355. {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
  356. },
  357. /* Num
  358. * ,-----------------------------------------------------------------------------------.
  359. * | ^ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
  360. * |------+------+------+------+------+-------------+------+------+------+------+------|
  361. * | Esc | @ | A | B | C | ( | ) | 4 | 5 | 6 | : |Enter |
  362. * |------+------+------+------+------+------|------+------+------+------+------+------|
  363. * | & | # | D | E | F | [ | ] | 1 | 2 | 3 | / | * |
  364. * |------+------+------+------+------+------+------+------+------+------+------+------|
  365. * | | | | x | | | 0 | , | . | + | - |
  366. * `-----------------------------------------------------------------------------------'
  367. */
  368. [_NUM] = {
  369. {KC_CIRC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
  370. { KC_ESC, KC_AT, S(KC_A), S(KC_B), S(KC_C), KC_LPRN, KC_RPRN, KC_4, KC_5, KC_6, KC_COLN, KC_ENT},
  371. {KC_AMPR, KC_HASH, S(KC_D), S(KC_E), S(KC_F), KC_LBRC, KC_RBRC, KC_1, KC_2, KC_3, KC_SLSH, KC_ASTR},
  372. {_______, _______, _______, KC_X, _______, KC_SPC, KC_SPC, KC_0, KC_COMM, KC_DOT, KC_PLUS, KC_MINS}
  373. },
  374. /* Func
  375. * ,-----------------------------------------------------------------------------------.
  376. * | | F1 | F2 | F3 | F4 | | | PgUp | Up | PgDn | PgUp | Del |
  377. * |------+------+------+------+------+-------------+------+------+------+------+------|
  378. * | | F5 | F6 | F7 | F8 |PrtSc | | Left | Down | Right| PgDn | Ins |
  379. * |------+------+------+------+------+------|------+------+------+------+------+------|
  380. * | | F9 | F10 | F11 | F12 | | | | Home | End | | |
  381. * |------+------+------+------+------+------+------+------+------+------+------+------|
  382. * | | | | | | | | | | | |
  383. * `-----------------------------------------------------------------------------------'
  384. */
  385. [_FUNC] = {
  386. {XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, XXXXXXX, KC_PGUP, KC_UP, KC_PGDN, KC_PGUP, KC_DEL},
  387. {XXXXXXX, KC_F5, KC_F6, KC_F7, KC_F8,KC_PSCREEN,XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_INS},
  388. {_______, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_END, XXXXXXX, _______},
  389. {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
  390. },
  391. /* Emoji
  392. * ,-----------------------------------------------------------------------------------.
  393. * | | | | | | | | | | | | |
  394. * |------+------+------+------+------+-------------+------+------+------+------+------|
  395. * | | | | | | | | | | | | |
  396. * |------+------+------+------+------+------+------+------+------+------+------+------|
  397. * | | | | | | | | | | | | |
  398. * |------+------+------+------+------+------+------+------+------+------+------+------|
  399. * | | | | | | | | | | | | |
  400. * `-----------------------------------------------------------------------------------'
  401. */
  402. [_EMOJI] = {
  403. {X(HART2), X(CRY2),X(WEARY),X(EYERT),X(SMIRK), X(TJOY),X(RECYC),X(UNAMU),X(MUSIC),X(OKHND),X(PENSV), X(PHEW)},
  404. {X(THMUP), X(PRAY),X(SMILE),X(SMIL2),X(FLUSH), X(GRIN),X(HEART), X(BYE), X(KISS),X(CELEB), X(COOL),X(NOEVS)},
  405. {X(THMDN),X(SLEEP), X(CLAP), X(CRY), X(VIC),X(BHART), X(SUN),X(SMEYE), X(WINK), X(MOON),X(CONFU),X(NOEVH)},
  406. { X(POO), X(EYES),X(HUNRD), _______,X(SKULL),X(HORNS), X(HALO), X(FEAR), _______,X(YUMMY),X(DISAP),X(NOEVK)}
  407. },
  408. /* GUI
  409. * ,-----------------------------------------------------------------------------------.
  410. * | | D1 | D2 | D3 | D4 | D5 | D6 | D7 | D8 | D9 | D10 | |
  411. * |------+------+------+------+------+-------------+------+------+------+------+------|
  412. * |Linux | | Vol- | Mute | Vol+ | | | D- | | D+ | |Qwerty|
  413. * |------+------+------+------+------+------+------+------+------+------+------+------|
  414. * | Win | | Prev | Play | Next | | | | | | |Colmak|
  415. * |------+------+------+------+------+------+------+------+------+------+------+------|
  416. * | OSX | | | | | BL- | BL+ | | | | |Workmn|
  417. * `-----------------------------------------------------------------------------------'
  418. */
  419. [_GUI] = {
  420. {_______, LGUI(KC_1),LGUI(KC_2),LGUI(KC_3),LGUI(KC_4),LGUI(KC_5),LGUI(KC_6),LGUI(KC_7),LGUI(KC_8),LGUI(KC_9),LGUI(KC_0), _______},
  421. { LINUX, _______, KC_VOLD, KC_MUTE, KC_VOLU,_______,_______,KC_WWW_BACK,_______,KC_WWW_FORWARD,_______, QWERTY},
  422. { WIN, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, _______, _______, _______, _______, COLEMAK},
  423. { OSX, _______, _______, _______, _______, BL_DEC, BL_INC, _______, _______, _______, _______, WORKMAN}
  424. },
  425. };
  426. #ifdef AUDIO_ENABLE
  427. float tone_startup[][2] = SONG(STARTUP_SOUND);
  428. float tone_qwerty[][2] = SONG(QWERTY_SOUND);
  429. float tone_colemak[][2] = SONG(COLEMAK_SOUND);
  430. float tone_workman[][2] = SONG(DVORAK_SOUND);
  431. float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
  432. float tone_linux[][2] = SONG(CAPS_LOCK_ON_SOUND);
  433. float tone_windows[][2] = SONG(SCROLL_LOCK_ON_SOUND);
  434. float tone_osx[][2] = SONG(NUM_LOCK_ON_SOUND);
  435. float tone_click[][2] = SONG(MUSICAL_NOTE(_F3, 2));
  436. float tone_release[][2] = SONG(MUSICAL_NOTE(_A3, 2));
  437. float tone_tolelot[][2] = SONG(Q__NOTE(_E5), Q__NOTE(_C5), Q__NOTE(_D5));
  438. #endif
  439. void persistant_default_layer_set(uint16_t default_layer) {
  440. eeconfig_update_default_layer(default_layer);
  441. default_layer_set(default_layer);
  442. }
  443. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  444. // faux clicky
  445. // if (record->event.pressed) PLAY_NOTE_ARRAY(tone_click, false, 0);
  446. #ifdef AUDIO_ENABLE
  447. #ifdef TOLELOT_ENABLE
  448. if (record->event.pressed) {
  449. PLAY_NOTE_ARRAY(tone_tolelot, false, 0);
  450. }
  451. #else
  452. if (record->event.pressed) {
  453. PLAY_NOTE_ARRAY(tone_click, false, 0);
  454. } else {
  455. PLAY_NOTE_ARRAY(tone_release, false, 0);
  456. }
  457. #endif
  458. #endif
  459. bool lshifted = keyboard_report->mods & MOD_BIT(KC_LSFT);
  460. bool rshifted = keyboard_report->mods & MOD_BIT(KC_RSFT);
  461. switch (keycode) {
  462. // Greek layer handling
  463. case GREEK:
  464. if (record->event.pressed) {
  465. if (lshifted || rshifted) {
  466. layer_on(_GREEKU);
  467. layer_off(_GREEKL);
  468. } else {
  469. layer_on(_GREEKL);
  470. layer_off(_GREEKU);
  471. }
  472. } else {
  473. layer_off(_GREEKU);
  474. layer_off(_GREEKL);
  475. }
  476. return false;
  477. break;
  478. case KC_LSFT:
  479. case KC_RSFT:
  480. ;
  481. uint8_t layer = biton32(layer_state);
  482. if (layer == _GREEKU || layer == _GREEKL) {
  483. if (record->event.pressed) {
  484. layer_on(_GREEKU);
  485. layer_off(_GREEKL);
  486. } else {
  487. if (lshifted ^ rshifted) { // if only one shift is pressed
  488. layer_on(_GREEKL);
  489. layer_off(_GREEKU);
  490. }
  491. }
  492. }
  493. return true;
  494. break;
  495. // QWERTZ style comma and dot: semicolon and colon when shifted
  496. case KC_COMM:
  497. if (record->event.pressed) {
  498. if (lshifted || rshifted) {
  499. if (lshifted) unregister_code(KC_LSFT);
  500. if (rshifted) unregister_code(KC_RSFT);
  501. register_code(KC_SCLN);
  502. unregister_code(KC_SCLN);
  503. if (lshifted) register_code(KC_LSFT);
  504. if (rshifted) register_code(KC_RSFT);
  505. } else {
  506. register_code(KC_COMM);
  507. unregister_code(KC_COMM);
  508. }
  509. }
  510. return false;
  511. break;
  512. case KC_DOT:
  513. if (record->event.pressed) {
  514. if ((keyboard_report->mods & MOD_BIT(KC_LSFT)) || (keyboard_report->mods & MOD_BIT(KC_RSFT))) {
  515. register_code(KC_SCLN);
  516. unregister_code(KC_SCLN);
  517. } else {
  518. register_code(KC_DOT);
  519. unregister_code(KC_DOT);
  520. }
  521. }
  522. return false;
  523. break;
  524. // layout switcher
  525. case QWERTY:
  526. if (record->event.pressed) {
  527. #ifdef AUDIO_ENABLE
  528. PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
  529. #endif
  530. persistant_default_layer_set(1UL<<_QWERTY);
  531. }
  532. return false;
  533. break;
  534. case COLEMAK:
  535. if (record->event.pressed) {
  536. #ifdef AUDIO_ENABLE
  537. PLAY_NOTE_ARRAY(tone_colemak, false, 0);
  538. #endif
  539. persistant_default_layer_set(1UL<<_COLEMAK);
  540. }
  541. return false;
  542. break;
  543. case WORKMAN:
  544. if (record->event.pressed) {
  545. #ifdef AUDIO_ENABLE
  546. PLAY_NOTE_ARRAY(tone_workman, false, 0);
  547. #endif
  548. persistant_default_layer_set(1UL<<_WORKMAN);
  549. }
  550. return false;
  551. break;
  552. // layer switchers
  553. case PUNC:
  554. if (record->event.pressed) {
  555. layer_on(_PUNC);
  556. update_tri_layer(_PUNC, _EMOJI, _GUI);
  557. } else {
  558. layer_off(_PUNC);
  559. update_tri_layer(_PUNC, _EMOJI, _GUI);
  560. }
  561. return false;
  562. break;
  563. case EMOJI:
  564. if (record->event.pressed) {
  565. layer_on(_EMOJI);
  566. update_tri_layer(_PUNC, _EMOJI, _GUI);
  567. } else {
  568. layer_off(_EMOJI);
  569. update_tri_layer(_PUNC, _EMOJI, _GUI);
  570. }
  571. return false;
  572. break;
  573. case NUM:
  574. if (record->event.pressed) {
  575. layer_on(_NUM);
  576. } else {
  577. layer_off(_NUM);
  578. }
  579. return false;
  580. break;
  581. case FUNC:
  582. if (record->event.pressed) {
  583. layer_on(_FUNC);
  584. } else {
  585. layer_off(_FUNC);
  586. }
  587. return false;
  588. break;
  589. // OS switchers
  590. case LINUX:
  591. set_unicode_input_mode(UC_LNX);
  592. #ifdef AUDIO_ENABLE
  593. PLAY_NOTE_ARRAY(tone_linux, false, 0);
  594. #endif
  595. return false;
  596. break;
  597. case WIN:
  598. set_unicode_input_mode(UC_WINC);
  599. #ifdef AUDIO_ENABLE
  600. PLAY_NOTE_ARRAY(tone_windows, false, 0);
  601. #endif
  602. return false;
  603. break;
  604. case OSX:
  605. set_unicode_input_mode(UC_OSX);
  606. #ifdef AUDIO_ENABLE
  607. PLAY_NOTE_ARRAY(tone_osx, false, 0);
  608. #endif
  609. return false;
  610. break;
  611. }
  612. return true;
  613. }
  614. void matrix_init_user(void) {
  615. #ifdef AUDIO_ENABLE
  616. startup_user();
  617. #endif
  618. set_unicode_input_mode(UC_LNX);
  619. }
  620. #ifdef AUDIO_ENABLE
  621. void startup_user()
  622. {
  623. _delay_ms(20); // gets rid of tick
  624. PLAY_NOTE_ARRAY(tone_startup, false, 0);
  625. }
  626. void shutdown_user()
  627. {
  628. PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
  629. _delay_ms(150);
  630. stop_all_notes();
  631. }
  632. #endif