keymap.c 29 KB

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