keymap.c 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. #include QMK_KEYBOARD_H
  2. extern keymap_config_t keymap_config;
  3. #define _QWERTY 0
  4. #define _COLEMAK 1
  5. #define _DVORAK 2
  6. #define _LOWER 3
  7. #define _RAISE 4
  8. #define _ADJUST 16
  9. enum custom_keycodes {
  10. QWERTY = SAFE_RANGE,
  11. COLEMAK,
  12. DVORAK,
  13. LOWER,
  14. RAISE,
  15. NAV,
  16. ADJUST,
  17. };
  18. // Fillers to make layering more clear
  19. #define _______ KC_TRNS
  20. #define KC_ KC_TRNS
  21. #define XXXXXXX KC_NO
  22. #define ESC_CMD MT(MOD_LGUI, KC_ESC)
  23. #define RSE_ENT LT(_RAISE, KC_ENT)
  24. #define KC_LOWR LOWER
  25. #define KC_RASE RAISE
  26. #define KC_ADJ ADJUST
  27. #define DESK_L LCTL(KC_LEFT)
  28. #define DESK_R LCTL(KC_RGHT)
  29. #define MSN_CTL LCTL(KC_UP)
  30. #define APP_WND LCTL(KC_DOWN)
  31. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  32. [_QWERTY] = LAYOUT_ortho_4x12( \
  33. // .--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.
  34. KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I, KC_O , KC_P , KC_BSPC, \
  35. // |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
  36. ESC_CMD, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K, KC_L , KC_SCLN, KC_QUOT, \
  37. // |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
  38. KC_LSPO, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSPC, \
  39. // |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
  40. ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER , KC_SPC , KC_SPC , RSE_ENT, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT \
  41. // '--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------'
  42. ),
  43. [_COLEMAK] = LAYOUT_ortho_4x12( \
  44. // .--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.
  45. KC_TAB , KC_Q , KC_W , KC_F , KC_P , KC_G , KC_J , KC_L , KC_U , KC_Y , KC_SCLN, KC_BSPC, \
  46. // |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
  47. ESC_CMD, KC_A , KC_R , KC_S , KC_T , KC_D , KC_H , KC_N , KC_E , KC_I , KC_O , KC_QUOT, \
  48. // |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
  49. KC_LSPO, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_K , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSPC, \
  50. // |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
  51. ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER , KC_SPC , KC_SPC , RSE_ENT, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT \
  52. // '--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------'
  53. ),
  54. [_DVORAK] = LAYOUT_ortho_4x12( \
  55. // .--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.
  56. KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \
  57. // |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
  58. ESC_CMD, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \
  59. // |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
  60. KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \
  61. // |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
  62. ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER , KC_SPC , KC_SPC , RSE_ENT, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT \
  63. // '--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------'
  64. ),
  65. [_LOWER] = LAYOUT_ortho_4x12( \
  66. // .--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.
  67. KC_TILD, _______, KC_VOLD, MSN_CTL, KC_VOLU, _______, _______, KC_7, KC_8, KC_9, KC_MINS, KC_BSPC, \
  68. // |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
  69. _______, _______, DESK_L , APP_WND, DESK_R , _______, _______, KC_4, KC_5, KC_6, KC_PLUS, KC_PIPE, \
  70. // |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
  71. KC_LBRC, _______, _______, _______, _______, _______, _______, KC_1, KC_2, KC_3, KC_SLSH, KC_RBRC, \
  72. // |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
  73. _______, _______, _______, _______, _______, _______, _______, KC_0, _______, _______, _______, _______ \
  74. // '--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------'
  75. ),
  76. [_RAISE] = LAYOUT_ortho_4x12( \
  77. // .--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.
  78. KC_GRV, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \
  79. // |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
  80. _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, _______, KC_BSLS, \
  81. // |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
  82. KC_LCBR, KC_CIRC, KC_ASTR, KC_UNDS, KC_EQL, KC_AMPR, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, KC_RCBR, \
  83. // |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
  84. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
  85. // '--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------'
  86. ),
  87. [_ADJUST] = LAYOUT_ortho_4x12( \
  88. KC_F11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F12, \
  89. _______, _______, RESET, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
  90. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
  91. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
  92. )
  93. };
  94. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  95. switch (keycode) {
  96. case QWERTY:
  97. if (record->event.pressed) {
  98. set_single_persistent_default_layer(_QWERTY);
  99. }
  100. return false;
  101. break;
  102. case COLEMAK:
  103. if (record->event.pressed) {
  104. set_single_persistent_default_layer(_COLEMAK);
  105. }
  106. return false;
  107. break;
  108. case DVORAK:
  109. if (record->event.pressed) {
  110. set_single_persistent_default_layer(_DVORAK);
  111. }
  112. return false;
  113. break;
  114. case LOWER:
  115. if (record->event.pressed) {
  116. layer_on(_LOWER);
  117. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  118. } else {
  119. layer_off(_LOWER);
  120. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  121. }
  122. return false;
  123. break;
  124. case RAISE:
  125. if (record->event.pressed) {
  126. layer_on(_RAISE);
  127. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  128. } else {
  129. layer_off(_RAISE);
  130. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  131. }
  132. return false;
  133. break;
  134. case ADJUST:
  135. if (record->event.pressed) {
  136. layer_on(_ADJUST);
  137. } else {
  138. layer_off(_ADJUST);
  139. }
  140. return false;
  141. break;
  142. }
  143. return true;
  144. }