diff options
23 files changed, 1795 insertions, 0 deletions
diff --git a/keyboards/c39/keymaps/kuchosauronad0/config.h b/keyboards/c39/keymaps/kuchosauronad0/config.h new file mode 100644 index 000000000..c214ddb75 --- /dev/null +++ b/keyboards/c39/keymaps/kuchosauronad0/config.h | |||
@@ -0,0 +1,43 @@ | |||
1 | |||
2 | /* | ||
3 | This is the c configuration file for the keymap | ||
4 | |||
5 | Copyright 2012 Jun Wako <wakojun@gmail.com> | ||
6 | Copyright 2015 Jack Humbert | ||
7 | Copyright 2017 Art Ortenburger | ||
8 | |||
9 | This program is free software: you can redistribute it and/or modify | ||
10 | it under the terms of the GNU General Public License as published by | ||
11 | the Free Software Foundation, either version 2 of the License, or | ||
12 | (at your option) any later version. | ||
13 | |||
14 | This program is distributed in the hope that it will be useful, | ||
15 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
17 | GNU General Public License for more details. | ||
18 | |||
19 | You should have received a copy of the GNU General Public License | ||
20 | along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
21 | */ | ||
22 | |||
23 | #pragma once | ||
24 | |||
25 | /* key combination for magic key command */ | ||
26 | #undef IS_COMMAND | ||
27 | #define IS_COMMAND() ( \ | ||
28 | get_mods() == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_LALT)) \ | ||
29 | ) | ||
30 | |||
31 | //#ifdef RGBLIGHT_ENABLE | ||
32 | //#define RGB_DI_PIN D3 | ||
33 | //#define RGBLED_NUM 16 // Number of LEDs | ||
34 | //#define RGBLED_SPLIT { 8, 8 } | ||
35 | // | ||
36 | //#define RGBLIGHT_HUE_STEP 12 | ||
37 | //#define RGBLIGHT_SAT_STEP 12 | ||
38 | //#define RGBLIGHT_VAL_STEP 12 | ||
39 | //#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 2 | ||
40 | //#define RGBLIGHT_EFFECT_SNAKE_LENGTH 2 | ||
41 | //#define RGBLIGHT_EFFECT_BREATHE_CENTER 1 | ||
42 | //#endif // RGBLIGHT_ENABLE | ||
43 | |||
diff --git a/keyboards/c39/keymaps/kuchosauronad0/keymap.c b/keyboards/c39/keymaps/kuchosauronad0/keymap.c new file mode 100644 index 000000000..738408cc3 --- /dev/null +++ b/keyboards/c39/keymaps/kuchosauronad0/keymap.c | |||
@@ -0,0 +1,137 @@ | |||
1 | /* | ||
2 | This is the keymap for the keyboard | ||
3 | |||
4 | Copyright 2012 Jun Wako <wakojun@gmail.com> | ||
5 | Copyright 2015 Jack Humbert | ||
6 | Copyright 2017 Art Ortenburger | ||
7 | |||
8 | This program is free software: you can redistribute it and/or modify | ||
9 | it under the terms of the GNU General Public License as published by | ||
10 | the Free Software Foundation, either version 2 of the License, or | ||
11 | (at your option) any later version. | ||
12 | |||
13 | This program is distributed in the hope that it will be useful, | ||
14 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | GNU General Public License for more details. | ||
17 | |||
18 | You should have received a copy of the GNU General Public License | ||
19 | along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
20 | */ | ||
21 | |||
22 | #include QMK_KEYBOARD_H | ||
23 | #include "kuchosauronad0.h" | ||
24 | |||
25 | #ifdef INDICATOR_LIGHTS | ||
26 | extern userspace_config_t userspace_config; | ||
27 | |||
28 | uint8_t last_mod; | ||
29 | uint8_t last_led; | ||
30 | uint8_t last_osm; | ||
31 | #endif | ||
32 | |||
33 | #define LAYOUT_collide39_base( \ | ||
34 | K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \ | ||
35 | K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \ | ||
36 | K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A \ | ||
37 | ) \ | ||
38 | LAYOUT_wrapper( \ | ||
39 | MT(MOD_LALT,KC_TAB), K01, K02, K03, K04, K05, LT(RAISE,KC_PGUP), K06, K07, K08, K09, K0A, KC_BSPC, \ | ||
40 | SFT_T(KC_ESC), K11, K12, K13, K14, K15, LT(LOWER,KC_PGDN), K16, K17, K18, K19, K1A, SFT_T(KC_ENT), \ | ||
41 | MT(MOD_LCTL,KC_DEL), K21, K22, K23, K24, K25, KC_SPACE, K26, K27, K28, K29, K2A, KC_LEAD \ | ||
42 | ) | ||
43 | #define LAYOUT_collide39_base_wrapper(...) LAYOUT_collide39_base(__VA_ARGS__) | ||
44 | |||
45 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||
46 | |||
47 | [_QWERTY] = LAYOUT_collide39_base_wrapper( | ||
48 | _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, | ||
49 | _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, | ||
50 | _________________QWERTY_L3_________________, _________________QWERTY_R3_________________ | ||
51 | ), | ||
52 | |||
53 | [_COLEMAK] = LAYOUT_collide39_base_wrapper( | ||
54 | _________________COLEMAK_L1________________, _________________COLEMAK_R1________________, | ||
55 | _________________COLEMAK_L2________________, _________________COLEMAK_R2________________, | ||
56 | _________________COLEMAK_L3________________, _________________COLEMAK_R3________________ | ||
57 | ), | ||
58 | |||
59 | [_DVORAK] = LAYOUT_collide39_base_wrapper( | ||
60 | _________________DVORAK_L1_________________, _________________DVORAK_R1_________________, | ||
61 | _________________DVORAK_L2_________________, _________________DVORAK_R2_________________, | ||
62 | _________________DVORAK_L3_________________, _________________DVORAK_R3_________________ | ||
63 | ), | ||
64 | |||
65 | #ifdef UNICODEMAP_ENABLE | ||
66 | [_UNICODE] = LAYOUT_collide39_base_wrapper( | ||
67 | _______________UNICODE_L1__________________, _______________UNICODE_R1__________________, | ||
68 | _______________UNICODE_L2__________________, _______________UNICODE_R2__________________, | ||
69 | _______________UNICODE_L3__________________, _______________UNICODE_R3__________________ | ||
70 | ), | ||
71 | #endif | ||
72 | [_WORKMAN] = LAYOUT_collide39_base_wrapper( | ||
73 | _________________WORKMAN_L1________________, _________________WORKMAN_R1________________, | ||
74 | _________________WORKMAN_L2________________, _________________WORKMAN_R2________________, | ||
75 | _________________WORKMAN_L3________________, _________________WORKMAN_R3________________ | ||
76 | ), | ||
77 | |||
78 | [_NORMAN] = LAYOUT_collide39_base_wrapper( | ||
79 | _________________NORMAN_L1_________________, _________________NORMAN_L1_________________, | ||
80 | _________________NORMAN_L2_________________, _________________NORMAN_R2_________________, | ||
81 | _________________NORMAN_L3_________________, _________________NORMAN_R3_________________ | ||
82 | ), | ||
83 | |||
84 | [_MALTRON] = LAYOUT_collide39_base_wrapper( | ||
85 | _________________MALTRON_L1________________, _________________MALTRON_R1________________, | ||
86 | _________________MALTRON_L2________________, _________________MALTRON_R2________________, | ||
87 | _________________MALTRON_L3________________, _________________MALTRON_R3________________ | ||
88 | ), | ||
89 | |||
90 | [_EUCALYN] = LAYOUT_collide39_base_wrapper( | ||
91 | _________________EUCALYN_L1________________, _________________EUCALYN_R1________________, | ||
92 | _________________EUCALYN_L2________________, _________________EUCALYN_R2________________, | ||
93 | _________________EUCALYN_L3________________, _________________EUCALYN_R3________________ | ||
94 | ), | ||
95 | |||
96 | [_CARPLAX] = LAYOUT_collide39_base_wrapper( | ||
97 | _____________CARPLAX_QFMLWY_L1_____________, _____________CARPLAX_QFMLWY_R1_____________, | ||
98 | _____________CARPLAX_QFMLWY_L2_____________, _____________CARPLAX_QFMLWY_R2_____________, | ||
99 | _____________CARPLAX_QFMLWY_L3_____________, _____________CARPLAX_QFMLWY_R3_____________ | ||
100 | ), | ||
101 | |||
102 | |||
103 | [_MODS] = LAYOUT_wrapper(\ | ||
104 | _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, | ||
105 | _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, | ||
106 | KC_LSFT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ | ||
107 | ), | ||
108 | |||
109 | [_LOWER] = LAYOUT_wrapper(\ | ||
110 | KC_TILD, _________________LOWER_L1__________________, _______, _________________LOWER_R1__________________, KC_BSPC, | ||
111 | KC_F11, _________________LOWER_L2__________________, _______, _________________LOWER_R2__________________, KC_PIPE, | ||
112 | KC_F12, _________________LOWER_L3__________________, _______, _________________LOWER_R3__________________, _______ | ||
113 | ), | ||
114 | |||
115 | [_RAISE] = LAYOUT_wrapper(\ | ||
116 | KC_GRV, _________________RAISE_L1__________________, _______, _________________RAISE_R1__________________, KC_BSPC, | ||
117 | _______, _________________RAISE_L2__________________, _______, _________________RAISE_R2__________________, KC_BSLS, | ||
118 | _______, _________________RAISE_L3__________________, _______, _________________RAISE_R3__________________, _______ | ||
119 | ), | ||
120 | |||
121 | [_ADJUST] = LAYOUT_wrapper(\ | ||
122 | KC_MAKE, _________________ADJUST_L1_________________, _______, _________________ADJUST_R1_________________, KC_RESET, | ||
123 | VRSN, _________________ADJUST_L2_________________, _______, _________________ADJUST_R2_________________, EEP_RST, | ||
124 | TG_MODS, _________________ADJUST_L3_________________, _______, _________________ADJUST_R3_________________, KC_MPLY | ||
125 | ) | ||
126 | |||
127 | }; | ||
128 | |||
129 | void matrix_init_keymap(void) { | ||
130 | #ifndef CONVERT_TO_PROTON_C | ||
131 | setPinOutput(D5); | ||
132 | writePinHigh(D5); | ||
133 | setPinOutput(B0); | ||
134 | writePinHigh(B0); | ||
135 | #endif | ||
136 | } | ||
137 | |||
diff --git a/keyboards/c39/keymaps/kuchosauronad0/readme.md b/keyboards/c39/keymaps/kuchosauronad0/readme.md new file mode 100644 index 000000000..60b971e4e --- /dev/null +++ b/keyboards/c39/keymaps/kuchosauronad0/readme.md | |||
@@ -0,0 +1 @@ | |||
# Personal keymap for the collide39 | |||
diff --git a/keyboards/c39/keymaps/kuchosauronad0/rules.mk b/keyboards/c39/keymaps/kuchosauronad0/rules.mk new file mode 100644 index 000000000..e2be2e5ac --- /dev/null +++ b/keyboards/c39/keymaps/kuchosauronad0/rules.mk | |||
@@ -0,0 +1,20 @@ | |||
1 | BOOTLOADER = caterina | ||
2 | BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) | ||
3 | MOUSEKEY_ENABLE = no # Mouse keys(+4700) | ||
4 | EXTRAKEY_ENABLE = yes # Audio control and System control(+450) | ||
5 | CONSOLE_ENABLE = no # Console for debug(+400) | ||
6 | COMMAND_ENABLE = no # Commands for debug and configuration | ||
7 | LEADER_ENABLE = yes # default is yes | ||
8 | TAP_DANCE_ENABLE = no #(+1254) | ||
9 | UNICODE_ENABLE = no #(+1134) | ||
10 | UNICODEMAP_ENABLE = yes | ||
11 | RGBLIGHT_ENABLE = no | ||
12 | AUDIO_ENABLE = no | ||
13 | NKRO_ENABLE = yes | ||
14 | |||
15 | INDICATOR_LIGHTS = no | ||
16 | MACROS_ENABLED = no | ||
17 | RGBLIGHT_TWINKLE = no | ||
18 | RGBLIGHT_STARTUP_ANIMATION = no | ||
19 | |||
20 | NO_SECRETS = yes | ||
diff --git a/users/kuchosauronad0/.gitignore b/users/kuchosauronad0/.gitignore new file mode 100644 index 000000000..6878d13e7 --- /dev/null +++ b/users/kuchosauronad0/.gitignore | |||
@@ -0,0 +1,3 @@ | |||
1 | secrets.c | ||
2 | secrets.h | ||
3 | kuchosauronad0_song_list.h | ||
diff --git a/users/kuchosauronad0/config.h b/users/kuchosauronad0/config.h new file mode 100644 index 000000000..f543a4fd2 --- /dev/null +++ b/users/kuchosauronad0/config.h | |||
@@ -0,0 +1,93 @@ | |||
1 | #pragma once | ||
2 | |||
3 | |||
4 | #ifdef AUDIO_ENABLE | ||
5 | #define AUDIO_CLICKY | ||
6 | #define STARTUP_SONG SONG(RICK_ROLL) | ||
7 | #define GOODBYE_SONG SONG(SONIC_RING) | ||
8 | #define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \ | ||
9 | SONG(COLEMAK_SOUND), \ | ||
10 | SONG(DVORAK_SOUND), \ | ||
11 | SONG(OVERWATCH_THEME) \ | ||
12 | } | ||
13 | |||
14 | #define AUDIO_CLICKY_FREQ_RANDOMNESS 1.5f | ||
15 | // #ifdef RGBLIGHT_ENABLE | ||
16 | // #define NO_MUSIC_MODE | ||
17 | // #endif //RGBLIGHT_ENABLE/ | ||
18 | // #ifndef __arm__ | ||
19 | // #undef NOTE_REST | ||
20 | // #define NOTE_REST 1.00f | ||
21 | // #endif // !__arm__ | ||
22 | |||
23 | #define UNICODE_SONG_OSX SONG(RICK_ROLL) | ||
24 | #define UNICODE_SONG_LNX SONG(RICK_ROLL) | ||
25 | #define UNICODE_SONG_WIN SONG(RICK_ROLL) | ||
26 | #define UNICODE_SONG_BSD SONG(RICK_ROLL) | ||
27 | #define UNICODE_SONG_WINC SONG(RICK_ROLL) | ||
28 | |||
29 | #endif // !AUDIO_ENABLE | ||
30 | |||
31 | #ifdef RGBLIGHT_ENABLE | ||
32 | #define RGBLIGHT_SLEEP | ||
33 | #undef RGBLIGHT_ANIMATIONS | ||
34 | #define RGBLIGHT_EFFECT_BREATHING | ||
35 | #define RGBLIGHT_EFFECT_SNAKE | ||
36 | #define RGBLIGHT_EFFECT_KNIGHT | ||
37 | #endif // !RGBLIGHT_ENABLE | ||
38 | |||
39 | #ifndef ONESHOT_TAP_TOGGLE | ||
40 | #define ONESHOT_TAP_TOGGLE 2 | ||
41 | #endif // !ONESHOT_TAP_TOGGLE | ||
42 | |||
43 | #ifndef ONESHOT_TIMEOUT | ||
44 | #define ONESHOT_TIMEOUT 3000 | ||
45 | #endif// !ONESHOT_TIMEOUT | ||
46 | |||
47 | #ifndef QMK_KEYS_PER_SCAN | ||
48 | #define QMK_KEYS_PER_SCAN 4 | ||
49 | #endif // !QMK_KEYS_PER_SCAN | ||
50 | |||
51 | |||
52 | |||
53 | // this makes it possible to do rolling combos (zx) with keys that | ||
54 | // convert to other keys on hold (z becomes ctrl when you hold it, | ||
55 | // and when this option isn't enabled, z rapidly followed by x | ||
56 | // actually sends Ctrl-x. That's bad.) | ||
57 | #define IGNORE_MOD_TAP_INTERRUPT | ||
58 | #undef PERMISSIVE_HOLD | ||
59 | //#define TAPPING_FORCE_HOLD | ||
60 | //#define RETRO_TAPPING | ||
61 | |||
62 | #define FORCE_NKRO | ||
63 | |||
64 | #ifndef TAPPING_TOGGLE | ||
65 | #define TAPPING_TOGGLE 1 | ||
66 | #endif | ||
67 | |||
68 | #ifdef TAPPING_TERM | ||
69 | #undef TAPPING_TERM | ||
70 | #endif // !TAPPING_TERM | ||
71 | #if defined(KEYBOARD_ergodox_ez) | ||
72 | #define TAPPING_TERM 185 | ||
73 | #elif defined(KEYBOARD_crkbd) | ||
74 | #define TAPPING_TERM 200 | ||
75 | #else | ||
76 | #define TAPPING_TERM 150 | ||
77 | #endif | ||
78 | |||
79 | |||
80 | // Disable action_get_macro and fn_actions, since we don't use these | ||
81 | // and it saves on space in the firmware. | ||
82 | #define NO_ACTION_MACRO | ||
83 | #define NO_ACTION_FUNCTION | ||
84 | |||
85 | #define TAP_CODE_DELAY 5 | ||
86 | |||
87 | // Enable Leader key | ||
88 | #if defined(LEADER_ENABLE) | ||
89 | #define LEADER_PER_KEY_TIMING | ||
90 | #define LEADER_TIMEOUT 250 | ||
91 | #endif // !LEADER_ENABLE | ||
92 | |||
93 | #define MACRO_TIMER 5 | ||
diff --git a/users/kuchosauronad0/encoder.c b/users/kuchosauronad0/encoder.c new file mode 100644 index 000000000..1b9b2cb12 --- /dev/null +++ b/users/kuchosauronad0/encoder.c | |||
@@ -0,0 +1,10 @@ | |||
1 | #include "encoder.h" | ||
2 | |||
3 | void encoder_update_user(uint8_t index, bool clockwise) { | ||
4 | if (clockwise) { | ||
5 | tap_code(KC_1); | ||
6 | } else { | ||
7 | tap_code(KC_0); | ||
8 | } | ||
9 | } | ||
10 | |||
diff --git a/users/kuchosauronad0/encoder.h b/users/kuchosauronad0/encoder.h new file mode 100644 index 000000000..078989d52 --- /dev/null +++ b/users/kuchosauronad0/encoder.h | |||
@@ -0,0 +1,3 @@ | |||
1 | #pragma once | ||
2 | #include "quantum.h" | ||
3 | void encoder_update_user(uint8_t index, bool clockwise); | ||
diff --git a/users/kuchosauronad0/kuchosauronad0.c b/users/kuchosauronad0/kuchosauronad0.c new file mode 100644 index 000000000..21e74a0fa --- /dev/null +++ b/users/kuchosauronad0/kuchosauronad0.c | |||
@@ -0,0 +1,196 @@ | |||
1 | /* | ||
2 | Copyright 2019 Andre Poley <andre.poley@mailbox.org> | ||
3 | |||
4 | This program is free software: you can redistribute it and/or modify | ||
5 | it under the terms of the GNU General Public License as published by | ||
6 | the Free Software Foundation, either version 2 of the License, or | ||
7 | (at your option) any later version. | ||
8 | |||
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 | |||
14 | You should have received a copy of the GNU General Public License | ||
15 | along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
16 | */ | ||
17 | #include "quantum.h" | ||
18 | #include "kuchosauronad0.h" | ||
19 | |||
20 | userspace_config_t userspace_config; | ||
21 | #if (defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE)) | ||
22 | #define KUCHOSAURONAD0_UNICODE_MODE UC_WINC | ||
23 | #else | ||
24 | // set to 2 for UC_WIN, set to 4 for UC_WINC | ||
25 | #define KUCHOSAURONAD0_UNICODE_MODE 2 | ||
26 | #endif | ||
27 | |||
28 | |||
29 | // Add reconfigurable functions here, for keymap customization | ||
30 | // This allows for a global, userspace functions, and continued | ||
31 | // customization of the keymap. Use _keymap instead of _user | ||
32 | // functions in the keymaps | ||
33 | __attribute__ ((weak)) | ||
34 | void matrix_init_keymap(void) {} | ||
35 | |||
36 | // Call user matrix init, set default RGB colors and then | ||
37 | // call the keymap's init function | ||
38 | void matrix_init_user(void) { | ||
39 | userspace_config.raw = eeconfig_read_user(); | ||
40 | |||
41 | #ifdef BOOTLOADER_CATERINA | ||
42 | DDRD &= ~(1<<5); | ||
43 | PORTD &= ~(1<<5); | ||
44 | |||
45 | DDRB &= ~(1<<0); | ||
46 | PORTB &= ~(1<<0); | ||
47 | #endif | ||
48 | |||
49 | #if (defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE)) | ||
50 | set_unicode_input_mode(KUCHOSAURONAD0_UNICODE_MODE); | ||
51 | get_unicode_input_mode(); | ||
52 | #endif //UNICODE_ENABLE | ||
53 | matrix_init_keymap(); | ||
54 | } | ||
55 | |||
56 | __attribute__((weak)) | ||
57 | void keyboard_post_init_keymap(void){ } | ||
58 | |||
59 | void keyboard_post_init_user(void){ | ||
60 | #ifdef RGBLIGHT_ENABLE | ||
61 | keyboard_post_init_rgb(); | ||
62 | #endif | ||
63 | keyboard_post_init_keymap(); | ||
64 | } | ||
65 | |||
66 | __attribute__ ((weak)) | ||
67 | void shutdown_keymap(void) {} | ||
68 | |||
69 | void shutdown_user (void) { | ||
70 | #ifdef RGBLIGHT_ENABLE | ||
71 | rgblight_enable_noeeprom(); | ||
72 | rgblight_mode_noeeprom(1); | ||
73 | rgblight_setrgb_red(); | ||
74 | #endif // RGBLIGHT_ENABLE | ||
75 | #ifdef RGB_MATRIX_ENABLE | ||
76 | // uint16_t timer_start = timer_read(); | ||
77 | // rgb_matrix_set_color_all( 0xFF, 0x00, 0x00 ); | ||
78 | // while(timer_elapsed(timer_start) < 250) { wait_ms(1); } | ||
79 | #endif //RGB_MATRIX_ENABLE | ||
80 | shutdown_keymap(); | ||
81 | } | ||
82 | |||
83 | __attribute__ ((weak)) | ||
84 | void suspend_power_down_keymap(void) {} | ||
85 | |||
86 | void suspend_power_down_user(void) { | ||
87 | suspend_power_down_keymap(); | ||
88 | } | ||
89 | |||
90 | __attribute__ ((weak)) | ||
91 | void suspend_wakeup_init_keymap(void) {} | ||
92 | |||
93 | void suspend_wakeup_init_user(void) { | ||
94 | suspend_wakeup_init_keymap(); | ||
95 | } | ||
96 | |||
97 | |||
98 | __attribute__ ((weak)) | ||
99 | void matrix_scan_keymap(void) {} | ||
100 | |||
101 | __attribute__ ((weak)) | ||
102 | void matrix_scan_user(void){ | ||
103 | static bool has_ran_yet; | ||
104 | if (!has_ran_yet) { | ||
105 | has_ran_yet = true; | ||
106 | startup_user(); | ||
107 | } | ||
108 | |||
109 | #ifdef TAP_DANCE_ENABLE // Run Diablo 3 macro checking code. | ||
110 | // run_diablo_macro_check(); | ||
111 | #endif // TAP_DANCE_ENABLE | ||
112 | |||
113 | #ifdef RGBLIGHT_ENABLE | ||
114 | matrix_scan_rgb(); | ||
115 | #endif // RGBLIGHT_ENABLE | ||
116 | |||
117 | matrix_scan_keymap(); | ||
118 | } | ||
119 | |||
120 | __attribute__ ((weak)) | ||
121 | uint32_t layer_state_set_keymap (uint32_t state) { | ||
122 | return state; | ||
123 | } | ||
124 | |||
125 | // on layer change, no matter where the change was initiated | ||
126 | // Then runs keymap's layer change check | ||
127 | uint32_t layer_state_set_user(uint32_t state) { | ||
128 | state = update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST); | ||
129 | #ifdef RGBLIGHT_ENABLE | ||
130 | state = layer_state_set_rgb(state); | ||
131 | #endif // RGBLIGHT_ENABLE | ||
132 | return layer_state_set_keymap (state); | ||
133 | } | ||
134 | |||
135 | |||
136 | __attribute__ ((weak)) | ||
137 | uint32_t default_layer_state_set_keymap (uint32_t state) { | ||
138 | return state; | ||
139 | } | ||
140 | |||
141 | // Runs state check and changes underglow color and animation | ||
142 | uint32_t default_layer_state_set_user(uint32_t state) { | ||
143 | state = default_layer_state_set_keymap(state); | ||
144 | #if 0 | ||
145 | #ifdef RGBLIGHT_ENABLE | ||
146 | state = default_layer_state_set_rgb(state); | ||
147 | #endif // RGBLIGHT_ENABLE | ||
148 | #endif | ||
149 | return state; | ||
150 | } | ||
151 | |||
152 | __attribute__ ((weak)) | ||
153 | void led_set_keymap(uint8_t usb_led) {} | ||
154 | |||
155 | // Any custom LED code goes here. | ||
156 | // So far, I only have keyboard specific code, | ||
157 | // So nothing goes here. | ||
158 | void led_set_user(uint8_t usb_led) { | ||
159 | led_set_keymap(usb_led); | ||
160 | } | ||
161 | __attribute__ ((weak)) | ||
162 | void eeconfig_init_keymap(void) {} | ||
163 | |||
164 | void eeconfig_init_user(void) { | ||
165 | userspace_config.raw = 0; | ||
166 | userspace_config.rgb_layer_change = true; | ||
167 | eeconfig_update_user(userspace_config.raw); | ||
168 | #if (defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE)) | ||
169 | set_unicode_input_mode(KUCHOSAURONAD0_UNICODE_MODE); | ||
170 | get_unicode_input_mode(); | ||
171 | #else | ||
172 | eeprom_update_byte(EECONFIG_UNICODEMODE, KUCHOSAURONAD0_UNICODE_MODE); | ||
173 | #endif | ||
174 | } | ||
175 | |||
176 | // TMUX stuff | ||
177 | void tmux_prefix(void) { | ||
178 | register_code(KC_LCTL); | ||
179 | tap_code(KC_B); | ||
180 | unregister_code(KC_LCTL); | ||
181 | } | ||
182 | |||
183 | |||
184 | void tmux_pane_last(void) { | ||
185 | tmux_prefix(); | ||
186 | tap_code(KC_SCLN); | ||
187 | } | ||
188 | |||
189 | void tmux_pane_switch_repeat(void) { | ||
190 | tmux_pane_last(); | ||
191 | tap_code(KC_UP); | ||
192 | tap_code(KC_ENT); | ||
193 | tmux_pane_last(); | ||
194 | } | ||
195 | |||
196 | /* vi: ft=c:tw=80:sw=2:ts=2:sts=2:et */ | ||
diff --git a/users/kuchosauronad0/kuchosauronad0.h b/users/kuchosauronad0/kuchosauronad0.h new file mode 100644 index 000000000..9ea2673da --- /dev/null +++ b/users/kuchosauronad0/kuchosauronad0.h | |||
@@ -0,0 +1,111 @@ | |||
1 | #ifndef USERSPACE | ||
2 | #define USERSPACE | ||
3 | |||
4 | //#pragma once | ||
5 | |||
6 | #include "quantum.h" | ||
7 | |||
8 | #include "version.h" | ||
9 | #include "eeprom.h" | ||
10 | #include "wrappers.h" | ||
11 | #include "process_records.h" | ||
12 | |||
13 | #ifdef TAP_DANCE_ENABLE | ||
14 | #include "tap_dances.h" | ||
15 | #define KC_TMX TD(TD_TMX) // tap1: 't' tap2: <CTL>+b | ||
16 | #define KC_EOL TD(TD_EOL) // tap1: 'e' tap2: <CTL>+e | ||
17 | #define KC_BOL TD(TD_BOL) // tap1: 'a' tap2: <CTL>+a | ||
18 | #define KC_NW TD(TD_NW) // tap1: 'f' tap2: <ALT>+f | ||
19 | #define KC_PW TD(TD_PW) // tap1: 'b' tap2: <ALT>+b | ||
20 | #define KC_DW TD(TD_DW) // tap1: 'w' tap2: <CTL>+w | ||
21 | #endif //!TAP_DANCE_ENABLE | ||
22 | #if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE) | ||
23 | #include "rgb_stuff.h" | ||
24 | #endif | ||
25 | #if defined(UNICODEMAP_ENABLE) || defined(UNICODE_ENABLE) | ||
26 | #include "unicode.h" | ||
27 | #endif //!UNICODE_ENABLE | ||
28 | |||
29 | // Keycode aliases | ||
30 | #define TM_X LCTL(KC_B) // Tmux control sequence | ||
31 | // Unix QoL macros | ||
32 | #define MC_BOL LCTL(KC_A) // jump to beginning of line | ||
33 | #define MC_EOL LCTL(KC_E) // jump to end of line | ||
34 | #define MC_NW LALT(KC_F) // next word | ||
35 | #define MC_PW LALT(KC_B) // previous word | ||
36 | #define MC_DW LCTL(KC_W) // delete word | ||
37 | |||
38 | // Define layer names | ||
39 | enum userspace_layers { | ||
40 | _QWERTY = 0, | ||
41 | _NUMLOCK = 0, | ||
42 | _COLEMAK, | ||
43 | _DVORAK, | ||
44 | _WORKMAN, | ||
45 | _NORMAN, | ||
46 | _MALTRON, | ||
47 | _EUCALYN, | ||
48 | _CARPLAX, | ||
49 | _UNICODE, | ||
50 | _MODS, /* layer 8 now 9*/ | ||
51 | _GAMEPAD, | ||
52 | _DIABLO, | ||
53 | _MACROS, | ||
54 | _MEDIA, | ||
55 | _LOWER, | ||
56 | _RAISE, | ||
57 | _ADJUST, | ||
58 | }; | ||
59 | |||
60 | bool mod_key_press_timer (uint16_t code, uint16_t mod_code, bool pressed); | ||
61 | bool mod_key_press (uint16_t code, uint16_t mod_code, bool pressed, uint16_t this_timer); | ||
62 | bool send_game_macro(const char *str, keyrecord_t *record, bool override); | ||
63 | void matrix_init_keymap(void); | ||
64 | void shutdown_keymap(void); | ||
65 | void suspend_power_down_keymap(void); | ||
66 | void suspend_wakeup_init_keymap(void); | ||
67 | void matrix_scan_keymap(void); | ||
68 | uint32_t layer_state_set_keymap (uint32_t state); | ||
69 | uint32_t default_layer_state_set_keymap (uint32_t state); | ||
70 | void led_set_keymap(uint8_t usb_led); | ||
71 | void eeconfig_init_keymap(void); | ||
72 | |||
73 | void tmux_prefix(void); | ||
74 | void tmux_pane_zoom(void); | ||
75 | void tmux_pane_last(void); | ||
76 | void tmux_pane_switch_repeat(void); | ||
77 | void tmux_pane_switch(uint16_t keycode); | ||
78 | |||
79 | typedef union { | ||
80 | uint32_t raw; | ||
81 | struct { | ||
82 | bool rgb_layer_change :1; | ||
83 | bool is_overwatch :1; | ||
84 | bool nuke_switch :1; | ||
85 | uint8_t unicode_mod :4; | ||
86 | bool swapped_numbers :1; | ||
87 | }; | ||
88 | } userspace_config_t; | ||
89 | |||
90 | extern userspace_config_t userspace_config; | ||
91 | |||
92 | /* | ||
93 | Custom Keycodes for Diablo 3 layer | ||
94 | But since TD() doesn't work when tap dance is disabled | ||
95 | We use custom codes here, so we can substitute the right stuff | ||
96 | */ | ||
97 | #ifdef TAP_DANCE_ENABLE | ||
98 | #define KC_D3_1 TD(TD_D3_1) | ||
99 | #define KC_D3_2 TD(TD_D3_2) | ||
100 | #define KC_D3_3 TD(TD_D3_3) | ||
101 | #define KC_D3_4 TD(TD_D3_4) | ||
102 | #else // TAP_DANCE_ENABLE | ||
103 | #define KC_D3_1 KC_1 | ||
104 | #define KC_D3_2 KC_2 | ||
105 | #define KC_D3_3 KC_3 | ||
106 | #define KC_D3_4 KC_4 | ||
107 | #endif // TAP_DANCE_ENABLE | ||
108 | |||
109 | #endif // !USERSPACE | ||
110 | |||
111 | /* vi: ft=c:tw=80:sw=2:ts=2:sts=2:et */ | ||
diff --git a/users/kuchosauronad0/leader.c b/users/kuchosauronad0/leader.c new file mode 100644 index 000000000..611b70074 --- /dev/null +++ b/users/kuchosauronad0/leader.c | |||
@@ -0,0 +1,84 @@ | |||
1 | #include "leader.h" | ||
2 | |||
3 | LEADER_EXTERNS(); | ||
4 | |||
5 | void matrix_scan_user(void){ | ||
6 | static bool has_ran_yet; | ||
7 | if (!has_ran_yet) { | ||
8 | has_ran_yet = true; | ||
9 | startup_user(); | ||
10 | } | ||
11 | |||
12 | #ifdef TAP_DANCE_ENABLE // Run Diablo 3 macro checking code. | ||
13 | // run_diablo_macro_check(); | ||
14 | #endif // TAP_DANCE_ENABLE | ||
15 | |||
16 | #ifdef RGBLIGHT_ENABLE | ||
17 | matrix_scan_rgb(); | ||
18 | #endif // RGBLIGHT_ENABLE | ||
19 | |||
20 | LEADER_DICTIONARY() { | ||
21 | leading = false; | ||
22 | leader_end(); | ||
23 | // Q is for TMUX | ||
24 | // Z is for OS related things | ||
25 | // other single key sequences are mostly for terminals and vim | ||
26 | |||
27 | SEQ_ONE_KEY(KC_W) { | ||
28 | // Vim + Tmux Macro, when in command mode in vim: write to file, change to the other pane in the current session and repeat the last command | ||
29 | SEND_STRING(":w" SS_TAP(X_ENTER)); | ||
30 | tmux_pane_switch_repeat(); | ||
31 | } | ||
32 | |||
33 | SEQ_ONE_KEY(KC_T) { | ||
34 | // Send the Tmux Prefix | ||
35 | tmux_prefix(); | ||
36 | } | ||
37 | |||
38 | SEQ_ONE_KEY(KC_A) { | ||
39 | // Send the Tmux Prefix and press 'right' arrow | ||
40 | tmux_prefix(); | ||
41 | tap_code(KC_RIGHT); | ||
42 | } | ||
43 | |||
44 | SEQ_TWO_KEYS(KC_T, KC_T) { | ||
45 | // Send the Tmux Prefix to a nested session | ||
46 | tmux_prefix(); | ||
47 | tmux_prefix(); | ||
48 | } | ||
49 | SEQ_TWO_KEYS(KC_Q, KC_A) { | ||
50 | // Switch pane and repeat last action | ||
51 | tmux_pane_switch_repeat(); | ||
52 | } | ||
53 | |||
54 | SEQ_TWO_KEYS(KC_Z, KC_P){ | ||
55 | // Press windows key, send string 'plex' and press enter | ||
56 | register_code(KC_LGUI); | ||
57 | register_code(KC_S); | ||
58 | unregister_code(KC_S); | ||
59 | |||
60 | unregister_code(KC_LGUI); | ||
61 | SEND_STRING("plex"); | ||
62 | tap_code(KC_ENTER); | ||
63 | } | ||
64 | |||
65 | SEQ_TWO_KEYS(KC_Z, KC_F) { | ||
66 | // Open a search | ||
67 | register_code(KC_LGUI); | ||
68 | register_code(KC_S); | ||
69 | unregister_code(KC_S); | ||
70 | unregister_code(KC_LGUI); | ||
71 | } | ||
72 | |||
73 | SEQ_TWO_KEYS(KC_Z, KC_Z) { | ||
74 | SEND_STRING("https://start.duckduckgo.com"SS_TAP(X_ENTER)); | ||
75 | } | ||
76 | |||
77 | SEQ_THREE_KEYS(KC_BSPC, KC_BSPC, KC_BSPC){ | ||
78 | // Reset the keyboard | ||
79 | reset_keyboard(); | ||
80 | } | ||
81 | } | ||
82 | |||
83 | matrix_scan_keymap(); | ||
84 | } | ||
diff --git a/users/kuchosauronad0/leader.h b/users/kuchosauronad0/leader.h new file mode 100644 index 000000000..ed904f306 --- /dev/null +++ b/users/kuchosauronad0/leader.h | |||
@@ -0,0 +1,6 @@ | |||
1 | #pragma once | ||
2 | #include "kuchosauronad0.h" | ||
3 | |||
4 | #include "leader.h" | ||
5 | |||
6 | void matrix_scan_user(void); | ||
diff --git a/users/kuchosauronad0/process_records.c b/users/kuchosauronad0/process_records.c new file mode 100644 index 000000000..1eb3043b1 --- /dev/null +++ b/users/kuchosauronad0/process_records.c | |||
@@ -0,0 +1,244 @@ | |||
1 | #include "kuchosauronad0.h" | ||
2 | |||
3 | uint16_t copy_paste_timer; | ||
4 | |||
5 | __attribute__ ((weak)) | ||
6 | bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { | ||
7 | return true; | ||
8 | } | ||
9 | |||
10 | __attribute__ ((weak)) | ||
11 | bool process_record_secrets(uint16_t keycode, keyrecord_t *record) { | ||
12 | return true; | ||
13 | } | ||
14 | |||
15 | // Defines actions for my global custom keycodes. Defined in kuchosauronad0.h file | ||
16 | // Then runs the _keymap's record handier if not processed here | ||
17 | bool process_record_user(uint16_t keycode, keyrecord_t *record) { | ||
18 | // If console is enabled, it will print the matrix position and status of each key pressed | ||
19 | #ifdef KEYLOGGER_ENABLE | ||
20 | #if defined(KEYBOARD_ergodox_ez) || defined(KEYBOARD_keebio_iris_rev2) | ||
21 | xprintf("KL: kc: %u, col: %u, row: %u, pressed: %u\n", keycode, record->event.key.row, record->event.key.col, record->event.pressed); | ||
22 | #else | ||
23 | xprintf("KL: kc: %u, col: %u, row: %u, pressed: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed); | ||
24 | #endif | ||
25 | #endif //KEYLOGGER_ENABLE | ||
26 | |||
27 | switch (keycode) { | ||
28 | case KC_QWERTY ... KC_UNICODE: | ||
29 | if (record->event.pressed) { | ||
30 | set_single_persistent_default_layer(keycode - KC_QWERTY); | ||
31 | } | ||
32 | break; | ||
33 | |||
34 | case KC_MAKE: // Compiles the firmware, and adds the flash command based on keyboard bootloader | ||
35 | if (!record->event.pressed) { | ||
36 | uint8_t temp_mod = get_mods(); | ||
37 | uint8_t temp_osm = get_oneshot_mods(); | ||
38 | clear_mods(); clear_oneshot_mods(); | ||
39 | send_string_with_delay_P(PSTR("make " QMK_KEYBOARD ":" QMK_KEYMAP), TAP_CODE_DELAY); | ||
40 | #ifndef MAKE_BOOTLOADER | ||
41 | if ( ( temp_mod | temp_osm ) & MOD_MASK_SHIFT ) | ||
42 | #endif | ||
43 | { | ||
44 | #if defined(__arm__) | ||
45 | send_string_with_delay_P(PSTR(":dfu-util"), TAP_CODE_DELAY); | ||
46 | #elif defined(BOOTLOADER_DFU) | ||
47 | send_string_with_delay_P(PSTR(":dfu"), TAP_CODE_DELAY); | ||
48 | #elif defined(BOOTLOADER_HALFKAY) | ||
49 | send_string_with_delay_P(PSTR(":teensy"), TAP_CODE_DELAY); | ||
50 | #elif defined(BOOTLOADER_CATERINA) | ||
51 | send_string_with_delay_P(PSTR(":avrdude"), TAP_CODE_DELAY); | ||
52 | #endif // bootloader options | ||
53 | } | ||
54 | if ( ( temp_mod | temp_osm ) & MOD_MASK_CTRL) { send_string_with_delay_P(PSTR(" -j8 --output-sync"), TAP_CODE_DELAY); } | ||
55 | send_string_with_delay_P(PSTR(SS_TAP(X_ENTER)), TAP_CODE_DELAY); | ||
56 | } | ||
57 | break; | ||
58 | // FLEDERMAUSLAND | ||
59 | case MC_QT1: // "" | ||
60 | if(record->event.pressed){ | ||
61 | SEND_STRING("\"\""); | ||
62 | tap_code(KC_LEFT); | ||
63 | } | ||
64 | break; | ||
65 | case MC_QT2: // '' | ||
66 | if(record->event.pressed){ | ||
67 | SEND_STRING("''"); | ||
68 | tap_code(KC_LEFT); | ||
69 | } | ||
70 | break; | ||
71 | case MC_QT3: // `' | ||
72 | if(record->event.pressed){ | ||
73 | SEND_STRING("`'"); | ||
74 | tap_code(KC_LEFT); | ||
75 | } | ||
76 | break; | ||
77 | case MC_PAR: // Parenthesis | ||
78 | if(record->event.pressed){ | ||
79 | SEND_STRING("()"); | ||
80 | tap_code(KC_LEFT); | ||
81 | } | ||
82 | break; | ||
83 | case MC_CUR: // Curly bracket | ||
84 | if(record->event.pressed){ | ||
85 | SEND_STRING("{}"); | ||
86 | tap_code(KC_LEFT); | ||
87 | } | ||
88 | break; | ||
89 | case MC_SQR: // Square bracket | ||
90 | if(record->event.pressed){ | ||
91 | SEND_STRING("[]"); | ||
92 | tap_code(KC_LEFT); | ||
93 | } | ||
94 | break; | ||
95 | case MC_ABR: // Angle bracket | ||
96 | if(record->event.pressed){ | ||
97 | SEND_STRING("<>"); | ||
98 | tap_code(KC_LEFT); | ||
99 | } | ||
100 | break; | ||
101 | case MCT_NEW: // New Tmux Session | ||
102 | if(record->event.pressed){ | ||
103 | tmux_prefix(); | ||
104 | SEND_STRING(":neww"); | ||
105 | tap_code(KC_ENT); | ||
106 | } | ||
107 | break; | ||
108 | case MCT_SH: // Tmux horizontal split | ||
109 | if(record->event.pressed){ | ||
110 | tmux_prefix(); | ||
111 | SEND_STRING("%"); | ||
112 | } | ||
113 | break; | ||
114 | case MCT_SV: // Tmux vertical split | ||
115 | if(record->event.pressed){ | ||
116 | tmux_prefix(); | ||
117 | SEND_STRING("\""); | ||
118 | } | ||
119 | break; | ||
120 | case MCT_ZM: // Tmux zoom | ||
121 | if(record->event.pressed){ | ||
122 | tmux_prefix(); | ||
123 | tap_code(KC_Z); | ||
124 | } | ||
125 | break; | ||
126 | case MCT_SCR: // Tmux scroll mode | ||
127 | if(record->event.pressed){ | ||
128 | tmux_prefix(); | ||
129 | tap_code(KC_PGUP); | ||
130 | } | ||
131 | break; | ||
132 | case MCT_UP: // Tmux up | ||
133 | break; | ||
134 | case MCT_DW: // Tmux down | ||
135 | break; | ||
136 | case MCT_LFT: // Tmux left | ||
137 | break; | ||
138 | case MCT_RGT: // Tmux right | ||
139 | tmux_prefix(); | ||
140 | tap_code(KC_RIGHT); | ||
141 | break; | ||
142 | case MCV_B: // Vim begin of line | ||
143 | if(record->event.pressed){ | ||
144 | tap_code(KC_0); | ||
145 | } | ||
146 | break; | ||
147 | case MCV_E: // Vim end of line | ||
148 | if(record->event.pressed){ | ||
149 | SEND_STRING(":vsplit"); | ||
150 | tap_code(KC_ENT); | ||
151 | } | ||
152 | break; | ||
153 | case MCT_F: // Vim for loop | ||
154 | if(record->event.pressed){ | ||
155 | SEND_STRING(":help"); | ||
156 | tap_code(KC_ENT); | ||
157 | } | ||
158 | break; | ||
159 | case VRSN: // Prints firmware version | ||
160 | if (record->event.pressed) { | ||
161 | send_string_with_delay_P(PSTR(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION ", Built on: " QMK_BUILDDATE), TAP_CODE_DELAY); | ||
162 | } | ||
163 | break; | ||
164 | // These are a series of gaming macros. | ||
165 | // Only enables for the viterbi, basically, | ||
166 | // to save on firmware space, since it's limited. | ||
167 | #ifdef MACROS_ENABLED | ||
168 | case KC_OVERWATCH: // Toggle's if we hit "ENTER" or "BACKSPACE" to input macros | ||
169 | if (record->event.pressed) { userspace_config.is_overwatch ^= 1; eeconfig_update_user(userspace_config.raw); } | ||
170 | #ifdef RGBLIGHT_ENABLE | ||
171 | userspace_config.is_overwatch ? rgblight_mode_noeeprom(17) : rgblight_mode_noeeprom(18); | ||
172 | #endif //RGBLIGHT_ENABLE | ||
173 | break; | ||
174 | case KC_SALT: | ||
175 | return send_game_macro("Salt, salt, salt...", record, false); | ||
176 | case KC_MORESALT: | ||
177 | return send_game_macro("Please sir, can I have some more salt?!", record, false); | ||
178 | case KC_SALTHARD: | ||
179 | return send_game_macro("Your salt only makes me harder, and even more aggressive!", record, false); | ||
180 | case KC_GOODGAME: | ||
181 | return send_game_macro("Good game, everyone!", record, false); | ||
182 | case KC_GLHF: | ||
183 | return send_game_macro("Good luck, have fun!!!", record, false); | ||
184 | case KC_SYMM: | ||
185 | return send_game_macro("Left click to win!", record, false); | ||
186 | case KC_JUSTGAME: | ||
187 | return send_game_macro("It may be a game, but if you don't want to actually try, please go play AI, so that people that actually want to take the game seriously and \"get good\" have a place to do so without trolls like you throwing games.", record, false); | ||
188 | case KC_TORB: | ||
189 | return send_game_macro("That was positively riveting!", record, false); | ||
190 | case KC_AIM: | ||
191 | send_game_macro("That aim is absolutely amazing. It's almost like you're a machine!", record, true); | ||
192 | return send_game_macro("Wait! That aim is TOO good! You're clearly using an aim hack! CHEATER!", record, false); | ||
193 | case KC_C9: | ||
194 | return send_game_macro("OMG!!! C9!!!", record, false); | ||
195 | case KC_GGEZ: | ||
196 | return send_game_macro("That was a fantastic game, though it was a bit easy. Try harder next time!", record, false); | ||
197 | #endif // MACROS_ENABLED | ||
198 | |||
199 | case KC_CCCV: // One key copy/paste | ||
200 | if(record->event.pressed){ | ||
201 | copy_paste_timer = timer_read(); | ||
202 | } else { | ||
203 | if (timer_elapsed(copy_paste_timer) > TAPPING_TERM) { // Hold, copy | ||
204 | register_code(KC_LCTL); | ||
205 | tap_code(KC_C); | ||
206 | unregister_code(KC_LCTL); | ||
207 | } else { // Tap, paste | ||
208 | register_code(KC_LCTL); | ||
209 | tap_code(KC_V); | ||
210 | unregister_code(KC_LCTL); | ||
211 | } | ||
212 | } | ||
213 | break; | ||
214 | |||
215 | // Unicode | ||
216 | #ifdef UNICODE_ENABLE | ||
217 | case UC_FLIP: // (ノಠ痊ಠ)ノ彡┻━┻ | ||
218 | if (record->event.pressed) { | ||
219 | send_unicode_hex_string("0028 30CE 0CA0 75CA 0CA0 0029 30CE 5F61 253B 2501 253B"); | ||
220 | } | ||
221 | break; | ||
222 | case UC_TABL: // ┬┬ノ( º _ ºノ) | ||
223 | if (record->event.pressed) { | ||
224 | send_unicode_hex_string("252C 2500 252C 30CE 0028 0020 00BA 0020 005F 0020 00BA 30CE 0029"); | ||
225 | } | ||
226 | break; | ||
227 | case UC_SHRG: // ¯\_(ツ)_/¯ | ||
228 | if (record->event.pressed) { | ||
229 | send_unicode_hex_string("00AF 005C 005F 0028 30C4 0029 005F 002F 00AF"); | ||
230 | } | ||
231 | break; | ||
232 | case UC_DISA: // ಠ_ಠ | ||
233 | if (record->event.pressed) { | ||
234 | send_unicode_hex_string("0CA0 005F 0CA0"); | ||
235 | } | ||
236 | break; | ||
237 | #endif //!Unicode | ||
238 | } | ||
239 | return process_record_keymap(keycode, record) && | ||
240 | #if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE) | ||
241 | process_record_user_rgb(keycode, record) && | ||
242 | #endif // RGBLIGHT_ENABLE | ||
243 | process_record_secrets(keycode, record); | ||
244 | } | ||
diff --git a/users/kuchosauronad0/process_records.h b/users/kuchosauronad0/process_records.h new file mode 100644 index 000000000..1a66beaa7 --- /dev/null +++ b/users/kuchosauronad0/process_records.h | |||
@@ -0,0 +1,94 @@ | |||
1 | #pragma once | ||
2 | #include "kuchosauronad0.h" | ||
3 | |||
4 | #if defined(KEYMAP_SAFE_RANGE) | ||
5 | #define PLACEHOLDER_SAFE_RANGE KEYMAP_SAFE_RANGE | ||
6 | #else | ||
7 | #define PLACEHOLDER_SAFE_RANGE SAFE_RANGE | ||
8 | #endif | ||
9 | |||
10 | enum userspace_custom_keycodes{ | ||
11 | VRSN = PLACEHOLDER_SAFE_RANGE, // Prints QMK Firmware and board info | ||
12 | KC_QWERTY, // Sets default layer to QWERTY | ||
13 | KC_COLEMAK, // Sets default layer to COLEMAK | ||
14 | KC_DVORAK, // Sets default layer to DVORAK | ||
15 | KC_WORKMAN, // Sets default layer to WORKMAN | ||
16 | KC_NORMAN, // Sets default layer to NORMAN | ||
17 | KC_MALTRON, // Sets default layer to MALTRON | ||
18 | KC_EUCALYN, // Sets default layer to EUCALYN | ||
19 | KC_CARPLAX, // Sets default layer to CARPLAX | ||
20 | KC_UNICODE, // Sets default layer to UNICODE | ||
21 | |||
22 | KC_MAKE, // Run keyboard's customized make command | ||
23 | KC_RGB_T, // Toggles RGB Layer Indication mode | ||
24 | KC_SECRET_1, | ||
25 | KC_SECRET_2, | ||
26 | KC_SECRET_3, | ||
27 | KC_SECRET_4, | ||
28 | KC_SECRET_5, | ||
29 | KC_CCCV, // Hold to copy, tap to paste | ||
30 | KC_NUKE, // NUCLEAR LAUNCH DETECTED!!! | ||
31 | UC_FLIP, // (ಠ痊ಠ)┻━┻ | ||
32 | UC_TABL, // ┬┬ノ( º _ ºノ) | ||
33 | UC_SHRG, // ¯\_(ツ)_/¯ | ||
34 | UC_DISA, // ಠ_ಠ | ||
35 | |||
36 | MC_QT1, // "" | ||
37 | MC_QT2, // '' | ||
38 | MC_QT3, // `' | ||
39 | MC_PAR, // Parenthesis | ||
40 | MC_CUR, // Curly bracket | ||
41 | MC_SQR, // Square bracket | ||
42 | MC_ABR, // Angle bracket | ||
43 | MCT_NEW, // New Tmux Session | ||
44 | MCT_SH, // Tmux horizontal split | ||
45 | MCT_SV, // Tmux vertical split | ||
46 | MCT_ZM, // Tmux zoom | ||
47 | MCT_SCR, // Tmux scroll mode | ||
48 | MCT_UP, // Tmux up | ||
49 | MCT_DW, // Tmux down | ||
50 | MCT_LFT, // Tmux left | ||
51 | MCT_RGT, // Tmux right | ||
52 | MCV_B, // Vim begin of line | ||
53 | MCV_E, // Vim end of line | ||
54 | MCT_F, // Vim for loop | ||
55 | MCG_A, // Git add | ||
56 | MCG_C, // Git commit | ||
57 | MCG_P, // Git push | ||
58 | MCG_R, // Git revert | ||
59 | MCG_L, // Git log | ||
60 | MCG_S, // Git status | ||
61 | |||
62 | NEW_SAFE_RANGE //use "NEWPLACEHOLDER for keymap specific codes | ||
63 | }; | ||
64 | |||
65 | bool process_record_secrets(uint16_t keycode, keyrecord_t *record); | ||
66 | bool process_record_keymap(uint16_t keycode, keyrecord_t *record); | ||
67 | |||
68 | #define LOWER MO(_LOWER) | ||
69 | #define RAISE MO(_RAISE) | ||
70 | #define ADJUST MO(_ADJUST) | ||
71 | #define TG_MODS TG(_MODS) | ||
72 | #define TG_GAME TG(_GAMEPAD) | ||
73 | #define OS_LWR OSL(_LOWER) | ||
74 | #define OS_RSE OSL(_RAISE) | ||
75 | #define OS_UNI OSL(_UNICODE) | ||
76 | |||
77 | #define KC_SEC1 KC_SECRET_1 | ||
78 | #define KC_SEC2 KC_SECRET_2 | ||
79 | #define KC_SEC3 KC_SECRET_3 | ||
80 | #define KC_SEC4 KC_SECRET_4 | ||
81 | #define KC_SEC5 KC_SECRET_5 | ||
82 | #define KC_SEC6 KC_SECRET_6 | ||
83 | |||
84 | #define QWERTY KC_QWERTY | ||
85 | #define DVORAK KC_DVORAK | ||
86 | #define COLEMAK KC_COLEMAK | ||
87 | #define WORKMAN KC_WORKMAN | ||
88 | #define UNICODE KC_UNICODE | ||
89 | |||
90 | #define KC_RESET RESET | ||
91 | #define KC_RST KC_RESET | ||
92 | |||
93 | #define UC_IRNY UC(0x2E2E) | ||
94 | #define UC_CLUE UC(0x203D) | ||
diff --git a/users/kuchosauronad0/readme.md b/users/kuchosauronad0/readme.md new file mode 100644 index 000000000..8211dc189 --- /dev/null +++ b/users/kuchosauronad0/readme.md | |||
@@ -0,0 +1,145 @@ | |||
1 | # qmk userspace for kuchosauronad0 | ||
2 | Thanks to drashna and everyone else in the qmk_firmware/users/ directory :) | ||
3 | |||
4 | # Overview | ||
5 | |||
6 | ## Keyboard Layout Templates | ||
7 | This borrows from @jola5's "Not quite neo" code. This allows me to maintain blocks of keymaps in the userspace, so that I can modify the userspace, and this is reflected in all of the keyboards that use it, at once. | ||
8 | |||
9 | This makes adding tap/hold mods, or other special keycodes or functions to all keyboards super easy, as it's done to all of them at once. | ||
10 | |||
11 | The caveat here is that the keymap needs a processor/wrapper, as it doesn't like the substitutions. However, this is as simple as just pushing it through a define. For instance: | ||
12 | |||
13 | `#define LAYOUT_ergodox_wrapper(...) LAYOUT_ergodox(__VA_ARGS__)` | ||
14 | |||
15 | Once that's been done and you've switched the keymaps to use the "wrapper", it will read the substitution blocks just fine. | ||
16 | |||
17 | Credit goes to @jola5 for first implementing this awesome idea. | ||
18 | |||
19 | ## Custom Keycodes | ||
20 | Declared in `process_records.h` and `template.h` and defined in `process_record_user` in template.c | ||
21 | |||
22 | ## Tap Dances | ||
23 | Set `TAP_DANCE_ENABLE = yes` in rules.mk. See file tap_dances.{c,h} | ||
24 | |||
25 | ## Leader Key | ||
26 | Set `LEADER_ENABLE = yes` in rules.mk. | ||
27 | TODO: document tmux / vim / os | ||
28 | |||
29 | ## Unicode | ||
30 | TODO: Set `idk` in `idc` | ||
31 | |||
32 | ## Diablo Layer | ||
33 | Currently not in use. | ||
34 | |||
35 | # Secret Macros | ||
36 | Set `NO_SECRETS = yes` in rules.mk. | ||
37 | |||
38 | With help from gitter and Colinta, this adds the ability to add hidden macros from other users. | ||
39 | |||
40 | First, I have several files that are hidden/excluded from Git/GitHub. These contain everything needed for the macros. To hide these files, open `.git/info/exclude` and add `secrets.c` and `secrets.h` to that file, below the comments. | ||
41 | |||
42 | And this requires `KC_SECRET_1` through `KC_SECRET_5` to be defined in your `<name>.h` file to define the keycodes for the new macros. | ||
43 | |||
44 | |||
45 | ### .git/info/exclude | ||
46 | |||
47 | ``` | ||
48 | # git ls-files --others --exclude-from=.git/info/exclude | ||
49 | # Lines that start with '#' are comments. | ||
50 | # For a project mostly in C, the following would be a good set of | ||
51 | # exclude patterns (uncomment them if you want to use them): | ||
52 | # *.[oa] | ||
53 | # *~ | ||
54 | /users/kuchosauronad0/secrets.c | ||
55 | /users/kuchosauronad0/secrets.h | ||
56 | ``` | ||
57 | |||
58 | Then you can create these files: | ||
59 | |||
60 | ### secrets.c | ||
61 | |||
62 | ```c | ||
63 | #include "kuchosauronad0.h" // replace with your keymap's "h" file, or whatever file stores the keycodes | ||
64 | |||
65 | #if (__has_include("secrets.h") && !defined(NO_SECRETS)) | ||
66 | #include "secrets.h" | ||
67 | #else | ||
68 | // `PROGMEM const char secret[][x]` may work better, but it takes up more space in the firmware | ||
69 | // And I'm not familiar enough to know which is better or why... | ||
70 | static const char * const secret[] = { | ||
71 | "test1", | ||
72 | "test2", | ||
73 | "test3", | ||
74 | "test4", | ||
75 | "test5" | ||
76 | }; | ||
77 | #endif | ||
78 | |||
79 | bool process_record_secrets(uint16_t keycode, keyrecord_t *record) { | ||
80 | switch (keycode) { | ||
81 | case KC_SECRET_1 ... KC_SECRET_5: // Secrets! Externally defined strings, not stored in repo | ||
82 | if (!record->event.pressed) { | ||
83 | clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED); | ||
84 | send_string_with_delay(secret[keycode - KC_SECRET_1], MACRO_TIMER); | ||
85 | } | ||
86 | return false; | ||
87 | break; | ||
88 | } | ||
89 | return true; | ||
90 | } | ||
91 | ``` | ||
92 | |||
93 | ### secrets.h | ||
94 | |||
95 | ```c | ||
96 | static const char * const secrets[] = { | ||
97 | "secret1", | ||
98 | "secret2", | ||
99 | "secret3", | ||
100 | "secret4", | ||
101 | "secret5" | ||
102 | }; | ||
103 | ``` | ||
104 | |||
105 | Replacing the strings with the codes that you need. | ||
106 | |||
107 | ### name.c | ||
108 | |||
109 | In the `<name>.c` file, you will want to add this to the top: | ||
110 | |||
111 | ```c | ||
112 | __attribute__ ((weak)) | ||
113 | bool process_record_secrets(uint16_t keycode, keyrecord_t *record) { | ||
114 | return true; | ||
115 | } | ||
116 | ``` | ||
117 | |||
118 | This is so that the function can be called here, and replaced in the `secrets.c` file, and so it won't error out if it doesn't exist. | ||
119 | |||
120 | And then, in the `process_record_user` function, assuming you have `return process_record_keymap(keycode, record)` here, you'll want to replace the "final" return with the following. Otherwise, you want to replace the `return true;` with `return process_record_secrets(keycode, record);` | ||
121 | |||
122 | ```c | ||
123 | return process_record_keymap(keycode, record) && process_record_secrets(keycode, record); | ||
124 | } | ||
125 | ``` | ||
126 | |||
127 | ### rules.mk | ||
128 | |||
129 | Here, you want your `/users/<name>/rules.mk` file to "detect" the existence of the `secrets.c` file, and only add it if the file exists. To do so, add this block: | ||
130 | |||
131 | ```make | ||
132 | ifneq ("$(wildcard $(USER_PATH)/secrets.c)","") | ||
133 | SRC += secrets.c | ||
134 | endif | ||
135 | ``` | ||
136 | |||
137 | Additionally, if you want to make sure that you can disable the function without messing with the file, you need to add this to your `/users/<name>/rules.mk`, so that it catches the flag: | ||
138 | |||
139 | ```make | ||
140 | ifeq ($(strip $(NO_SECRETS)), yes) | ||
141 | OPT_DEFS += -DNO_SECRETS | ||
142 | endif | ||
143 | ``` | ||
144 | |||
145 | Then, if you run `make keyboard:name NO_SECRETS=yes`, it will default to the test strings in your `<name>.c` file, rather than reading from your file. | ||
diff --git a/users/kuchosauronad0/rules.mk b/users/kuchosauronad0/rules.mk new file mode 100644 index 000000000..8610a9b7a --- /dev/null +++ b/users/kuchosauronad0/rules.mk | |||
@@ -0,0 +1,44 @@ | |||
1 | SRC += kuchosauronad0.c \ | ||
2 | process_records.c | ||
3 | |||
4 | LINK_TIME_OPTIMIZATION_ENABLE = yes | ||
5 | |||
6 | #ifneq ("$(wildcard $(USER_PATH)/secrets.c)","") | ||
7 | # SRC += secrets.c | ||
8 | #endif | ||
9 | |||
10 | ifeq ($(strip $(TAP_DANCE_ENABLE)), yes) | ||
11 | SRC += tap_dances.c | ||
12 | endif | ||
13 | |||
14 | ifeq ($(strip $(ENCODER_ENABLE)), yes) | ||
15 | SRC += encoder.c | ||
16 | endif | ||
17 | |||
18 | ifeq ($(strip $(LEADER_ENABLE)), yes) | ||
19 | SRC += leader.c | ||
20 | endif | ||
21 | |||
22 | ifneq ("$(wildcard $(USER_PATH)/secrets.c)","") | ||
23 | SRC += secrets.c | ||
24 | endif | ||
25 | ifeq ($(strip $(NO_SECRETS)), yes) | ||
26 | OPT_DEFS += -DNO_SECRETS | ||
27 | endif | ||
28 | ifeq ($(strip $(UNICODEMAP_ENABLE)), yes) | ||
29 | SRC += unicode.c | ||
30 | endif | ||
31 | |||
32 | ifeq ($(strip $(MACROS_ENABLED)), yes) | ||
33 | OPT_DEFS += -DMACROS_ENABLED | ||
34 | endif | ||
35 | |||
36 | ifdef CONSOLE_ENABLE | ||
37 | ifeq ($(strip $(KEYLOGGER_ENABLE)), yes) | ||
38 | OPT_DEFS += -DKEYLOGGER_ENABLE | ||
39 | endif | ||
40 | endif | ||
41 | |||
42 | ifeq ($(strip $(MAKE_BOOTLOADER)), yes) | ||
43 | OPT_DEFS += -DMAKE_BOOTLOADER | ||
44 | endif | ||
diff --git a/users/kuchosauronad0/tap_dances.c b/users/kuchosauronad0/tap_dances.c new file mode 100644 index 000000000..4ebb5dc73 --- /dev/null +++ b/users/kuchosauronad0/tap_dances.c | |||
@@ -0,0 +1,57 @@ | |||
1 | #include "tap_dances.h" | ||
2 | void td_parenthesis (qk_tap_dance_state_t *state, void *user_data) { | ||
3 | if (state->count == 1) { | ||
4 | SEND_STRING ("\("); | ||
5 | reset_tap_dance (state); | ||
6 | } | ||
7 | else if (state->count == 2) { | ||
8 | SEND_STRING("()" SS_TAP(X_LEFT)); | ||
9 | //tap_code(KC_2); | ||
10 | //tap_code(KC_3); | ||
11 | //tap_code(KC_LEFT); | ||
12 | reset_tap_dance (state); | ||
13 | } | ||
14 | else if (state->count == 3) { | ||
15 | SEND_STRING("[]" SS_TAP(X_LEFT)); | ||
16 | reset_tap_dance (state); | ||
17 | } | ||
18 | else if (state->count == 4) { | ||
19 | SEND_STRING("{}" SS_TAP(X_LEFT)); | ||
20 | reset_tap_dance (state); | ||
21 | } | ||
22 | else if (state->count >= 5) { | ||
23 | SEND_STRING("<>" SS_TAP(X_LEFT)); | ||
24 | reset_tap_dance (state); | ||
25 | } | ||
26 | } | ||
27 | |||
28 | void safe_reset(qk_tap_dance_state_t *state, void *user_data) { | ||
29 | if (state->count >= 3) { | ||
30 | // Reset the keyboard if you tap the key more than three times | ||
31 | reset_keyboard(); | ||
32 | reset_tap_dance(state); | ||
33 | } | ||
34 | } | ||
35 | |||
36 | qk_tap_dance_action_t tap_dance_actions[] = { | ||
37 | [TD_RESET] = ACTION_TAP_DANCE_FN(safe_reset), | ||
38 | [TD_NUM1] = ACTION_TAP_DANCE_DOUBLE(KC_1, KC_4), | ||
39 | [TD_NUM2] = ACTION_TAP_DANCE_DOUBLE(KC_2, KC_5), | ||
40 | [TD_NUM3] = ACTION_TAP_DANCE_DOUBLE(KC_3, KC_6), | ||
41 | [TD_QT1] = ACTION_TAP_DANCE_DOUBLE(KC_QUOT, MC_QT1), | ||
42 | [TD_QT2] = ACTION_TAP_DANCE_DOUBLE(LSFT(KC_QUOT), MC_QT2), | ||
43 | [TD_QT3] = ACTION_TAP_DANCE_DOUBLE(KC_GRV, MC_QT3), | ||
44 | |||
45 | [TD_TMX] = ACTION_TAP_DANCE_DOUBLE(KC_T, TM_X), | ||
46 | [TD_EOL] = ACTION_TAP_DANCE_DOUBLE(KC_E, MC_EOL), // end of line | ||
47 | [TD_BOL] = ACTION_TAP_DANCE_DOUBLE(KC_A, MC_BOL), // beginning of line | ||
48 | [TD_NW] = ACTION_TAP_DANCE_DOUBLE(KC_F, MC_NW), // next word | ||
49 | [TD_PW] = ACTION_TAP_DANCE_DOUBLE(KC_B, MC_PW), // pevious word | ||
50 | [TD_DW] = ACTION_TAP_DANCE_DOUBLE(KC_W, MC_DW), // pevious word | ||
51 | |||
52 | [TD_SPC] = ACTION_TAP_DANCE_FN(td_parenthesis), // \(, (), [], {}, <> | ||
53 | [TD_PAR] = ACTION_TAP_DANCE_DOUBLE(KC_LPRN, MC_PAR), // () | ||
54 | [TD_SQR] = ACTION_TAP_DANCE_DOUBLE(KC_LBRC, MC_SQR), // [] | ||
55 | [TD_CUR] = ACTION_TAP_DANCE_DOUBLE(LSFT(KC_LCBR), MC_CUR),// {} | ||
56 | [TD_ABR] = ACTION_TAP_DANCE_DOUBLE(LSFT(KC_COMM), MC_ABR),// | ||
57 | }; | ||
diff --git a/users/kuchosauronad0/tap_dances.h b/users/kuchosauronad0/tap_dances.h new file mode 100644 index 000000000..19da8d69d --- /dev/null +++ b/users/kuchosauronad0/tap_dances.h | |||
@@ -0,0 +1,26 @@ | |||
1 | #pragma once | ||
2 | #include "kuchosauronad0.h" | ||
3 | |||
4 | #ifdef TAP_DANCE_ENABLE | ||
5 | enum { | ||
6 | TD_RESET = 0, | ||
7 | TD_SPC, // for special function td_parenthesis testing | ||
8 | TD_NUM1, // compact gaming numpad | ||
9 | TD_NUM2, // | ||
10 | TD_NUM3, // | ||
11 | TD_TMX, // tmux control sequence | ||
12 | TD_EOL, // end of line | ||
13 | TD_BOL, // beginning of line | ||
14 | TD_NW, // next word | ||
15 | TD_PW, // pevious word | ||
16 | TD_DW, // delete word | ||
17 | TD_QT1, // single double quote for ' | ||
18 | TD_QT2, // single double quote for " | ||
19 | TD_QT3, // single double quote for ` | ||
20 | TD_PAR, // single double parenthesis | ||
21 | TD_CUR, // single double curly braces | ||
22 | TD_SQR, // single double square brackets | ||
23 | TD_ABR // single double angle brackets | ||
24 | }; | ||
25 | #endif // TAP_DANCE_ENABLE | ||
26 | void td_parenthesis (qk_tap_dance_state_t *state, void *user_data); | ||
diff --git a/users/kuchosauronad0/template.c b/users/kuchosauronad0/template.c new file mode 100644 index 000000000..475e45d39 --- /dev/null +++ b/users/kuchosauronad0/template.c | |||
@@ -0,0 +1,125 @@ | |||
1 | #include "template.h" | ||
2 | |||
3 | |||
4 | // Add reconfigurable functions here, for keymap customization | ||
5 | // This allows for a global, userspace functions, and continued | ||
6 | // customization of the keymap. Use _keymap instead of _user | ||
7 | // functions in the keymaps | ||
8 | __attribute__ ((weak)) | ||
9 | void matrix_init_keymap(void) {} | ||
10 | |||
11 | // Call user matrix init, then call the keymap's init function | ||
12 | void matrix_init_user(void) { | ||
13 | matrix_init_keymap(); | ||
14 | } | ||
15 | |||
16 | |||
17 | __attribute__ ((weak)) | ||
18 | void matrix_scan_keymap(void) {} | ||
19 | |||
20 | // No global matrix scan code, so just run keymap's matix | ||
21 | // scan function | ||
22 | __attribute__ ((weak)) | ||
23 | void matrix_scan_user(void) { | ||
24 | matrix_scan_keymap(); | ||
25 | } | ||
26 | |||
27 | |||
28 | __attribute__ ((weak)) | ||
29 | bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { | ||
30 | return true; | ||
31 | } | ||
32 | |||
33 | // Defines actions tor my global custom keycodes. Defined in drashna.h file | ||
34 | // Then runs the _keymap's recod handier if not processed here, | ||
35 | // And use "NEWPLACEHOLDER" for new safe range | ||
36 | bool process_record_user(uint16_t keycode, keyrecord_t *record) { | ||
37 | |||
38 | switch (keycode) { | ||
39 | case KC_MAKE: | ||
40 | if (!record->event.pressed) { | ||
41 | SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP | ||
42 | #if (defined(BOOTLOADER_DFU) || defined(BOOTLOADER_LUFA_DFU) || defined(BOOTLOADER_QMK_DFU)) | ||
43 | ":dfu" | ||
44 | #elif defined(BOOTLOADER_HALFKAY) | ||
45 | ":teensy" | ||
46 | #elif defined(BOOTLOADER_CATERINA) | ||
47 | ":avrdude" | ||
48 | #endif | ||
49 | SS_TAP(X_ENTER)); | ||
50 | } | ||
51 | return false; | ||
52 | break; | ||
53 | |||
54 | case VRSN: | ||
55 | if (record->event.pressed) { | ||
56 | SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); | ||
57 | } | ||
58 | return false; | ||
59 | break; | ||
60 | } | ||
61 | return process_record_keymap(keycode, record); | ||
62 | } | ||
63 | |||
64 | |||
65 | __attribute__ ((weak)) | ||
66 | uint32_t layer_state_set_keymap (uint32_t state) { | ||
67 | return state; | ||
68 | } | ||
69 | |||
70 | uint32_t layer_state_set_user (uint32_t state) { | ||
71 | return layer_state_set_keymap (state); | ||
72 | } | ||
73 | |||
74 | |||
75 | |||
76 | __attribute__ ((weak)) | ||
77 | void led_set_keymap(uint8_t usb_led) {} | ||
78 | |||
79 | void led_set_user(uint8_t usb_led) { | ||
80 | led_set_keymap(usb_led); | ||
81 | } | ||
82 | |||
83 | |||
84 | |||
85 | __attribute__ ((weak)) | ||
86 | void suspend_power_down_keymap(void) {} | ||
87 | |||
88 | void suspend_power_down_user(void) | ||
89 | { | ||
90 | suspend_power_down_keymap(); | ||
91 | } | ||
92 | |||
93 | |||
94 | |||
95 | __attribute__ ((weak)) | ||
96 | void suspend_wakeup_init_keymap(void) {} | ||
97 | |||
98 | void suspend_wakeup_init_user(void) | ||
99 | { | ||
100 | suspend_wakeup_init_keymap(); | ||
101 | #ifdef KEYBOARD_ergodox_ez | ||
102 | wait_ms(10); | ||
103 | #endif | ||
104 | } | ||
105 | |||
106 | |||
107 | |||
108 | __attribute__ ((weak)) | ||
109 | void startup_keymap(void) {} | ||
110 | |||
111 | void startup_user (void) { | ||
112 | #ifdef RGBLIGHT_ENABLE | ||
113 | matrix_init_rgb(); | ||
114 | #endif //RGBLIGHT_ENABLE | ||
115 | startup_keymap(); | ||
116 | } | ||
117 | |||
118 | |||
119 | |||
120 | __attribute__ ((weak)) | ||
121 | void shutdown_keymap(void) {} | ||
122 | |||
123 | void shutdown_user (void) { | ||
124 | shutdown_keymap(); | ||
125 | } | ||
diff --git a/users/kuchosauronad0/template.h b/users/kuchosauronad0/template.h new file mode 100644 index 000000000..dd1c48760 --- /dev/null +++ b/users/kuchosauronad0/template.h | |||
@@ -0,0 +1,18 @@ | |||
1 | #ifndef USERSPACE | ||
2 | #define USERSPACE | ||
3 | |||
4 | #include "quantum.h" | ||
5 | #include "version.h" | ||
6 | #include "eeprom.h" | ||
7 | |||
8 | // Define layer names | ||
9 | #define BASE 0 | ||
10 | |||
11 | enum custom_keycodes { | ||
12 | VRSN = SAFE_RANGE, // can always be here | ||
13 | KC_MAKE, | ||
14 | KC_RESET, | ||
15 | NEWPLACEHOLDER //use "NEWPLACEHOLDER for keymap specific codes | ||
16 | }; | ||
17 | |||
18 | #endif | ||
diff --git a/users/kuchosauronad0/unicode.c b/users/kuchosauronad0/unicode.c new file mode 100644 index 000000000..8b312deb6 --- /dev/null +++ b/users/kuchosauronad0/unicode.c | |||
@@ -0,0 +1,62 @@ | |||
1 | #include "unicode.h" | ||
2 | |||
3 | //#ifdef UNICODEMAP_ENABLE | ||
4 | const uint32_t PROGMEM unicode_map[] = { | ||
5 | [BANG] = 0x0203D,// ‽ | ||
6 | [IRONY] = 0x02E2E,// ⸮ | ||
7 | [DEGREE] = 0x000B0,// ° | ||
8 | [THINK] = 0x1F914,// 🤔 | ||
9 | [GRIN] = 0x1F600,// � | ||
10 | [MONOCL] = 0x1F9D0,// 🧐 | ||
11 | [DRUG0] = 0x1F92A,// 🤪 | ||
12 | [DRUG1] = 0x1F974,// 🥴 | ||
13 | [CLOWN] = 0x1F921,// 🤡 | ||
14 | [MNDBLWN] = 0x1F92F,// 🤯 | ||
15 | [MONEY] = 0x1F911,// 🤑 | ||
16 | [SHTUP] = 0x1F910,// 🤐 | ||
17 | [PARTY] = 0x1F973,// 🥳 | ||
18 | [SMRK] = 0x1F60F,// 😏 | ||
19 | [WEARY] = 0x1F629,// 😩 | ||
20 | [UNAMU] = 0x1F612,// 😒 | ||
21 | [SPY] = 0x1F575,//🕵 | ||
22 | [DAFUQ] = 0x1F47A,// 👺 | ||
23 | [FIST0] = 0x1F91B,// 🤛 | ||
24 | [FIST1] = 0x1F91C,// 🤜 | ||
25 | [FIST2] = 0x270A, // ✊ | ||
26 | [FIST3] = 0x1F44A,// 👊 | ||
27 | [WIFIHAND] = 0x1F44B,// 👋 | ||
28 | [OKOK] = 0x1F44C,// 👌 | ||
29 | [EFFU] = 0x1F595,// 🖕 | ||
30 | [SPOCK] = 0x1F596,// 🖖 | ||
31 | [INUP] = 0x1F446,// 👆 | ||
32 | [THDN] = 0x1F44E,// 👎 | ||
33 | [THUP] = 0x1F44D,// 👍 | ||
34 | [TUMBLER] = 0x1F943,// 🥃 | ||
35 | [DRAGON0] = 0x1F409,// 🐉 | ||
36 | [DRAGON1] = 0x1F432,// 🐲 | ||
37 | [TIGER0] = 0x1F405,// 🐅 | ||
38 | [TIGER1] = 0x1F42F,// 🐯 | ||
39 | [COOL] = 0x1F192,// 🆒 | ||
40 | [UCHART] = 0x1F4C8,// 📈 | ||
41 | [DCHART] = 0x1F4C9,// 📉 | ||
42 | [BCHART] = 0x1F4CA,// 📊 | ||
43 | [NOPRCY] = 0x1F572,// 🕲 | ||
44 | [PRCY] = 0x1F571,// 🕱 | ||
45 | [BBB] = 0x1F171,// 🅱 | ||
46 | [POO] = 0x1F4A9,// 💩 | ||
47 | [HUNDR] = 0x1F4AF,// 💯 | ||
48 | [EGGPL] = 0x1F346,// 🍆 | ||
49 | [WATER] = 0x1F4A6,// 💦 | ||
50 | [LIT] = 0x1F525,// 🔥 | ||
51 | [SNEK] = 0x1F40D,// 🐍 | ||
52 | [PENGUIN] = 0x1F427,// 🐧 | ||
53 | [BOAR] = 0x1F417,// 🐗 | ||
54 | [MONKEY] = 0x1F412,// 🐒 | ||
55 | [CHICK] = 0x1F425,// 🐥 | ||
56 | [DASH] = 0x1F4A8,// 💨 | ||
57 | [DIZZY] = 0x1F4AB,// 💫 | ||
58 | [KEEB] = 0x1F5AE,// 🖮 | ||
59 | [HOLE] = 0x1F573,// 🕳 | ||
60 | [SAUCER] = 0x1F6F8// 🛸 | ||
61 | }; | ||
62 | //#endif // UNICODEMAP_ENABLE | ||
diff --git a/users/kuchosauronad0/unicode.h b/users/kuchosauronad0/unicode.h new file mode 100644 index 000000000..cb550243e --- /dev/null +++ b/users/kuchosauronad0/unicode.h | |||
@@ -0,0 +1,67 @@ | |||
1 | #pragma once | ||
2 | |||
3 | #include "quantum.h" | ||
4 | |||
5 | void send_unicode_hex_string(const char* str); | ||
6 | |||
7 | /* use X(n) to call the */ | ||
8 | #ifdef UNICODEMAP_ENABLE | ||
9 | enum unicode_name { | ||
10 | OKOK, // | ||
11 | BANG, // ‽ | ||
12 | IRONY, // ⸮ | ||
13 | DEGREE, // ° | ||
14 | THINK, // 🤔 | ||
15 | GRIN, // � | ||
16 | MONOCL, // 🧐 | ||
17 | DRUG0, // 🤪 | ||
18 | DRUG1, // 🥴 | ||
19 | CLOWN, // 🤡 | ||
20 | MNDBLWN, // 🤯 | ||
21 | MONEY, // 🤑 | ||
22 | SHTUP, // 🤐 | ||
23 | PARTY, // 🥳 | ||
24 | SMRK, // 😏 | ||
25 | WEARY, // 😩 | ||
26 | UNAMU, // 😒 | ||
27 | SPY, // 🕵 | ||
28 | DAFUQ, // 👺 | ||
29 | FIST0, // 🤛 | ||
30 | FIST1, // 🤜 | ||
31 | FIST2, // ✊ | ||
32 | FIST3, // 👊 | ||
33 | WIFIHAND, // 👌 | ||
34 | EFFU, // 🖕 | ||
35 | SPOCK, // 🖖 | ||
36 | INUP, // 👆 | ||
37 | THDN, // 👎 | ||
38 | THUP, // 👍 | ||
39 | TUMBLER, // 🥃 | ||
40 | DRAGON0, // 🐉 | ||
41 | DRAGON1, // 🐅 | ||
42 | TIGER0, // 🐅 | ||
43 | TIGER1, // 🐯 | ||
44 | COOL, // 🆒 | ||
45 | UCHART, // 📈 | ||
46 | DCHART, // 📉 | ||
47 | BCHART, // 📊 | ||
48 | NOPRCY, // 🕲 | ||
49 | PRCY, // 🕱 | ||
50 | BBB, // 🅱 | ||
51 | POO, // 💩 | ||
52 | HUNDR, // 💯 | ||
53 | EGGPL, // 🍆 | ||
54 | WATER, // 💦 | ||
55 | LIT, // 🔥 | ||
56 | SNEK, // 🐍 | ||
57 | PENGUIN, // 🐧 | ||
58 | BOAR, // 🐗 | ||
59 | MONKEY, // 🐒 | ||
60 | CHICK, // 🐥 | ||
61 | DASH, // 💨 | ||
62 | DIZZY, // 💫 | ||
63 | KEEB, // 🖮 | ||
64 | HOLE, // 🕳 | ||
65 | SAUCER // 🛸 | ||
66 | }; | ||
67 | #endif | ||
diff --git a/users/kuchosauronad0/wrappers.h b/users/kuchosauronad0/wrappers.h new file mode 100644 index 000000000..3172c8a6d --- /dev/null +++ b/users/kuchosauronad0/wrappers.h | |||
@@ -0,0 +1,206 @@ | |||
1 | #pragma once | ||
2 | #include "kuchosauronad0.h" | ||
3 | /* | ||
4 | Since our quirky block definitions are basically a list of comma separated | ||
5 | arguments, we need a wrapper in order for these definitions to be | ||
6 | expanded before being used as arguments to the LAYOUT_xxx macro. | ||
7 | */ | ||
8 | #if (!defined(LAYOUT) && defined(KEYMAP)) | ||
9 | #define LAYOUT KEYMAP | ||
10 | #endif | ||
11 | |||
12 | #define LAYOUT_ergodox_wrapper(...) LAYOUT_ergodox(__VA_ARGS__) | ||
13 | #define LAYOUT_ergodox_pretty_wrapper(...) LAYOUT_ergodox_pretty(__VA_ARGS__) | ||
14 | #define KEYMAP_wrapper(...) LAYOUT(__VA_ARGS__) | ||
15 | #define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__) | ||
16 | #define LAYOUT_ortho_4x12_wrapper(...) LAYOUT_ortho_4x12(__VA_ARGS__) | ||
17 | #define LAYOUT_ortho_5x12_wrapper(...) LAYOUT_ortho_5x12(__VA_ARGS__) | ||
18 | |||
19 | /* | ||
20 | Blocks for each of the four major keyboard layouts | ||
21 | Organized so we can quickly adapt and modify all of them | ||
22 | at once, rather than for each keyboard, one at a time. | ||
23 | And this allows for much cleaner blocks in the keymaps. | ||
24 | For instance Tap/Hold for Control on all of the layouts | ||
25 | NOTE: These are all the same length. If you do a search/replace | ||
26 | then you need to add/remove underscores to keep the | ||
27 | lengths consistent. | ||
28 | */ | ||
29 | #ifdef TAP_DANCE_ENABLE | ||
30 | #define _________________QWERTY_L1_________________ KC_Q, KC_DW, KC_EOL, KC_R, KC_TMX | ||
31 | #define _________________QWERTY_L2_________________ KC_BOL, KC_S, KC_D, KC_NW, KC_G | ||
32 | #define _________________QWERTY_L3_________________ KC_Z, KC_X, KC_C, KC_V, KC_PW | ||
33 | #else | ||
34 | #define _________________QWERTY_L1_________________ KC_Q, KC_W, KC_E, KC_R, KC_T | ||
35 | #define _________________QWERTY_L2_________________ KC_A, KC_S, KC_D, KC_F, KC_G | ||
36 | #define _________________QWERTY_L3_________________ KC_Z, KC_X, KC_C, KC_V, KC_B | ||
37 | #endif | ||
38 | |||
39 | #define _________________QWERTY_R1_________________ KC_Y, KC_U, KC_I, KC_O, KC_P | ||
40 | #define _________________QWERTY_R2_________________ KC_H, KC_J, KC_K, KC_L, KC_SCLN | ||
41 | #define _________________QWERTY_R3_________________ KC_N, KC_M, KC_COMM, KC_DOT, KC_SLASH | ||
42 | |||
43 | |||
44 | #define _________________COLEMAK_L1________________ KC_Q, KC_W, KC_F, KC_P, KC_G | ||
45 | #define _________________COLEMAK_L2________________ KC_A, KC_R, KC_S, KC_T, KC_D | ||
46 | #define _________________COLEMAK_L3________________ KC_Z, KC_X, KC_C, KC_V, KC_B | ||
47 | |||
48 | #define _________________COLEMAK_R1________________ KC_J, KC_L, KC_U, KC_Y, KC_SCLN | ||
49 | #define _________________COLEMAK_R2________________ KC_H, KC_N, KC_E, KC_I, KC_O | ||
50 | #define _________________COLEMAK_R3________________ KC_K, KC_M, KC_COMM, KC_DOT, KC_SLASH | ||
51 | |||
52 | #define ______________COLEMAK_MOD_DH_L1____________ KC_Q, KC_W, KC_F, KC_P, KC_B | ||
53 | #define ______________COLEMAK_MOD_DH_L2____________ KC_A, KC_R, KC_S, KC_T, KC_G | ||
54 | #define ______________COLEMAK_MOD_DH_L3____________ KC_Z, KC_X, KC_C, KC_D, KC_V | ||
55 | |||
56 | #define ______________COLEMAK_MOD_DH_R1____________ KC_J, KC_L, KC_U, KC_Y, KC_SCLN | ||
57 | #define ______________COLEMAK_MOD_DH_R2____________ KC_M, KC_N, KC_E, KC_I, KC_O | ||
58 | #define ______________COLEMAK_MOD_DH_R3____________ KC_K, KC_H, KC_COMM, KC_DOT, KC_SLASH | ||
59 | |||
60 | |||
61 | #define _________________DVORAK_L1_________________ KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y | ||
62 | #define _________________DVORAK_L2_________________ KC_A, KC_O, KC_E, KC_U, KC_I | ||
63 | #define _________________DVORAK_L3_________________ KC_SCLN, KC_Q, KC_J, KC_K, KC_X | ||
64 | |||
65 | #define _________________DVORAK_R1_________________ KC_F, KC_G, KC_C, KC_R, KC_L | ||
66 | #define _________________DVORAK_R2_________________ KC_D, KC_H, KC_T, KC_N, KC_S | ||
67 | #define _________________DVORAK_R3_________________ KC_B, KC_M, KC_W, KC_V, KC_Z | ||
68 | |||
69 | #define ________________DVORAK_AU_L1_______________ KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y | ||
70 | #define ________________DVORAK_AU_L2_______________ KC_O, KC_A, KC_E, KC_I, KC_U | ||
71 | #define ________________DVORAK_AU_L3_______________ KC_SCLN, KC_Q, KC_J, KC_K, KC_X | ||
72 | |||
73 | #define ________________DVORAK_AU_R1_______________ KC_F, KC_G, KC_C, KC_R, KC_L | ||
74 | #define ________________DVORAK_AU_R2_______________ KC_D, KC_H, KC_T, KC_N, KC_S | ||
75 | #define ________________DVORAK_AU_R3_______________ KC_B, KC_M, KC_W, KC_V, KC_Z | ||
76 | |||
77 | |||
78 | #define _________________WORKMAN_L1________________ KC_Q, KC_D, KC_R, KC_W, KC_B | ||
79 | #define _________________WORKMAN_L2________________ KC_A, KC_S, KC_H, KC_T, KC_G | ||
80 | #define _________________WORKMAN_L3________________ KC_Z, KC_X, KC_M, KC_C, KC_V | ||
81 | |||
82 | #define _________________WORKMAN_R1________________ KC_J, KC_F, KC_U, KC_P, KC_SCLN | ||
83 | #define _________________WORKMAN_R2________________ KC_Y, KC_N, KC_E, KC_O, KC_I | ||
84 | #define _________________WORKMAN_R3________________ KC_K, KC_L, KC_COMM, KC_DOT, KC_SLASH | ||
85 | |||
86 | |||
87 | #define _________________NORMAN_L1_________________ KC_Q, KC_W, KC_D, KC_F, KC_K | ||
88 | #define _________________NORMAN_L2_________________ KC_A, KC_S, KC_E, KC_T, KC_G | ||
89 | #define _________________NORMAN_L3_________________ KC_Z, KC_X, KC_C, KC_V, KC_B | ||
90 | |||
91 | #define _________________NORMAN_R1_________________ KC_J, KC_U, KC_R, KC_L, KC_SCLN | ||
92 | #define _________________NORMAN_R2_________________ KC_Y, KC_N, KC_I, KC_O, KC_U | ||
93 | #define _________________NORMAN_R3_________________ KC_P, KC_M, KC_COMM, KC_DOT, KC_SLASH | ||
94 | |||
95 | |||
96 | #define _________________MALTRON_L1________________ KC_Q, KC_P, KC_Y, KC_C, KC_B | ||
97 | #define _________________MALTRON_L2________________ KC_A, KC_N, KC_I, KC_S, KC_F | ||
98 | #define _________________MALTRON_L3________________ KC_SCLN, KC_SLSH, KC_J, KC_G, KC_COMM | ||
99 | |||
100 | #define _________________MALTRON_R1________________ KC_V, KC_M, KC_U, KC_Z, KC_L | ||
101 | #define _________________MALTRON_R2________________ KC_D, KC_T, KC_D, KC_O, KC_R | ||
102 | #define _________________MALTRON_R3________________ KC_DOT, KC_W, KC_K, KC_MINS, KC_X | ||
103 | |||
104 | |||
105 | #define _________________EUCALYN_L1________________ KC_SLSH, KC_COMM, KC_DOT, KC_F, KC_Q | ||
106 | #define _________________EUCALYN_L2________________ KC_A, KC_O, KC_E, KC_I, KC_U | ||
107 | #define _________________EUCALYN_L3________________ KC_Z, KC_X, KC_C, KC_V, KC_W | ||
108 | |||
109 | #define _________________EUCALYN_R1________________ KC_M, KC_R, KC_D, KC_Y, KC_P | ||
110 | #define _________________EUCALYN_R2________________ KC_G, KC_T, KC_K, KC_S, KC_N | ||
111 | #define _________________EUCALYN_R3________________ KC_B, KC_H, KC_J, KC_L, KC_SCLN | ||
112 | |||
113 | |||
114 | #define _____________CARPLAX_QFMLWY_L1_____________ KC_Q, KC_F, KC_M, KC_L, KC_W | ||
115 | #define _____________CARPLAX_QFMLWY_L2_____________ KC_D, KC_S, KC_T, KC_N, KC_R | ||
116 | #define _____________CARPLAX_QFMLWY_L3_____________ KC_Z, KC_V, KC_G, KC_C, KC_X | ||
117 | |||
118 | #define _____________CARPLAX_QFMLWY_R1_____________ KC_Y, KC_U, KC_O, KC_B, KC_J | ||
119 | #define _____________CARPLAX_QFMLWY_R2_____________ KC_I, KC_A, KC_E, KC_H, KC_SCLN | ||
120 | #define _____________CARPLAX_QFMLWY_R3_____________ KC_P, KC_K, KC_COMM, KC_DOT, KC_SLSH | ||
121 | |||
122 | |||
123 | #define _____________CARPLAX_QGMLWB_L1_____________ KC_Q, KC_G, KC_M, KC_L, KC_W | ||
124 | #define _____________CARPLAX_QGMLWB_L2_____________ KC_D, KC_S, KC_T, KC_N, KC_R | ||
125 | #define _____________CARPLAX_QGMLWB_L3_____________ KC_Z, KC_X, KC_C, KC_F, KC_J | ||
126 | |||
127 | #define _____________CARPLAX_QGMLWB_R1_____________ KC_B, KC_Y, KC_U, KC_V, KC_SCLN | ||
128 | #define _____________CARPLAX_QGMLWB_R2_____________ KC_I, KC_A, KC_E, KC_O, KC_H | ||
129 | #define _____________CARPLAX_QGMLWB_R3_____________ KC_K, KC_P, KC_COMM, KC_DOT, KC_SLSH | ||
130 | |||
131 | |||
132 | #define _____________CARPLAX_QGMLWY_L1_____________ KC_Q, KC_G, KC_M, KC_L, KC_W | ||
133 | #define _____________CARPLAX_QGMLWY_L2_____________ KC_D, KC_S, KC_T, KC_N, KC_R | ||
134 | #define _____________CARPLAX_QGMLWY_L3_____________ KC_Z, KC_X, KC_C, KC_V, KC_J | ||
135 | |||
136 | #define _____________CARPLAX_QGMLWY_R1_____________ KC_Y, KC_F, KC_U, KC_B, KC_SCLN | ||
137 | #define _____________CARPLAX_QGMLWY_R2_____________ KC_I, KC_A, KC_E, KC_O, KC_H | ||
138 | #define _____________CARPLAX_QGMLWY_R3_____________ KC_K, KC_P, KC_COMM, KC_DOT, KC_SLSH | ||
139 | |||
140 | #ifdef UNICODE_ENABLE | ||
141 | #define _______________UNICODE_L1__________________ UC_DISA,UC_DISA, UC_DISA, UC_DISA, UC_DISA | ||
142 | #define _______________UNICODE_L2__________________ UC_DISA,UC_DISA, UC_DISA, UC_DISA, UC_DISA | ||
143 | #define _______________UNICODE_L3__________________ UC_DISA,UC_DISA, UC_DISA, UC_DISA, UC_DISA | ||
144 | |||
145 | #define _______________UNICODE_R1__________________ UC_SHRG, UC_SHRG, UC_SHRG, UC_SHRG, UC_SHRG | ||
146 | #define _______________UNICODE_R2__________________ UC_SHRG, UC_SHRG, UC_SHRG, UC_SHRG, UC_SHRG | ||
147 | #define _______________UNICODE_R3__________________ UC_SHRG, UC_SHRG, UC_SHRG, UC_SHRG, UC_SHRG | ||
148 | #endif | ||
149 | |||
150 | #ifdef UNICODEMAP_ENABLE | ||
151 | #define _______________UNICODE_L1__________________ X(SMRK), X(THINK), X(CLOWN), X(HUNDR), X(BANG) | ||
152 | #define _______________UNICODE_L2__________________ X(GRIN), X(MONKEY), X(OKOK), X(EGGPL), X(LIT) | ||
153 | #define _______________UNICODE_L3__________________ X(WEARY), X(UNAMU), X(EFFU), X(MONOCL), X(IRONY) | ||
154 | |||
155 | #define _______________UNICODE_R1__________________ X(DRUG0), X(THUP), X(INUP), X(DIZZY), X(COOL) | ||
156 | #define _______________UNICODE_R2__________________ X(FIST0), X(FIST2),X(FIST3),X(FIST1), X(OKOK) | ||
157 | #define _______________UNICODE_R3__________________ X(MNDBLWN), X(THDN), X(SPOCK),X(HOLE), X(DASH) | ||
158 | #endif | ||
159 | |||
160 | #define ________________NUMBER_LEFT________________ KC_1, KC_2, KC_3, KC_4, KC_5 | ||
161 | #define ________________NUMBER_RIGHT_______________ KC_6, KC_7, KC_8, KC_9, KC_0 | ||
162 | #define _________________FUNC_LEFT_________________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5 | ||
163 | #define _________________FUNC_RIGHT________________ KC_F6, KC_F7, KC_F8, KC_F9, KC_F10 | ||
164 | |||
165 | #define ___________________BLANK___________________ _______, _______, _______, _______, _______ | ||
166 | |||
167 | |||
168 | #define _________________LOWER_L1__________________ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC | ||
169 | #define _________________LOWER_L2__________________ ___________________BLANK___________________ | ||
170 | #define _________________LOWER_L3__________________ ___________________BLANK___________________ | ||
171 | |||
172 | #define _________________LOWER_R1__________________ KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN | ||
173 | #define _________________LOWER_R2__________________ OS_UNI, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR | ||
174 | #define _________________LOWER_R3__________________ TM_X, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT | ||
175 | |||
176 | |||
177 | |||
178 | #define _________________RAISE_L1__________________ ________________NUMBER_LEFT________________ | ||
179 | #define _________________RAISE_L2__________________ ___________________BLANK___________________ | ||
180 | #define _________________RAISE_L3__________________ ___________________BLANK___________________ | ||
181 | |||
182 | #define _________________RAISE_R1__________________ ________________NUMBER_RIGHT_______________ | ||
183 | #define _________________RAISE_R2__________________ _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC | ||
184 | #define _________________RAISE_R3__________________ _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END | ||
185 | |||
186 | |||
187 | |||
188 | #define _________________ADJUST_L1_________________ ___________________BLANK___________________ | ||
189 | #define _________________ADJUST_L2_________________ _________________FUNC_LEFT_________________ | ||
190 | #define _________________ADJUST_L3_________________ AG_SWAP, QWERTY, COLEMAK, DVORAK, WORKMAN | ||
191 | |||
192 | #define _________________ADJUST_R1_________________ KC_SEC1, KC_SEC2, KC_SEC3, KC_SEC4, KC_SEC5 | ||
193 | #define _________________ADJUST_R2_________________ _________________FUNC_RIGHT________________ | ||
194 | #define _________________ADJUST_R3_________________ KC_MUTE, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT | ||
195 | |||
196 | |||
197 | /* | ||
198 | #define _________________RGB_L1____________________ RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_TOG | ||
199 | #define _________________RGB_L2____________________ MU_TOG , CK_TOGG, AU_ON, AU_OFF, AG_NORM | ||
200 | #define _________________RGB_L3____________________ RGB_RMOD,RGB_HUD,RGB_SAD, RGB_VAD, KC_RGB_T | ||
201 | #define _________________RGB_R1____________________ RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_TOG | ||
202 | #define _________________RGB_R2____________________ MU_TOG , CK_TOGG, AU_ON, AU_OFF, AG_NORM | ||
203 | #define _________________RGB_R3____________________ RGB_RMOD,RGB_HUD,RGB_SAD, RGB_VAD, KC_RGB_T | ||
204 | */ | ||
205 | /* vi: ft=c:tw=80:sw=2:ts=2:sts=2:et | ||
206 | */ | ||