eNonsense

Preonic 2025

Jun 15th, 2025
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.71 KB | None | 0 0
  1. // ENON's Key Map for the Massdrop Preonic
  2.  
  3.  
  4. #include QMK_KEYBOARD_H
  5. #include "muse.h"
  6.  
  7. bool is_alt_tab_active = false;
  8. uint16_t alt_tab_timer = 0;
  9.  
  10. enum layers {
  11. _QWERTY,
  12. _COLEMAK,
  13. _GAMING,
  14. _LOWER,
  15. _RAISE,
  16. _FUNCTION
  17. };
  18.  
  19. enum keycodes {
  20. QWERTY = SAFE_RANGE,
  21. COLEMAK,
  22. GAMING,
  23. LOWER,
  24. RAISE,
  25. FUNCTION,
  26. ALT_TAB,
  27. JMPL,
  28. JMPR,
  29. SELL,
  30. SELR,
  31. SELD
  32. };
  33.  
  34. enum { // Tap Dance declarations
  35. TD_CLTAB,
  36. TD_LBRKT,
  37. TD_RBRKT,
  38. };
  39.  
  40. tap_dance_action_t tap_dance_actions[] = {
  41. [TD_CLTAB] = ACTION_TAP_DANCE_DOUBLE(KC_LCTL, LCTL(KC_W)), // Double tap macro key for tab close.
  42. [TD_LBRKT] = ACTION_TAP_DANCE_DOUBLE(KC_LBRC, KC_LCBR), // Double tap left bracket fqaor curly bracket.
  43. [TD_RBRKT] = ACTION_TAP_DANCE_DOUBLE(KC_RBRC, KC_RCBR), // Double tap right bracket for curly bracket.
  44. };
  45.  
  46. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  47.  
  48. /* Qwerty
  49. * ,-----------------------------------------------------------------------------------.
  50. * |ClTab | Calc |PrtSc |ClTab |AltTab| F5 | Play | Prev | Next | Vol- | Vol+ | Mute |
  51. * |------+------+------+------+------+------+------+------+------+------+------+------|
  52. * | Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp |
  53. * |------+------+------+------+------+-------------+------+------+------+------+------|
  54. * | Tab | A | S | D | F | G | H | J | K | L | ; | " |
  55. * |------+------+------+------+------+------|------+------+------+------+------+------|
  56. * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
  57. * |------+------+------+------+------+------+------+------+------+------+------+------|
  58. * | Win |Funct | Alt | Ctrl |Lower | Space |Raise | Left | Down | Up |Right |
  59. * `-----------------------------------------------------------------------------------'
  60. */
  61. [_QWERTY] = LAYOUT_preonic_grid(
  62. LCTL(KC_W), KC_CALC, KC_PSCR, TD(TD_CLTAB), ALT_TAB, KC_F5, KC_MPLY, KC_MPRV, KC_MNXT, KC_VOLD, KC_VOLU, KC_MUTE,
  63. KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
  64. KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
  65. KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
  66. KC_LGUI, FUNCTION, KC_LALT, KC_LCTL, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
  67. ),
  68.  
  69. /* Colemak
  70. * ,-----------------------------------------------------------------------------------.
  71. * |ClTab | Calc |PrtSc |ClTab |AltTab| F5 | Play | Prev | Next | Vol- | Vol+ | Mute |
  72. * |------+------+------+------+------+------+------+------+------+------+------+------|
  73. * | Esc | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
  74. * |------+------+------+------+------+-------------+------+------+------+------+------|
  75. * | Tab | A | R | S | T | D | H | N | E | I | O | " |
  76. * |------+------+------+------+------+------|------+------+------+------+------+------|
  77. * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
  78. * |------+------+------+------+------+------+------+------+------+------+------+------|
  79. * | Win |Funct | Alt | Ctrl |Lower | Space |Raise | Left | Down | Up |Right |
  80. * `-----------------------------------------------------------------------------------'
  81. */
  82. [_COLEMAK] = LAYOUT_preonic_grid(
  83. LCTL(KC_W), KC_CALC, KC_PSCR, LCTL(KC_W), LALT(KC_TAB), KC_F5, KC_MPLY, KC_MRWD, KC_MFFD, KC_VOLD, KC_VOLU, KC_MUTE,
  84. KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
  85. KC_TAB, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
  86. KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
  87. KC_LGUI, FUNCTION,KC_LALT, KC_LCTL, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
  88. ),
  89.  
  90. /* Gaming - Number Row Default
  91. * ,-----------------------------------------------------------------------------------.
  92. * |ClTab | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Mute |
  93. * |------+------+------+------+------+------+------+------+------+------+------+------|
  94. * | Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp |
  95. * |------+------+------+------+------+-------------+------+------+------+------+------|
  96. * | Tab | A | S | D | F | G | H | J | K | L | ; | " |
  97. * |------+------+------+------+------+------|------+------+------+------+------+------|
  98. * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
  99. * |------+------+------+------+------+------+------+------+------+------+------+------|
  100. * | Win |Funct | Alt | Ctrl |Lower | Space |Raise | Left | Down | Up |Right |
  101. * `-----------------------------------------------------------------------------------'
  102. */
  103. [_GAMING] = LAYOUT_preonic_grid(
  104. LCTL(KC_W), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MUTE,
  105. KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
  106. KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
  107. KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
  108. KC_LGUI, FUNCTION, KC_LALT, KC_LCTL, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
  109. ),
  110.  
  111. /* Lower - Number Layer
  112. * ,-----------------------------------------------------------------------------------.
  113. * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 |NumLk |
  114. * |------+------+------+------+------+-------------+------+------+------+------+------|
  115. * | ~ | | | | | Home | # | 7 | 8 | 9 | - | Bksp |
  116. * |------+------+------+------+------+-------------+------+------+------+------+------|
  117. * | |Shift | | | | ( | ) | 4 | 5 | 6 | + | Pipe |
  118. * |------+------+------+------+------+------|------+------+------+------+------+------|
  119. * | | | | | | [2x{ | ]2x} | 1 | 2 | 3 | = | |
  120. * |------+------+------+------+------+------+------+------+------+------+------+------|
  121. * | | | | | | Space | 0 | . | . | |NumLk |
  122. * `-----------------------------------------------------------------------------------'
  123. */
  124. [_LOWER] = LAYOUT_preonic_grid(
  125. KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_NUM_LOCK,
  126. KC_TILD, _______, _______, _______, _______, KC_HOME, KC_HASH, KC_P7, KC_P8, KC_P9, KC_PMNS, KC_BSPC,
  127. _______, KC_LSFT, _______, _______, _______, KC_LPRN, KC_RPRN, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_PIPE,
  128. _______, _______, _______, _______, _______, TD(TD_LBRKT), TD(TD_RBRKT), KC_P1, KC_P2, KC_P3, KC_PSLS, _______,
  129. _______, _______, _______, _______, _______, KC_SPC, KC_SPC, KC_0, KC_PDOT, KC_PDOT, KC_EQL, KC_NUM_LOCK
  130. ),
  131.  
  132. /* Raise - Symbols & Cursor Navigation Layer
  133. * ,-----------------------------------------------------------------------------------.
  134. * | ` | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
  135. * |------+------+------+------+------+------+------+------+------+------+------+------|
  136. * | ` | Home |JumpL | Up |JumpR | End | End | - | * | = | ^ | Del |
  137. * |------+------+------+------+------+-------------+------+------+------+------+------|
  138. * |ShftTb| PgUp | Left | Down | Right| ( | ) | ! | @ | & | % |BkSlsh|
  139. * |------+------+------+------+------+------|------+------+------+------+------+------|
  140. * | | PgDn | SelL | SelD | SelR | [2x{ | ]2x} | _ | $ | # | | |
  141. * |------+------+------+------+------+------+------+------+------+------+------+------|
  142. * | | | | | | Space | | | | | |
  143. * `-----------------------------------------------------------------------------------'
  144. */
  145. [_RAISE] = LAYOUT_preonic_grid(
  146. KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
  147. KC_GRV, KC_HOME, JMPL , KC_UP, JMPR, KC_END, KC_END, KC_MINS, KC_ASTR, KC_EQL, KC_CIRC, KC_DEL,
  148. RSFT(KC_TAB), KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, KC_LPRN, KC_RPRN, KC_EXLM, KC_AT, KC_AMPR, KC_PERC, KC_BSLS,
  149. _______, KC_PGDN, SELL, SELD, SELR, TD(TD_LBRKT), TD(TD_RBRKT), KC_UNDS, KC_DLR, KC_HASH, _______, _______,
  150. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
  151. ),
  152.  
  153. /* Function
  154. * ,-----------------------------------------------------------------------------------.
  155. * | | | | | | | | F10 | F11 | F12 | | |
  156. * |------+------+------+------+------+------+------+------+------+------+------+------|
  157. * | |Qwerty| | |Reset | | | F7 | F8 | F9 | | Del |
  158. * |------+------+------+------+------+-------------+------+------+------+------+------|
  159. * |CpsLk |Colmak| |Aud on|AudOff|Gaming|AGswap| F4 | F5 | F6 | | |
  160. * |------+------+------+------+------+------|------+------+------+------+------+------|
  161. * | | | | | | | | F1 | F2 | F3 | | |
  162. * |------+------+------+------+------+------+------+------+------+------+------+------|
  163. * | | | | |Lower | |Raise | Ins | | | |
  164. * `-----------------------------------------------------------------------------------'
  165. */
  166. [_FUNCTION] = LAYOUT_preonic_grid(
  167. _______, _______, _______, _______, _______, _______, _______, KC_F10, KC_F11, KC_F12, _______, _______,
  168. _______, QWERTY, _______, _______, RESET, _______, _______, KC_F7, KC_F8, KC_F9, _______, KC_DEL,
  169. KC_CAPS, COLEMAK, _______, AU_ON, AU_OFF, GAMING , AG_SWAP, KC_F4, KC_F5, KC_F6, _______, _______,
  170. _______, _______, _______, _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, _______, _______,
  171. _______, _______, _______, _______, _______, TG(LOWER), _______, TG(RAISE), KC_INS, _______, _______, _______
  172. )
  173.  
  174. };
  175.  
  176. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  177. switch (keycode) {
  178. case QWERTY:
  179. if (record->event.pressed) {
  180. set_single_persistent_default_layer(_QWERTY);
  181. }
  182. return false;
  183. break;
  184. case COLEMAK:
  185. if (record->event.pressed) {
  186. set_single_persistent_default_layer(_COLEMAK);
  187. }
  188. return false;
  189. break;
  190. case GAMING:
  191. if (record->event.pressed) {
  192. set_single_persistent_default_layer(_GAMING);
  193. }
  194. return false;
  195. break;
  196. case LOWER:
  197. if (record->event.pressed) {
  198. layer_on(_LOWER);
  199. } else {
  200. layer_off(_LOWER);
  201. }
  202. return false;
  203. break;
  204. case RAISE:
  205. if (record->event.pressed) {
  206. layer_on(_RAISE);
  207. } else {
  208. layer_off(_RAISE);
  209. }
  210. return false;
  211. break;
  212. case FUNCTION:
  213. if (record->event.pressed) {
  214. layer_on(_FUNCTION);
  215. } else {
  216. layer_off(_FUNCTION);
  217. }
  218. return false;
  219. break;
  220. case ALT_TAB: // Single key Super Alt+Tab. Alt released on timer, set below.
  221. if (record->event.pressed) {
  222. if (!is_alt_tab_active) {
  223. is_alt_tab_active = true;
  224. register_code(KC_LALT);
  225. }
  226. alt_tab_timer = timer_read();
  227. register_code(KC_TAB);
  228. } else {
  229. unregister_code(KC_TAB);
  230. }
  231. break;
  232. case JMPL: // Jump 1 Word Left
  233. if (record->event.pressed) {
  234. register_code16(C(KC_LEFT));
  235. clear_keyboard();
  236. }
  237. return false;
  238. break;
  239. case JMPR: // Jump 1 word right
  240. if (record->event.pressed) {
  241. register_code16(C(KC_RIGHT));
  242. clear_keyboard();
  243. }
  244. return false;
  245. break;
  246. case SELL: // Select 1 word left
  247. if (record->event.pressed) {
  248. register_code16(C(S(KC_LEFT)));
  249. clear_keyboard();
  250. }
  251. return false;
  252. break;
  253. case SELD: // Select down 1 line or until end of line
  254. if (record->event.pressed) {
  255. register_code16(C(S(KC_DOWN)));
  256. clear_keyboard();
  257. }
  258. return false;
  259. break;
  260. case SELR: // Select 1 word right
  261. if (record->event.pressed) {
  262. register_code16(C(S(KC_RIGHT)));
  263. clear_keyboard();
  264. }
  265. return false;
  266. break;
  267. }
  268. return true;
  269. };
  270.  
  271. bool encoder_update_user(uint8_t index, bool clockwise) {
  272. if (clockwise) {
  273. register_code(KC_WH_D);
  274. unregister_code(KC_WH_D);
  275. } else {
  276. register_code(KC_WH_U);
  277. unregister_code(KC_WH_U);
  278. }
  279.  
  280. return true;
  281. }
  282.  
  283. void matrix_scan_user(void) {
  284. if (is_alt_tab_active) { // Timer for ALT_TAB keycode
  285. if (timer_elapsed(alt_tab_timer) > 1000) { // Alt release time in miliseconds
  286. unregister_code(KC_LALT);
  287. is_alt_tab_active = false;
  288. }
  289. }
  290. }
Advertisement
Add Comment
Please, Sign In to add comment