keymap.c 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725
  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 "promethium.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. #include "rgbsps.h"
  13. #define COUNT(x) (sizeof (x) / sizeof (*(x)))
  14. // #define RGBLED_NUM 5
  15. // struct cRGB led[RGBLED_NUM];
  16. extern keymap_config_t keymap_config;
  17. enum layers {
  18. _QWERTY,
  19. _COLEMAK,
  20. _WORKMAN,
  21. _PUNC,
  22. _NUM,
  23. _FUNC,
  24. _EMOJI,
  25. _GUI,
  26. };
  27. enum planck_keycodes {
  28. // layouts
  29. QWERTY = SAFE_RANGE,
  30. COLEMAK,
  31. WORKMAN,
  32. // layer switchers
  33. PUNC,
  34. NUM,
  35. FUNC,
  36. EMOJI,
  37. GUI,
  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. };
  96. const uint32_t PROGMEM unicode_map[] = {
  97. [GRIN] = 0x1F600,
  98. [TJOY] = 0x1F602,
  99. [SMILE] = 0x1F601,
  100. [HEART] = 0x2764,
  101. [EYERT] = 0x1f60d,
  102. [CRY] = 0x1f62d,
  103. [SMEYE] = 0x1F60A,
  104. [UNAMU] = 0x1F612,
  105. [KISS] = 0x1F618,
  106. [HART2] = 0x1F495,
  107. [WEARY] = 0x1F629,
  108. [OKHND] = 0x1F44C,
  109. [PENSV] = 0x1F614,
  110. [SMIRK] = 0x1F60F,
  111. [RECYC] = 0x267B,
  112. [WINK] = 0x1F609,
  113. [THMUP] = 0x1F44D,
  114. [THMDN] = 0x1F44E,
  115. [PRAY] = 0x1F64F,
  116. [PHEW] = 0x1F60C,
  117. [MUSIC] = 0x1F3B6,
  118. [FLUSH] = 0x1F633,
  119. [CELEB] = 0x1F64C,
  120. [CRY2] = 0x1F622,
  121. [COOL] = 0x1F60E,
  122. [NOEVS] = 0x1F648,
  123. [NOEVH] = 0x1F649,
  124. [NOEVK] = 0x1F64A,
  125. [POO] = 0x1F4A9,
  126. [EYES] = 0x1F440,
  127. [VIC] = 0x270C,
  128. [BHART] = 0x1F494,
  129. [SLEEP] = 0x1F634,
  130. [SMIL2] = 0x1F605,
  131. [HUNRD] = 0x1F4AF,
  132. [CONFU] = 0x1F615,
  133. [TONGU] = 0x1F61C,
  134. [DISAP] = 0x1F61E,
  135. [YUMMY] = 0x1F60B,
  136. [CLAP] = 0x1F44F,
  137. [FEAR] = 0x1F631,
  138. [HORNS] = 0x1F608,
  139. [HALO] = 0x1F607,
  140. [BYE] = 0x1F44B,
  141. [SUN] = 0x2600,
  142. [MOON] = 0x1F314,
  143. [SKULL] = 0x1F480,
  144. };
  145. // hybrid shift - =
  146. // #undef KC_LSFT
  147. // #define KC_LSFT MT(MOD_LSFT, KC_MINS)
  148. // #undef KC_RSFT
  149. // #define KC_RSFT MT(MOD_LSFT, KC_EQL)
  150. // hybrid right-gui & scroll lock (mapped to Compose in OS)
  151. #undef KC_RCTL
  152. #define KC_RCTL MT(MOD_LCTL, KC_SLCK)
  153. // RGBSPS
  154. const uint8_t PROGMEM LED_ALNUM[] = {
  155. LED_Z,
  156. LED_A,
  157. LED_Q,
  158. LED_W,
  159. LED_S,
  160. LED_X,
  161. LED_C,
  162. LED_D,
  163. LED_E,
  164. LED_R,
  165. LED_F,
  166. LED_V,
  167. LED_B,
  168. LED_G,
  169. LED_T,
  170. LED_N,
  171. LED_HH,
  172. LED_Y,
  173. LED_U,
  174. LED_J,
  175. LED_M,
  176. LED_COMM,
  177. LED_K,
  178. LED_I,
  179. LED_O,
  180. LED_L,
  181. LED_DOT,
  182. LED_SLSH,
  183. LED_SCLN,
  184. LED_P,
  185. LED_LSPC,
  186. LED_RSPC
  187. };
  188. const uint8_t PROGMEM LED_MODS[] = {
  189. LED_TAB,
  190. LED_ESC,
  191. LED_LSFT,
  192. LED_LCTL,
  193. LED_LGUI,
  194. LED_LALT,
  195. LED_RALT,
  196. LED_RGUI,
  197. LED_BKSP,
  198. LED_ENT,
  199. LED_RSFT,
  200. LED_RCTL
  201. };
  202. const uint8_t PROGMEM LED_FN[] = {
  203. LED_PUNC,
  204. LED_NUM,
  205. LED_FUNC,
  206. LED_EMOJI
  207. };
  208. const uint8_t PROGMEM LED_INDICATORS[] = {
  209. LED_IND_EMOJI,
  210. LED_IND_NUM,
  211. LED_IND_FUNC,
  212. LED_IND_BATTERY,
  213. LED_IND_USB,
  214. LED_IND_BLUETOOTH,
  215. };
  216. const uint8_t PROGMEM LED_TRACKPOINT[] = {
  217. LED_TRACKPOINT1,
  218. LED_TRACKPOINT2,
  219. LED_TRACKPOINT3,
  220. };
  221. void led_reset(void) {
  222. for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) {
  223. rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), 15, 6, 0);
  224. }
  225. for(uint8_t i = 0; i < COUNT(LED_MODS); i++) {
  226. rgbsps_set(pgm_read_byte(&LED_MODS[i]), 15, 0, 0);
  227. }
  228. for(uint8_t i = 0; i < COUNT(LED_FN); i++) {
  229. rgbsps_set(pgm_read_byte(&LED_FN[i]), 15, 15, 15);
  230. }
  231. }
  232. void led_layer_normal(void) {
  233. rgbsps_set(LED_IND_FUNC, 0, 0, 0);
  234. rgbsps_set(LED_IND_NUM, 0, 0, 0);
  235. rgbsps_set(LED_IND_EMOJI, 0, 0, 0);
  236. led_reset();
  237. rgbsps_send();
  238. }
  239. void led_layer_func(void) {
  240. rgbsps_set(LED_IND_FUNC, 0, 15, 0);
  241. rgbsps_set(LED_IND_NUM, 0, 0, 0);
  242. rgbsps_set(LED_IND_EMOJI, 0, 0, 0);
  243. led_reset();
  244. for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) {
  245. rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), 0, 0, 0);
  246. }
  247. rgbsps_set(LED_I, 15, 0, 15);
  248. rgbsps_set(LED_J, 15, 0, 15);
  249. rgbsps_set(LED_K, 15, 0, 15);
  250. rgbsps_set(LED_L, 15, 0, 15);
  251. rgbsps_set(LED_U, 15, 0, 10);
  252. rgbsps_set(LED_O, 15, 0, 10);
  253. rgbsps_set(LED_COMM, 15, 0, 10);
  254. rgbsps_set(LED_DOT, 15, 0, 10);
  255. rgbsps_set(LED_SCLN, 15, 0, 10);
  256. rgbsps_set(LED_P, 15, 0, 10);
  257. rgbsps_set(LED_Q, 10, 0, 15);
  258. rgbsps_set(LED_W, 10, 0, 15);
  259. rgbsps_set(LED_E, 10, 0, 15);
  260. rgbsps_set(LED_R, 10, 0, 15);
  261. rgbsps_set(LED_A, 10, 0, 15);
  262. rgbsps_set(LED_S, 10, 0, 15);
  263. rgbsps_set(LED_D, 10, 0, 15);
  264. rgbsps_set(LED_F, 10, 0, 15);
  265. rgbsps_set(LED_Z, 10, 0, 15);
  266. rgbsps_set(LED_X, 10, 0, 15);
  267. rgbsps_set(LED_C, 10, 0, 15);
  268. rgbsps_set(LED_V, 10, 0, 15);
  269. rgbsps_send();
  270. }
  271. void led_layer_punc(void) {
  272. rgbsps_set(LED_IND_FUNC, 0, 15, 0);
  273. rgbsps_set(LED_IND_NUM, 0, 0, 15);
  274. rgbsps_set(LED_IND_EMOJI, 0, 0, 0);
  275. led_reset();
  276. rgbsps_send();
  277. }
  278. void led_layer_num(void) {
  279. rgbsps_set(LED_IND_FUNC, 0, 0, 0);
  280. rgbsps_set(LED_IND_NUM, 0, 0, 15);
  281. rgbsps_set(LED_IND_EMOJI, 0, 0, 0);
  282. led_reset();
  283. for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) {
  284. rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), 0, 0, 0);
  285. }
  286. rgbsps_set(LED_U, 0, 5, 15);
  287. rgbsps_set(LED_I, 0, 5, 15);
  288. rgbsps_set(LED_O, 0, 5, 15);
  289. rgbsps_set(LED_J, 0, 5, 15);
  290. rgbsps_set(LED_K, 0, 5, 15);
  291. rgbsps_set(LED_L, 0, 5, 15);
  292. rgbsps_set(LED_M, 0, 5, 15);
  293. rgbsps_set(LED_COMM, 0, 5, 15);
  294. rgbsps_set(LED_DOT, 0, 5, 15);
  295. rgbsps_set(LED_FUNC, 0, 5, 15);
  296. rgbsps_set(LED_EMOJI, 0, 10, 15);
  297. rgbsps_set(LED_RALT, 0, 10, 15);
  298. rgbsps_set(LED_Q, 0, 10, 15);
  299. rgbsps_set(LED_W, 0, 10, 15);
  300. rgbsps_set(LED_E, 0, 10, 15);
  301. rgbsps_set(LED_R, 0, 10, 15);
  302. rgbsps_set(LED_T, 0, 10, 15);
  303. rgbsps_set(LED_Y, 0, 10, 15);
  304. rgbsps_set(LED_P, 0, 10, 15);
  305. rgbsps_set(LED_A, 0, 15, 15);
  306. rgbsps_set(LED_S, 0, 15, 15);
  307. rgbsps_set(LED_D, 0, 15, 15);
  308. rgbsps_set(LED_F, 0, 15, 15);
  309. rgbsps_set(LED_Z, 0, 15, 15);
  310. rgbsps_set(LED_X, 0, 15, 15);
  311. rgbsps_set(LED_C, 0, 15, 15);
  312. rgbsps_set(LED_V, 0, 15, 15);
  313. rgbsps_send();
  314. }
  315. void led_layer_emoji(void) {
  316. rgbsps_setall(15, 15, 0);
  317. rgbsps_set(LED_IND_FUNC, 0, 0, 0);
  318. rgbsps_set(LED_IND_NUM, 0, 0, 0);
  319. rgbsps_set(LED_IND_EMOJI, 15, 15, 0);
  320. rgbsps_set(LED_PUNC, 15, 15, 15);
  321. rgbsps_set(LED_EMOJI, 15, 15, 15);
  322. rgbsps_send();
  323. }
  324. void led_layer_gui(void) {
  325. rgbsps_set(LED_IND_FUNC, 15, 10, 15);
  326. rgbsps_set(LED_IND_NUM, 15, 10, 15);
  327. rgbsps_set(LED_IND_EMOJI, 15, 10, 15);
  328. rgbsps_send();
  329. }
  330. void led_init(void) {
  331. // turn off all
  332. rgbsps_turnoff();
  333. // set trackpoint color
  334. rgbsps_set(LED_TRACKPOINT1, 15, 0, 0);
  335. rgbsps_set(LED_TRACKPOINT2, 0, 0, 15);
  336. rgbsps_set(LED_TRACKPOINT3, 15, 0, 0);
  337. // // hardcode indicator for now
  338. rgbsps_set(LED_IND_BLUETOOTH, 0, 0, 15);
  339. rgbsps_set(LED_IND_USB, 15, 15, 15);
  340. rgbsps_set(LED_IND_BATTERY, 0, 15, 0);
  341. led_layer_normal();
  342. }
  343. // keymaps
  344. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  345. /* Qwerty
  346. * ,-----------------------------------------------------------------------------------.
  347. * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
  348. * |------+------+------+------+------+-------------+------+------+------+------+------|
  349. * | Esc | A | S | D | F | G | H | J | K | L | ; |Enter |
  350. * |------+------+------+------+------+------|------+------+------+------+------+------|
  351. * | Shift| Z | X | C | V | B | N | M | , | . | / |Shift |
  352. * |------+------+------+------+------+------+------+------+------+------+------+------|
  353. * | Ctrl | GUI | Alt | Punc | Num | Space | Func |Emoji |AltGr | GUI | Ctrl |
  354. * `-----------------------------------------------------------------------------------'
  355. */
  356. [_QWERTY] = KEYMAP(
  357. KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
  358. KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT ,
  359. KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
  360. KC_LCTL, KC_LGUI, KC_LALT, PUNC, NUM, KC_SPC, KC_SPC, FUNC, EMOJI, KC_RALT, KC_RGUI, KC_RCTL
  361. ),
  362. /* Colemak
  363. * ,-----------------------------------------------------------------------------------.
  364. * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
  365. * |------+------+------+------+------+-------------+------+------+------+------+------|
  366. * | Esc | A | R | S | T | D | H | N | E | I | O |Enter |
  367. * |------+------+------+------+------+------|------+------+------+------+------+------|
  368. * | Shift| Z | X | C | V | B | K | M | , | . | / |Shift |
  369. * |------+------+------+------+------+------+------+------+------+------+------+------|
  370. * | Ctrl | GUI | Alt | Punc | Num | Space | Func |Emoji |AltGr | GUI | Ctrl |
  371. * `-----------------------------------------------------------------------------------'
  372. */
  373. [_COLEMAK] = KEYMAP(
  374. KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
  375. KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_ENT ,
  376. KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
  377. KC_LCTL, KC_LGUI, KC_LALT, PUNC, NUM, KC_SPC, KC_SPC, FUNC, EMOJI, KC_RALT, KC_RGUI, KC_RCTL
  378. ),
  379. /* Workman
  380. * ,-----------------------------------------------------------------------------------.
  381. * | Tab | Q | D | R | W | B | J | F | U | P | ; | Bksp |
  382. * |------+------+------+------+------+-------------+------+------+------+------+------|
  383. * | Esc | A | S | H | T | G | Y | N | E | O | I |Enter |
  384. * |------+------+------+------+------+------|------+------+------+------+------+------|
  385. * | Shift| Z | X | M | C | V | K | K | , | . | / |Shift |
  386. * |------+------+------+------+------+------+------+------+------+------+------+------|
  387. * | Ctrl | GUI | Alt | Punc | Num | Space | Func |Emoji |AltGr | GUI | Ctrl |
  388. * `-----------------------------------------------------------------------------------'
  389. */
  390. [_WORKMAN] = KEYMAP(
  391. KC_TAB, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_BSPC,
  392. KC_ESC, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, KC_ENT ,
  393. KC_LSFT, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
  394. KC_LCTL, KC_LGUI, KC_LALT, PUNC, NUM, KC_SPC, KC_SPC, FUNC, EMOJI, KC_RALT, KC_RGUI, KC_RCTL
  395. ),
  396. /* Punc
  397. * ,-----------------------------------------------------------------------------------.
  398. * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | ` |
  399. * |------+------+------+------+------+-------------+------+------+------+------+------|
  400. * | | | \ | - | = | < | > | ( | ) | ' | | |
  401. * |------+------+------+------+------+------|------+------+------+------+------+------|
  402. * | | | | | _ | + | { | } | [ | ] | " | | |
  403. * |------+------+------+------+------+------+------+------+------+------+------+------|
  404. * | | | | | | | | | | | |
  405. * `-----------------------------------------------------------------------------------'
  406. */
  407. [_PUNC] = KEYMAP(
  408. KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_GRV ,
  409. XXXXXXX, XXXXXXX, KC_BSLS, KC_MINS, KC_EQL, KC_LABK, KC_RABK, KC_LPRN, KC_RPRN, KC_QUOT, XXXXXXX, XXXXXXX,
  410. XXXXXXX, XXXXXXX, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_DQUO, XXXXXXX, XXXXXXX,
  411. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
  412. ),
  413. /* Num
  414. * ,-----------------------------------------------------------------------------------.
  415. * | ^ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
  416. * |------+------+------+------+------+-------------+------+------+------+------+------|
  417. * | Esc | @ | A | B | C | ( | ) | 4 | 5 | 6 | : |Enter |
  418. * |------+------+------+------+------+------|------+------+------+------+------+------|
  419. * | & | # | D | E | F | [ | ] | 1 | 2 | 3 | / | * |
  420. * |------+------+------+------+------+------+------+------+------+------+------+------|
  421. * | | | | x | | | 0 | , | . | + | - |
  422. * `-----------------------------------------------------------------------------------'
  423. */
  424. [_NUM] = KEYMAP(
  425. KC_CIRC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
  426. 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,
  427. 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,
  428. _______, _______, _______, KC_X, _______, KC_SPC, KC_SPC, KC_0, KC_COMM, KC_DOT, KC_PLUS, KC_MINS
  429. ),
  430. /* Func
  431. * ,-----------------------------------------------------------------------------------.
  432. * | | F1 | F2 | F3 | F4 | | | PgUp | Up | PgDn | PgUp | Del |
  433. * |------+------+------+------+------+-------------+------+------+------+------+------|
  434. * | | F5 | F6 | F7 | F8 |PrtSc | | Left | Down | Right| PgDn | Ins |
  435. * |------+------+------+------+------+------|------+------+------+------+------+------|
  436. * | | F9 | F10 | F11 | F12 | | | | Home | End | | |
  437. * |------+------+------+------+------+------+------+------+------+------+------+------|
  438. * | | | | | | | | | | | |
  439. * `-----------------------------------------------------------------------------------'
  440. */
  441. [_FUNC] = KEYMAP(
  442. XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, XXXXXXX, KC_PGUP, KC_UP, KC_PGDN, KC_PGUP, KC_DEL,
  443. XXXXXXX, KC_F5, KC_F6, KC_F7, KC_F8,KC_PSCREEN,XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_INS,
  444. _______, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_END, XXXXXXX, _______,
  445. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
  446. ),
  447. /* Emoji
  448. * ,-----------------------------------------------------------------------------------.
  449. * | | | | | | | | | | | | |
  450. * |------+------+------+------+------+-------------+------+------+------+------+------|
  451. * | | | | | | | | | | | | |
  452. * |------+------+------+------+------+------+------+------+------+------+------+------|
  453. * | | | | | | | | | | | | |
  454. * |------+------+------+------+------+------+------+------+------+------+------+------|
  455. * | | | | | | | | | | | | |
  456. * `-----------------------------------------------------------------------------------'
  457. */
  458. [_EMOJI] = KEYMAP(
  459. X(HART2), X(CRY2),X(WEARY),X(EYERT),X(SMIRK), X(TJOY),X(RECYC),X(UNAMU),X(MUSIC),X(OKHND),X(PENSV), X(PHEW),
  460. X(THMUP), X(PRAY),X(SMILE),X(SMIL2),X(FLUSH), X(GRIN),X(HEART), X(BYE), X(KISS),X(CELEB), X(COOL),X(NOEVS),
  461. X(THMDN),X(SLEEP), X(CLAP), X(CRY), X(VIC),X(BHART), X(SUN),X(SMEYE), X(WINK), X(MOON),X(CONFU),X(NOEVH),
  462. X(POO), X(EYES),X(HUNRD), _______,X(SKULL),X(HORNS), X(HALO), X(FEAR), _______,X(YUMMY),X(DISAP),X(NOEVK)
  463. ),
  464. /* GUI
  465. * ,-----------------------------------------------------------------------------------.
  466. * | | D1 | D2 | D3 | D4 | D5 | D6 | D7 | D8 | D9 | D10 | |
  467. * |------+------+------+------+------+-------------+------+------+------+------+------|
  468. * |Linux | | Vol- | Mute | Vol+ | | | D- | | D+ | |Qwerty|
  469. * |------+------+------+------+------+------+------+------+------+------+------+------|
  470. * | Win | | Prev | Play | Next | | | | | | |Colmak|
  471. * |------+------+------+------+------+------+------+------+------+------+------+------|
  472. * | OSX | | | | | BL- | BL+ | | | | |Workmn|
  473. * `-----------------------------------------------------------------------------------'
  474. */
  475. [_GUI] = KEYMAP(
  476. _______, 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), _______,
  477. LINUX, _______, KC_VOLD, KC_MUTE, KC_VOLU,_______,_______,KC_WWW_BACK,_______,KC_WWW_FORWARD,_______, QWERTY,
  478. WIN, _______, KC_MPRV, KC_MPLY, KC_MNXT, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, COLEMAK,
  479. OSX, _______, _______, _______, _______, BL_DEC, BL_INC, _______, _______, RGB_VAI, RGB_VAD, WORKMAN
  480. ),
  481. };
  482. #ifdef AUDIO_ENABLE
  483. float tone_startup[][2] = SONG(STARTUP_SOUND);
  484. float tone_qwerty[][2] = SONG(QWERTY_SOUND);
  485. float tone_colemak[][2] = SONG(COLEMAK_SOUND);
  486. float tone_workman[][2] = SONG(DVORAK_SOUND);
  487. float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
  488. float tone_linux[][2] = SONG(CAPS_LOCK_ON_SOUND);
  489. float tone_windows[][2] = SONG(SCROLL_LOCK_ON_SOUND);
  490. float tone_osx[][2] = SONG(NUM_LOCK_ON_SOUND);
  491. float tone_click[][2] = SONG(MUSICAL_NOTE(_F3, 2));
  492. #endif
  493. void persistant_default_layer_set(uint16_t default_layer) {
  494. eeconfig_update_default_layer(default_layer);
  495. default_layer_set(default_layer);
  496. }
  497. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  498. #ifdef AUDIO_ENABLE
  499. // faux clicky
  500. if (record->event.pressed) PLAY_NOTE_ARRAY(tone_click, false, 0);
  501. #endif
  502. switch (keycode) {
  503. case QWERTY:
  504. if (record->event.pressed) {
  505. #ifdef AUDIO_ENABLE
  506. PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
  507. #endif
  508. persistant_default_layer_set(1UL<<_QWERTY);
  509. }
  510. return false;
  511. break;
  512. case COLEMAK:
  513. if (record->event.pressed) {
  514. #ifdef AUDIO_ENABLE
  515. PLAY_NOTE_ARRAY(tone_colemak, false, 0);
  516. #endif
  517. persistant_default_layer_set(1UL<<_COLEMAK);
  518. }
  519. return false;
  520. break;
  521. case WORKMAN:
  522. if (record->event.pressed) {
  523. #ifdef AUDIO_ENABLE
  524. PLAY_NOTE_ARRAY(tone_workman, false, 0);
  525. #endif
  526. persistant_default_layer_set(1UL<<_WORKMAN);
  527. }
  528. return false;
  529. break;
  530. case PUNC:
  531. if (record->event.pressed) {
  532. layer_on(_PUNC);
  533. update_tri_layer(_PUNC, _EMOJI, _GUI);
  534. if (IS_LAYER_ON(_GUI)) {
  535. led_layer_gui();
  536. } else {
  537. led_layer_punc();;
  538. }
  539. } else {
  540. layer_off(_PUNC);
  541. update_tri_layer(_PUNC, _EMOJI, _GUI);
  542. if (IS_LAYER_ON(_EMOJI)) {
  543. led_layer_emoji();
  544. } else {
  545. led_layer_normal();;
  546. }
  547. }
  548. return false;
  549. break;
  550. case EMOJI:
  551. if (record->event.pressed) {
  552. layer_on(_EMOJI);
  553. update_tri_layer(_PUNC, _EMOJI, _GUI);
  554. if (IS_LAYER_ON(_GUI)) {
  555. led_layer_gui();
  556. } else {
  557. led_layer_emoji();;
  558. }
  559. } else {
  560. layer_off(_EMOJI);
  561. update_tri_layer(_PUNC, _EMOJI, _GUI);
  562. if (IS_LAYER_ON(_PUNC)) {
  563. led_layer_punc();
  564. } else {
  565. led_layer_normal();;
  566. }
  567. }
  568. return false;
  569. break;
  570. case NUM:
  571. if (record->event.pressed) {
  572. layer_on(_NUM);
  573. led_layer_num();
  574. } else {
  575. layer_off(_NUM);
  576. led_layer_normal();
  577. }
  578. return false;
  579. break;
  580. case FUNC:
  581. if (record->event.pressed) {
  582. layer_on(_FUNC);
  583. led_layer_func();
  584. } else {
  585. layer_off(_FUNC);
  586. led_layer_normal();
  587. }
  588. return false;
  589. break;
  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. led_init();
  620. }
  621. // void init_rgblight(void) {
  622. // for (uint8_t i = 0; i < RGBLED_NUM; i++) {
  623. // led[i].r = 255;
  624. // led[i].g = 85;
  625. // led[i].b = 0;
  626. // }
  627. // ws2812_setleds(led, RGBLED_NUM);
  628. // }
  629. #ifdef AUDIO_ENABLE
  630. void startup_user()
  631. {
  632. _delay_ms(20); // gets rid of tick
  633. PLAY_NOTE_ARRAY(tone_startup, false, 0);
  634. }
  635. void shutdown_user()
  636. {
  637. PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
  638. _delay_ms(150);
  639. stop_all_notes();
  640. }
  641. #endif