keymap.c 7.4 KB

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