keymap.c 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. #include QMK_KEYBOARD_H
  2. uint16_t copy_paste_timer;
  3. uint16_t enter_timer;
  4. extern rgblight_config_t rgblight_config;
  5. // Define custom keycodes
  6. enum my_keycodes {
  7. KC_CCCV = SAFE_RANGE,
  8. KC_2ENTER
  9. };
  10. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  11. //Layer 0 - Base Layer (F13 to F24, and One Shot Layer 1,2,3,4)
  12. [0] = LAYOUT_ortho_4x4(
  13. KC_F13, KC_F14, KC_F15, KC_F16,
  14. KC_F17, KC_CCCV, KC_F19, KC_F20,
  15. KC_F21, KC_F22, KC_F23, KC_2ENTER,
  16. OSL(1), OSL(2), OSL(3), TG(4) //Transparent to let you go between layers
  17. ),
  18. [1] = LAYOUT_ortho_4x4(
  19. LALT(KC_F13), LALT(KC_F14), LALT(KC_F15), LALT(KC_F16),
  20. LALT(KC_F17), LALT(KC_F18), LALT(KC_F19), LALT(KC_F20),
  21. LALT(KC_F21), LALT(KC_F22), LALT(KC_F23), LALT(KC_F24),
  22. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS //Transparent to let you go between layers
  23. ),
  24. //Layer 2 - Shift + Function Key Layer
  25. [2] = LAYOUT_ortho_4x4(
  26. LSFT(KC_F13), LSFT(KC_F14), LSFT(KC_F15), LSFT(KC_F16),
  27. LSFT(KC_F17), LSFT(KC_F18), LSFT(KC_F19), LSFT(KC_F20),
  28. LSFT(KC_F21), LSFT(KC_F22), LSFT(KC_F23), LSFT(KC_F24),
  29. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS //Transparent to let you go between layers
  30. ),
  31. //Layer 3 - Control + Function Key
  32. [3] = LAYOUT_ortho_4x4(
  33. LCTL(KC_F13), LCTL(KC_F14), LCTL(KC_F15), LCTL(KC_F16),
  34. LCTL(KC_F17), LCTL(KC_F18), LCTL(KC_F19), LCTL(KC_F20),
  35. LCTL(KC_F21), LCTL(KC_F22), LCTL(KC_F23), LCTL(KC_F24),
  36. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS //Transparent to let you go between layers
  37. ),
  38. //Layer 4 - Keyboard Lights. Programming and Special Functions
  39. [4] = LAYOUT_ortho_4x4(
  40. KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLU,
  41. RGB_TOG, RGB_MOD, RGB_RMOD, KC_MUTE,
  42. TO(0), RESET, EEP_RST, KC_VOLD,
  43. KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS //Transparent to let you go between layers
  44. ),
  45. };
  46. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  47. switch (keycode) {
  48. case KC_CCCV: // One key copy/paste
  49. if (record->event.pressed) {
  50. copy_paste_timer = timer_read();
  51. } else {
  52. if (timer_elapsed(copy_paste_timer) > TAPPING_TERM) { // Hold, copy
  53. tap_code16(LCTL(KC_C));
  54. } else { // Tap, paste
  55. tap_code16(LCTL(KC_V));
  56. }
  57. } return true;
  58. case KC_2ENTER:
  59. if (record->event.pressed) {
  60. enter_timer = timer_read();
  61. } else {
  62. if (timer_elapsed(enter_timer) > TAPPING_TERM) { // Hold, shift+enter
  63. tap_code16(LSFT(KC_ENTER));
  64. } else { // Tap, enter
  65. tap_code16(KC_F24);
  66. }
  67. }
  68. return true;
  69. default:
  70. return true;
  71. }
  72. }
  73. void keyboard_post_init_user(void) {
  74. //Enable the LED layers
  75. layer_state_set_user(layer_state);
  76. }
  77. layer_state_t layer_state_set_user(layer_state_t state) {
  78. rgblight_sethsv_noeeprom(HSV_WHITE);
  79. switch(get_highest_layer(state)) {
  80. case 1:
  81. // Green
  82. rgblight_enable_noeeprom();
  83. rgblight_sethsv_noeeprom(HSV_GREEN);
  84. break;
  85. case 2:
  86. // Red
  87. rgblight_enable_noeeprom();
  88. rgblight_sethsv_noeeprom(HSV_RED);
  89. break;
  90. case 3:
  91. // Blue
  92. rgblight_enable_noeeprom();
  93. rgblight_sethsv_noeeprom(HSV_BLUE);
  94. break;
  95. case 4:
  96. // Orange
  97. rgblight_enable_noeeprom();
  98. // rgblight_sethsv_noeeprom(HSV_PURPLE);
  99. rgblight_sethsv_noeeprom(HSV_ORANGE);
  100. break;
  101. default:
  102. // White
  103. //Read RGB Light State
  104. rgblight_config.raw = eeconfig_read_rgblight();
  105. //If enabled, set white
  106. if (rgblight_config.enable) {
  107. rgblight_sethsv_noeeprom(HSV_WHITE);
  108. } else { //Otherwise go back to disabled
  109. rgblight_disable_noeeprom();
  110. }
  111. break;
  112. }
  113. return state;
  114. }