keymap.c 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803
  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. #include "ps2_mouse.h"
  14. #include "ps2.h"
  15. #define COUNT(x) (sizeof (x) / sizeof (*(x)))
  16. // #define RGBLED_NUM 5
  17. // struct cRGB led[RGBLED_NUM];
  18. extern keymap_config_t keymap_config;
  19. enum layers {
  20. _QWERTY,
  21. _COLEMAK,
  22. _WORKMAN,
  23. _PUNC,
  24. _NUM,
  25. _FUNC,
  26. _EMOJI,
  27. _GUI,
  28. };
  29. enum planck_keycodes {
  30. // layouts
  31. QWERTY = SAFE_RANGE,
  32. COLEMAK,
  33. WORKMAN,
  34. // layer switchers
  35. PUNC,
  36. NUM,
  37. FUNC,
  38. EMOJI,
  39. GUI,
  40. // os switchers
  41. LINUX,
  42. WIN,
  43. OSX,
  44. };
  45. // Fillers to make layering clearer
  46. #define _______ KC_TRNS
  47. #define XXXXXXX KC_NO
  48. // unicode map
  49. enum unicode_name {
  50. GRIN, // grinning face 😊
  51. TJOY, // tears of joy 😂
  52. SMILE, // grining face with smiling eyes 😁
  53. HEART, // heart ❤
  54. EYERT, // smiling face with heart shaped eyes 😍
  55. CRY, // crying face 😭
  56. SMEYE, // smiling face with smiling eyes 😊
  57. UNAMU, // unamused 😒
  58. KISS, // kiss 😘
  59. HART2, // two hearts 💕
  60. WEARY, // weary 😩
  61. OKHND, // ok hand sign 👌
  62. PENSV, // pensive 😔
  63. SMIRK, // smirk 😏
  64. RECYC, // recycle ♻
  65. WINK, // wink 😉
  66. THMUP, // thumb up 👍
  67. THMDN, // thumb down 👎
  68. PRAY, // pray 🙏
  69. PHEW, // relieved 😌
  70. MUSIC, // musical notes
  71. FLUSH, // flushed 😳
  72. CELEB, // celebration 🙌
  73. CRY2, // crying face 😢
  74. COOL, // smile with sunglasses 😎
  75. NOEVS, // see no evil
  76. NOEVH, // hear no evil
  77. NOEVK, // speak no evil
  78. POO, // pile of poo
  79. EYES, // eyes
  80. VIC, // victory hand
  81. BHART, // broken heart
  82. SLEEP, // sleeping face
  83. SMIL2, // smiling face with open mouth & sweat
  84. HUNRD, // 100
  85. CONFU, // confused
  86. TONGU, // face with tongue & winking eye
  87. DISAP, // disappointed
  88. YUMMY, // face savoring delicious food
  89. CLAP, // hand clapping
  90. FEAR, // face screaming in fear
  91. HORNS, // smiling face with horns
  92. HALO, // smiling face with halo
  93. BYE, // waving hand
  94. SUN, // sun
  95. MOON, // moon
  96. SKULL, // skull
  97. };
  98. const uint32_t PROGMEM unicode_map[] = {
  99. [GRIN] = 0x1F600,
  100. [TJOY] = 0x1F602,
  101. [SMILE] = 0x1F601,
  102. [HEART] = 0x2764,
  103. [EYERT] = 0x1f60d,
  104. [CRY] = 0x1f62d,
  105. [SMEYE] = 0x1F60A,
  106. [UNAMU] = 0x1F612,
  107. [KISS] = 0x1F618,
  108. [HART2] = 0x1F495,
  109. [WEARY] = 0x1F629,
  110. [OKHND] = 0x1F44C,
  111. [PENSV] = 0x1F614,
  112. [SMIRK] = 0x1F60F,
  113. [RECYC] = 0x267B,
  114. [WINK] = 0x1F609,
  115. [THMUP] = 0x1F44D,
  116. [THMDN] = 0x1F44E,
  117. [PRAY] = 0x1F64F,
  118. [PHEW] = 0x1F60C,
  119. [MUSIC] = 0x1F3B6,
  120. [FLUSH] = 0x1F633,
  121. [CELEB] = 0x1F64C,
  122. [CRY2] = 0x1F622,
  123. [COOL] = 0x1F60E,
  124. [NOEVS] = 0x1F648,
  125. [NOEVH] = 0x1F649,
  126. [NOEVK] = 0x1F64A,
  127. [POO] = 0x1F4A9,
  128. [EYES] = 0x1F440,
  129. [VIC] = 0x270C,
  130. [BHART] = 0x1F494,
  131. [SLEEP] = 0x1F634,
  132. [SMIL2] = 0x1F605,
  133. [HUNRD] = 0x1F4AF,
  134. [CONFU] = 0x1F615,
  135. [TONGU] = 0x1F61C,
  136. [DISAP] = 0x1F61E,
  137. [YUMMY] = 0x1F60B,
  138. [CLAP] = 0x1F44F,
  139. [FEAR] = 0x1F631,
  140. [HORNS] = 0x1F608,
  141. [HALO] = 0x1F607,
  142. [BYE] = 0x1F44B,
  143. [SUN] = 0x2600,
  144. [MOON] = 0x1F314,
  145. [SKULL] = 0x1F480,
  146. };
  147. // hybrid shift - =
  148. // #undef KC_LSFT
  149. // #define KC_LSFT MT(MOD_LSFT, KC_MINS)
  150. // #undef KC_RSFT
  151. // #define KC_RSFT MT(MOD_LSFT, KC_EQL)
  152. // hybrid right-gui & scroll lock (mapped to Compose in OS)
  153. #undef KC_RCTL
  154. #define KC_RCTL MT(MOD_LCTL, KC_SLCK)
  155. // RGBSPS
  156. const uint8_t PROGMEM LED_ALNUM[] = {
  157. LED_Z,
  158. LED_A,
  159. LED_Q,
  160. LED_W,
  161. LED_S,
  162. LED_X,
  163. LED_C,
  164. LED_D,
  165. LED_E,
  166. LED_R,
  167. LED_F,
  168. LED_V,
  169. LED_B,
  170. LED_G,
  171. LED_T,
  172. LED_N,
  173. LED_HH,
  174. LED_Y,
  175. LED_U,
  176. LED_J,
  177. LED_M,
  178. LED_COMM,
  179. LED_K,
  180. LED_I,
  181. LED_O,
  182. LED_L,
  183. LED_DOT,
  184. LED_SLSH,
  185. LED_SCLN,
  186. LED_P,
  187. LED_LSPC,
  188. LED_RSPC
  189. };
  190. const uint8_t PROGMEM LED_MODS[] = {
  191. LED_TAB,
  192. LED_ESC,
  193. LED_LSFT,
  194. LED_LCTL,
  195. LED_LGUI,
  196. LED_LALT,
  197. LED_RALT,
  198. LED_RGUI,
  199. LED_BKSP,
  200. LED_ENT,
  201. LED_RSFT,
  202. LED_RCTL
  203. };
  204. const uint8_t PROGMEM LED_FN[] = {
  205. LED_PUNC,
  206. LED_NUM,
  207. LED_FUNC,
  208. LED_EMOJI
  209. };
  210. const uint8_t PROGMEM LED_INDICATORS[] = {
  211. LED_IND_EMOJI,
  212. LED_IND_NUM,
  213. LED_IND_FUNC,
  214. LED_IND_BATTERY,
  215. LED_IND_USB,
  216. LED_IND_BLUETOOTH,
  217. };
  218. const uint8_t PROGMEM LED_TRACKPOINT[] = {
  219. LED_TRACKPOINT1,
  220. LED_TRACKPOINT2,
  221. LED_TRACKPOINT3,
  222. };
  223. void led_reset(void) {
  224. for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) {
  225. rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), 15, 6, 0);
  226. }
  227. for(uint8_t i = 0; i < COUNT(LED_MODS); i++) {
  228. rgbsps_set(pgm_read_byte(&LED_MODS[i]), 15, 0, 0);
  229. }
  230. for(uint8_t i = 0; i < COUNT(LED_FN); i++) {
  231. rgbsps_set(pgm_read_byte(&LED_FN[i]), 15, 15, 15);
  232. }
  233. }
  234. void led_layer_normal(void) {
  235. rgbsps_set(LED_IND_FUNC, 0, 0, 0);
  236. rgbsps_set(LED_IND_NUM, 0, 0, 0);
  237. rgbsps_set(LED_IND_EMOJI, 0, 0, 0);
  238. led_reset();
  239. rgbsps_send();
  240. }
  241. void led_layer_func(void) {
  242. rgbsps_set(LED_IND_FUNC, 0, 15, 0);
  243. rgbsps_set(LED_IND_NUM, 0, 0, 0);
  244. rgbsps_set(LED_IND_EMOJI, 0, 0, 0);
  245. led_reset();
  246. for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) {
  247. rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), 0, 0, 0);
  248. }
  249. rgbsps_set(LED_I, 15, 0, 15);
  250. rgbsps_set(LED_J, 15, 0, 15);
  251. rgbsps_set(LED_K, 15, 0, 15);
  252. rgbsps_set(LED_L, 15, 0, 15);
  253. rgbsps_set(LED_U, 15, 0, 0);
  254. rgbsps_set(LED_O, 15, 0, 0);
  255. rgbsps_set(LED_COMM, 15, 0, 0);
  256. rgbsps_set(LED_DOT, 15, 0, 0);
  257. rgbsps_set(LED_SCLN, 15, 0, 0);
  258. rgbsps_set(LED_P, 15, 0, 0);
  259. rgbsps_set(LED_Q, 0, 15, 0);
  260. rgbsps_set(LED_W, 0, 15, 0);
  261. rgbsps_set(LED_E, 0, 15, 0);
  262. rgbsps_set(LED_R, 0, 15, 0);
  263. rgbsps_set(LED_A, 0, 15, 0);
  264. rgbsps_set(LED_S, 0, 15, 0);
  265. rgbsps_set(LED_D, 0, 15, 0);
  266. rgbsps_set(LED_F, 0, 15, 0);
  267. rgbsps_set(LED_Z, 0, 15, 0);
  268. rgbsps_set(LED_X, 0, 15, 0);
  269. rgbsps_set(LED_C, 0, 15, 0);
  270. rgbsps_set(LED_V, 0, 15, 0);
  271. rgbsps_send();
  272. }
  273. void led_layer_punc(void) {
  274. rgbsps_set(LED_IND_FUNC, 0, 15, 0);
  275. rgbsps_set(LED_IND_NUM, 0, 0, 15);
  276. rgbsps_set(LED_IND_EMOJI, 0, 0, 0);
  277. led_reset();
  278. rgbsps_send();
  279. }
  280. void led_layer_num(void) {
  281. rgbsps_set(LED_IND_FUNC, 0, 0, 0);
  282. rgbsps_set(LED_IND_NUM, 0, 0, 15);
  283. rgbsps_set(LED_IND_EMOJI, 0, 0, 0);
  284. led_reset();
  285. for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) {
  286. rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), 0, 0, 0);
  287. }
  288. rgbsps_set(LED_U, 0, 5, 15);
  289. rgbsps_set(LED_I, 0, 5, 15);
  290. rgbsps_set(LED_O, 0, 5, 15);
  291. rgbsps_set(LED_J, 0, 5, 15);
  292. rgbsps_set(LED_K, 0, 5, 15);
  293. rgbsps_set(LED_L, 0, 5, 15);
  294. rgbsps_set(LED_M, 0, 5, 15);
  295. rgbsps_set(LED_COMM, 0, 5, 15);
  296. rgbsps_set(LED_DOT, 0, 5, 15);
  297. rgbsps_set(LED_FUNC, 0, 5, 15);
  298. rgbsps_set(LED_EMOJI, 0, 10, 15);
  299. rgbsps_set(LED_RALT, 0, 10, 15);
  300. rgbsps_set(LED_Q, 0, 10, 15);
  301. rgbsps_set(LED_W, 0, 10, 15);
  302. rgbsps_set(LED_E, 0, 10, 15);
  303. rgbsps_set(LED_R, 0, 10, 15);
  304. rgbsps_set(LED_T, 0, 10, 15);
  305. rgbsps_set(LED_Y, 0, 10, 15);
  306. rgbsps_set(LED_P, 0, 10, 15);
  307. rgbsps_set(LED_A, 0, 15, 15);
  308. rgbsps_set(LED_S, 0, 15, 15);
  309. rgbsps_set(LED_D, 0, 15, 15);
  310. rgbsps_set(LED_F, 0, 15, 15);
  311. rgbsps_set(LED_Z, 0, 15, 15);
  312. rgbsps_set(LED_X, 0, 15, 15);
  313. rgbsps_set(LED_C, 0, 15, 15);
  314. rgbsps_set(LED_V, 0, 15, 15);
  315. rgbsps_send();
  316. }
  317. void led_layer_emoji(void) {
  318. for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) {
  319. rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), 15, 15, 0);
  320. }
  321. for(uint8_t i = 0; i < COUNT(LED_MODS); i++) {
  322. rgbsps_set(pgm_read_byte(&LED_MODS[i]), 15, 15, 0);
  323. }
  324. for(uint8_t i = 0; i < COUNT(LED_FN); i++) {
  325. rgbsps_set(pgm_read_byte(&LED_FN[i]), 15, 15, 0);
  326. }
  327. rgbsps_set(LED_IND_FUNC, 0, 0, 0);
  328. rgbsps_set(LED_IND_NUM, 0, 0, 0);
  329. rgbsps_set(LED_IND_EMOJI, 15, 15, 0);
  330. rgbsps_set(LED_PUNC, 15, 15, 15);
  331. rgbsps_set(LED_EMOJI, 15, 15, 15);
  332. rgbsps_send();
  333. }
  334. void led_layer_gui(void) {
  335. rgbsps_set(LED_IND_FUNC, 15, 10, 15);
  336. rgbsps_set(LED_IND_NUM, 15, 10, 15);
  337. rgbsps_set(LED_IND_EMOJI, 15, 10, 15);
  338. rgbsps_send();
  339. }
  340. void led_init(void) {
  341. // turn off all
  342. rgbsps_turnoff();
  343. // set trackpoint color
  344. rgbsps_set(LED_TRACKPOINT1, 15, 0, 0);
  345. rgbsps_set(LED_TRACKPOINT2, 0, 0, 15);
  346. rgbsps_set(LED_TRACKPOINT3, 15, 0, 0);
  347. // // hardcode indicator for now
  348. rgbsps_set(LED_IND_BLUETOOTH, 0, 0, 15);
  349. rgbsps_set(LED_IND_USB, 15, 15, 15);
  350. rgbsps_set(LED_IND_BATTERY, 0, 15, 0);
  351. led_layer_normal();
  352. }
  353. // keymaps
  354. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  355. /* Qwerty
  356. * ,-----------------------------------------------------------------------------------.
  357. * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
  358. * |------+------+------+------+------+-------------+------+------+------+------+------|
  359. * | Esc | A | S | D | F | G | H | J | K | L | ; |Enter |
  360. * |------+------+------+------+------+------|------+------+------+------+------+------|
  361. * | Shift| Z | X | C | V | B | N | M | , | . | / |Shift |
  362. * |------+------+------+------+------+------+------+------+------+------+------+------|
  363. * | Ctrl | GUI | Alt | Punc | Num | Space | Func |Emoji |AltGr | GUI | Ctrl |
  364. * `-----------------------------------------------------------------------------------'
  365. */
  366. [_QWERTY] = KEYMAP(
  367. KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
  368. KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT ,
  369. KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
  370. KC_LCTL, KC_LGUI, KC_LALT, PUNC, NUM, KC_SPC, KC_SPC, FUNC, EMOJI, KC_RALT, KC_RGUI, KC_RCTL
  371. ),
  372. /* Colemak
  373. * ,-----------------------------------------------------------------------------------.
  374. * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
  375. * |------+------+------+------+------+-------------+------+------+------+------+------|
  376. * | Esc | A | R | S | T | D | H | N | E | I | O |Enter |
  377. * |------+------+------+------+------+------|------+------+------+------+------+------|
  378. * | Shift| Z | X | C | V | B | K | M | , | . | / |Shift |
  379. * |------+------+------+------+------+------+------+------+------+------+------+------|
  380. * | Ctrl | GUI | Alt | Punc | Num | Space | Func |Emoji |AltGr | GUI | Ctrl |
  381. * `-----------------------------------------------------------------------------------'
  382. */
  383. [_COLEMAK] = KEYMAP(
  384. _______, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_QUOT, _______,
  385. _______, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, _______,
  386. _______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______,
  387. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
  388. ),
  389. /* Workman
  390. * ,-----------------------------------------------------------------------------------.
  391. * | Tab | Q | D | R | W | B | J | F | U | P | ; | Bksp |
  392. * |------+------+------+------+------+-------------+------+------+------+------+------|
  393. * | Esc | A | S | H | T | G | Y | N | E | O | I |Enter |
  394. * |------+------+------+------+------+------|------+------+------+------+------+------|
  395. * | Shift| Z | X | M | C | V | K | K | , | . | / |Shift |
  396. * |------+------+------+------+------+------+------+------+------+------+------+------|
  397. * | Ctrl | GUI | Alt | Punc | Num | Space | Func |Emoji |AltGr | GUI | Ctrl |
  398. * `-----------------------------------------------------------------------------------'
  399. */
  400. [_WORKMAN] = KEYMAP(
  401. _______, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_QUOT, _______,
  402. _______, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, _______,
  403. _______, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMM, KC_DOT, KC_SLSH, _______,
  404. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
  405. ),
  406. /* Punc
  407. * ,-----------------------------------------------------------------------------------.
  408. * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | ` |
  409. * |------+------+------+------+------+-------------+------+------+------+------+------|
  410. * | | | \ | - | = | < | > | ( | ) | ' | | |
  411. * |------+------+------+------+------+------|------+------+------+------+------+------|
  412. * | | | | | _ | + | { | } | [ | ] | " | | |
  413. * |------+------+------+------+------+------+------+------+------+------+------+------|
  414. * | | | | | | | | | | | |
  415. * `-----------------------------------------------------------------------------------'
  416. */
  417. [_PUNC] = KEYMAP(
  418. KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_GRV ,
  419. XXXXXXX, XXXXXXX, KC_BSLS, KC_MINS, KC_EQL, KC_LABK, KC_RABK, KC_LPRN, KC_RPRN, KC_QUOT, XXXXXXX, XXXXXXX,
  420. XXXXXXX, XXXXXXX, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_DQUO, XXXXXXX, XXXXXXX,
  421. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
  422. ),
  423. /* Num
  424. * ,-----------------------------------------------------------------------------------.
  425. * | ^ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
  426. * |------+------+------+------+------+-------------+------+------+------+------+------|
  427. * | Esc | @ | A | B | C | ( | ) | 4 | 5 | 6 | : |Enter |
  428. * |------+------+------+------+------+------|------+------+------+------+------+------|
  429. * | & | # | D | E | F | [ | ] | 1 | 2 | 3 | / | * |
  430. * |------+------+------+------+------+------+------+------+------+------+------+------|
  431. * | | | | x | | | 0 | , | . | + | - |
  432. * `-----------------------------------------------------------------------------------'
  433. */
  434. [_NUM] = KEYMAP(
  435. KC_CIRC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
  436. 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,
  437. 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,
  438. _______, _______, _______, KC_X, _______, KC_SPC, KC_SPC, KC_0, KC_COMM, KC_DOT, KC_PLUS, KC_MINS
  439. ),
  440. /* Func
  441. * ,-----------------------------------------------------------------------------------.
  442. * | | F1 | F2 | F3 | F4 | | | PgUp | Up | PgDn | PgUp | Del |
  443. * |------+------+------+------+------+-------------+------+------+------+------+------|
  444. * | | F5 | F6 | F7 | F8 |PrtSc | | Left | Down | Right| PgDn | Ins |
  445. * |------+------+------+------+------+------|------+------+------+------+------+------|
  446. * | | F9 | F10 | F11 | F12 | | | | Home | End | | |
  447. * |------+------+------+------+------+------+------+------+------+------+------+------|
  448. * | | | | | | | | | | | |
  449. * `-----------------------------------------------------------------------------------'
  450. */
  451. [_FUNC] = KEYMAP(
  452. XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, XXXXXXX, KC_PGUP, KC_UP, KC_PGDN, KC_PGUP, KC_DEL,
  453. XXXXXXX, KC_F5, KC_F6, KC_F7, KC_F8,KC_PSCREEN,XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_INS,
  454. _______, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_END, XXXXXXX, _______,
  455. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
  456. ),
  457. /* Emoji
  458. * ,-----------------------------------------------------------------------------------.
  459. * | | | | | | | | | | | | |
  460. * |------+------+------+------+------+-------------+------+------+------+------+------|
  461. * | | | | | | | | | | | | |
  462. * |------+------+------+------+------+------+------+------+------+------+------+------|
  463. * | | | | | | | | | | | | |
  464. * |------+------+------+------+------+------+------+------+------+------+------+------|
  465. * | | | | | | | | | | | | |
  466. * `-----------------------------------------------------------------------------------'
  467. */
  468. [_EMOJI] = KEYMAP(
  469. X(HART2), X(CRY2),X(WEARY),X(EYERT),X(SMIRK), X(TJOY),X(RECYC),X(UNAMU),X(MUSIC),X(OKHND),X(PENSV), X(PHEW),
  470. X(THMUP), X(PRAY),X(SMILE),X(SMIL2),X(FLUSH), X(GRIN),X(HEART), X(BYE), X(KISS),X(CELEB), X(COOL),X(NOEVS),
  471. X(THMDN),X(SLEEP), X(CLAP), X(CRY), X(VIC),X(BHART), X(SUN),X(SMEYE), X(WINK), X(MOON),X(CONFU),X(NOEVH),
  472. X(POO), X(EYES),X(HUNRD), _______,X(SKULL),X(HORNS), X(HALO), X(FEAR), _______,X(YUMMY),X(DISAP),X(NOEVK)
  473. ),
  474. /* GUI
  475. * ,-----------------------------------------------------------------------------------.
  476. * | | D1 | D2 | D3 | D4 | D5 | D6 | D7 | D8 | D9 | D10 | |
  477. * |------+------+------+------+------+-------------+------+------+------+------+------|
  478. * |Linux | | Vol- | Mute | Vol+ | | | D- | | D+ | |Qwerty|
  479. * |------+------+------+------+------+------+------+------+------+------+------+------|
  480. * | Win | | Prev | Play | Next | | | | | | |Colmak|
  481. * |------+------+------+------+------+------+------+------+------+------+------+------|
  482. * | OSX | | | | | BL- | BL+ | | | | |Workmn|
  483. * `-----------------------------------------------------------------------------------'
  484. */
  485. [_GUI] = KEYMAP(
  486. _______, 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), _______,
  487. LINUX, _______, KC_VOLD, KC_MUTE, KC_VOLU,_______,_______,KC_WWW_BACK,_______,KC_WWW_FORWARD,KC_PAUS, QWERTY,
  488. WIN, _______, KC_MPRV, KC_MPLY, KC_MNXT, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, COLEMAK,
  489. OSX, _______, _______, _______, _______, BL_DEC, BL_INC, _______, _______, RGB_VAI, RGB_VAD, WORKMAN
  490. ),
  491. };
  492. #ifdef AUDIO_ENABLE
  493. float tone_startup[][2] = SONG(STARTUP_SOUND);
  494. float tone_qwerty[][2] = SONG(QWERTY_SOUND);
  495. float tone_colemak[][2] = SONG(COLEMAK_SOUND);
  496. float tone_workman[][2] = SONG(DVORAK_SOUND);
  497. float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
  498. float tone_linux[][2] = SONG(CAPS_LOCK_ON_SOUND);
  499. float tone_windows[][2] = SONG(SCROLL_LOCK_ON_SOUND);
  500. float tone_osx[][2] = SONG(NUM_LOCK_ON_SOUND);
  501. float tone_click[][2] = SONG(MUSICAL_NOTE(_F3, 2));
  502. #endif
  503. void persistant_default_layer_set(uint16_t default_layer) {
  504. eeconfig_update_default_layer(default_layer);
  505. default_layer_set(default_layer);
  506. }
  507. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  508. #ifdef AUDIO_ENABLE
  509. // faux clicky
  510. if (record->event.pressed) PLAY_NOTE_ARRAY(tone_click, false, 0);
  511. #endif
  512. switch (keycode) {
  513. // QWERTZ style comma and dot: semicolon and colon when shifted
  514. case KC_COMM:
  515. if (record->event.pressed) {
  516. bool lshifted = keyboard_report->mods & MOD_BIT(KC_LSFT);
  517. bool rshifted = keyboard_report->mods & MOD_BIT(KC_RSFT);
  518. if (lshifted || rshifted) {
  519. if (lshifted) unregister_code(KC_LSFT);
  520. if (rshifted) unregister_code(KC_RSFT);
  521. register_code(KC_SCLN);
  522. unregister_code(KC_SCLN);
  523. if (lshifted) register_code(KC_LSFT);
  524. if (rshifted) register_code(KC_RSFT);
  525. } else {
  526. register_code(KC_COMM);
  527. unregister_code(KC_COMM);
  528. }
  529. }
  530. return false;
  531. break;
  532. case KC_DOT:
  533. if (record->event.pressed) {
  534. if ((keyboard_report->mods & MOD_BIT(KC_LSFT)) || (keyboard_report->mods & MOD_BIT(KC_RSFT))) {
  535. register_code(KC_SCLN);
  536. unregister_code(KC_SCLN);
  537. } else {
  538. register_code(KC_DOT);
  539. unregister_code(KC_DOT);
  540. }
  541. }
  542. return false;
  543. break;
  544. // layout switchers
  545. case QWERTY:
  546. if (record->event.pressed) {
  547. #ifdef AUDIO_ENABLE
  548. PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
  549. #endif
  550. persistant_default_layer_set(1UL<<_QWERTY);
  551. }
  552. return false;
  553. break;
  554. case COLEMAK:
  555. if (record->event.pressed) {
  556. #ifdef AUDIO_ENABLE
  557. PLAY_NOTE_ARRAY(tone_colemak, false, 0);
  558. #endif
  559. persistant_default_layer_set(1UL<<_COLEMAK);
  560. }
  561. return false;
  562. break;
  563. case WORKMAN:
  564. if (record->event.pressed) {
  565. #ifdef AUDIO_ENABLE
  566. PLAY_NOTE_ARRAY(tone_workman, false, 0);
  567. #endif
  568. persistant_default_layer_set(1UL<<_WORKMAN);
  569. }
  570. return false;
  571. break;
  572. // layer switcher
  573. case PUNC:
  574. if (record->event.pressed) {
  575. layer_on(_PUNC);
  576. update_tri_layer(_PUNC, _EMOJI, _GUI);
  577. if (IS_LAYER_ON(_GUI)) {
  578. led_layer_gui();
  579. } else {
  580. led_layer_punc();;
  581. }
  582. } else {
  583. layer_off(_PUNC);
  584. update_tri_layer(_PUNC, _EMOJI, _GUI);
  585. if (IS_LAYER_ON(_EMOJI)) {
  586. led_layer_emoji();
  587. } else {
  588. led_layer_normal();;
  589. }
  590. }
  591. return false;
  592. break;
  593. case EMOJI:
  594. if (record->event.pressed) {
  595. layer_on(_EMOJI);
  596. update_tri_layer(_PUNC, _EMOJI, _GUI);
  597. if (IS_LAYER_ON(_GUI)) {
  598. led_layer_gui();
  599. } else {
  600. led_layer_emoji();;
  601. }
  602. } else {
  603. layer_off(_EMOJI);
  604. update_tri_layer(_PUNC, _EMOJI, _GUI);
  605. if (IS_LAYER_ON(_PUNC)) {
  606. led_layer_punc();
  607. } else {
  608. led_layer_normal();;
  609. }
  610. }
  611. return false;
  612. break;
  613. case NUM:
  614. if (record->event.pressed) {
  615. layer_on(_NUM);
  616. led_layer_num();
  617. } else {
  618. layer_off(_NUM);
  619. led_layer_normal();
  620. }
  621. return false;
  622. break;
  623. case FUNC:
  624. if (record->event.pressed) {
  625. layer_on(_FUNC);
  626. led_layer_func();
  627. } else {
  628. layer_off(_FUNC);
  629. led_layer_normal();
  630. }
  631. return false;
  632. break;
  633. // OS switchers
  634. case LINUX:
  635. set_unicode_input_mode(UC_LNX);
  636. #ifdef AUDIO_ENABLE
  637. PLAY_NOTE_ARRAY(tone_linux, false, 0);
  638. #endif
  639. return false;
  640. break;
  641. case WIN:
  642. set_unicode_input_mode(UC_WINC);
  643. #ifdef AUDIO_ENABLE
  644. PLAY_NOTE_ARRAY(tone_windows, false, 0);
  645. #endif
  646. return false;
  647. break;
  648. case OSX:
  649. set_unicode_input_mode(UC_OSX);
  650. #ifdef AUDIO_ENABLE
  651. PLAY_NOTE_ARRAY(tone_osx, false, 0);
  652. #endif
  653. return false;
  654. break;
  655. }
  656. return true;
  657. }
  658. void matrix_init_user(void) {
  659. #ifdef AUDIO_ENABLE
  660. startup_user();
  661. #endif
  662. set_unicode_input_mode(UC_LNX);
  663. led_init();
  664. }
  665. // void init_rgblight(void) {
  666. // for (uint8_t i = 0; i < RGBLED_NUM; i++) {
  667. // led[i].r = 255;
  668. // led[i].g = 85;
  669. // led[i].b = 0;
  670. // }
  671. // ws2812_setleds(led, RGBLED_NUM);
  672. // }
  673. #ifdef AUDIO_ENABLE
  674. void startup_user()
  675. {
  676. _delay_ms(20); // gets rid of tick
  677. PLAY_NOTE_ARRAY(tone_startup, false, 0);
  678. }
  679. void shutdown_user()
  680. {
  681. PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
  682. _delay_ms(150);
  683. stop_all_notes();
  684. }
  685. #endif
  686. void ps2_mouse_init_user() {
  687. uint8_t rcv;
  688. // set TrackPoint sensitivity
  689. PS2_MOUSE_SEND(0xE2, "set trackpoint sensitivity: 0xE2");
  690. PS2_MOUSE_SEND(0x81, "set trackpoint sensitivity: 0x81");
  691. PS2_MOUSE_SEND(0x4A, "set trackpoint sensitivity: 0x4A");
  692. PS2_MOUSE_SEND(0x49, "set trackpoint sensitivity: 0x59");
  693. // set TrackPoint Negative Inertia factor
  694. PS2_MOUSE_SEND(0xE2, "set negative inertia factor: 0xE2");
  695. PS2_MOUSE_SEND(0x81, "set negative inertia factor: 0x81");
  696. PS2_MOUSE_SEND(0x4D, "set negative inertia factor: 0x4D");
  697. PS2_MOUSE_SEND(0x06, "set negative inertia factor: 0x06");
  698. // set TrackPoint speed
  699. // (transfer function upper plateau speed)
  700. PS2_MOUSE_SEND(0xE2, "set trackpoint speed: 0xE2");
  701. PS2_MOUSE_SEND(0x81, "set trackpoint speed: 0x81");
  702. PS2_MOUSE_SEND(0x60, "set trackpoint speed: 0x60");
  703. PS2_MOUSE_SEND(0x61, "set trackpoint speed: 0x61");
  704. // inquire pts status
  705. rcv = ps2_host_send(0xE2);
  706. rcv = ps2_host_send(0x2C);
  707. rcv = ps2_host_recv_response();
  708. if ((rcv & 1) == 1) {
  709. // if on, disable pts
  710. rcv = ps2_host_send(0xE2);
  711. rcv = ps2_host_send(0x47);
  712. rcv = ps2_host_send(0x2C);
  713. rcv = ps2_host_send(0x01);
  714. }
  715. }