keymap.c 29 KB

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