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.

201 lines
7.4 KiB

  1. #include QMK_KEYBOARD_H
  2. extern keymap_config_t keymap_config;
  3. #define _COLEMAK 0
  4. #define _QWERTY 1
  5. #define _NUMPAD 2
  6. #define _LOWER 3
  7. #define _RAISE 4
  8. #define _ADJUST 16
  9. enum custom_keycodes {
  10. COLEMAK = SAFE_RANGE,
  11. QWERTY,
  12. NUMPAD,
  13. LOWER,
  14. RAISE,
  15. ADJUST,
  16. };
  17. /* Fn keys */
  18. enum {
  19. F_SFT = 0,
  20. F_ALT,
  21. F_CTRL,
  22. F_NUMPAD
  23. // F_LOWER,
  24. // F_RAISE,
  25. };
  26. #define KC_ KC_TRNS
  27. #define KC_XXXX KC_NO
  28. #define KC_CMK COLEMAK
  29. #define KC_QWE QWERTY
  30. #define KC_LOWR LOWER
  31. #define KC_RASE RAISE
  32. #define KC_QRAS QRAISE
  33. #define KC_ADJT ADJUST
  34. #define KC_RST RESET
  35. #define KC_BL_S BL_STEP
  36. #define KC_DBUG DEBUG
  37. #define KC_RTOG RGB_TOG
  38. #define KC_RMOD RGB_MOD
  39. #define KC_RHUI RGB_HUI
  40. #define KC_RHUD RGB_HUD
  41. #define KC_RSAI RGB_SAI
  42. #define KC_RSAD RGB_SAD
  43. #define KC_RVAI RGB_VAI
  44. #define KC_RVAD RGB_VAD
  45. //#define KC_CATDEL LCTL(LALT(KC_DEL)) // Ctrl alt del
  46. #define KC_CPY LCTL(KC_C)
  47. #define KC_PST LCTL(KC_V)
  48. #define KC_SELA LCTL(KC_A)
  49. #define KC_UDO LCTL(KC_Z)
  50. #define KC_CUT LCTL(KC_X)
  51. #define KC_SVE LCTL(KC_S)
  52. #define KC_OSH F(F_SFT)
  53. #define KC_OCTL F(F_CTRL)
  54. #define KC_NUMP F(F_NUMPAD)
  55. #define KC_SHESC MT(MOD_LSFT,KC_ESC)
  56. #define KC_SHENT MT(MOD_RSFT,KC_ENT)
  57. //#define KC_NUMP TG(_NUMPAD) // Toggle layer NUMPAD for use in KC_keymaps
  58. //#define KC_RST RESET
  59. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  60. // Colemak Mod-DH is used. https://colemakmods.github.io/mod-dh/
  61. [_COLEMAK] = LAYOUT_kc(
  62. //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----.
  63. TAB , Q , W , F , P , B ,LPRN, RPRN, J , L , U , Y ,SCLN,BSPC,
  64. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  65. BSPC, A , R , S , T , G ,EQL , MINS, K , N , E , I , O ,QUOT,
  66. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  67. SHESC, Z , X , C , D , V ,NUMP, ENT, M , H ,COMM,DOT ,SLSH,SHENT,
  68. //|----+----+----+----+----+----+----. .----+----+----+----+----+----+----|
  69. OCTL,LALT,LGUI,DEL ,LOWR, SPC, OSH, RASE,LEFT,RIGHT,RALT,RCTL
  70. //`----+----+----+--+-+----/----/ \----\----+----+----+----+----'
  71. ),
  72. [_QWERTY] = LAYOUT_kc(
  73. //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----.
  74. ESC , Q , W , E , R , T ,LBRC, RBRC, Y , U , I , O , P ,BSPC,
  75. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  76. TAB , A , S , D , F , G ,LPRN, RPRN, H , J , K , L ,SCLN,QUOT,
  77. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  78. LSFT, Z , X , C , V , B , , , N , M ,COMM,DOT ,SLSH,ENT ,
  79. //|----+----+----+----+----+----+----. .----+----+----+----+----+----+----|
  80. LCTL,LGUI,LALT,DEL , , SPC, SPC , ,LEFT,DOWN, UP ,RIGHT
  81. //`----+----+----+--+-+----/----/ \----\----+----+----+----+----'
  82. ),
  83. [_NUMPAD] = LAYOUT_kc(
  84. //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----.
  85. , , , , , , , ,ASTR, P7 , P8 , P9 ,SLSH, ,
  86. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  87. , , , , , , , ,PIPE, P4 , P5 , P6 ,MINS, ,
  88. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  89. , , , , , , , ,COMM, P1 , P2 , P3 ,PLUS, ,
  90. //|----+----+----+----+----+----+----. .----+----+----+----+----+----+----|
  91. , , , , , , , P0 ,NLCK, , ,
  92. //`----+----+----+--+-+----/----/ \----\----+----+----+----+----'
  93. ),
  94. [_LOWER] = LAYOUT_kc(
  95. //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----.
  96. ,XXXX,XXXX,XXXX,XXXX,CAPS, , ,PGUP,HOME, UP ,END ,DEL , ,
  97. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  98. ,SELA,LALT,LSFT,LCTL,SVE , , ,PGDN,LEFT,DOWN,RGHT,BSPC,INS ,
  99. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  100. ,UDO ,CUT ,CPY ,PST ,XXXX, , ,XXXX,XXXX,COMM,DOT ,SLSH, ,
  101. //|----+----+----+----+----+----+----. .----+----+----+----+----+----+----|
  102. , , , , , , , , , , ,
  103. //`----+----+----+--+-+----/----/ \----\----+----+----+----+----'
  104. ),
  105. [_RAISE] = LAYOUT_kc(
  106. //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----.
  107. ,AMPR,PERC,HASH,EXLM,LPRN, , ,ASTR,RPRN, AT ,DLR ,CIRC,BSPC,
  108. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  109. , 7 , 5 , 3 , 1 , 9 ,LBRC, RBRC, 8 , 0 , 2 , 4 , 6 ,BSLS,
  110. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  111. , GRV,TILD,XXXX,EQL ,PLUS, , ,UNDS,MINS,COMM,DOT ,SLSH,ENT ,
  112. //|----+----+----+----+----+----+----. .----+----+----+----+----+----+----|
  113. , , , , , , , , , , ,
  114. //`----+----+----+--+-+----/----/ \----\----+----+----+----+----'
  115. ),
  116. [_ADJUST] = LAYOUT_kc(
  117. //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----.
  118. , F1 , F2 , F3 , F4 , F5 , F6, F7, F8, F9 ,F10 , F11, F12,BSPC,
  119. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  120. , , , , , , , , , CMK,QWE , , , ,
  121. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  122. , , , , , , , , , , , , , ,
  123. //|----+----+----+----+----+----+----. .----+----+----+----+----+----+----|
  124. , , , , , , , , ,VOLD,VOLU,MUTE
  125. //`----+----+----+--+-+----/----/ \----\----+----+----+----+----'
  126. )
  127. };
  128. const uint16_t PROGMEM fn_actions[] = {
  129. [F_SFT] = ACTION_MODS_ONESHOT (MOD_LSFT)
  130. ,[F_ALT] = ACTION_MODS_ONESHOT (MOD_LALT)
  131. ,[F_CTRL] = ACTION_MODS_ONESHOT (MOD_LCTL)
  132. ,[F_NUMPAD] = ACTION_LAYER_TAP_TOGGLE(_NUMPAD)
  133. // ,[F_LOWER] = ACTION_LAYER_TAP_TOGGLE(LOWER) // FN1 - Momentary Layer 1 (Lower)
  134. // ,[F_RAISE] = ACTION_LAYER_TAP_TOGGLE(RAISE) // FN2 - Momentary Layer 2 (Raise)
  135. };
  136. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  137. switch (keycode) {
  138. case COLEMAK:
  139. if (record->event.pressed) {
  140. set_single_persistent_default_layer(_COLEMAK);
  141. }
  142. return false;
  143. break;
  144. case QWERTY:
  145. if (record->event.pressed) {
  146. set_single_persistent_default_layer(_QWERTY);
  147. }
  148. return false;
  149. break;
  150. case LOWER:
  151. if (record->event.pressed) {
  152. layer_on(_LOWER);
  153. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  154. } else {
  155. layer_off(_LOWER);
  156. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  157. }
  158. return false;
  159. break;
  160. case RAISE:
  161. if (record->event.pressed) {
  162. layer_on(_RAISE);
  163. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  164. } else {
  165. layer_off(_RAISE);
  166. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  167. }
  168. return false;
  169. break;
  170. case ADJUST:
  171. if (record->event.pressed) {
  172. layer_on(_ADJUST);
  173. } else {
  174. layer_off(_ADJUST);
  175. }
  176. return false;
  177. break;
  178. }
  179. return true;
  180. }