aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--keyboards/c39/keymaps/kuchosauronad0/config.h43
-rw-r--r--keyboards/c39/keymaps/kuchosauronad0/keymap.c137
-rw-r--r--keyboards/c39/keymaps/kuchosauronad0/readme.md1
-rw-r--r--keyboards/c39/keymaps/kuchosauronad0/rules.mk20
-rw-r--r--users/kuchosauronad0/.gitignore3
-rw-r--r--users/kuchosauronad0/config.h93
-rw-r--r--users/kuchosauronad0/encoder.c10
-rw-r--r--users/kuchosauronad0/encoder.h3
-rw-r--r--users/kuchosauronad0/kuchosauronad0.c196
-rw-r--r--users/kuchosauronad0/kuchosauronad0.h111
-rw-r--r--users/kuchosauronad0/leader.c84
-rw-r--r--users/kuchosauronad0/leader.h6
-rw-r--r--users/kuchosauronad0/process_records.c244
-rw-r--r--users/kuchosauronad0/process_records.h94
-rw-r--r--users/kuchosauronad0/readme.md145
-rw-r--r--users/kuchosauronad0/rules.mk44
-rw-r--r--users/kuchosauronad0/tap_dances.c57
-rw-r--r--users/kuchosauronad0/tap_dances.h26
-rw-r--r--users/kuchosauronad0/template.c125
-rw-r--r--users/kuchosauronad0/template.h18
-rw-r--r--users/kuchosauronad0/unicode.c62
-rw-r--r--users/kuchosauronad0/unicode.h67
-rw-r--r--users/kuchosauronad0/wrappers.h206
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/*
3This is the c configuration file for the keymap
4
5Copyright 2012 Jun Wako <wakojun@gmail.com>
6Copyright 2015 Jack Humbert
7Copyright 2017 Art Ortenburger
8
9This program is free software: you can redistribute it and/or modify
10it under the terms of the GNU General Public License as published by
11the Free Software Foundation, either version 2 of the License, or
12(at your option) any later version.
13
14This program is distributed in the hope that it will be useful,
15but WITHOUT ANY WARRANTY; without even the implied warranty of
16MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17GNU General Public License for more details.
18
19You should have received a copy of the GNU General Public License
20along 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/*
2This is the keymap for the keyboard
3
4Copyright 2012 Jun Wako <wakojun@gmail.com>
5Copyright 2015 Jack Humbert
6Copyright 2017 Art Ortenburger
7
8This program is free software: you can redistribute it and/or modify
9it under the terms of the GNU General Public License as published by
10the Free Software Foundation, either version 2 of the License, or
11(at your option) any later version.
12
13This program is distributed in the hope that it will be useful,
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License
19along 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
26extern userspace_config_t userspace_config;
27
28uint8_t last_mod;
29uint8_t last_led;
30uint8_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
45const 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
129void 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 @@
1BOOTLOADER = caterina
2BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
3MOUSEKEY_ENABLE = no # Mouse keys(+4700)
4EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
5CONSOLE_ENABLE = no # Console for debug(+400)
6COMMAND_ENABLE = no # Commands for debug and configuration
7LEADER_ENABLE = yes # default is yes
8TAP_DANCE_ENABLE = no #(+1254)
9UNICODE_ENABLE = no #(+1134)
10UNICODEMAP_ENABLE = yes
11RGBLIGHT_ENABLE = no
12AUDIO_ENABLE = no
13NKRO_ENABLE = yes
14
15INDICATOR_LIGHTS = no
16MACROS_ENABLED = no
17RGBLIGHT_TWINKLE = no
18RGBLIGHT_STARTUP_ANIMATION = no
19
20NO_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 @@
1secrets.c
2secrets.h
3kuchosauronad0_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
3void 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"
3void 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/*
2Copyright 2019 Andre Poley <andre.poley@mailbox.org>
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17#include "quantum.h"
18#include "kuchosauronad0.h"
19
20userspace_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))
34void matrix_init_keymap(void) {}
35
36// Call user matrix init, set default RGB colors and then
37// call the keymap's init function
38void 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))
57void keyboard_post_init_keymap(void){ }
58
59void 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))
67void shutdown_keymap(void) {}
68
69void 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))
84void suspend_power_down_keymap(void) {}
85
86void suspend_power_down_user(void) {
87 suspend_power_down_keymap();
88}
89
90__attribute__ ((weak))
91void suspend_wakeup_init_keymap(void) {}
92
93void suspend_wakeup_init_user(void) {
94 suspend_wakeup_init_keymap();
95}
96
97
98__attribute__ ((weak))
99void matrix_scan_keymap(void) {}
100
101__attribute__ ((weak))
102void 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))
121uint32_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
127uint32_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))
137uint32_t default_layer_state_set_keymap (uint32_t state) {
138 return state;
139}
140
141// Runs state check and changes underglow color and animation
142uint32_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))
153void 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.
158void led_set_user(uint8_t usb_led) {
159 led_set_keymap(usb_led);
160}
161__attribute__ ((weak))
162void eeconfig_init_keymap(void) {}
163
164void 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
177void tmux_prefix(void) {
178 register_code(KC_LCTL);
179 tap_code(KC_B);
180 unregister_code(KC_LCTL);
181}
182
183
184void tmux_pane_last(void) {
185 tmux_prefix();
186 tap_code(KC_SCLN);
187}
188
189void 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
39enum 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
60bool mod_key_press_timer (uint16_t code, uint16_t mod_code, bool pressed);
61bool mod_key_press (uint16_t code, uint16_t mod_code, bool pressed, uint16_t this_timer);
62bool send_game_macro(const char *str, keyrecord_t *record, bool override);
63void matrix_init_keymap(void);
64void shutdown_keymap(void);
65void suspend_power_down_keymap(void);
66void suspend_wakeup_init_keymap(void);
67void matrix_scan_keymap(void);
68uint32_t layer_state_set_keymap (uint32_t state);
69uint32_t default_layer_state_set_keymap (uint32_t state);
70void led_set_keymap(uint8_t usb_led);
71void eeconfig_init_keymap(void);
72
73void tmux_prefix(void);
74void tmux_pane_zoom(void);
75void tmux_pane_last(void);
76void tmux_pane_switch_repeat(void);
77void tmux_pane_switch(uint16_t keycode);
78
79typedef 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
90extern userspace_config_t userspace_config;
91
92/*
93Custom Keycodes for Diablo 3 layer
94But since TD() doesn't work when tap dance is disabled
95We 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
3LEADER_EXTERNS();
4
5void 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
6void 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
3uint16_t copy_paste_timer;
4
5__attribute__ ((weak))
6bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
7 return true;
8}
9
10__attribute__ ((weak))
11bool 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
17bool 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
10enum 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
65bool process_record_secrets(uint16_t keycode, keyrecord_t *record);
66bool 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
2Thanks to drashna and everyone else in the qmk_firmware/users/ directory :)
3
4# Overview
5
6## Keyboard Layout Templates
7This 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
9This 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
11The 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
15Once that's been done and you've switched the keymaps to use the "wrapper", it will read the substitution blocks just fine.
16
17Credit goes to @jola5 for first implementing this awesome idea.
18
19## Custom Keycodes
20Declared in `process_records.h` and `template.h` and defined in `process_record_user` in template.c
21
22## Tap Dances
23Set `TAP_DANCE_ENABLE = yes` in rules.mk. See file tap_dances.{c,h}
24
25## Leader Key
26Set `LEADER_ENABLE = yes` in rules.mk.
27TODO: document tmux / vim / os
28
29## Unicode
30TODO: Set `idk` in `idc`
31
32## Diablo Layer
33Currently not in use.
34
35# Secret Macros
36Set `NO_SECRETS = yes` in rules.mk.
37
38With help from gitter and Colinta, this adds the ability to add hidden macros from other users.
39
40First, 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
42And 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
58Then 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...
70static const char * const secret[] = {
71 "test1",
72 "test2",
73 "test3",
74 "test4",
75 "test5"
76};
77#endif
78
79bool 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
96static const char * const secrets[] = {
97 "secret1",
98 "secret2",
99 "secret3",
100 "secret4",
101 "secret5"
102};
103```
104
105Replacing the strings with the codes that you need.
106
107### name.c
108
109In the `<name>.c` file, you will want to add this to the top:
110
111```c
112__attribute__ ((weak))
113bool process_record_secrets(uint16_t keycode, keyrecord_t *record) {
114 return true;
115}
116```
117
118This 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
120And 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
129Here, 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
132ifneq ("$(wildcard $(USER_PATH)/secrets.c)","")
133 SRC += secrets.c
134endif
135```
136
137Additionally, 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
140ifeq ($(strip $(NO_SECRETS)), yes)
141 OPT_DEFS += -DNO_SECRETS
142endif
143```
144
145Then, 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 @@
1SRC += kuchosauronad0.c \
2 process_records.c
3
4LINK_TIME_OPTIMIZATION_ENABLE = yes
5
6#ifneq ("$(wildcard $(USER_PATH)/secrets.c)","")
7# SRC += secrets.c
8#endif
9
10ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
11 SRC += tap_dances.c
12endif
13
14ifeq ($(strip $(ENCODER_ENABLE)), yes)
15 SRC += encoder.c
16endif
17
18ifeq ($(strip $(LEADER_ENABLE)), yes)
19 SRC += leader.c
20endif
21
22ifneq ("$(wildcard $(USER_PATH)/secrets.c)","")
23 SRC += secrets.c
24endif
25ifeq ($(strip $(NO_SECRETS)), yes)
26 OPT_DEFS += -DNO_SECRETS
27endif
28ifeq ($(strip $(UNICODEMAP_ENABLE)), yes)
29 SRC += unicode.c
30endif
31
32ifeq ($(strip $(MACROS_ENABLED)), yes)
33 OPT_DEFS += -DMACROS_ENABLED
34endif
35
36ifdef CONSOLE_ENABLE
37 ifeq ($(strip $(KEYLOGGER_ENABLE)), yes)
38 OPT_DEFS += -DKEYLOGGER_ENABLE
39 endif
40endif
41
42ifeq ($(strip $(MAKE_BOOTLOADER)), yes)
43 OPT_DEFS += -DMAKE_BOOTLOADER
44endif
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"
2void 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
28void 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
36qk_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
5enum {
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
26void 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))
9void matrix_init_keymap(void) {}
10
11// Call user matrix init, then call the keymap's init function
12void matrix_init_user(void) {
13 matrix_init_keymap();
14}
15
16
17__attribute__ ((weak))
18void matrix_scan_keymap(void) {}
19
20// No global matrix scan code, so just run keymap's matix
21// scan function
22__attribute__ ((weak))
23void matrix_scan_user(void) {
24 matrix_scan_keymap();
25}
26
27
28__attribute__ ((weak))
29bool 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
36bool 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))
66uint32_t layer_state_set_keymap (uint32_t state) {
67 return state;
68}
69
70uint32_t layer_state_set_user (uint32_t state) {
71 return layer_state_set_keymap (state);
72}
73
74
75
76__attribute__ ((weak))
77void led_set_keymap(uint8_t usb_led) {}
78
79void led_set_user(uint8_t usb_led) {
80 led_set_keymap(usb_led);
81}
82
83
84
85__attribute__ ((weak))
86void suspend_power_down_keymap(void) {}
87
88void suspend_power_down_user(void)
89{
90 suspend_power_down_keymap();
91}
92
93
94
95__attribute__ ((weak))
96void suspend_wakeup_init_keymap(void) {}
97
98void 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))
109void startup_keymap(void) {}
110
111void 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))
121void shutdown_keymap(void) {}
122
123void 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
11enum 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
4const 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
5void send_unicode_hex_string(const char* str);
6
7/* use X(n) to call the */
8#ifdef UNICODEMAP_ENABLE
9enum unicode_name {
10OKOK, //
11BANG, // ‽
12IRONY, // ⸮
13DEGREE, // °
14THINK, // 🤔
15GRIN, // �
16MONOCL, // 🧐
17DRUG0, // 🤪
18DRUG1, // 🥴
19CLOWN, // 🤡
20MNDBLWN, // 🤯
21MONEY, // 🤑
22SHTUP, // 🤐
23PARTY, // 🥳
24SMRK, // 😏
25WEARY, // 😩
26UNAMU, // 😒
27SPY, // 🕵
28DAFUQ, // 👺
29FIST0, // 🤛
30FIST1, // 🤜
31FIST2, // ✊
32FIST3, // 👊
33WIFIHAND, // 👌
34EFFU, // 🖕
35SPOCK, // 🖖
36INUP, // 👆
37THDN, // 👎
38THUP, // 👍
39TUMBLER, // 🥃
40DRAGON0, // 🐉
41DRAGON1, // 🐅
42TIGER0, // 🐅
43TIGER1, // 🐯
44COOL, // 🆒
45UCHART, // 📈
46DCHART, // 📉
47BCHART, // 📊
48NOPRCY, // 🕲
49PRCY, // 🕱
50BBB, // 🅱
51POO, // 💩
52HUNDR, // 💯
53EGGPL, // 🍆
54WATER, // 💦
55LIT, // 🔥
56SNEK, // 🐍
57PENGUIN, // 🐧
58BOAR, // 🐗
59MONKEY, // 🐒
60CHICK, // 🐥
61DASH, // 💨
62DIZZY, // 💫
63KEEB, // 🖮
64HOLE, // 🕳
65SAUCER // 🛸
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/*
4Since our quirky block definitions are basically a list of comma separated
5arguments, we need a wrapper in order for these definitions to be
6expanded 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/*
20Blocks for each of the four major keyboard layouts
21Organized so we can quickly adapt and modify all of them
22at once, rather than for each keyboard, one at a time.
23And this allows for much cleaner blocks in the keymaps.
24For instance Tap/Hold for Control on all of the layouts
25NOTE: 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 */