keymap.c 33 KB

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