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.

172 lines
11 KiB

  1. #pragma once
  2. #include "quantum.h"
  3. // My own keycodes.
  4. enum userspace_custom_keycodes {
  5. PV_ = SAFE_RANGE,
  6. PV_VRSN, // Print firmware version.
  7. PV_MAKE, // Print the make command of the keyboard.
  8. PV_FLSH, // Reset keyboard.
  9. PV_SSNC, // Play Sonic Ring.
  10. PV_SCIN, // Play Coin Sound.
  11. PV_TEST, // For quick testing purposes.
  12. PV_SAFE_RANGE, // Used for extra keycodes in individual keymaps.
  13. };
  14. enum tap_dance_indexes {
  15. // tap dance
  16. TD_FLSH, // flash keyboard (as if the physical flash key was pressed)
  17. };
  18. #define ALLM(kc) LCAG(kc) // Easier name for left ctrl-alt-gui.
  19. #define PV_ESCC CTL_T(KC_ESC) // esc on tap, ctrl on hold.
  20. #define PV_LOCK LCTL(LSFT(KC_PWR)) // Lock computer.
  21. #define TD_3FLS TD(TD_FLSH) // Tap dance 3 times for flash.
  22. // Layers.
  23. enum {
  24. LR_BASE = 0, // used for basic keys like the surrounding ctrl, cmd, etc
  25. LR_QWERTY,
  26. LR_CARPALX,
  27. LR_GAME1, // game layout (space on the left thumb, no modifiers, etc)
  28. LR_GAME2, // game layout (space on the left thumb, no modifiers, etc, arrows)
  29. LR_SYMBOL, // symbol input (!, @, #, etc)
  30. LR_SYSCTL, // system control (music, volume, keyboard flash, etc)
  31. LR_KBCTL, // keyboard control (version, make, flash, etc)
  32. };
  33. // Layer switchers.
  34. #define BASE TO(LR_BASE)
  35. #define QWERTY TO(LR_QWERTY)
  36. #define CARPALX TO(LR_CARPALX)
  37. #define GAME1 TO(LR_GAME1)
  38. #define GAME2 TO(LR_GAME2)
  39. #define SYMBOL MO(LR_SYMBOL)
  40. #define SYSCTL MO(LR_SYSCTL)
  41. #define KBCTL MO(LR_KBCTL)
  42. // Layout parts for easy reuse between keyboard keymaps.
  43. // Transparent.
  44. // ┌─────┬─────┬─────┬─────┬─────┐
  45. // │ │ │ │ │ │
  46. // └─────┴─────┴─────┴─────┴─────┘
  47. #define ___________________________________________ _______, _______, _______, _______, _______
  48. // Numbers.
  49. // ┌─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┐
  50. // │ 1 │ 2 │ 3 │ 4 │ 5 │ │ 6 │ 7 │ 8 │ 9 │ 0 │
  51. // └─────┴─────┴─────┴─────┴─────┘ └─────┴─────┴─────┴─────┴─────┘
  52. #define ________________NUMBERS_L__________________ KC_1, KC_2, KC_3, KC_4, KC_5
  53. #define ________________NUMBERS_R__________________ KC_6, KC_7, KC_8, KC_9, KC_0
  54. // F keys.
  55. // ┌─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┐
  56. // │ F1 │ F2 │ F3 │ F4 │ F5 │ │ F6 │ F7 │ F8 │ F9 │ F10 │
  57. // └─────┴─────┴─────┴─────┴─────┘ └─────┴─────┴─────┴─────┴─────┘
  58. #define ______________________F_L__________________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5
  59. #define ______________________F_R__________________ KC_F6, KC_F7, KC_F8, KC_F9, KC_F10
  60. // QWERTY.
  61. // ┌─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┐
  62. // │ Q │ W │ E │ R │ T │ │ Y │ U │ I │ O │ P │
  63. // ├─────┼─────┼─────╆━━━━━╅─────┤ ├─────╆━━━━━╅─────┼─────┼─────┤
  64. // │ A │ S │ D ┃ F ┃ G │ │ H ┃ J ┃ K │ L │ ; │
  65. // ├─────┼─────┼─────╄━━━━━╃─────┤ ├─────╄━━━━━╃─────┼─────┼─────┤
  66. // │ Z │ X │ C │ V │ B │ │ N │ M │ , │ . │ / │
  67. // └─────┴─────┴─────┴─────┴─────┘ └─────┴─────┴─────┴─────┴─────┘
  68. #define _________________QWERTY_L1_________________ KC_Q, KC_W, KC_E, KC_R, KC_T
  69. #define _________________QWERTY_L2_________________ KC_A, KC_S, KC_D, KC_F, KC_G
  70. #define _________________QWERTY_L3_________________ KC_Z, KC_X, KC_C, KC_V, KC_B
  71. #define _________________QWERTY_R1_________________ KC_Y, KC_U, KC_I, KC_O, KC_P
  72. #define _________________QWERTY_R2_________________ KC_H, KC_J, KC_K, KC_L, KC_SCLN
  73. #define _________________QWERTY_R3_________________ KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH
  74. // QWERTY with mods.
  75. // ┌───────┬───────┬───────┲━━━━━━━┱───────┐ ┌───────┲━━━━━━━┱───────┬───────┬───────┐
  76. // │ ctl/A │ sft/S │ cmd/D ┃ opt/F ┃ G │ │ H ┃ opt/J ┃ cmd/K │ sft/L │ ctl/; │
  77. // └───────┴───────┴───────┺━━━━━━━┹───────┘ └───────┺━━━━━━━┹───────┴───────┴───────┘
  78. // #define _____________MOD_QWERTY_L2_________________ CTL_T(KC_A), SFT_T(KC_S), GUI_T(KC_D), ALT_T(KC_F), KC_G
  79. #define _____________MOD_QWERTY_L2_________________ KC_A, KC_S, KC_D, ALT_T(KC_F), KC_G
  80. #define _____________MOD_QWERTY_R2_________________ KC_H, ALT_T(KC_J), GUI_T(KC_K), SFT_T(KC_L), CTL_T(KC_SCLN)
  81. // ,-----+-----+-----+-----+-----, ,-----+-----+-----+-----+-----,
  82. // | Q | G | M | L | W | | Y | F | I | O | P |
  83. // ,-----+-----+-----x-----x-----, ,-----x-----x-----+-----+-----,
  84. // | D | S | T | N | R | | I | A | K | L | ; |
  85. // ,-----+-----+-----x-----x-----, ,-----x-----x-----+-----+-----,
  86. // | Z | X | C | V | J | | K | P | , | . | / |
  87. // ,-----+-----+-----+-----+-----, ,-----+-----+-----+-----+-----,
  88. #define ________________CARPALX_L1_________________ KC_Q, KC_G, KC_M, KC_L, KC_W
  89. #define ________________CARPALX_L2_________________ KC_D, KC_S, KC_T, KC_N, KC_R
  90. #define ________________CARPALX_L3_________________ KC_Z, KC_X, KC_C, KC_V, KC_J
  91. #define ________________CARPALX_R1_________________ KC_Y, KC_F, KC_U, KC_B, KC_SCLN
  92. #define ________________CARPALX_R2_________________ KC_I, KC_A, KC_E, KC_O, KC_H
  93. #define ________________CARPALX_R3_________________ KC_K, KC_P, KC_COMM, KC_DOT, KC_SLSH
  94. // ,-----+-----+-----+-----+-----, ,-----+-----+-----+-----+-----,
  95. // | ! | @ | { | } | _ | | \ | | ` | | |
  96. // ,-----+-----+-----x-----x-----, ,-----x-----x-----+-----+-----,
  97. // | # | $ | ( | ) | - | | = | & | ' | " | | |
  98. // ,-----+-----+-----x-----x-----, ,-----x-----x-----+-----+-----,
  99. // | % | ^ | [ | ] | + | | * | ~ | < | > | / |
  100. // ,-----+-----+-----+-----+-----, ,-----+-----+-----+-----+-----,
  101. #define _________________SYMBOL_L1_________________ KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_UNDS
  102. #define _________________SYMBOL_L2_________________ KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_MINS
  103. #define _________________SYMBOL_L3_________________ KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_PLUS
  104. #define _________________SYMBOL_R1_________________ KC_BSLS, _______, KC_GRV, _______, _______
  105. #define _________________SYMBOL_R2_________________ KC_EQL, KC_AMPR, KC_QUOT, KC_DQUO, KC_PIPE
  106. #define _________________SYMBOL_R3_________________ KC_ASTR, KC_TILD, KC_LABK, KC_RABK, KC_SLSH
  107. // System Control.
  108. // vol ↓ ctl ↓
  109. // ┌─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┐
  110. // │ │ │ │ │ │ │MUTE │HOME │ ↑ │ END │LOCK │
  111. // ├─────┼─────┼─────╆━━━━━╅─────┤ ├─────╆━━━━━╅─────┼─────┼─────┤
  112. // │ │ │ ┃ ┃ │ │VOLUP┃ ← ┃ ↓ │ → │SLEEP│ ← arrows
  113. // ├─────┼─────┼─────╄━━━━━╃─────┤ ├─────╄━━━━━╃─────┼─────┼─────┤
  114. // │ │ │ │ │ │ │VOLDN│MPREV│MPLAY│MNEXT│ PWR │ ← music
  115. // └─────┴─────┴─────┴─────┴─────┘ └─────┴─────┴─────┴─────┴─────┘
  116. #define _________________SYSCTL_L1_________________ XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_BTN1, XXXXXXX
  117. #define _________________SYSCTL_L2_________________ XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_RIGHT, KC_MS_WH_UP
  118. #define _________________SYSCTL_L3_________________ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_WH_DOWN
  119. // vol v ctl v
  120. #define _________________SYSCTL_R1_________________ KC_MUTE, KC_HOME, KC_UP, KC_END, PV_LOCK
  121. #define _________________SYSCTL_R2_________________ KC_VOLU, KC_LEFT, KC_DOWN, KC_RGHT /* < arrows */, KC_SLEP
  122. #define _________________SYSCTL_R3_________________ KC_VOLD, KC_MPRV, KC_MPLY, KC_MNXT /* < music */, KC_PWR
  123. // ,-----+-----+-----+-----+-----, ,-----+-----+-----+-----+-----,
  124. // |GAME |CRPLX|XXXXX|XXXXX|XXXXX| |XXXXX|XXXXX|XXXXX|XXXXX|XXXXX|
  125. // ,-----+-----+-----x-----x-----, ,-----x-----x-----+-----+-----,
  126. // |XXXXX|XXXXX|XXXXX|XXXXX|XXXXX| |XXXXX|VERSN|MAKE |FLASH|XXXXX|
  127. // ,-----+-----+-----x-----x-----, ,-----x-----x-----+-----+-----,
  128. // |XXXXX|XXXXX|XXXXX|XXXXX|XXXXX| |XXXXX|XXXXX|XXXXX|XXXXX|XXXXX|
  129. // ,-----+-----+-----+-----+-----, ,-----+-----+-----+-----+-----,
  130. #define __________________KBCTL_L1_________________ PV_SSNC, PV_SCIN, PV_TEST, XXXXXXX, XXXXXXX
  131. #define __________________KBCTL_L2_________________ RGB_TOG, RGB_VAI, XXXXXXX, XXXXXXX, XXXXXXX
  132. #define __________________KBCTL_L3_________________ RGB_MOD, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX
  133. #define __________________KBCTL_R1_________________ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
  134. #define __________________KBCTL_R2_________________ XXXXXXX, PV_VRSN, PV_MAKE, PV_FLSH, XXXXXXX
  135. #define __________________KBCTL_R3_________________ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
  136. // We need wrappers in order for these definitions, because they need to be expanded before being used as arguments to the LAYOUT_xxx macro.
  137. #define LAYOUT_ergodox_pretty_wrapper(...) LAYOUT_ergodox_pretty(__VA_ARGS__)
  138. #define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__)
  139. // Extra stuff that might be needed.
  140. void keyboard_post_init_user_keymap(void);
  141. uint32_t layer_state_set_user_keymap(uint32_t state);