1 #include QMK_KEYBOARD_H
102 // not all ogham letters, as I
103 // actually intend to use them for hex
212 const uint32_t PROGMEM unicode_map[] = {
215 [intgrl] = 0x222B, //∫
217 [imply] = 0x21D2, //⇒
218 [equiv] = 0x21D4, //⇔
220 [exists] = 0x2203, //∃
221 [nexists] = 0x2204, //∄
222 [forall] = 0x2200, //∀
226 [apeql] = 0x2245, //≅
230 [plsminus] = 0x00B1, //±
231 [infin] = 0x221E, //∞
232 [emtyset] = 0x2205, //∅
238 [eleof] = 0x2208, //∈
239 [member] = 0x220B, //∋
240 [neleof] = 0x2209, //∉
241 [nmember] = 0x220C, //∌
242 [subsetof] = 0x2282, //⊂
243 [suprsetof] = 0x2283, //
244 [intersection] = 0x2229, //∩
245 [Munion] = 0x222A, //∪
252 [uxclm] = 0x00A1, //¡
254 [degree] = 0x00B0, //°
255 [trade] = 0x2122, //™
257 [numero] = 0x2116, //№
263 [lshade] = 0x2591,//░
264 [mshade] = 0x2592,//▒
265 [dshade] = 0x2593,//▓
267 [fire] = 0x1F525, //🔥
268 [water] = 0x1F322, //🌢
269 [cleft] = 0x1F12F, //🄯
270 [baster] = 0x1F7BC, //🞼
271 [neteen] = 0x1F51E, //🔞
272 [floppy] = 0x1F5AB, //🖫
274 [boxemp] = 0x2610, //☐
275 [boxchk] = 0x2611, //☑
278 [bbstr] = 0x23A1, //⎡
279 [bbstl] = 0x23A4, //⎤
283 [bbrtr] = 0x23A7, //⎧
284 [bbrbr] = 0x23A9, //⎩
285 [bbrtl] = 0x23AB, //⎫
286 [bbrbl] = 0x23AD, //⎭
287 [bbsbr] = 0x23A3, //⎣
288 [bbsbl] = 0x23A6, //⎦
289 [bbmbr] = 0x23A5, //⎥
290 [bbmbl] = 0x23A2, //⎢
292 [Agrave] = 0x0300,//è //above [wtf] = 0x1242A, //𒐪
293 [Aacute] = 0x0301,//é //1st
294 [Acircm] = 0x0302,//ê //2nd
295 [Atilde] = 0x0303,//ẽ //5th
296 [Abreve] = 0x0306,//ĕ //4th
297 [Adiaer] = 0x0308,//ë //3rd
298 [Adacut] = 0x030B,//e̋
300 // not all ogham letters, as I
301 // actually intend to use them for hex
302 [OS] = 0x1680,//space
318 [Os] = 0x169B,//Start
323 [sqr] = 0x238D,//⎍, actually monostable
325 [opt] = 0x2325,//⌥, actually option used for switch
329 [brkup] = 0xFE38, //︸
330 [brkdn] = 0xFE37, //︷
331 [perup] = 0xFE35, //︵
332 [perdn] = 0xFE36, //︶
334 [rone] = 0x2170, // 1:: ⅰ
335 [rtwo] = 0x2171, // 2:: ⅱ
336 [rthree] = 0x2172, // 3:: ⅲ
337 [rfour] = 0x2173, // 4:: ⅳ
338 [rfive] = 0x2174, // 5:: ⅴ
339 [rsix] = 0x2175, // 6:: ⅵ
340 [rseven] = 0x2176, // 7:: ⅶ
341 [reight] = 0x2177, // 8:: ⅷ
342 [rnine] = 0x2178, // 9:: ⅸ
343 [rten] = 0x2179, // 0:: ⅹ
344 [gq] = 0x03B8, // q:: θ
345 [gw] = 0x03C9, // w:: ω
346 [ge] = 0x03B5, // e:: ε
347 [gr] = 0x03C1, // r:: ρ
348 [gt] = 0x03C4, // t:: τ
349 [gy] = 0x03C8, // y:: ψ
350 [gu] = 0x03C5, // u:: υ
351 [gi] = 0x03B9, // i:: ι
352 [go] = 0x03BF, // o:: ο
353 [gp] = 0x03C0, // p:: π
354 [ga] = 0x03B1, // a:: α
355 [gs] = 0x03C3, // s:: σ
356 [gd] = 0x03B4, // d:: δ
357 [gf] = 0x03C6, // f:: φ
358 [gg] = 0x03B3, // g:: γ
359 [gh] = 0x03B7, // h:: η
360 [gj] = 0x03D1, // j:: ϑ
361 [gk] = 0x03BA, // k:: κ
362 [gl] = 0x03BB, // l:: λ
363 [gz] = 0x03B6, // z:: ζ
364 [gx] = 0x03BE, // x:: ξ
365 [gc] = 0x03C7, // c:: χ
366 [gv] = 0x03C2, // v:: ς
367 [gb] = 0x03B2, // b:: β
368 [gn] = 0x03BD, // n:: ν
369 [gm] = 0x03BC, // m:: μ
371 [Rone] = 0x2160, // 1:: Ⅰ
372 [Rtwo] = 0x2161, // 2:: Ⅱ
373 [Rthree] = 0x2162, // 3:: Ⅲ
374 [Rfour] = 0x2163, // 4:: Ⅳ
375 [Rfive] = 0x2164, // 5:: Ⅴ
376 [Rsix] = 0x2165, // 6:: Ⅵ
377 [Rseven] = 0x2166, // 7:: Ⅶ
378 [Reight] = 0x2167, // 8:: Ⅷ
379 [Rnine] = 0x2168, // 9:: Ⅸ
380 [Rten] = 0x2169, // 0:: Ⅹ
381 [Gq] = 0x0398, // Q:: Θ
382 [Gw] = 0x03A9, // W:: Ω
383 [Ge] = 0x0395, // E:: Ε
384 [Gr] = 0x03A1, // R:: Ρ
385 [Gt] = 0x03A4, // T:: Τ
386 [Gy] = 0x03A8, // Y:: Ψ
387 [Gu] = 0x03A5, // U:: Υ
388 [Gi] = 0x0399, // I:: Ι
389 [Go] = 0x039F, // O:: Ο
390 [Gp] = 0x03A0, // P:: Π
391 [Ga] = 0x0391, // A:: Α
392 [Gs] = 0x03A3, // S:: Σ
393 [Gd] = 0x0394, // D:: Δ
394 [Gf] = 0x03A6, // F:: Φ
395 [Gg] = 0x0393, // G:: Γ
396 [Gh] = 0x0397, // H:: Η
397 [Gj] = 0x004A, // J:: J
398 [Gk] = 0x039A, // K:: Κ
399 [Gl] = 0x039B, // L:: Λ
400 [Gz] = 0x0396, // Z:: Ζ
401 [Gx] = 0x039E, // X:: Ξ
402 [Gc] = 0x03A7, // C:: Χ
403 [Gv] = 0x0056, // V:: V
404 [Gb] = 0x0392, // B:: Β
405 [Gn] = 0x039D, // N:: Ν
406 [Gm] = 0x039C, // M:: Μ
409 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
411 [BASE] = LAYOUT_ergodox( // layer 0 : default
412 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_GRV,
413 KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_BSLS,
414 KC_EQL, KC_A, KC_O, KC_E, KC_U, KC_I,
415 KC_LSPO, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_AMPR,
416 OSL(FNLR), TT(GREL), TT(MATH), KC_UP, KC_DOWN,
417 KC_LBRC, KC_HOME, KC_INS, KC_SPC, KC_LGUI, KC_DEL,
419 OSL(FNLR), KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
420 KC_PGUP, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH,
421 KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS,
422 KC_PGDN, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSPC,
423 KC_LEFT, KC_RIGHT, KC_RALT, TT(SYMB), TT(QWER),
424 KC_END, KC_RBRC, KC_PSCR, KC_RALT, KC_RCTL, KC_ENT
427 [FNLR] = LAYOUT_ergodox(
429 KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_NO,
430 KC_NO,KC_F11, KC_F12, KC_F13,KC_F14, KC_F15, KC_NO,
431 KC_NO,KC_F21, KC_F22, KC_F23,KC_F24, KC_NO,
432 KC_NO,KC_PAUSE,KC_PSCR,KC_SLCK,KC_NO,KC_NO,KC_NO,
433 EEP_RST,TO(BASE),TO(BASE),TO(BASE),TO(BASE),
438 TO(BASE), KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, UC_M_LN,
439 KC_NO, KC_F16, KC_F17,KC_F18, KC_F19, KC_F20, UC_M_WI,
440 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
441 KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
442 KC_NO,KC_NO, KC_NO, KC_NO, KC_NO,
445 KC_NO, KC_RCTL, KC_NO
448 [QWER] = LAYOUT_ergodox(
449 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_GRV,
450 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_BSLS,
451 KC_AMPR, KC_A, KC_S, KC_D, KC_F, KC_G,
452 KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_QUOT,
453 KC_BSLS, KC_LCTL, KC_LGUI, KC_RALT, KC_APP,
454 KC_LBRC, KC_HOME, KC_PGUP, KC_SPC, KC_LSFT, KC_PGDN,
456 OSL(FNLR), KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
457 KC_MINS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_SLSH,
458 KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
459 KC_EQL, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC,
460 KC_UP, KC_DOWN, KC_LEFT, KC_RIGHT, TO(BASE),
461 KC_END, KC_INS, KC_DEL, KC_RGHT, KC_ENT, KC_SPC
464 [MATH] = LAYOUT_ergodox(
465 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_GRV,
466 KC_TAB, X(Mc), X(Munion), X(arwl), X(or), X(exists), KC_BSLASH,
467 X(arwr), X(root), X(and), X(imply), X(nexists), X(forall),
468 KC_LSPO, KC_SCLN, X(intgrl), X(Mn), X(Mz), X(member), X(arwl),
469 KC_MS_L, TO(BASE), TO(BASE), KC_INS, KC_DEL,
470 KC_LBRC, KC_HOME, KC_UP, KC_SPC, KC_LGUI, KC_DOWN,
472 TT(FNLR), KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
473 KC_PGUP, X(plsminus), X(infin), X(neleof), X(equiv), X(Mq), KC_EQL,
474 X(sum), X(emtyset), X(porp), X(suprsetof), X(not), X(neq),
475 KC_PGDN, X(subsetof), X(intersection), X(angl), X(nmember), X(eleof), KC_RSPC,
476 KC_RCTL, KC_RALT, KC_APP, TO(BASE), TO(BASE),
477 KC_END, KC_RBRC, KC_LEFT, KC_RGHT, KC_ENT, KC_SPC
480 [SYMB] = LAYOUT_ergodox(
481 X(Os), X(Oa), X(Ob), X(Oc), X(Od), X(Oe), X(mdot),
482 X(boxemp), X(bbstr), X(bbrtr), X(bbrtl), X(bbstl), X(degree), X(brkdn),
483 X(boxchk), X(bbmbl), X(bbml), X(bbmr), X(bbmbr), X(neteen),
484 X(boxX), X(bbsbr), X(bbrbr), X(bbrbl), X(bbsbl), X(uxclm), X(brkup),
485 X(floppy), TO(BASE), TO(BASE), X(arwu), X(arwd),
486 X(fire), X(lshade), X(mshade), KC_SPC, X(OS), X(dshade),
488 X(Ox), X(Of), X(Og), X(Oh), X(Oi), X(OA), X(OB),
489 X(numero), X(trade), X(copy), X(cleft), X(cent), X(OED), X(OC),
490 X(Agrave), X(gnd), X(sqr), X(sine), X(opt), X(OD),
491 X(sect), X(Aacute), X(Acircm), X(Adiaer), X(Abreve), X(Atilde), X(OE),
492 X(arwl), X(arwr), X(geq), X(leq), X(OF),
493 X(rang), X(water), X(perup), X(perdn), X(baster), KC_ENT
496 [GREL] = LAYOUT_ergodox(
497 KC_ESC, X(Rone), X(Rtwo), X(Rthree), X(Rfour), X(Rfive), KC_GRV,
498 KC_TAB, KC_QUOT, KC_COMM, KC_DOT, X(gp), X(gy), KC_SLSH,
499 KC_SLSH, X(ga), X(go), X(ge), X(gu), X(gi),
500 MO(GREU), KC_SCLN, X(gq), X(gj), X(gk), X(gx), KC_AMPR,
501 KC_MS_L, TO(BASE), TO(BASE), KC_INS, KC_DEL,
502 KC_LBRC, KC_HOME, KC_UP, KC_SPC, KC_LGUI, KC_DOWN,
504 TO(BASE), X(Rsix), X(Rseven), X(Reight), X(Rnine), X(Rten), KC_BSPC,
505 KC_PGUP, X(gf), X(gg), X(gc), X(gr), X(gl), KC_EQL,
506 X(gd), X(gh), X(gt), X(gn), X(gs), KC_MINS,
507 KC_PGDN, X(gb), X(gm), X(gw), X(gv), X(gz), MO(GREU),
508 KC_RCTL, KC_RALT, KC_APP, TO(BASE), TO(BASE),
509 KC_END, KC_RBRC, KC_LEFT, KC_RGHT, KC_ENT, KC_SPC
512 [GREU] = LAYOUT_ergodox(
513 KC_ESC, X(Rone), X(Rtwo), X(Rthree), X(Rfour), X(Rfive), KC_GRV,
514 KC_TAB, KC_QUOT, KC_COMM, KC_DOT, X(Gp), X(Gy), KC_SLSH,
515 KC_SLSH, X(Ga), X(Go), X(Ge), X(Gu), X(Gi),
516 KC_TRNS, KC_SCLN, X(Gq), X(Gj), X(Gk), X(Gx), KC_AMPR,
517 KC_MS_L, TO(BASE), TO(BASE), KC_INS, KC_DEL,
518 KC_LBRC, KC_HOME, KC_UP, KC_SPC, KC_LGUI, KC_DOWN,
520 TO(BASE), X(Rsix), X(Rseven), X(Reight), X(Rnine), X(Rten), KC_BSPC,
521 KC_PGUP, X(Gf), X(Gg), X(Gc), X(Gr), X(Gl), KC_EQL,
522 X(Gd), X(Gh), X(Gt), X(Gn), X(Gs), KC_MINS,
523 KC_PGDN, X(Gb), X(Gm), X(Gw), X(Gv), X(Gz), KC_TRNS,
524 KC_RCTL, KC_RALT, KC_APP, TO(BASE), TO(BASE),
525 KC_END, KC_RBRC, KC_LEFT, KC_RGHT, KC_ENT, KC_SPC
530 // Runs just one time when the keyboard initializes.
531 void matrix_init_user(void) {
535 // Runs constantly in the background, in a loop.
536 void matrix_scan_user(void) {
537 uint8_t layer = biton32(layer_state);
539 ergodox_board_led_off();
540 ergodox_right_led_1_off();
541 ergodox_right_led_2_off();
542 ergodox_right_led_3_off();
544 // TODO: Make this relevant to the ErgoDox EZ.
546 ergodox_right_led_1_on();
549 ergodox_right_led_2_on();