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.

302 lines
17 KiB

  1. /* Modified from
  2. Copyright 2017 Christopher Courtney <drashna@live.com> @drashna
  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. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. GNU General Public License for more details.
  11. You should have received a copy of the GNU General Public License
  12. along with this program. If not, see <http://www.gnu.org/licenses/>.
  13. */
  14. #pragma once
  15. #include "quantum.h"
  16. #include "version.h"
  17. #include "eeprom.h"
  18. #ifdef USE_BABBLEPASTE
  19. # include "babblePaste.h"
  20. #endif
  21. #ifdef RGB_MATRIX_ENABLE
  22. # include "rgb_matrix.h"
  23. #endif
  24. #define USERSPACE_ACTIVE
  25. /* Define layer names */
  26. enum userspace_layers { _QWERTY = 0, _CDH, _SYM, _MOV, _DMOV, _NUM };
  27. /*
  28. define modifiers here, since MOD_* doesn't seem to work for these
  29. */
  30. #define MODS_SHIFT_MASK (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))
  31. #define MODS_CTRL_MASK (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTRL))
  32. #define MODS_ALT_MASK (MOD_BIT(KC_LALT) | MOD_BIT(KC_RALT))
  33. #define MODS_GUI_MASK (MOD_BIT(KC_LGUI) | MOD_BIT(KC_RGUI))
  34. #if defined(BABBLE_END_RANGE)
  35. # define USER_START BABBLE_END_RANGE
  36. #else
  37. # if defined(KEYMAP_SAFE_RANGE)
  38. # define USER_START KEYMAP_SAFE_RANGE
  39. # else
  40. # define USER_START SAFE_RANGE
  41. # endif
  42. #endif
  43. enum userspace_custom_keycodes {
  44. EPRM = BABBLE_END_RANGE, // Resets EEPROM do defaults (as in eeconfig_init)
  45. VRSN, // Prints QMK Firmware and board info
  46. KC_QWERTY, // Sets default layer to QWERTY
  47. KC_CDH, // Sets default layer to COLEMAK DH
  48. KC_MAKE,
  49. VIBRK, // escape :
  50. DHPASTE, // allow pasting via qwerty V,not colemak V
  51. TMUX, // TMUX Ctrl-b
  52. ALTSYM, // Alt when held, toggle MOV when tapped
  53. GUISYM,
  54. SPCMOV,
  55. SAVE, // placeholder for CTRL-S while I get babble working again.
  56. NEW_SAFE_RANGE // Keymap specific codes come AFTER this
  57. };
  58. #define QWERTY KC_QWERTY
  59. #define COLEMAK KC_CDH
  60. #define KC_RESET RESET
  61. #if (!defined(LAYOUT) && defined(KEYMAP))
  62. # define LAYOUT KEYMAP
  63. #endif
  64. #define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__)
  65. #define _________________QWERTY_L1_________________ KC_Q, KC_W, KC_E, KC_R, KC_T
  66. #define _________________QWERTY_L2_________________ KC_A, KC_S, KC_D, KC_F, KC_G
  67. #define _________________QWERTY_L3_________________ KC_Z, KC_X, KC_C, KC_V, KC_B
  68. #define _________________QWERTY_R1_________________ KC_Y, KC_U, KC_I, KC_O, KC_P
  69. #define _________________QWERTY_R2_________________ KC_H, KC_J, KC_K, KC_L, KC_SCLN
  70. #define _________________QWERTY_R3_________________ KC_N, KC_M, KC_COMM, KC_DOT, KC_SLASH
  71. #define ______________COLEMAK_MOD_DH_L1____________ KC_Q, KC_W, KC_F, KC_P, KC_B
  72. #define ______________COLEMAK_MOD_DH_L2____________ KC_A, KC_R, KC_S, KC_T, KC_G
  73. #define ______________COLEMAK_MOD_DH_L3____________ KC_Z, KC_X, KC_C, KC_D, KC_V
  74. #define ______________COLEMAK_MOD_DH_R1____________ KC_J, KC_L, KC_U, KC_Y, KC_SCLN
  75. #define ______________COLEMAK_MOD_DH_R2____________ KC_M, KC_N, KC_E, KC_I, KC_O
  76. #define ______________COLEMAK_MOD_DH_R3____________ KC_K, KC_H, KC_COMM, KC_DOT, KC_SLASH
  77. #define ________________NUMBER_LEFT________________ KC_1, KC_2, KC_3, KC_4, KC_5
  78. #define ________________NUMBER_RIGHT_______________ KC_6, KC_7, KC_8, KC_9, KC_0
  79. #define ________________FKEYS__LEFT________________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5
  80. #define ________________FKEYS__RIGHT_______________ KC_F6, KC_F7, KC_F8, KC_F9, KC_F10
  81. #define ________________FKEYS__FAR_RIGHT___________ KC_F11, KC_F12, KC_PSCR, KC_HOME, KC_END
  82. #define ________________NAV_NUMBER_LEFT____________ KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI, XXXXXXX
  83. #define ___________________BLANK___________________ _______, _______, _______, _______, _______
  84. #define ___________________BLOCK___________________ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
  85. // BabblePaste
  86. #define ____________BABBLE_SWITCH_L________________ B_MAC, B_READ, B_LINUX, B_VI, _______
  87. #define ____________BABBLE_SWITCH_R________________ B_CROM, B_LINUX, B_WIN, QWERTY, COLEMAK
  88. /////////MOVE - Full size keyboard version
  89. /* ,--------------------------------------------. ,--------------------------------------------.
  90. * N |Lock |PrevApp |NextApp |PasteVal| | | | |SwitchKB|Devtools| Lock |
  91. * |--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------|
  92. * 01 | ESC |FindPrev| Find |FindNext| \n cell| |ParStart|LineStrt| Up | EOL | ParEnd |
  93. * |--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------|
  94. * 02 | SelA | Do_DEL | Shift | Undo |Hsplit+ | | WrdLft | Left | Down | Right | WrdRght|
  95. * |--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------|
  96. * 03 |Vspli+ | Cut | Copy | Paste | Paste | | WinPrv | Tab-- | NewTab | Tab++ | WinNxt |
  97. * `--------------------------------------------' `--------------------------------------------'
  98. */
  99. /* Movement layer similar to Extend, but fully enriched with babblepaste */
  100. #define ____________BABBLE_MOV_LNUM________________ B_LOCK, B_PAPP, B_NAPP, B_PASTV, XXXX
  101. #define ____________BABBLE_MOV_L1__________________ KC_ESC, B_FINDP, B_FIND, B_FINDN, B_NCEL
  102. #define ____________BABBLE_MOV_L2__________________ B_SELA, MO(_DMOV), KC_LSFT, B_UNDO, B_HSPLIT
  103. #define ____________BABBLE_MOV_L3__________________ B_VSPLIT, B_CUT, B_COPY, B_PASTE, B_PASTE
  104. #define ____________BABBLE_MOV_RNUM________________ XXXX, XXXX, B_KEYB, B_BDEV, B_LOCK
  105. #define ____________BABBLE_MOV_R1__________________ B_PTOP, B_GSOL, B_UP, B_GEOL, B_PEND
  106. #define ____________BABBLE_MOV_R2__________________ B_L1W, B_L1C, B_DOWN, B_R1C, B_R1W
  107. #define ____________BABBLE_MOV_R3__________________ B_PWIN, B_PTAB, B_NTAB, B_NXTB, B_NWIN
  108. // Move in a direction, deleting as we go, or do opposite of Mov layer action */
  109. /* ,--------------------------------------------. ,--------------------------------------------.
  110. * 01 | Esc | |Replace |MultiSel|PasteVal| | . |LineStrt| . | EOL | . |
  111. * |--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------|
  112. * 02 | | Do_Mov | Shift | Redo |Hsplit- | | WrdLft | Left | . | Right | WrdRght|
  113. * |--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------|
  114. * 03 |Vsplit- | Cut | Copy | Paste |Paste | | App-- | ZoomOut| NewWin | ZoomIn | App+ |
  115. * `--------------------------------------------' `--------------------------------------------'
  116. */
  117. #define _________BABBLE_DELMOV_L1__________________ KC_ESC, _______, B_RPLACE, B_MSEL, B_PASTV
  118. #define _________BABBLE_DELMOV_L2__________________ XXXXXXX, _______, _______, B_REDO, B_HUNSPT
  119. #define _________BABBLE_DELMOV_L3__________________ B_VUNSPT, B_CUT, B_COPY, B_PASTE, B_PRVFM
  120. #define _________BABBLE_DELMOV_R1__________________ XXXXXXX, B_DSOL, _______, B_DEOL, XXXXXXX
  121. #define _________BABBLE_DELMOV_R2__________________ B_DLW, KC_BSPC, _______, B_DEL, B_DRW
  122. #define _________BABBLE_DELMOV_R3__________________ B_NAPP, B_ZOUT, B_WINN, B_ZIN, B_PAPP
  123. /* SYM / excel / programming logic +=1 optimization*/
  124. /* ,----------------------------------. ,----------------------------------.
  125. * 01 | | [ | ] | { | } | | { | } | ( | ) | |
  126. * |------+------+------+------+------| |------+------+------+------+------|
  127. * 02 | ^ | ! | = | 0 | $ | | # | 1 | - | + | ` |
  128. * |------+------+------+------+------| |------+------+------+------+------|
  129. * 03 | \ | % | @ | | | _ | | * | & | ~ | . | / |
  130. * `----------------------------------' `----------------------------------'
  131. Memnonics
  132. ^begining end$ . &&/|| on strong finger. #at start of line.
  133. * (multiply) opposite /
  134. Minus is left of plus as normal.
  135. ` is a shifted ''
  136. ~/ is an outwards roll. / .* is a roll. !=0 is a roll , ++1 --1 roll.
  137. _ is hard to get to.
  138. */
  139. #define ___________________SYM_L1__________________ XXXXXXX, KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR
  140. #define ___________________SYM_L2__________________ KC_CIRC, KC_EXLM, KC_EQL, KC_0, KC_DLR
  141. #define ___________________SYM_L3__________________ KC_BSLS, KC_PERC, KC_AT, KC_PIPE, KC_UNDS
  142. #define ___________________SYM_R1__________________ KC_LCBR, KC_RCBR, KC_LPRN, KC_RPRN, XXXXXXX
  143. #define ___________________SYM_R2__________________ KC_HASH, KC_1, KC_MINS, KC_PLUS, KC_GRAVE
  144. #define ___________________SYM_R3__________________ KC_ASTR, KC_AMPR, KC_TILDE, KC_DOT, KC_SLASH
  145. // Move and brackets - 40% optimization.
  146. /* ,--------------------------------------------. ,--------------------------------------------.
  147. * 01 | ESC | ( | ) | { | } | | PgDn |LineStrt| Up | EOL | PGUp |
  148. * |--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------|
  149. * 02 | [ |DelMove | Shift | Undo | ] | | WrdLft | Left | Down | Right | WrdRght|
  150. * |--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------|
  151. * 03 | CDH | Cut | Copy | Paste | Paste | | Babl-- | Tab-- | NewTab | Tab++ | Babl++ |
  152. * `--------------------------------------------' `--------------------------------------------'
  153. */
  154. #define __________40_______MOV_L1__________________ KC_ESC, KC_LPRN, KC_RPRN, KC_LCBR, KC_RCBR
  155. #define __________40_______MOV_L2__________________ KC_LBRC, MO(_DMOV), KC_LSFT, KC_UNDO, KC_RBRC
  156. #define __________40_______MOV_L3__________________ KC_CDH, B_CUT, B_COPY, B_PASTE, B_PASTE
  157. #define __________40_______MOV_R1__________________ B_PGDN, B_GSOL, B_UP, B_GEOL, B_PGUP
  158. #define __________40_______MOV_R2__________________ B_L1W, B_L1C, B_DOWN, B_R1C, B_R1W
  159. #define __________40_______MOV_R3__________________ B_DEC, B_PTAB, B_NTAB, B_NXTB, B_INC
  160. // Move in a direction, deleting as we go, or do opposite of Mov layer action
  161. /* ,--------------------------------------------. ,--------------------------------------------.
  162. * 01 | Esc | | B_print| | | | Zoom-- |LineStrt| . | EOL | Zoom++|
  163. * |--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------|
  164. * 02 | | Do_DEL | Shift | Redo | | | WrdLft | Left | . | Right | WrdRght|
  165. * |--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------|
  166. * 03 | Qwerty | Cut | Copy | Paste |Paste | | WIN-- |PrvFrame| Split |nxtFrame| Win++ |
  167. * `--------------------------------------------' `--------------------------------------------'
  168. */
  169. #define ____________40__DELMOV_L1__________________ KC_ESC, XXXXXXX, B_MODE, XXXXXXX, XXXXXXX
  170. #define ____________40__DELMOV_L2__________________ XXXXXXX, _______, _______, B_REDO, XXXXXXX
  171. #define ____________40__DELMOV_L3__________________ KC_QWERTY, _______, _______, _______, _______
  172. #define ____________40__DELMOV_R1__________________ B_ZOUT, B_DSOL, _______, B_DEOL, B_ZIN
  173. #define ____________40__DELMOV_R2__________________ B_DLW, KC_BSPC, _______, B_DEL, B_DRW
  174. #define ____________40__DELMOV_R3__________________ B_PWIN, B_PRVFM, B_VSPLIT, B_NXTFM, B_NWIN
  175. /* NUM + symbol / programming logic +=1 optimization*/
  176. /* ,----------------------------------. ,----------------------------------.
  177. * 01 | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 |
  178. * |------+------+------+------+------| |------+------+------+------+------|
  179. * 02 | ^ | ! | = | 0 | $ | | # | 1 | - | + | ` |
  180. * |------+------+------+------+------| |------+------+------+------+------|
  181. * 03 | \ | % | @ | | | _ | | * | & | ~ | . | / |
  182. * `----------------------------------' `----------------------------------'
  183. Memnonics
  184. ^begining end$ . &&/|| on strong finger. #at start of line.
  185. Minus is left of plus as normal. ` is a shifted ''
  186. ~/ and is an outwards roll. / * is a roll.
  187. _ is hard to get to.
  188. */
  189. #define __________40_______NUM_L1__________________ ________________NUMBER_LEFT________________
  190. #define __________40_______NUM_L2__________________ KC_CIRC, KC_EXLM, KC_EQL, KC_0, KC_DLR
  191. #define __________40_______NUM_L3__________________ KC_BSLS, KC_PERC, KC_AT, KC_PIPE, KC_UNDS
  192. #define __________40_______NUM_R1__________________ ________________NUMBER_RIGHT_______________
  193. #define __________40_______NUM_R2__________________ KC_HASH, KC_1, KC_MINS, KC_PLUS, KC_GRAVE
  194. #define __________40_______NUM_R3__________________ KC_ASTR, KC_AMPR, KC_TILDE, KC_DOT, KC_SLASH
  195. // NUM
  196. /* ,----------------------------------. ,----------------------------------.
  197. * 01 | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 |
  198. * |------+------+------+------+------| |------+------+------+------+------|
  199. * 02 | F1 | F2 | F3 | F4 | F5 | | + | 4 | 5 | 6 | - |
  200. * |------+------+------+------+------| |------+------+------+------+------|
  201. * 03 | F11 | F12 | | CDH| QWERT| | 0 | 1 | 2 | 3 | . |
  202. * `----------------------------------' `----------------------------------'
  203. */
  204. #define ___________________NUM_L1__________________ ________________NUMBER_LEFT________________
  205. #define ___________________NUM_L2__________________ ________________FKEYS__LEFT________________
  206. #define ___________________NUM_L3__________________ KC_F11, KC_F11, XXXXXXX, XXXXXXX, QWERTY
  207. #define ___________________NUM_R1__________________ ________________NUMBER_RIGHT_______________
  208. #define ___________________NUM_R2__________________ KC_PLUS, KC_4, KC_5, KC_6, KC_MINS
  209. #define ___________________NUM_R3__________________ KC_0, KC_1, KC_2, KC_3, KC_DOT
  210. // Standard Sym
  211. /* ,----------------------------------. ,----------------------------------.
  212. * 01 | ! | @ | # | $ | % | | ^ | & | * | ( | ) |
  213. * |------+------+------+------+------| |------+------+------+------+------|
  214. */
  215. #define __________________SSYM_L1__________________ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC
  216. #define __________________SSYM_R1__________________ KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN
  217. #define _________________ADJUST_L1_________________ RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_TOG
  218. #define _________________ADJUST_L2_________________ MU_TOG, CK_TOGG, AU_ON, AU_OFF, AG_NORM
  219. #define _________________ADJUST_L3_________________ RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, KC_RGB_T
  220. #define _________________ADJUST_R1_________________ KC_SEC1, KC_SEC2, KC_SEC3, KC_SEC4, KC_SEC5
  221. #define _________________ADJUST_R2_________________ AG_SWAP, QWERTY, COLEMAK, DVORAK, WORKMAN
  222. #define _________________ADJUST_R3_________________ MG_NKRO, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT
  223. /* excel centric symbol layer*/
  224. /* ,--------------------------------------------. ,--------------------------------------------.
  225. * 01 | DelRow|InsCol | SelCol |PasteVal| | | . | 1 | 2 | 3 | |
  226. * |--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------|
  227. * 02 | - |InsRow | SelRow | Undo | + | | * | 4 | 5 | 6 | - |
  228. * |--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------|
  229. * 03 | Undo | Cut | Copy | Paste |Paste | | / | 7 | 8 | 9 | Paste |
  230. * `--------------------------------------------' `--------------------------------------------'
  231. */
  232. #define _________________EXCEL_L1__________________ B_DROW, B_ICOL, B_SELC, B_PASTV, XXXX
  233. #define _________________EXCEL_L2__________________ KC_MINS, B_ICOL, B_SELC, B_UNDO, KC_PLUS
  234. #define _________________EXCEL_L3__________________ B_UNDO, B_CUT, B_COPY, B_PASTE, B_PASTE
  235. #define _________________EXCEL_R1__________________ XXXXXXX, KC_1, KC_2, KC_3, XXXXXXX
  236. #define _________________EXCEL_R2__________________ KC_ASTR, KC_4, KC_5, KC_6, KC_MINS
  237. #define _________________EXCEL_R3__________________ KC_SLASH, KC_7, KC_8, KC_8, B_PASTE
  238. /* Based on BEKL 15 punctuation
  239. * ,----------------------------------. ,----------------------------------.
  240. * 01 | | < | $ | > | | | | [ | _ | ] | |
  241. * |------+------+------+------+------| |------+------+------+------+------|
  242. * 02 | \ | ( | "" | ) | # | | % | { | = | } | "|" |
  243. * |------+------+------+------+------| |------+------+------+------+------|
  244. * 03 | | : | * | + | | | | & | ^ | ~ | |
  245. * `----------------------------------' `----------------------------------'
  246. */
  247. #define ______________BEKL_SYM_L1__________________ XXXXXXX, KC_LBRC, KC_RBRC, KC_LCBR, XXXXXXX
  248. #define ______________BEKL_SYM_L2__________________ KC_CIRC, KC_EXLM, KC_EQL, KC_0, KC_DLR
  249. #define ______________BEKL_SYM_L3__________________ KC_BSLS, KC_PERC, KC_AT, KC_PIPE, KC_UNDS
  250. #define ______________BEKL_SYM_R1__________________ XXXXXXX, KC_RCBR, KC_LPRN, KC_RPRN, XXXXXXX
  251. #define ______________BEKL_SYM_R2__________________ KC_HASH, KC_KP_1, KC_MINS, KC_PLUS, KC_GRAVE
  252. #define ______________BEKL_SYM_R3__________________ KC_PERC, KC_TILDE, KC_AMPR, KC_DOT, KC_SLASH