logo

qmk_firmware

custom branch of QMK firmware git clone https://anongit.hacktivis.me/git/qmk_firmware.git

keymap.c (29320B)


  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. // Keep track of key presses for Modifier
  18. typedef struct {
  19. bool is_press_action;
  20. int state;
  21. } tap;
  22. // Key Tap enumerator
  23. enum {
  24. SINGLE_TAP = 1,
  25. SINGLE_HOLD = 2,
  26. DOUBLE_TAP = 3,
  27. DOUBLE_HOLD = 4,
  28. TRIPLE_TAP = 5,
  29. TRIPLE_HOLD = 6
  30. };
  31. // Each layer gets a name for readability, which is then used in the keymap matrix below.
  32. // The underscores don't mean anything - you can have a layer called STUFF or any other name.
  33. // Layer names don't all need to be of the same length, obviously, and you can also skip them
  34. // entirely and just use numbers.
  35. enum custom_layer {
  36. _QWERTY,
  37. _ALT,
  38. _CTRL,
  39. _LOWER,
  40. _RAISE,
  41. _MOUSE,
  42. _ADJUST,
  43. };
  44. enum custom_keycodes {
  45. LOWER = SAFE_RANGE,
  46. RAISE,
  47. ADJUST
  48. };
  49. #define QWERTY PDF(_QWERTY)
  50. #define MOUSE PDF(_MOUSE)
  51. // TAP DANCE ***********************************************************
  52. //Tap Dance Declarations
  53. enum {
  54. ALT_OSL1 = 0,
  55. CTL_OSL1,
  56. TD_DEL_BSPC ,
  57. TD_ESC_GRAVE,
  58. TD_TAB_TILDE,
  59. TD_9_LPRN,
  60. TD_0_RPRN,
  61. TD_MINS_UNDS,
  62. TD_EQL_PLUS,
  63. TD_LBRC_LCBR,
  64. TD_RBRC_RCBR,
  65. TD_SCLN_COLN,
  66. TD_QUOT_DQT,
  67. TD_COMM_LABK,
  68. TD_DOT_RABK,
  69. TD_SLSH_QUES,
  70. TD_BSLS_PIPE,
  71. TD_PGUP_HOME,
  72. TD_PGDN_END,
  73. TD_Q_LrALT,
  74. TD_W_Lyr2,
  75. TD_E_Lyr3,
  76. TD_R_LrKey,
  77. TD_T_LrMS,
  78. TD_SHIFT_CAPS,
  79. TD_SPC_ENT,
  80. TD_LayerDn,
  81. TD_LayerUp
  82. };
  83. // Alt key action:
  84. // SINGLE_TAP = toggle layer, then wait for keypress on called layer, then switch back to original layer.
  85. // SINGLE_HOLD = will work as normal sending the keypress.
  86. // DOUBLE_TAP = 3,
  87. // DOUBLE_HOLD = will then toggle layer and keep sending the Alt keycode until next keypress, then switch back to original layer.
  88. // TRIPLE_TAP = 5,
  89. // TRIPLE_HOLD = 6
  90. // // Alt held down, then use as normal.
  91. //
  92. // Alt tapped, then hold Alt,
  93. int cur_dance (tap_dance_state_t *state);
  94. void alt_finished (tap_dance_state_t *state, void *user_data);
  95. void alt_reset (tap_dance_state_t *state, void *user_data);
  96. int cur_dance (tap_dance_state_t *state) {
  97. if (state->count == 1) {
  98. if (state->pressed) return SINGLE_HOLD;
  99. else return SINGLE_TAP;
  100. }
  101. else if (state->count == 2) {
  102. if (state->pressed) return DOUBLE_HOLD;
  103. else return DOUBLE_TAP;
  104. }
  105. else if (state->count == 3) {
  106. if (state->interrupted || !state->pressed) return TRIPLE_TAP;
  107. else return TRIPLE_HOLD;
  108. }
  109. else return 8;
  110. }
  111. static tap alttap_state = {
  112. .is_press_action = true,
  113. .state = 0
  114. };
  115. void alt_finished (tap_dance_state_t *state, void *user_data) {
  116. alttap_state.state = cur_dance(state);
  117. switch (alttap_state.state) {
  118. case SINGLE_TAP: set_oneshot_layer(_ALT, ONESHOT_START); clear_oneshot_layer_state(ONESHOT_PRESSED); break;
  119. case SINGLE_HOLD: register_code(KC_LALT); break;
  120. case DOUBLE_TAP: set_oneshot_layer(_ALT, ONESHOT_START); set_oneshot_layer(_ALT, ONESHOT_PRESSED); break;
  121. case DOUBLE_HOLD: register_code(KC_LALT); layer_on(_ALT); break;
  122. //Last case is for fast typing. Assuming your key is `f`:
  123. //For example, when typing the word `buffer`, and you want to make sure that you send `ff` and not `Esc`.
  124. //In order to type `ff` when typing fast, the next character will have to be hit within the `TAPPING_TERM`, which by default is 200ms.
  125. }
  126. }
  127. void alt_reset (tap_dance_state_t *state, void *user_data) {
  128. switch (alttap_state.state) {
  129. case SINGLE_TAP: break;
  130. case SINGLE_HOLD: unregister_code(KC_LALT); break;
  131. case DOUBLE_TAP: break;
  132. case DOUBLE_HOLD: layer_off(_ALT); unregister_code(KC_LALT); break;
  133. }
  134. alttap_state.state = 0;
  135. }
  136. // Ctrl tapped, then hold Ctrl,
  137. void ctl_finished (tap_dance_state_t *state, void *user_data);
  138. void ctl_reset (tap_dance_state_t *state, void *user_data);
  139. static tap ctltap_state = {
  140. .is_press_action = true,
  141. .state = 0
  142. };
  143. void ctl_finished (tap_dance_state_t *state, void *user_data) {
  144. ctltap_state.state = cur_dance(state);
  145. switch (ctltap_state.state) {
  146. case SINGLE_TAP: set_oneshot_mods(MOD_BIT(KC_LCTL)); break;
  147. case SINGLE_HOLD: register_code(KC_LCTL); break;
  148. case DOUBLE_TAP: set_oneshot_layer(_CTRL, ONESHOT_START); set_oneshot_layer(_CTRL, ONESHOT_PRESSED); break;
  149. case DOUBLE_HOLD: register_code(KC_LCTL); layer_on(_CTRL); break;
  150. //Last case is for fast typing. Assuming your key is `f`:
  151. //For example, when typing the word `buffer`, and you want to make sure that you send `ff` and not `Esc`.
  152. //In order to type `ff` when typing fast, the next character will have to be hit within the `TAPPING_TERM`, which by default is 200ms.
  153. }
  154. }
  155. void ctl_reset (tap_dance_state_t *state, void *user_data) {
  156. switch (ctltap_state.state) {
  157. case SINGLE_TAP: break;
  158. case SINGLE_HOLD: unregister_code(KC_LCTL); break;
  159. case DOUBLE_TAP: break;
  160. case DOUBLE_HOLD: layer_off(_CTRL); unregister_code(KC_LCTL); break;
  161. }
  162. ctltap_state.state = 0;
  163. }
  164. // Layer Down tap dance
  165. void layerDown_finished (tap_dance_state_t *state, void *user_data);
  166. void layerDown_reset (tap_dance_state_t *state, void *user_data);
  167. static tap layerdn_tap_state = {
  168. .is_press_action = true,
  169. .state = 0
  170. };
  171. void layerDown_finished (tap_dance_state_t *state, void *user_data) {
  172. layerdn_tap_state.state = cur_dance(state);
  173. switch (layerdn_tap_state.state) {
  174. case SINGLE_TAP: break;
  175. case SINGLE_HOLD: layer_on(_LOWER); break;
  176. case DOUBLE_TAP: layer_move(_QWERTY); break;
  177. case DOUBLE_HOLD: break;
  178. }
  179. }
  180. void layerDown_reset (tap_dance_state_t *state, void *user_data) {
  181. switch (layerdn_tap_state.state) {
  182. case SINGLE_TAP: break;
  183. case SINGLE_HOLD: layer_off(_LOWER); break;
  184. case DOUBLE_TAP: break;
  185. case DOUBLE_HOLD: break;
  186. }
  187. layerdn_tap_state.state = 0;
  188. }
  189. // Shift key action:
  190. // Shift held down, then use as normal and use Shift Mode of key.
  191. // Shift tapped, then Capitlize next keystroke only.
  192. // Shift double-tapped, then CAPSLOCK
  193. // Shift double-tapped again, CAPS UNLOCKED
  194. // void dance_onshot_lsft(tap_dance_state_t *state, void *user_data) {
  195. void lshift_finished (tap_dance_state_t *state, void *user_data);
  196. void lshift_reset (tap_dance_state_t *state, void *user_data);
  197. static tap lshifttap_state = {
  198. .is_press_action = true,
  199. .state = 0
  200. };
  201. void lshift_finished (tap_dance_state_t *state, void *user_data) {
  202. lshifttap_state.state = cur_dance(state);
  203. switch (lshifttap_state.state) {
  204. case SINGLE_TAP: set_oneshot_mods(MOD_BIT(KC_LSFT)); break;
  205. case SINGLE_HOLD: register_code(KC_LSFT); break;
  206. case DOUBLE_TAP: tap_code (KC_CAPS); break;
  207. case DOUBLE_HOLD: break;
  208. }
  209. }
  210. void lshift_reset (tap_dance_state_t *state, void *user_data) {
  211. switch (lshifttap_state.state) {
  212. case SINGLE_TAP: break;
  213. case SINGLE_HOLD: unregister_code(KC_LSFT); break;
  214. case DOUBLE_TAP: break;
  215. case DOUBLE_HOLD: break;
  216. }
  217. lshifttap_state.state = 0;
  218. }
  219. //Tap Dance Definitions
  220. tap_dance_action_t tap_dance_actions[] = {
  221. [TD_DEL_BSPC] = ACTION_TAP_DANCE_DOUBLE(KC_DEL, KC_BSPC),
  222. [TD_ESC_GRAVE] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_GRAVE),
  223. [TD_TAB_TILDE] = ACTION_TAP_DANCE_DOUBLE(KC_TAB, KC_TILDE),
  224. [TD_9_LPRN] = ACTION_TAP_DANCE_DOUBLE(KC_9, KC_LPRN),
  225. [TD_0_RPRN] = ACTION_TAP_DANCE_DOUBLE(KC_0, KC_RPRN),
  226. [TD_MINS_UNDS] = ACTION_TAP_DANCE_DOUBLE(KC_MINS, KC_UNDS),
  227. [TD_EQL_PLUS] = ACTION_TAP_DANCE_DOUBLE(KC_EQL, KC_PLUS),
  228. [TD_LBRC_LCBR] = ACTION_TAP_DANCE_DOUBLE(KC_LBRC, KC_LCBR),
  229. [TD_RBRC_RCBR] = ACTION_TAP_DANCE_DOUBLE(KC_RBRC, KC_RCBR),
  230. [TD_SCLN_COLN] = ACTION_TAP_DANCE_DOUBLE(KC_SCLN, KC_COLN),
  231. [TD_QUOT_DQT] = ACTION_TAP_DANCE_DOUBLE(KC_QUOT, KC_DQT),
  232. [TD_COMM_LABK] = ACTION_TAP_DANCE_DOUBLE(KC_COMM, KC_LABK),
  233. [TD_DOT_RABK] = ACTION_TAP_DANCE_DOUBLE(KC_DOT, KC_RABK),
  234. [TD_SLSH_QUES] = ACTION_TAP_DANCE_DOUBLE(KC_SLSH, KC_QUES),
  235. [TD_BSLS_PIPE] = ACTION_TAP_DANCE_DOUBLE(KC_BSLS, KC_PIPE),
  236. [TD_PGUP_HOME] = ACTION_TAP_DANCE_DOUBLE(KC_PGUP, KC_HOME),
  237. [TD_PGDN_END] = ACTION_TAP_DANCE_DOUBLE(KC_PGUP, KC_END),
  238. [TD_Q_LrALT] = ACTION_TAP_DANCE_LAYER_MOVE(KC_Q, _ALT),
  239. [TD_R_LrKey] = ACTION_TAP_DANCE_LAYER_MOVE(KC_R, _RAISE),
  240. [TD_T_LrMS] = ACTION_TAP_DANCE_LAYER_MOVE(KC_T, _MOUSE),
  241. [TD_SHIFT_CAPS] = ACTION_TAP_DANCE_FN_ADVANCED(NULL,lshift_finished, lshift_reset),
  242. [TD_SPC_ENT] = ACTION_TAP_DANCE_DOUBLE(KC_SPACE, KC_ENT),
  243. [ALT_OSL1] = ACTION_TAP_DANCE_FN_ADVANCED(NULL,alt_finished, alt_reset),
  244. [CTL_OSL1] = ACTION_TAP_DANCE_FN_ADVANCED(NULL,ctl_finished, ctl_reset),
  245. [TD_LayerDn] = ACTION_TAP_DANCE_FN_ADVANCED(NULL,layerDown_finished, layerDown_reset)
  246. };
  247. // Fillers to make layering more clear
  248. // #define _______ KC_TRNS
  249. // #define XXXXXXX KC_NO
  250. #define KC_L1 LOWER
  251. #define KC_L2 RAISE
  252. // MO(_LOWER)
  253. // MO(_RAISE)
  254. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  255. /* Qwerty
  256. * ,-----------------------------------------------------------------------------------------------------.
  257. * | DEL/Bksp | 1 | 2 | 3 | 4 | 5 | DEL | Bksp | 6 | 7 | 8 | 9 | 0 | - |
  258. * |----------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  259. * | Tab | Q | W | E | R | T | [ | ] | Y | U | I | O | P | = |
  260. * |----------+------+------+------+------+------+-------------+------+------+------+------+------+------|
  261. * | Enter | A | S | D | F | G | PGUP | HOME | H | J | K | L | ; | ' |
  262. * |----------+------+------+------+------+------+------|------+------+------+------+------+------+------|
  263. * | Shift | Z | X | C | V | B | PGDN | END | N | M | , | . | / | \ |
  264. * |----------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  265. * | Ctrl | Win | Alt |Lower |Raise | Space/Enter | Space | <-- | v | ^ | --> | Esc |
  266. * `----------------------------------------------------------------------------------------------------'
  267. */
  268. [_QWERTY] = LAYOUT(
  269. //,-----------------+--------------+-------------+--------------+--------------+--------------+-----------------+-----------------+------+--------+----------------+---------------+---------------+-----------------.
  270. TD(TD_DEL_BSPC) , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_DELETE , KC_BSPC , KC_6 , KC_7 , KC_8 , TD(TD_9_LPRN) , TD(TD_0_RPRN) ,TD(TD_MINS_UNDS),
  271. //|-----------------+--------------+-------------+--------------+--------------+--------------+-----------------+-----------------+------+--------+----------------+---------------+---------------+-----------------|
  272. TD(TD_TAB_TILDE) ,TD(TD_Q_LrALT), KC_W , KC_E ,TD(TD_R_LrKey), TD(TD_T_LrMS), TD(TD_LBRC_LCBR), TD(TD_RBRC_RCBR), KC_Y , KC_U , KC_I , KC_O , KC_P ,TD(TD_EQL_PLUS),
  273. //|-----------------+--------------+-------------+--------------+--------------+--------------+-----------------+-----------------+------+--------+----------------+---------------+----------------+----------------|
  274. KC_ENT , KC_A , KC_S , KC_D , KC_F , KC_G , KC_PGUP , KC_HOME , KC_H , KC_J , KC_K , KC_L ,TD(TD_SCLN_COLN),TD(TD_QUOT_DQT),
  275. //|-----------------+--------------+-------------+--------------+--------------+--------------+-----------------+-----------------+------+--------+----------------+---------------+----------------+----------------|
  276. TD(TD_SHIFT_CAPS), KC_Z , KC_X , KC_C , KC_V , KC_B , KC_PGDN , KC_END , KC_N , KC_M ,TD(TD_COMM_LABK),TD(TD_DOT_RABK),TD(TD_SLSH_QUES),TD(TD_BSLS_PIPE),
  277. //|-----------------+--------------+-------------+--------------+--------------+--------------+-----------------+-----------------+------+--------+----------------+---------------+----------------+----------------|
  278. TD(CTL_OSL1) , KC_LGUI , TD(ALT_OSL1),TD(TD_LayerDn), KC_L2 , TD(TD_SPC_ENT) , TD(TD_SPC_ENT) , KC_LEFT, KC_DOWN , KC_UP , KC_RIGHT ,TD(TD_ESC_GRAVE)
  279. //`-----------------+--------------+-------------+--------------+--------------+--------------------------------+------------------------+--------+----------------+---------------+----------------+----------------'
  280. ),
  281. /* ALT Layout
  282. * ,-----------------------------------------------------------------------------------------------------.
  283. * | DEL/Bksp | 1 | 2 | 3 | 4 | 5 | DEL | Bksp | 6 | 7 | 8 | 9 | 0 | - |
  284. * |----------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  285. * | Tab | Q | W | E | R | T | [ | ] | Y | U | I | O | P | = |
  286. * |----------+------+------+------+------+------+-------------+------+------+------+------+------+------|
  287. * | Enter | A | S | D | F | G | PGUP | HOME | H | J | K | L | ; | ' |
  288. * |----------+------+------+------+------+------+------|------+------+------+------+------+------+------|
  289. * | Shift | Z | X | C | V | B | PGDN | END | N | M | , | . | / | \ |
  290. * |----------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  291. * | Ctrl | Win | Alt | Fn |Lower | Space/Enter | Space | <-- | v | ^ | --> | Esc |
  292. * `----------------------------------------------------------------------------------------------------'
  293. */
  294. [_ALT] = LAYOUT(
  295. //,-----------------+-------------+-------------+--------------+--------------+---------+-----------------+-----------------+---------+---------+----------------+---------------+---------------+----------------.
  296. KC_TRNS , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_TRNS , KC_TRNS , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11,
  297. //|-----------------+-------------+-------------+--------------+--------------+---------+-----------------+-----------------+---------+---------+----------------+---------------+---------------+----------------|
  298. KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_F12,
  299. //|-----------------+-------------+-------------+--------------+--------------+---------+-----------------+-----------------+---------+---------+----------------+---------------+---------------+----------------|
  300. // KC_ENT , KC_A , KC_S , KC_D , KC_F , KC_G , KC_PGUP , KC_HOME , KC_H , KC_J , KC_K , KC_L ,TD(TD_SCLN_COLN),TD(TD_QUOT_DQT),
  301. KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS,
  302. //|-----------------+-------------+-------------+--------------+--------------+---------+-----------------+-----------------+---------+---------+----------------+---------------+---------------+----------------|
  303. KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS,
  304. //|-----------------+-------------+-------------+--------------+--------------+---------+-----------------+-----------------+---------+---------+----------------+---------------+---------------+----------------|
  305. TD(CTL_OSL1) , KC_LGUI , TD(ALT_OSL1),TD(TD_LayerDn), KC_L2 , TD(TD_SPC_ENT) , TD(TD_SPC_ENT) , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS ,TD(TD_ESC_GRAVE)
  306. //`-----------------+-------------+-------------+--------------+--------------+---------------------------+---------------------------+---------+----------------+---------------+---------------+----------------'
  307. ),
  308. /* CTRL Layout
  309. * ,-----------------------------------------------------------------------------------------------------.
  310. * | DEL/Bksp | F1 | F2 | F3 | F4 | F5 | DEL | Bksp | F6 | F7 | F8 | F9 | F10 | F11 |
  311. * |----------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  312. * | Tab | Q | W | E | R | T | [ | ] | Y | U | I | O | P | F12 |
  313. * |----------+------+------+------+------+------+-------------+------+------+------+------+------+------|
  314. * | Enter | A | S | D | F | G | PGUP | HOME | H | J | K | L | ; | ' |
  315. * |----------+------+------+------+------+------+------|------+------+------+------+------+------+------|
  316. * | Shift | Z | X | C | V | B | PGDN | END | N | M | , | . | / | \ |
  317. * |----------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  318. * | Ctrl | Win | Alt | Fn |Lower | Space/Enter | Space | <-- | v | ^ | --> | Esc |
  319. * `----------------------------------------------------------------------------------------------------'
  320. */
  321. [_CTRL] = LAYOUT(
  322. //,-----------------+-------------+-------------+--------------+--------------+---------+-----------------+-----------------+---------+---------+----------------+---------------+---------------+----------------.
  323. KC_TRNS , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_TRNS , KC_TRNS , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11,
  324. //|-----------------+-------------+-------------+--------------+--------------+---------+-----------------+-----------------+---------+---------+----------------+---------------+---------------+----------------|
  325. KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_F12,
  326. //|-----------------+-------------+-------------+--------------+--------------+---------+-----------------+-----------------+---------+---------+----------------+---------------+---------------+----------------|
  327. KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS,
  328. //|-----------------+-------------+-------------+--------------+--------------+---------+-----------------+-----------------+---------+---------+----------------+---------------+---------------+----------------|
  329. KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS,
  330. //|-----------------+-------------+-------------+--------------+--------------+---------+-----------------+-----------------+---------+---------+----------------+---------------+---------------+----------------|
  331. TD(CTL_OSL1) , KC_LGUI , TD(ALT_OSL1),TD(TD_LayerDn), KC_L2 , TD(TD_SPC_ENT) , TD(TD_SPC_ENT) , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS ,TD(TD_ESC_GRAVE)
  332. //`-----------------+-------------+-------------+--------------+--------------+---------------------------+---------------------------+---------+----------------+---------------+---------------+----------------'
  333. ),
  334. /* Lower
  335. * ,-------------------------------------------------------------------------------------------------.
  336. * | ` | F1 | F2 | F3 | F4 | F5 | | | F6 | F7 | F8 | F9 | F10 | F11 |
  337. * |------+------+------+------+------+------+------+-------------+------+------+------+------+------|
  338. * | ~ | | UP | | | | | | Prev | Next | Vol- | Vol+ | Play | F12 |
  339. * |------+------+------+------+------+------+------+-------------+------+------+------+------+------|
  340. * |Enter | LEFT | DOWN |RIGHT | | | | | | | MUTE | | | |
  341. * |------+------+------+------+------+------+------|------+------+------+------+------+------+------|
  342. * | | | | | | | | | | | | | | |
  343. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  344. * | | | | | | | | | | | | |
  345. * `------------------------------------------------------------------------------------------+------'
  346. */
  347. [_LOWER] = LAYOUT(
  348. KC_GRV , KC_F1 , KC_F2 , KC_F3 , KC_F4, KC_F5, KC_INS , _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
  349. KC_TILD, _______, KC_UP , _______ , _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, KC_F12,
  350. KC_ENT , KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, KC_MUTE, _______, _______, _______,
  351. _______, _______, _______, _______ , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  352. _______, _______, _______, _______ , _______, _______ , _______ , _______, _______, _______, _______, _______
  353. ),
  354. /* Raise
  355. * ,-------------------------------------------------------------------------------------------------.
  356. * | | | | | | | | | | | | | | |
  357. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  358. * ,-------------------------------------------------------------------------------------------------.
  359. * | Bksp | | | | | | | | | 7 | 8 | 9 | | |
  360. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  361. * | | | | | | | | | | 4 | 5 | 6 | - | / |
  362. * |------+------+------+------+------+-------------+------+------+------+------+------+------+------|
  363. * | | | | | | | | | | 1 | 2 | 3 | + | * |
  364. * |------+------+------+------+------+------|------+------+------+------+------+------+------+------|
  365. * | | | | | | | | | | 0 | , | . | = | |
  366. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  367. * |CtAlDl| | | | | | Enter | | | | | |
  368. * `-------------------------------------------------------------------------------------------------'
  369. */
  370. /*
  371. KC_INS
  372. KC_PSCR
  373. KC_SCRL
  374. KC_PAUS
  375. */
  376. [_RAISE] = LAYOUT(
  377. KC_BSPC , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_7 , KC_8 , KC_9 , _______, _______,
  378. XXXXXXX , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_4 , KC_5 , KC_6 , KC_MINS, KC_SLSH,
  379. XXXXXXX , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_1 , KC_2 , KC_3 , KC_PLUS, KC_ASTR,
  380. XXXXXXX , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_0 , KC_COMM, KC_DOT , KC_EQL , XXXXXXX,
  381. LALT(LCTL(KC_DEL)), _______, _______, _______, _______, _______ , KC_ENT , _______, _______, _______, _______, _______
  382. ),
  383. /* Adjust (Lower + Raise)
  384. * ,-------------------------------------------------------------------------------------------------.
  385. * | | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
  386. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  387. * | | | | |Reset | | | | | | | | | Del |
  388. * |------+------+------+------+------+------+------+-------------+------+------+------+------+------|
  389. * | | | | | |Audoff|Aud on|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
  390. * |------+------+------+------+------+------+------+------|------+------+------+------+------+------|
  391. * | | | |Voice-|Voice+|Musoff|Mus on| | | | | | | |
  392. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  393. * | | | | | | | | | | | | | |
  394. * `-------------------------------------------------------------------------------------------------'
  395. */
  396. [_ADJUST] = LAYOUT(
  397. _______, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
  398. XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_DEL,
  399. XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, XXXXXXX, XXXXXXX, XXXXXXX, _______,
  400. XXXXXXX, XXXXXXX, XXXXXXX, AU_PREV, AU_NEXT, MU_ON, MU_OFF, MI_ON, MI_OFF, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
  401. XXXXXXX, _______, _______, _______, _______, _______, _______, _______,_______,_______, _______, _______
  402. )
  403. ,
  404. /* Layer 3 - Mouse Controls
  405. * ,-------------------------------------------------------------------------------------------------.
  406. * | | F1 | F2 | F3 | F4 | F5 | | | F6 | F7 | F8 | F9 | F10 | F11 |
  407. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  408. * |SPEED0| |MS UP | | | | | | | |WHUP | | | F12 |
  409. * |------+------+------+------+------+------+------+-------------+------+------+------+------+------|
  410. * |SPEED1|MSLeft|MS DN |MSRite| | | | | |WHLeft|WHDN |WHRite| | |
  411. * |------+------+------+------+------+------+------+------|------+------+------+------+------+------|
  412. * |SPEED2| | | | | | | | | BTN1 | BTN2 | BTN3 | | |
  413. * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
  414. * | Ctrl | Win | Alt |Lower |Raise | Space/Enter | Space | <-- | v | ^ | --> | Esc |
  415. * `-------------------------------------------------------------------------------------------------'
  416. */
  417. [_MOUSE] = LAYOUT(
  418. _______ , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , XXXXXXX, XXXXXXX, KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11,
  419. KC_MS_ACCEL0, XXXXXXX , KC_MS_UP , XXXXXXX , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX , KC_MS_WH_UP , XXXXXXX , XXXXXXX , KC_F12,
  420. KC_MS_ACCEL1, KC_MS_LEFT, KC_MS_DOWN , KC_MS_RIGHT , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_WH_LEFT, KC_MS_WH_DOWN, KC_MS_WH_RIGHT, XXXXXXX , XXXXXXX,
  421. KC_MS_ACCEL2, XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_BTN1 , KC_MS_BTN2 , KC_MS_BTN3 , XXXXXXX , XXXXXXX,
  422. TD(CTL_OSL1), KC_LGUI , TD(ALT_OSL1), TD(TD_LayerDn) , KC_L2 , TD(TD_SPC_ENT) , KC_SPACE , KC_LEFT , KC_DOWN , KC_UP , KC_RIGHT, TD(TD_ESC_GRAVE)
  423. )
  424. };
  425. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  426. switch (keycode) {
  427. case KC_TRNS:
  428. case KC_NO:
  429. /* Always cancel one-shot layer when another key gets pressed */
  430. if (record->event.pressed && is_oneshot_layer_active())
  431. clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED);
  432. return true;
  433. case QK_BOOT:
  434. /* Don't allow reset from oneshot layer state */
  435. if (record->event.pressed && is_oneshot_layer_active()){
  436. clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED);
  437. return false;
  438. }
  439. return true;
  440. case LOWER:
  441. if (record->event.pressed) {
  442. layer_on(_LOWER);
  443. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  444. } else {
  445. layer_off(_LOWER);
  446. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  447. }
  448. return false;
  449. case RAISE:
  450. if (record->event.pressed) {
  451. layer_on(_RAISE);
  452. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  453. } else {
  454. layer_off(_RAISE);
  455. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  456. }
  457. return false;
  458. }
  459. return true;
  460. };