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.

190 lines
7.9 KiB

  1. /* Copyright 2018 Othi
  2. *
  3. * This program is free software: you can redistribute it and/or modify
  4. * it under the terms of the GNU General Public License as published by
  5. * the Free Software Foundation, either version 2 of the License, or
  6. * (at your option) any later version.
  7. *
  8. * This program is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. * GNU General Public License for more details.
  12. *
  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. // read README.md for rundown of what does what
  18. // #define BL 0
  19. #define CL 0
  20. #define NM_MODE 2
  21. #define VI_MODE 3
  22. #define FN3 4
  23. #define ACCENT 5
  24. #define ACCENT_CAP 6
  25. //Unicode keymaps
  26. void eeconfig_init_user(void) {
  27. set_unicode_input_mode(UC_LNX);
  28. }
  29. #define DE_AE UC(0x00E4)
  30. #define DE_SS UC(0x00DF)
  31. #define DE_OE UC(0x00F6)
  32. #define DE_UE UC(0x00FC)
  33. #define DE_AE_CAP UC(0x00C4)
  34. #define DE_OE_CAP UC(0x00D6)
  35. #define DE_UE_CAP UC(0x00DC)
  36. uint32_t layer_state_set_user(uint32_t state) {
  37. switch (biton32(state)) {
  38. case NM_MODE:
  39. rgblight_setrgb (0x00, 0x66, 0x00);
  40. break;
  41. case VI_MODE:
  42. rgblight_setrgb (0x66, 0x66, 0x00);
  43. break;
  44. case ACCENT:
  45. rgblight_setrgb (0x7A, 0x00, 0xFF);
  46. break;
  47. case ACCENT_CAP:
  48. rgblight_setrgb (0x7A, 0xFF, 0xFF);
  49. break;
  50. default: // for any other layers, or the default layer
  51. rgblight_setrgb (0xFF, 0x00, 0x00);
  52. break;
  53. }
  54. return state;
  55. }
  56. //Tap Dance Declarations
  57. enum {
  58. CTL_NM = 0,
  59. ALT_NM = 1,
  60. SFT_NM = 2,
  61. GUI_NM = 3
  62. };
  63. void dance_CTL_NM_finished (qk_tap_dance_state_t *state, void *user_data) {
  64. if (state->count == 1) {
  65. set_oneshot_mods(MOD_LCTL);
  66. } else {
  67. register_code (KC_LCTL);
  68. layer_on(NM_MODE);
  69. }
  70. }
  71. void dance_CTL_NM_reset (qk_tap_dance_state_t *state, void *user_data) {
  72. if (state->count == 1) {
  73. unregister_code (KC_LCTL);
  74. } else {
  75. unregister_code (KC_LCTL);
  76. layer_off(NM_MODE);
  77. }
  78. }
  79. void dance_GUI_NM_finished (qk_tap_dance_state_t *state, void *user_data) {
  80. if (state->count == 1) {
  81. register_code (KC_LGUI);
  82. } else {
  83. register_code (KC_LGUI);
  84. layer_on(NM_MODE);
  85. }
  86. }
  87. void dance_GUI_NM_reset (qk_tap_dance_state_t *state, void *user_data) {
  88. if (state->count == 1) {
  89. unregister_code (KC_LGUI);
  90. } else {
  91. unregister_code (KC_LGUI);
  92. layer_off(NM_MODE);
  93. }
  94. }
  95. void dance_ALT_NM_finished (qk_tap_dance_state_t *state, void *user_data) {
  96. if (state->count == 1) {
  97. register_code (KC_LALT);
  98. } else {
  99. register_code (KC_LALT);
  100. layer_on(NM_MODE);
  101. }
  102. }
  103. void dance_ALT_NM_reset (qk_tap_dance_state_t *state, void *user_data) {
  104. if (state->count == 1) {
  105. unregister_code (KC_LALT);
  106. } else {
  107. unregister_code (KC_LALT);
  108. layer_off(NM_MODE);
  109. }
  110. }
  111. void dance_SFT_NM_finished (qk_tap_dance_state_t *state, void *user_data) {
  112. if (state->count == 1) {
  113. register_code (KC_LSFT);
  114. set_oneshot_mods(MOD_LSFT);
  115. } else {
  116. register_code (KC_LSFT);
  117. layer_on(NM_MODE);
  118. }
  119. }
  120. void dance_SFT_NM_reset (qk_tap_dance_state_t *state, void *user_data) {
  121. if (state->count == 1) {
  122. unregister_code (KC_LSFT);
  123. } else {
  124. unregister_code (KC_LSFT);
  125. layer_off(NM_MODE);
  126. }
  127. }
  128. qk_tap_dance_action_t tap_dance_actions[] = {
  129. [CTL_NM] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, dance_CTL_NM_finished, dance_CTL_NM_reset),
  130. [GUI_NM] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, dance_GUI_NM_finished, dance_GUI_NM_reset),
  131. [ALT_NM] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, dance_ALT_NM_finished, dance_ALT_NM_reset),
  132. [SFT_NM] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, dance_SFT_NM_finished, dance_SFT_NM_reset)
  133. };
  134. // backup
  135. // old R3 capslock, LT(NM_MODE,KC_BSPC),
  136. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  137. [CL] = LAYOUT(
  138. KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL,
  139. MT(MOD_LGUI,KC_TAB), LT(NM_MODE,KC_Q), KC_W, LT(ACCENT,KC_F), KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSPC,
  140. MT(MOD_LCTL,KC_BSPC), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT,
  141. TD(SFT_NM), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, MT(MOD_LCTL,KC_COMM), MT(MOD_LSFT,KC_DOT), MT(MOD_LALT,KC_SLSH), LM(CL,MOD_LGUI|MOD_LSFT), TT(NM_MODE),
  142. _______, TD(CTL_NM), TD(ALT_NM), KC_SPC, LM(CL,MOD_LGUI|MOD_LALT), OSL(ACCENT) , _______
  143. ),
  144. [NM_MODE] = LAYOUT(
  145. KC_GRV, KC_MPRV, KC_MNXT, KC_MPLY, KC_END, _______, _______, _______, _______, _______, KC_HOME, _______, _______, RESET, KC_INS,
  146. LGUI(KC_TAB), _______, LCTL(KC_RGHT), _______, _______, _______, _______, KC_UP, KC_PGUP, _______, _______, _______, TG(CL), KC_DEL,
  147. _______, KC_LEFT, _______, KC_RGHT, _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_ENT, KC_QUOT, KC_LGUI,
  148. KC_LSFT, _______, _______, _______, _______, LCTL(KC_LEFT), _______, _______, _______, _______, _______, TG(VI_MODE), TO(CL),
  149. _______, TD(CTL_NM), TD(ALT_NM), KC_SPC, LM(CL,MOD_LGUI|MOD_LALT), OSL(ACCENT), _______
  150. ),
  151. [VI_MODE] = LAYOUT(
  152. KC_GRV, KC_MPRV, KC_MNXT, KC_MPLY, LSFT(KC_END), KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, LSFT(KC_HOME), KC_F11, KC_F12, RESET, KC_INS,
  153. LGUI(KC_TAB), _______, LSFT(LCTL(KC_RGHT)), _______, _______, _______, _______, LSFT(KC_UP), _______, _______, _______, _______, TG(CL), KC_BSPC,
  154. _______, _______, _______, _______, _______, _______, LSFT(LCTL(KC_LEFT)), LSFT(KC_DOWN), LSFT(KC_RGHT), _______, KC_SCLN, KC_QUOT, KC_LGUI,
  155. KC_LSFT, _______, _______, _______, _______, LSFT(LCTL(KC_LEFT)), _______, _______, _______, _______, KC_SLSH, OSM(MOD_LSFT), TO(CL),
  156. _______, TD(CTL_NM), TD(ALT_NM), KC_SPC, LM(CL,MOD_LGUI|MOD_LALT), OSL(ACCENT), _______
  157. ),
  158. [ACCENT] = LAYOUT(
  159. _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,
  160. _______, RGB_TOG, RGB_MODE_PLAIN, _______, _______, _______, _______, _______, DE_UE, _______, _______, _______, _______, _______,
  161. _______, DE_AE, UC_Z, DE_SS, _______, _______, _______, _______, _______, _______, DE_OE, _______, _______,
  162. OSL(ACCENT_CAP), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, TO(CL),
  163. _______, _______, _______, _______, _______, _______, _______
  164. ),
  165. [ACCENT_CAP] = LAYOUT(
  166. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  167. _______, _______, _______, _______, _______, _______, _______, _______, DE_UE_CAP, _______, _______, _______, _______, _______,
  168. _______, DE_AE_CAP, _______, DE_SS, _______, _______, _______, _______, _______, _______, DE_OE_CAP, _______, TO(CL),
  169. _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
  170. _______, _______, _______, _______, _______, _______, _______
  171. ),
  172. };