keymap.c 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394
  1. /* Copyright 2020 Brandon Schlack
  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. #include "brandonschlack.h"
  18. /**
  19. * Layer Names
  20. */
  21. enum bdn9_layers {
  22. _REEDER = 0,
  23. _MEDIA,
  24. _NAVI,
  25. _KARABINER,
  26. LR_NAV,
  27. LR_REVIEW,
  28. LR_EDIT
  29. };
  30. #define _AUDIO 13
  31. #define _LIGHT 14
  32. /**
  33. * Keycodes & Macros
  34. */
  35. #define DF_REDR DF(_REEDER) // Set Default Layer to Reeder shortcuts
  36. #define DF_MEDA DF(_MEDIA) // Set Default Layer to Media controls
  37. #define DF_NAVI DF(_NAVI) // Set Default Layer to Navigation shortcuts
  38. #define DF_KBNR DF(_KARABINER) // Set Default Layer to Basic Macro keys
  39. enum bdn9_keycodes {
  40. TG_LNAV = KEYMAP_SAFE_RANGE,
  41. TG_REVW,
  42. TG_EDIT
  43. };
  44. /**
  45. * Tap Dances
  46. *
  47. * Use tap dance for layer changes
  48. */
  49. enum bdn9_dances {
  50. TD_DTAP_ADIO = 0,
  51. TD_DTAP_LGHT,
  52. TD_DTAP_ADJT
  53. };
  54. // Tap Dance Definitions
  55. qk_tap_dance_action_t tap_dance_actions[] = {
  56. [TD_DTAP_ADIO] = ACTION_TAP_DANCE_TRIGGER_LAYER(DOUBLE_TAP, _AUDIO),
  57. [TD_DTAP_LGHT] = ACTION_TAP_DANCE_TRIGGER_LAYER(DOUBLE_TAP, _LIGHT),
  58. [TD_DTAP_ADJT] = ACTION_TAP_DANCE_TRIGGER_LAYER(DOUBLE_TAP, _ADJUST),
  59. };
  60. // Tap Dance Aliases
  61. #if defined(RGBLIGHT_ENABLE)
  62. #define DTP_AVC TD(TD_DTAP_LGHT) //
  63. #elif defined(AUDIO_ENABLE)
  64. #define DTP_AVC TD(TD_DTAP_ADIO)
  65. #endif
  66. #define DTP_ADJ TD(TD_DTAP_ADJT)
  67. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  68. /*
  69. Layer: Reeder
  70. ┌───────────┐ ┌───────────┐
  71. │   Items   │  │    Subs   │
  72. │  Prv  Nxt │  │  Prv  Nxt │
  73. ├────────┬──┴──┴──┬────────┤
  74. │ VwBrsw │  Star  │  Sync  │
  75. ├────────┼────────┼────────┤
  76. │ CmdTab │ TgRead │  Clear │
  77. ├────────┼────────┼────────┤
  78. │ VwStard│ VwUnrd │  VwAll │
  79. └────────┴────────┴────────┘
  80. */
  81. [_REEDER] = LAYOUT(
  82. KC_H, KC_S, KC_R,
  83. CMD_TAB, KC_M, DTP_AVC,
  84. G(KC_1), G(KC_2), DTP_ADJ
  85. ),
  86. /*
  87. Layer: Media
  88. ┌───────────┐  ┌───────────┐
  89. │    Vol    │  │   Track   │
  90. │  Prv  Nxt │  │  Prv  Nxt │
  91. ├────────┬──┴──┴──┬────────┤
  92. │  Mute  │ Player │  Sync  │
  93. ├────────┼────────┼────────┤
  94. │ YT<10s │ YT Ply │ YT>10s │
  95. ├────────┼────────┼────────┤
  96. │  Left  │  Spce  │  Rght  │
  97. └────────┴────────┴────────┘
  98. */
  99. [_MEDIA] = LAYOUT(
  100. KC_MUTE, MC_PLYR, KC_MPLY,
  101. KC_J, KC_K, DTP_AVC,
  102. KC_LEFT, KC_SPC, DTP_ADJ
  103. ),
  104. /*
  105. Layer: Navigation
  106. ┌───────────┐  ┌───────────┐
  107. │  Scroll   │  │    Tab    │
  108. │  Up   Dn  │  │  Prv  Nxt │
  109. ├────────┬──┴──┴──┬────────┤
  110. │ ReOTab │ CmdTab │ ClsTab │
  111. ├────────┼────────┼────────┤
  112. │  PgDn  │   Up   │  PgUp  │
  113. ├────────┼────────┼────────┤
  114. │  Left  │  Down  │  Rght  │
  115. └────────┴────────┴────────┘
  116. */
  117. [_NAVI] = LAYOUT(
  118. REO_TAB, CMD_TAB, CLS_TAB,
  119. KC_PGDN, KC_UP, DTP_AVC,
  120. KC_LEFT, KC_DOWN, DTP_ADJ
  121. ),
  122. /*
  123. Layer: Macro/Karabiner
  124. ┌───────────┐  ┌───────────┐
  125. │           │  │           │
  126. │   -    +  │  │   .    =  │
  127. ├────────┬──┴──┴──┬────────┤
  128. │    1   │    2   │    3   │
  129. ├────────┼────────┼────────┤
  130. │    4   │    5   │    6   │
  131. ├────────┼────────┼────────┤
  132. │    7   │    8   │    9   │
  133. └────────┴────────┴────────┘
  134. */
  135. [_KARABINER] = LAYOUT(
  136. KC_P1, KC_P2, KC_P3,
  137. KC_P4, KC_P5, DTP_AVC,
  138. KC_P7, KC_P8, DTP_ADJ
  139. ),
  140. /*
  141. Layer: Lightroom Navigation
  142. ┌───────────┐  ┌───────────┐
  143. │ Thumbnail │  │ Scrl Grid │
  144. │ Dec   Inc │  │ Up     Dn │
  145. ├────────┬──┴──┴──┬────────┤
  146. │ TgRevw │CylGrdVw│ TgEdit │
  147. ├────────┼────────┼────────┤
  148. │  Start │   Up   │  End   │
  149. ├────────┼────────┼────────┤
  150. │  Left  │  Down  │  Rght  │
  151. └────────┴────────┴────────┘
  152. */
  153. [LR_NAV] = LAYOUT(
  154. TG_REVW, KC_J, TG_EDIT,
  155. KC_HOME, KC_UP, DTP_AVC,
  156. KC_LEFT, KC_DOWN, DTP_ADJ
  157. ),
  158. /*
  159. Layer: Review/Rate
  160. ┌───────────┐  ┌───────────┐
  161. │   Stars   │  │   Flag    │
  162. │ Dec   Inc │  │ Dec   Inc │
  163. ├────────┬──┴──┴──┬────────┤
  164. │ TgLNav │ Yellow │ TgEdit │
  165. ├────────┼────────┼────────┤
  166. │ NoStar │  Green │ UnFlag │
  167. ├────────┼────────┼────────┤
  168. │  Left  │  Blue  │  Rght  │
  169. └────────┴────────┴────────┘
  170. */
  171. [LR_REVIEW] = LAYOUT(
  172. TG_LNAV, KC_7, TG_EDIT,
  173. KC_0, KC_8, DTP_AVC,
  174. KC_LEFT, KC_6, DTP_ADJ
  175. ),
  176. /*
  177. Layer: Edit/Develop
  178. ┌───────────┐  ┌───────────┐
  179. │  Sliders  │  │   Value   │
  180. │ Prv   Nxt │  │ Dec   Inc │
  181. ├────────┬──┴──┴──┬────────┤
  182. │ TgRevw │ Bf/Aft │ TgLNav │
  183. ├────────┼────────┼────────┤
  184. │ FlgRjt │  Undo  │ FlgPkd │
  185. ├────────┼────────┼────────┤
  186. │  Left  │  Redo  │  Rght  │
  187. └────────┴────────┴────────┘
  188. */
  189. [LR_EDIT] = LAYOUT(
  190. TG_REVW, KC_BSLS, TG_LNAV,
  191. KC_X, MC_UNDO, DTP_AVC,
  192. KC_LEFT, MC_REDO, DTP_ADJ
  193. ),
  194. /*
  195. Layer: Light
  196. ┌───────────┐  ┌───────────┐
  197. │  RGB Hue  │  │  RGB Sat  │
  198. │ Prv   Nxt │  │ Dec   Inc │
  199. ├────────┬──┴──┴──┬────────┤
  200. │ RGBTgl │  Val+  │ TgLNav │
  201. ├────────┼────────┼────────┤
  202. │  Mode- │  Val-  │  Mode+ │
  203. ├────────┼────────┼────────┤
  204. │ LyrTgl │ NxtThm │  XXXX  │
  205. └────────┴────────┴────────┘
  206. */
  207. [_LIGHT] = LAYOUT(
  208. RGB_TOG, RGB_VAI, TG_LGHT,
  209. RGB_RMOD,RGB_VAD, RGB_MOD,
  210. RGB_LYR, RGB_THM, XXXXXXX
  211. ),
  212. /*
  213. Layer: ADJUST
  214. ┌───────────┐  ┌───────────┐
  215. │    XXXX   │  │   XXXX    │
  216. │           │  │           │
  217. ├────────┬──┴──┴──┬────────┤
  218. │  MAKE  │ Reeder │  Light │
  219. ├────────┼────────┼────────┤
  220. │  Media │  Navi  │  Macro │
  221. ├────────┼────────┼────────┤
  222. │ LR Rvw │ LR Nav │ LR Edt │
  223. └────────┴────────┴────────┘
  224. */
  225. [_ADJUST] = LAYOUT(
  226. QM_MAKE, DF_REDR, TG_LGHT,
  227. DF_MEDA, DF_NAVI, DF_KBNR,
  228. TG_REVW, TG_LNAV, TG_EDIT
  229. ),
  230. };
  231. void keyboard_post_init_keymap(void){
  232. // Debug to Console by default
  233. debug_enable = true;
  234. }
  235. /**
  236. * Encoder
  237. */
  238. const uint16_t PROGMEM encoders[][2][2] = {
  239. [_REEDER] = {{ KC_K, KC_J }, { KC_P, KC_N }},
  240. [_MEDIA] = {{ KC_VOLD, KC_VOLU }, { KC_MPRV, KC_MNXT }},
  241. [_NAVI] = {{ MC_WH_U, MC_WH_D }, { PRV_TAB, NXT_TAB }},
  242. [_KARABINER] = {{ KC_PMNS, KC_PPLS }, { KC_PDOT, KC_PEQL }},
  243. [LR_NAV] = {{ KC_MINS, KC_EQL }, { KC_PGDN, KC_PGUP }},
  244. [LR_REVIEW] = {{ KC_LBRC, KC_RBRC }, { G(KC_DOWN), G(KC_UP) }},
  245. [LR_EDIT] = {{ KC_COMM, KC_DOT }, { KC_MINS, KC_EQL }},
  246. };
  247. bool encoder_update_user(uint8_t index, bool clockwise) {
  248. uint8_t layer = get_highest_layer(layer_state);
  249. switch (layer) {
  250. case _AUDIO:
  251. #ifdef AUDIO_ENABLE
  252. #endif
  253. break;
  254. case _LIGHT:
  255. #ifdef RGBLIGHT_ENABLE
  256. switch (index) {
  257. case 0:
  258. if (clockwise) {
  259. rgblight_increase_hue();
  260. } else {
  261. rgblight_decrease_hue();
  262. }
  263. break;
  264. case 1:
  265. if (clockwise) {
  266. rgblight_increase_sat();
  267. } else {
  268. rgblight_decrease_sat();
  269. }
  270. break;
  271. }
  272. #endif
  273. break;
  274. default:
  275. tap_code16(pgm_read_word(&encoders[layer][index][clockwise]));
  276. break;
  277. }
  278. return true;
  279. }
  280. /**
  281. * Keycodes
  282. */
  283. bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
  284. switch (keycode) {
  285. case TG_LNAV:
  286. if (!record->event.pressed) {
  287. tap_code(KC_G);
  288. layer_move(LR_NAV);
  289. }
  290. break;
  291. case TG_REVW:
  292. if (!record->event.pressed) {
  293. tap_code(KC_E);
  294. layer_move(LR_REVIEW);
  295. }
  296. break;
  297. case TG_EDIT:
  298. if (!record->event.pressed) {
  299. tap_code(KC_D);
  300. layer_move(LR_EDIT);
  301. }
  302. break;
  303. }
  304. return true;
  305. }
  306. /**
  307. * Layer Switch
  308. */
  309. layer_state_t layer_state_set_keymap (layer_state_t state) {
  310. switch (get_highest_layer(state)) {
  311. case LR_NAV:
  312. #if defined(RGBLIGHT_ENABLE)
  313. rgb_layer_helper(HSV_TEAL);
  314. #endif
  315. break;
  316. case LR_REVIEW:
  317. #if defined(RGBLIGHT_ENABLE)
  318. rgb_layer_helper(HSV_CYAN);
  319. #endif
  320. break;
  321. case LR_EDIT:
  322. #if defined(RGBLIGHT_ENABLE)
  323. rgb_layer_helper(HSV_AZURE);
  324. #endif
  325. break;
  326. default:
  327. break;
  328. }
  329. return state;
  330. }
  331. /**
  332. * Tap Dances
  333. */
  334. void process_tap_dance_keycode (bool reset, uint8_t toggle_layer) {
  335. uint16_t keycode = 0;
  336. switch (toggle_layer) {
  337. case _LIGHT:
  338. switch (get_highest_layer(layer_state)) {
  339. case _REEDER:
  340. case _MEDIA:
  341. keycode = KC_L;
  342. break;
  343. case _NAVI:
  344. keycode = KC_PGUP;
  345. break;
  346. case _KARABINER:
  347. keycode = KC_P6;
  348. break;
  349. case LR_NAV:
  350. keycode = KC_END;
  351. case LR_REVIEW:
  352. keycode = KC_U;
  353. case LR_EDIT:
  354. keycode = KC_P;
  355. break;
  356. }
  357. break;
  358. case _ADJUST:
  359. switch (get_highest_layer(layer_state)) {
  360. case _REEDER:
  361. keycode = G(KC_3);
  362. break;
  363. case _KARABINER:
  364. keycode = KC_P9;
  365. break;
  366. case _MEDIA:
  367. case _NAVI:
  368. case LR_NAV:
  369. case LR_REVIEW:
  370. case LR_EDIT:
  371. keycode = KC_RGHT;
  372. break;
  373. }
  374. break;
  375. }
  376. if (!reset) {
  377. register_code16(keycode);
  378. } else {
  379. unregister_code16(keycode);
  380. }
  381. }