keymap.c 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. #include QMK_KEYBOARD_H
  2. enum layers {
  3. _BASE, // base layer
  4. _LAYERS, // layer of all layers
  5. _MUSIC, // music mode
  6. _MUSIC_4_LIFE, // music mode until unplugged
  7. _MOUSE, // mousekeys
  8. _TERMINAL, // terminal
  9. _ADMIN // admin duties
  10. };
  11. enum custom_keycodes {
  12. TERM_ABOUT = SAFE_RANGE,
  13. TERM_PRINT,
  14. TERM_FLUSH,
  15. TERM_HELP,
  16. CKEYS_ABOUT,
  17. };
  18. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  19. /* BASE (numpad)
  20. * ,-----------------------.
  21. * | 7 | 8 | 9 | / | <-- Hold for LAYERS
  22. * |-----+-----+-----+-----|
  23. * | 4 | 5 | 6 | * |
  24. * |-----+-----+-----+-----|
  25. * | 1 | 2 | 3 | - |
  26. * |-----+-----+-----+-----|
  27. * | 0 | . | = | + |
  28. * `---------------------- '
  29. */
  30. [_BASE] = LAYOUT(
  31. KC_KP_7, KC_KP_8, KC_KP_9, LT(MO(_LAYERS), KC_PSLS), \
  32. KC_KP_4, KC_KP_5, KC_KP_6, KC_PAST, \
  33. KC_KP_1, KC_KP_2, KC_KP_3, KC_PMNS, \
  34. KC_KP_0, KC_KP_DOT, KC_KP_EQUAL, KC_PPLS \
  35. ),
  36. /* LAYERS
  37. * ,---------------------------.
  38. * | MUSIC | | | X |
  39. * |---------+-----+-----+-----|
  40. * | MOUSE | | | |
  41. * |---------+-----+-----+-----|
  42. * |TERMINAL | | | |
  43. * |---------+-----+-----+-----|
  44. * | ADMIN | | | |
  45. * `---------------------------'
  46. */
  47. [_LAYERS] = LAYOUT(
  48. TG(_MUSIC), _______, _______, _______, \
  49. TG(_MOUSE), _______, _______, _______, \
  50. TG(_TERMINAL), _______, _______, _______, \
  51. TG(_ADMIN), _______, _______, _______\
  52. ),
  53. /* MUSIC
  54. * ,-----------------------.
  55. * | X | | | X |
  56. * |-----+-----+-----+-----|
  57. * | | | |4EVER|
  58. * |-----+-----+-----+-----|
  59. * | OFF | | | |
  60. * |-----+-----+-----+-----|
  61. * | ON | | |MODES|
  62. * `---------------------- '
  63. */
  64. // TODO: Make this music layer the one to jump to other music layers (different octaves)
  65. [_MUSIC] = LAYOUT(
  66. _______, _______, _______, _______, \
  67. _______, _______, _______, TG(_MUSIC_4_LIFE), \
  68. MU_OFF, _______, _______, _______, \
  69. MU_ON, _______, _______, MU_MOD \
  70. ),
  71. /* MUSIC_4_LIFE
  72. * ,-----------------------.
  73. * | ♫ | ♫ | ♫ | ♫ |
  74. * |-----+-----+-----+-----|
  75. * | ♫ | ♫ | ♫ | ♫ |
  76. * |-----+-----+-----+-----|
  77. * | ♫ | ♫ | ♫ | ♫ |
  78. * |-----+-----+-----+-----|
  79. * | ♫ | ♫ | ♫ | ♫ |
  80. * `---------------------- '
  81. */
  82. [_MUSIC_4_LIFE] = LAYOUT(
  83. KC_M, KC_M, KC_M, KC_M, \
  84. KC_M, KC_M, KC_M, KC_M, \
  85. KC_M, KC_M, KC_M, KC_M, \
  86. KC_M, KC_M, KC_M, KC_M \
  87. ),
  88. /* MOUSE
  89. * ,-------------------------------------------------.
  90. * | BUTTON 5 | | SCROLL UP | X |
  91. * |-----------+-----------+------------+------------|
  92. * | X |LEFT CLICK | UP |RIGHT CLICK |
  93. * |-----------+-----------+------------+------------|
  94. * | BUTTON 4 | LEFT | DOWN | RIGHT |
  95. * |-----------+-----------+------------+------=-----|
  96. * | BUTTON 3 |SCROLL LEFT|SCROLL DOWN |SCROLL RIGHT|
  97. * `-------------------------------------------------'
  98. */
  99. [_MOUSE] = LAYOUT(
  100. KC_MS_BTN5, _______, KC_MS_WH_UP, _______, \
  101. _______, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, \
  102. KC_MS_BTN4, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, \
  103. KC_MS_BTN3, KC_MS_WH_LEFT, KC_MS_WH_DOWN, KC_MS_WH_RIGHT \
  104. ),
  105. /* TERMINAL
  106. * ,---------------------------------------.
  107. * | |ABOUT| | X |
  108. * |------------+-----+----------+---------|
  109. * |TERMINAL OFF|PRINT| | |
  110. * |------------+-----+----------+---------|
  111. * | X |FLUSH| | |
  112. * |------------+-----+----------+---------|
  113. * |TERMINAL ON |HELP | | |
  114. * `--------=======------------------------'
  115. */
  116. [_TERMINAL] = LAYOUT(
  117. _______, TERM_ABOUT, _______, _______, \
  118. TERM_OFF, TERM_PRINT, _______, _______, \
  119. _______, TERM_FLUSH, _______, _______, \
  120. TERM_ON, TERM_HELP , _______, _______\
  121. ),
  122. /* ADMIN
  123. * ,-----------------------------------------.
  124. * | RESET | | | X |
  125. * |------------+-----+-----------+----------|
  126. * |ABOUT CKEYS | | | |
  127. * |------------+-----+-----------+----------|
  128. * | | |CLICKY UP |CLICKY OFF|
  129. * |------------+-----+-----------+----------|
  130. * | X | |CLICKY DOWN|CLICKY ON |
  131. * `-----------------------------------------'
  132. */
  133. [_ADMIN] = LAYOUT(
  134. RESET, _______, _______, _______, \
  135. CKEYS_ABOUT, _______, _______, _______, \
  136. _______, _______, _______, CK_OFF, \
  137. _______, _______, _______, CK_ON \
  138. ),
  139. };
  140. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  141. switch (keycode) {
  142. case TERM_ABOUT:
  143. if (record->event.pressed) {
  144. // when keycode TERM_ABOUT is pressed
  145. SEND_STRING("about"SS_TAP(X_ENTER));
  146. } else {
  147. // when keycode TERM_ABOUT is released
  148. }
  149. break;
  150. case TERM_PRINT:
  151. if (record->event.pressed) {
  152. SEND_STRING("print"SS_TAP(X_ENTER));
  153. } else { }
  154. break;
  155. case TERM_FLUSH:
  156. if (record->event.pressed) {
  157. SEND_STRING("flush"SS_TAP(X_ENTER));
  158. } else { }
  159. break;
  160. case TERM_HELP:
  161. if (record->event.pressed) {
  162. SEND_STRING("help"SS_TAP(X_ENTER));
  163. } else { }
  164. break;
  165. case CKEYS_ABOUT:
  166. if (record->event.pressed) {
  167. SEND_STRING("https://cKeys.org"SS_TAP(X_ENTER)"Making people smile one keyboard at a time."SS_TAP(X_ENTER)"cKeys is a volunteer-run 501(c)(3) nonprofit organization."SS_TAP(X_ENTER));
  168. } else { }
  169. break;
  170. }
  171. return true;
  172. };