You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

255 lines
13 KiB

  1. /* Copyright 2021 Richard Nunez <antebios1@gmail.com>
  2. *
  3. * This program is free software: you can redistribute it and/or modify
  4. * it under the terms of the GNU General Public License as published by
  5. * the Free Software Foundation, either version 2 of the License, or
  6. * (at your option) any later version.
  7. *
  8. * This program is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. * GNU General Public License for more details.
  12. *
  13. * You should have received a copy of the GNU General Public License
  14. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  15. */
  16. #include QMK_KEYBOARD_H
  17. // Each layer gets a name for readability, which is then used in the keymap matrix below.
  18. // The underscores don't mean anything - you can have a layer called STUFF or any other name.
  19. // Layer names don't all need to be of the same length, obviously, and you can also skip them
  20. // entirely and just use numbers.
  21. enum custom_layer {
  22. _QWERTY,
  23. _COLEMAK,
  24. _DVORAK,
  25. _LOWER,
  26. _RAISE,
  27. _ADJUST,
  28. };
  29. enum custom_keycodes {
  30. QWERTY = SAFE_RANGE,
  31. COLEMAK,
  32. DVORAK,
  33. LOWER,
  34. RAISE,
  35. BACKLIT
  36. };
  37. // TAP DANCE ***********************************************************
  38. //Tap Dance Declarations
  39. enum {
  40. TD_DEL_BSPC = 0,
  41. TD_ESC_GRAVE,
  42. TD_TAB_TILDE,
  43. TD_MINS_UNDS,
  44. TD_EQL_PLUS,
  45. TD_LBRC_LCBR,
  46. TD_RBRC_RCBR,
  47. TD_SCLN_COLN,
  48. TD_QUOT_DQT,
  49. TD_COMM_LABK,
  50. TD_DOT_RABK,
  51. TD_SLSH_QUES,
  52. TD_BSLS_PIPE,
  53. TD_3_F3,
  54. TD_SHIFT_CAPS
  55. };
  56. // Shift key action:
  57. // Shift held down, then use as normal and use Shift Mode of key.
  58. // Shift tapped, then Capitlize next keystroke only.
  59. // Shift double-tapped, then CAPSLOCK
  60. // Shift double-tapped again, CAPS UNLOCKED
  61. void dance_onshot_lsft(tap_dance_state_t *state, void *user_data) {
  62. switch (state->count) {
  63. case 1: // =>
  64. set_oneshot_mods (MOD_LSFT);
  65. break;
  66. case 2:
  67. register_code (KC_CAPS);
  68. //layer_on (LAYER_NAME);
  69. break;
  70. }
  71. }
  72. //Tap Dance Definitions
  73. tap_dance_action_t tap_dance_actions[] = {
  74. [TD_DEL_BSPC] = ACTION_TAP_DANCE_DOUBLE(KC_DEL, KC_BSPC),
  75. [TD_ESC_GRAVE] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_GRAVE),
  76. [TD_TAB_TILDE] = ACTION_TAP_DANCE_DOUBLE(KC_TAB, KC_TILDE),
  77. [TD_MINS_UNDS] = ACTION_TAP_DANCE_DOUBLE(KC_MINS, KC_UNDS),
  78. [TD_EQL_PLUS] = ACTION_TAP_DANCE_DOUBLE(KC_EQL, KC_PLUS),
  79. [TD_LBRC_LCBR] = ACTION_TAP_DANCE_DOUBLE(KC_LBRC, KC_LCBR),
  80. [TD_RBRC_RCBR] = ACTION_TAP_DANCE_DOUBLE(KC_RBRC, KC_RCBR),
  81. [TD_SCLN_COLN] = ACTION_TAP_DANCE_DOUBLE(KC_SCLN, KC_COLN),
  82. [TD_QUOT_DQT] = ACTION_TAP_DANCE_DOUBLE(KC_QUOT, KC_DQT),
  83. [TD_COMM_LABK] = ACTION_TAP_DANCE_DOUBLE(KC_COMM, KC_LABK),
  84. [TD_DOT_RABK] = ACTION_TAP_DANCE_DOUBLE(KC_DOT, KC_RABK),
  85. [TD_SLSH_QUES] = ACTION_TAP_DANCE_DOUBLE(KC_SLSH, KC_QUES),
  86. [TD_BSLS_PIPE] = ACTION_TAP_DANCE_DOUBLE(KC_BSLS, KC_PIPE),
  87. [TD_3_F3] = ACTION_TAP_DANCE_DOUBLE(KC_3, KC_F3),
  88. [TD_SHIFT_CAPS] = ACTION_TAP_DANCE_FN(dance_onshot_lsft)
  89. };
  90. // Fillers to make layering more clear
  91. // #define _______ KC_TRNS
  92. // #define XXXXXXX KC_NO
  93. #define KC_L1 LOWER
  94. #define KC_L2 RAISE
  95. // MO(_LOWER)
  96. // MO(_RAISE)
  97. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  98. /* Qwerty
  99. * ,-------------------------------------------------------------------------------------------------.
  100. * | DEL | Bksp | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |
  101. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  102. * | HOME | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] |
  103. * |------+------+------+------+------+------+-------------+------+------+------+------+------+------|
  104. * | PGUP | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | Enter|
  105. * |------+------+------+------+------+------+------|------+------+------+------+------+------+------|
  106. * | PGDN | Shift| Z | X | C | V | B | N | M | , | . | / | \ | Shift|
  107. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  108. * | END | Ctrl | Win | Alt | Lower| Space | Space |Raise | Alt | Prop | Ctrl | Esc |
  109. * `-------------------------------------------------------------------------------------------------'
  110. */
  111. [_QWERTY] = LAYOUT(
  112. //,---------------+-----------------+-------+-------+----------+------+----+----+------+----------------+---------------+----------------+----------------+----------------.
  113. TD(TD_DEL_BSPC), KC_BSPC , KC_1 , KC_2 , KC_3 , KC_4 ,KC_5,KC_6,KC_7 , KC_8 , KC_9 , KC_0 ,TD(TD_MINS_UNDS),TD(TD_EQL_PLUS) ,
  114. //|---------------+-----------------+-------+-------+----------+------+----+----+------+----------------+---------------+----------------+----------------+----------------|
  115. KC_HOME , TD(TD_TAB_TILDE),KC_Q ,KC_W ,KC_E ,KC_R ,KC_T,KC_Y,KC_U , KC_I , KC_O , KC_P ,TD(TD_LBRC_LCBR),TD(TD_RBRC_RCBR),
  116. //|---------------+-----------------+-------+-------+----------+------+----+----+------+----------------+---------------+----------------+----------------+----------------|
  117. KC_PGUP , KC_CAPS ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G,KC_H,KC_J ,KC_K , KC_L ,TD(TD_SCLN_COLN),TD(TD_QUOT_DQT) ,KC_ENT ,
  118. //|---------------+-----------------+-------+-------+----------+------+----+----+------+----------------+---------------+----------------+----------------+----------------|
  119. KC_PGDN ,TD(TD_SHIFT_CAPS),KC_Z ,KC_X ,KC_C ,KC_V ,KC_B,KC_N,KC_M ,TD(TD_COMM_LABK),TD(TD_DOT_RABK),TD(TD_SLSH_QUES),TD(TD_BSLS_PIPE),KC_RSFT ,
  120. //|---------------+-----------------+-------+-------+----------+------+----+----+------+----------------+---------------+----------------+----------------+----------------|
  121. KC_END , KC_LCTL ,KC_LGUI,KC_LALT, KC_L1 , KC_SPACE , KC_SPACE , KC_L2 ,KC_RALT ,KC_BTN2 ,KC_RCTL ,TD(TD_ESC_GRAVE)
  122. //`---------------+-----------------+-------+-------+----------+------+----+-----------+----------------+---------------+----------------+----------------+----------------'
  123. ),
  124. /* Lower
  125. * ,-------------------------------------------------------------------------------------------------.
  126. * | INS | ~` | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
  127. * |------+------+------+------+------+------+------+-------------+------+------+------+------+------|
  128. * | | ~ | | UP | | | | | | Next | Vol- | Vol+ | Play | |
  129. * |------+------+------+------+------+------+------+-------------+------+------+------+------+------|
  130. * | | | LEFT | DOWN |RIGHT | | | | | | | | |Enter |
  131. * |------+------+------+------+------+------+------|------+------+------+------+------+------+------|
  132. * | | | | | |ISO ~ |ISO | | | | | | | UP | |
  133. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  134. * | | | | | | | | | | Left | Down |Right |
  135. * `------------------------------------------------------------------------------------------+------'
  136. */
  137. [_LOWER] = LAYOUT(
  138. KC_INS, KC_GRV, KC_F1, KC_F2, KC_F3 , KC_F4 , KC_F5 , KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
  139. _______, KC_TILD, _______, KC_UP, _______ , _______ , _______ , _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, _______,
  140. _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______ , _______ , _______, _______, _______, _______, _______, _______, KC_ENT,
  141. _______, _______, _______, _______, _______ ,S(KC_NUHS),S(KC_NUBS), _______, _______, _______, _______, _______, KC_UP , _______,
  142. _______, _______, _______, _______, _______ , _______ , _______ , _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT
  143. ),
  144. /* Raise
  145. * ,-------------------------------------------------------------------------------------------------.
  146. * | | | | | | | | | | | | | | |
  147. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  148. * ,-------------------------------------------------------------------------------------------------.
  149. * | INS | Bksp | | | | | | | 7 | 8 | 9 | | | |
  150. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  151. * |PrtScr| | | | | | | | 4 | 5 | 6 | - | / | |
  152. * |------+------+------+------+------+-------------+------+------+------+------+------+------+------|
  153. * |ScrLck| | | | | | | | 1 | 2 | 3 | + | * |Enter |
  154. * |------+------+------+------+------+------|------+------+------+------+------+------+------+------|
  155. * |Pause | | | | |ISO # |ISO / | | 0 | , | . | = | | |
  156. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  157. * |CtAlDl| | | | | | | | | | | |
  158. * `-------------------------------------------------------------------------------------------------'
  159. */
  160. [_RAISE] = LAYOUT(
  161. KC_INS, KC_BSPC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_7, KC_8, KC_9, _______, _______, _______,
  162. KC_PSCR, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_4, KC_5, KC_6, KC_MINS, KC_SLSH, XXXXXXX,
  163. KC_SCRL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_1, KC_2, KC_3, KC_PLUS, KC_ASTR, KC_ENT,
  164. KC_PAUS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_NUHS, KC_NUBS,XXXXXXX, KC_0, KC_COMM, KC_DOT,KC_EQL, XXXXXXX, _______,
  165. LALT(LCTL(KC_DEL)), _______, _______, _______, _______, _______, _______, _______,_______,XXXXXXX, XXXXXXX, XXXXXXX
  166. ),
  167. /* Adjust (Lower + Raise)
  168. * ,-------------------------------------------------------------------------------------------------.
  169. * | | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
  170. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  171. * | | | | Reset| | | | | | | | | | Del |
  172. * |------+------+------+------+------+------+------+-------------+------+------+------+------+------|
  173. * | | | | | |Audoff|Aud on|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
  174. * |------+------+------+------+------+------+------+------|------+------+------+------+------+------|
  175. * | | | |Voice-|Voice+|Musoff|Mus on| | | | | | | |
  176. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  177. * | | | | | | | | | | | | | |
  178. * `-------------------------------------------------------------------------------------------------'
  179. */
  180. [_ADJUST] = LAYOUT(
  181. _______, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
  182. XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_DEL,
  183. XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, XXXXXXX, XXXXXXX, XXXXXXX, _______,
  184. XXXXXXX, XXXXXXX, XXXXXXX, AU_PREV, AU_NEXT, MU_ON, MU_OFF, MI_ON, MI_OFF, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  185. XXXXXXX, _______, _______, _______, _______, _______, _______, _______,_______,_______, _______, _______
  186. )
  187. };
  188. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  189. switch (keycode) {
  190. case QWERTY:
  191. if (record->event.pressed) {
  192. #ifdef AUDIO_ENABLE
  193. PLAY_SONG(tone_qwerty);
  194. #endif
  195. set_single_persistent_default_layer(_QWERTY);
  196. }
  197. return false;
  198. break;
  199. case LOWER:
  200. if (record->event.pressed) {
  201. layer_on(_LOWER);
  202. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  203. } else {
  204. layer_off(_LOWER);
  205. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  206. }
  207. return false;
  208. break;
  209. case RAISE:
  210. if (record->event.pressed) {
  211. layer_on(_RAISE);
  212. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  213. } else {
  214. layer_off(_RAISE);
  215. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  216. }
  217. return false;
  218. break;
  219. case BACKLIT:
  220. if (record->event.pressed) {
  221. register_code(KC_RSFT);
  222. #ifdef BACKLIGHT_ENABLE
  223. backlight_step();
  224. #endif
  225. } else {
  226. unregister_code(KC_RSFT);
  227. }
  228. return false;
  229. break;
  230. }
  231. return true;
  232. };