keymap.c 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. #include QMK_KEYBOARD_H
  2. extern keymap_config_t keymap_config;
  3. enum custom_layers {
  4. _COLEMAK,
  5. _QWERTY,
  6. _LOWER,
  7. _RAISE,
  8. _MOUSECURSOR,
  9. _ADJUST,
  10. };
  11. enum custom_keycodes {
  12. COLEMAK = SAFE_RANGE,
  13. QWERTY,
  14. LOWER,
  15. RAISE,
  16. MOUSECURSOR,
  17. ADJUST,
  18. DYNAMIC_MACRO_RANGE,
  19. };
  20. #include "dynamic_macro.h"
  21. #define KC_ KC_TRNS
  22. #define KC_COLE COLEMAK
  23. #define KC_LOWR LOWER
  24. #define KC_QWER QWERTY
  25. #define KC_RASE RAISE
  26. #define KC_RECB DYN_REC_START1
  27. #define KC_RECE DYN_REC_STOP
  28. #define KC_RECP DYN_MACRO_PLAY1
  29. #define KC_RSET RESET
  30. #define KC_CTLE CTL_T(KC_ESC) // Tap for Escape, hold for Control
  31. #define KC_HTAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper (Super+Ctrl+Alt+Shift)
  32. #define KC_SBSP SFT_T(KC_BSPC) // Tap for Backspace, hold for Shift
  33. #define KC_SENT KC_SFTENT // Tap for Enter, hold for Shift
  34. #define KC_TGMC TG(_MOUSECURSOR) // Toggle MOUSECURSOR layer
  35. #define KC_SPMC LT(_MOUSECURSOR, KC_SPC) // Tap for Space, hold for MOUSECURSOR layer
  36. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  37. [_QWERTY] = LAYOUT_kc(
  38. //,----+----+----+----+----+----. ,----+----+----+----+----+----.
  39. MEH , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,TGMC,
  40. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  41. HTAB, Q , W , E , R , T , Y , U , I , O , P ,BSPC,
  42. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  43. CTLE, A , S , D , F , G , H , J , K , L ,SCLN,QUOT,
  44. //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
  45. SBSP, Z , X , C , V , B ,LALT, RALT, N , M ,COMM,DOT ,SLSH,SENT,
  46. //`----+----+----+----+----+----+----/ \----+----+----+----+----+----+----'
  47. LGUI,LOWR,SPMC, HTAB,RASE,RGUI
  48. // `----+----+----' `----+----+----'
  49. ),
  50. [_COLEMAK] = LAYOUT_kc(
  51. //,----+----+----+----+----+----. ,----+----+----+----+----+----.
  52. MEH , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,TGMC,
  53. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  54. HTAB, Q , W , F , P , G , J , L , U , Y ,SCLN,BSPC,
  55. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  56. CTLE, A , R , S , T , D , H , N , E , I , O ,QUOT,
  57. //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
  58. SBSP, Z , X , C , V , B ,LALT, RALT, K , M ,COMM,DOT ,SLSH,SENT,
  59. //`----+----+----+----+----+----+----/ \----+----+----+----+----+----+----'
  60. LGUI,LOWR,SPMC, HTAB,RASE,RGUI
  61. // `----+----+----' `----+----+----'
  62. ),
  63. [_LOWER] = LAYOUT_kc(
  64. //,----+----+----+----+----+----. ,----+----+----+----+----+----.
  65. , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 , ,
  66. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  67. TILD,EXLM, AT ,HASH,DLR ,PERC, CIRC,AMPR,ASTR,LPRN,RPRN,DEL ,
  68. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  69. GRV , F1 , F2 , F3 , F4 , F5 , F6 ,UNDS,PLUS,LCBR,RCBR,PIPE,
  70. //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
  71. , F7 , F8 , F9 ,F10 ,F11 , , ,F12 ,MS_L,MS_D,MS_U,MS_R,BTN1,
  72. //`----+----+----+----+----+----+----/ \----+----+----+----+----+----+----'
  73. , , , , ,
  74. // `----+----+----' `----+----+----'
  75. ),
  76. [_RAISE] = LAYOUT_kc(
  77. //,----+----+----+----+----+----. ,----+----+----+----+----+----.
  78. , , , , , , , , , , , ,
  79. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  80. TILD, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 , ,
  81. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  82. GRV , F1 , F2 , F3 , F4 , F5 , F6 ,MINS,EQL ,LBRC,RBRC,BSLS,
  83. //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
  84. , F7 , F8 , F9 ,F10 ,F11 , , ,F12 ,LEFT,DOWN, UP ,RGHT,BTN2,
  85. //`----+----+----+----+----+----+----/ \----+----+----+----+----+----+----'
  86. , , , , ,
  87. // `----+----+----' `----+----+----'
  88. ),
  89. [_MOUSECURSOR] = LAYOUT_kc(
  90. //,----+----+----+----+----+----. ,----+----+----+----+----+----.
  91. , , , , , , , , , , , ,
  92. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  93. , , , UP , , , WH_D,WH_R,MS_U,ACL0,ACL1,ACL2,
  94. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  95. , ,LEFT,DOWN,RGHT, , WH_L,MS_L,MS_D,MS_R,BTN1,BTN2,
  96. //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
  97. , , , , , , , ,WH_U,LEFT,DOWN, UP ,RGHT,BTN3,
  98. //`----+----+----+----+----+----+----/ \----+----+----+----+----+----+----'
  99. , , , , ,
  100. // `----+----+----' `----+----+----'
  101. ),
  102. [_ADJUST] = LAYOUT_kc(
  103. //,----+----+----+----+----+----. ,----+----+----+----+----+----.
  104. , , , , , , , , , , , ,
  105. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  106. ,RSET, , , , , , , , ,RSET, ,
  107. //|----+----+----+----+----+----| |----+----+----+----+----+----|
  108. , , , , , , ,QWER,COLE, , , ,
  109. //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
  110. , , , , , , , , , ,RECB,RECE,RECP,CAPS,
  111. //`----+----+----+----+----+----+----/ \----+----+----+----+----+----+----'
  112. , , , , ,
  113. // `----+----+----' `----+----+----'
  114. )
  115. };
  116. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  117. if (!process_record_dynamic_macro(keycode, record)) {
  118. return false;
  119. }
  120. switch (keycode) {
  121. case COLEMAK:
  122. if (record->event.pressed) {
  123. set_single_persistent_default_layer(_COLEMAK);
  124. }
  125. return false;
  126. break;
  127. case QWERTY:
  128. if (record->event.pressed) {
  129. set_single_persistent_default_layer(_QWERTY);
  130. }
  131. return false;
  132. break;
  133. case LOWER:
  134. if (record->event.pressed) {
  135. layer_on(_LOWER);
  136. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  137. } else {
  138. layer_off(_LOWER);
  139. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  140. }
  141. return false;
  142. break;
  143. case RAISE:
  144. if (record->event.pressed) {
  145. layer_on(_RAISE);
  146. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  147. } else {
  148. layer_off(_RAISE);
  149. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  150. }
  151. return false;
  152. break;
  153. case ADJUST:
  154. if (record->event.pressed) {
  155. layer_on(_ADJUST);
  156. } else {
  157. layer_off(_ADJUST);
  158. }
  159. return false;
  160. break;
  161. }
  162. return true;
  163. }