keymap.c 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. /*
  2. Copyright 2019 @foostan
  3. Copyright 2020 Drashna Jaelre <@drashna>
  4. Copyright 2022 Ben Allen <@benrestech>
  5. This program is free software: you can redistribute it and/or modify
  6. it under the terms of the GNU General Public License as published by
  7. the Free Software Foundation, either version 2 of the License, or
  8. (at your option) any later version.
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. GNU General Public License for more details.
  13. You should have received a copy of the GNU General Public License
  14. along with this program. If not, see <http://www.gnu.org/licenses/>.
  15. */
  16. #include QMK_KEYBOARD_H
  17. #define KC_NP KC_NO // key is not present
  18. #define KC_NA KC_NO // present but not available for use
  19. #define KC_NU KC_NO // available but not used
  20. // Each layer gets a name for readability, which is then used in the keymap matrix below.
  21. // The underscores don't mean anything - you can have a layer called STUFF or any other name.
  22. // Layer names don't all need to be of the same length, obviously, and you can also skip them
  23. // entirely and just use numbers.
  24. enum crkbd_layers {
  25. BASE,
  26. MEDR,
  27. NAVR,
  28. MOUR,
  29. NSSL,
  30. NSL,
  31. FUNL,
  32. GAME
  33. };
  34. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  35. [BASE] = LAYOUT_split_3x6_3(
  36. TO(NSSL), KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_QUOT, TO(MOUR),
  37. TO(NSL), LGUI_T(KC_A), LALT_T(KC_R), LCTL_T(KC_S), LSFT_T(KC_T), KC_G, KC_M, LSFT_T(KC_N), LCTL_T(KC_E), LALT_T(KC_I), LGUI_T(KC_O), TO(NAVR),
  38. TO(FUNL), KC_Z, ALGR_T(KC_X), KC_C, KC_D, KC_V, KC_K, KC_H, KC_COMM, ALGR_T(KC_DOT), KC_SLSH, TO(MEDR),
  39. LT(MEDR, KC_ESC), LT(NAVR, KC_SPC), LT(MOUR, KC_TAB), LT(NSSL, KC_ENT), LT(NSL, KC_BSPC), LT(FUNL, KC_DEL)
  40. ),
  41. [NAVR] = LAYOUT_split_3x6_3(
  42. TO(NSSL), QK_BOOT, KC_NA, KC_NA, KC_NA, KC_NA, KC_AGIN, KC_UNDO, KC_CUT, KC_COPY, KC_PSTE, TO(MOUR),
  43. TO(NSL), KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, KC_NA, KC_CAPS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, TO(BASE),
  44. TO(FUNL), KC_NA, KC_ALGR, KC_NA, KC_NA, KC_NA, KC_INS, KC_HOME, KC_PGDN, KC_PGUP, KC_END, TO(MEDR),
  45. KC_NA, KC_NA, KC_NA, KC_ENT, KC_BSPC, KC_DEL
  46. ),
  47. [MOUR] = LAYOUT_split_3x6_3(
  48. TO(NSSL), QK_BOOT, KC_NA, KC_NA, KC_NA, KC_NA, KC_NU, KC_NU, KC_NU, KC_NU, KC_NU, TO(BASE),
  49. TO(NSL), KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, KC_NA, KC_NU, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, TO(NAVR),
  50. TO(FUNL), KC_NA, KC_ALGR, KC_NA, KC_NA, KC_NA, KC_NU, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R, TO(MEDR),
  51. KC_NA, KC_NA, KC_NA, KC_BTN1, KC_BTN3, KC_BTN2
  52. ),
  53. [MEDR] = LAYOUT_split_3x6_3(
  54. TO(NSSL), QK_BOOT, KC_NA, KC_NA, KC_NA, KC_NA, RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, TO(MOUR),
  55. TO(NSL), KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, KC_NA, KC_NU, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, TO(NAVR),
  56. TO(FUNL), KC_NA, KC_ALGR, KC_NA, KC_NA, KC_NA, KC_NU, KC_NU, KC_NU, KC_NU, KC_NU, TO(BASE),
  57. KC_NA, KC_NA, KC_NA, KC_MSTP, KC_MPLY, KC_MUTE
  58. ),
  59. [FUNL] = LAYOUT_split_3x6_3(
  60. TO(NSSL), KC_F12, KC_F7, KC_F8, KC_F9, KC_PSCR, KC_NA, KC_NA, KC_NA, KC_NA, QK_BOOT, TO(MOUR),
  61. TO(NSL), KC_F11, KC_F4, KC_F5, KC_F6, KC_SCRL, KC_NA, KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI, TO(NAVR),
  62. TO(BASE), KC_F10, KC_F1, KC_F2, KC_F3, KC_PAUS, KC_NA, KC_NA, KC_NA, KC_ALGR, KC_NA, TO(MEDR),
  63. KC_APP, KC_SPC, KC_TAB, KC_NA, KC_NA, KC_NA
  64. ),
  65. [NSL] = LAYOUT_split_3x6_3(
  66. TO(NSSL), KC_LBRC, KC_7, KC_8, KC_9, KC_RBRC, KC_NA, KC_NA, KC_NA, KC_NA, QK_BOOT, TO(MOUR),
  67. TO(BASE), KC_SCLN, KC_4, KC_5, KC_6, KC_EQL, KC_NA, KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI, TO(NAVR),
  68. TO(FUNL), KC_GRV, KC_1, KC_2, KC_3, KC_BSLS, KC_NA, KC_NA, KC_NA, KC_ALGR, KC_NA, TO(MEDR),
  69. KC_DOT, KC_0, KC_MINS, TO(GAME), KC_NA, KC_NA
  70. ),
  71. [NSSL] = LAYOUT_split_3x6_3(
  72. TO(BASE), KC_LCBR, KC_AMPR, KC_ASTR, KC_LPRN, KC_RCBR, KC_NA, KC_NA, KC_NA, KC_NA, QK_BOOT, TO(MOUR),
  73. TO(NSL), KC_COLN, KC_DLR, KC_PERC, KC_CIRC, KC_PLUS, KC_NA, KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI, TO(NAVR),
  74. TO(FUNL), KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_PIPE, KC_NA, KC_NA, KC_NA, KC_ALGR, KC_NA, TO(MEDR),
  75. KC_GT, KC_RPRN, KC_UNDS, KC_NA, KC_NA, KC_NA
  76. ),
  77. [GAME] = LAYOUT_split_3x6_3(
  78. KC_NA, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_QUOT, TO(BASE),
  79. KC_NA, KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, LSFT_T(KC_N), LCTL_T(KC_E), LALT_T(KC_I), LGUI_T(KC_O), TO(BASE),
  80. KC_NA, KC_Z, KC_X, KC_C, KC_D, KC_V, KC_K, KC_H, KC_COMM, ALGR_T(KC_DOT), KC_SLSH, TO(BASE),
  81. KC_ESC, KC_SPC, KC_TAB, LT(NSSL, KC_ENT), LT(NSL, KC_BSPC), LT(FUNL, KC_DEL)
  82. )
  83. };
  84. // Default (BASE) lighting layer is HSV_GREEN.
  85. // MEDR lighting layer.
  86. const rgblight_segment_t PROGMEM medr_layer[] = RGBLIGHT_LAYER_SEGMENTS(
  87. {0, 53, HSV_PINK} // Light all LEDs
  88. );
  89. // NAVR lighting layer.
  90. const rgblight_segment_t PROGMEM navr_layer[] = RGBLIGHT_LAYER_SEGMENTS(
  91. {0, 53, HSV_CYAN} // Light all LEDs
  92. );
  93. // MOUR lighting layer.
  94. const rgblight_segment_t PROGMEM mour_layer[] = RGBLIGHT_LAYER_SEGMENTS(
  95. {0, 53, HSV_YELLOW} // Light all LEDs
  96. );
  97. // NSSL lighting layer.
  98. const rgblight_segment_t PROGMEM nssl_layer[] = RGBLIGHT_LAYER_SEGMENTS(
  99. {0, 53, HSV_SPRINGGREEN} // Light all LEDs
  100. );
  101. // NSL lighting layer.
  102. const rgblight_segment_t PROGMEM nsl_layer[] = RGBLIGHT_LAYER_SEGMENTS(
  103. {0, 53, HSV_BLUE} // Light all LEDs
  104. );
  105. // FUNL lighting layer.
  106. const rgblight_segment_t PROGMEM funl_layer[] = RGBLIGHT_LAYER_SEGMENTS(
  107. {0, 53, HSV_RED} // Light all LEDs
  108. );
  109. // GAME lighting layer.
  110. const rgblight_segment_t PROGMEM game_layer[] = RGBLIGHT_LAYER_SEGMENTS(
  111. {0, 53, HSV_PURPLE} // Light all LEDs
  112. );
  113. // Now define the array of layers. Later layers take precedence
  114. const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(
  115. medr_layer,
  116. navr_layer,
  117. mour_layer,
  118. nssl_layer,
  119. nsl_layer,
  120. funl_layer,
  121. game_layer
  122. );
  123. void keyboard_post_init_user(void) {
  124. // Enable the LED layers
  125. rgblight_layers = my_rgb_layers;
  126. rgblight_sethsv(HSV_GREEN);
  127. }
  128. layer_state_t layer_state_set_user(layer_state_t state) {
  129. rgblight_set_layer_state(0, layer_state_cmp(state, MEDR));
  130. rgblight_set_layer_state(1, layer_state_cmp(state, NAVR));
  131. rgblight_set_layer_state(2, layer_state_cmp(state, MOUR));
  132. rgblight_set_layer_state(3, layer_state_cmp(state, NSSL));
  133. rgblight_set_layer_state(4, layer_state_cmp(state, NSL));
  134. rgblight_set_layer_state(5, layer_state_cmp(state, FUNL));
  135. rgblight_set_layer_state(6, layer_state_cmp(state, GAME));
  136. return state;
  137. }