aboutsummaryrefslogtreecommitdiff
path: root/users
diff options
context:
space:
mode:
authorJacob Jerrell <86279411+jjerrell@users.noreply.github.com>2021-08-12 09:44:15 -0500
committerGitHub <noreply@github.com>2021-08-12 07:44:15 -0700
commit30843f8329315426ff433a40095f1de2b2669e57 (patch)
tree0fc462c1b4b4ecaabb8858b6f91da8b36e29b20b /users
parent1e9d91d4ef5db1a4497767b165303e39069459cb (diff)
downloadqmk_firmware-30843f8329315426ff433a40095f1de2b2669e57.tar.gz
qmk_firmware-30843f8329315426ff433a40095f1de2b2669e57.zip
[Keymap] JJerrell - Add Userspace and ZSA Keyboard Keymaps (#13548)
Diffstat (limited to 'users')
-rw-r--r--users/bocaj/.gitignore1
-rw-r--r--users/bocaj/.gitlab-ci.yml24
-rw-r--r--users/bocaj/bocaj.c210
-rw-r--r--users/bocaj/bocaj.h73
-rw-r--r--users/bocaj/config.h113
-rw-r--r--users/bocaj/process_records.c111
-rw-r--r--users/bocaj/process_records.h44
-rw-r--r--users/bocaj/readme.md5
-rw-r--r--users/bocaj/rgb_matrix_stuff.c106
-rw-r--r--users/bocaj/rgb_matrix_stuff.h10
-rw-r--r--users/bocaj/wrappers.h193
-rw-r--r--users/jjerrell/.gitignore1
-rw-r--r--users/jjerrell/config.h26
-rw-r--r--users/jjerrell/jjerrell.c138
-rw-r--r--users/jjerrell/jjerrell.h53
-rw-r--r--users/jjerrell/process_records.c139
-rw-r--r--users/jjerrell/process_records.h41
-rw-r--r--users/jjerrell/readme.md50
-rw-r--r--users/jjerrell/rules.mk (renamed from users/bocaj/rules.mk)11
-rw-r--r--users/jjerrell/wrappers.h329
20 files changed, 783 insertions, 895 deletions
diff --git a/users/bocaj/.gitignore b/users/bocaj/.gitignore
deleted file mode 100644
index c6df8c013..000000000
--- a/users/bocaj/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
1secrets.c
diff --git a/users/bocaj/.gitlab-ci.yml b/users/bocaj/.gitlab-ci.yml
deleted file mode 100644
index 71e3d26eb..000000000
--- a/users/bocaj/.gitlab-ci.yml
+++ /dev/null
@@ -1,24 +0,0 @@
1stages:
2 - test
3
4QMK Firmware:
5 stage: test
6 variables:
7 GIT_SUBMODULE_STRATEGY: recursive
8 tags:
9 - linux
10 image: qmkfm/base_container
11 before_script:
12 - apt-get update -qy
13 - apt-get install -y build-essential avr-libc binutils-arm-none-eabi binutils-avr dfu-programmer dfu-util gcc gcc-arm-none-eabi git libnewlib-arm-none-eabi gcc-avr python3 unzip wget zip
14 - avr-gcc --version
15 - uname -a
16 script:
17 - make planck/rev6:default planck/rev5:default
18 - make all:bocaj -j2
19 artifacts:
20 name: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
21 paths:
22 - ./*.hex
23 - ./*.bin
24 expire_in: 1 month
diff --git a/users/bocaj/bocaj.c b/users/bocaj/bocaj.c
deleted file mode 100644
index 83fe81231..000000000
--- a/users/bocaj/bocaj.c
+++ /dev/null
@@ -1,210 +0,0 @@
1/*
2Copyright 2020 Jacob Jerrell <jacob.jerrell@gmail.com> @JacobJerrell
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
18#include "bocaj.h"
19
20#ifdef KEYBOARD_planck_ez
21userspace_config_t userspace_config;
22#endif
23
24bool mod_key_press_timer(uint16_t code, uint16_t mod_code, bool pressed) {
25 static uint16_t this_timer;
26 if (pressed) {
27 this_timer = timer_read();
28 } else {
29 if (timer_elapsed(this_timer) < TAPPING_TERM) {
30 tap_code(code);
31 } else {
32 register_code(mod_code);
33 tap_code(code);
34 unregister_code(mod_code);
35 }
36 }
37 return false;
38}
39
40bool mod_key_press(uint16_t code, uint16_t mod_code, bool pressed, uint16_t this_timer) {
41 if (pressed) {
42 this_timer = timer_read();
43 } else {
44 if (timer_elapsed(this_timer) < TAPPING_TERM) {
45 tap_code(code);
46 } else {
47 register_code(mod_code);
48 tap_code(code);
49 unregister_code(mod_code);
50 }
51 }
52 return false;
53}
54
55void bootmagic_lite(void) {
56 matrix_scan();
57#if defined(DEBOUNCING_DELAY) && DEBOUNCING_DELAY > 0
58 wait_ms(DEBOUNCING_DELAY * 2);
59#elif defined(DEBOUNCE) && DEBOUNCE > 0
60 wait_ms(DEBOUNCE * 2);
61#else
62 wait_ms(30);
63#endif
64 matrix_scan();
65 if (matrix_get_row(BOOTMAGIC_LITE_ROW) & (1 << BOOTMAGIC_LITE_COLUMN)) {
66 bootloader_jump();
67 }
68}
69
70__attribute__((weak)) void keyboard_pre_init_keymap(void) {}
71
72void keyboard_pre_init_user(void) {
73#ifdef KEYBOARD_planck_ez
74 userspace_config.raw = eeconfig_read_user();
75#endif
76 keyboard_pre_init_keymap();
77}
78// Add reconfigurable functions here, for keymap customization
79// This allows for a global, userspace functions, and continued
80// customization of the keymap. Use _keymap instead of _user
81// functions in the keymaps
82__attribute__((weak)) void matrix_init_keymap(void) {}
83
84// Call user matrix init, set default RGB colors and then
85// call the keymap's init function
86void matrix_init_user(void) {
87 matrix_init_keymap();
88}
89
90__attribute__((weak)) void keyboard_post_init_keymap(void) {}
91
92void keyboard_post_init_user(void) {
93#if defined(RGB_MATRIX_ENABLE)
94 keyboard_post_init_rgb_matrix();
95#endif
96 keyboard_post_init_keymap();
97}
98
99__attribute__((weak)) void shutdown_keymap(void) {}
100
101void rgb_matrix_update_pwm_buffers(void);
102
103void shutdown_user(void) {
104#ifdef RGB_MATRIX_ENABLE
105 rgb_matrix_set_color_all(0xFF, 0x00, 0x00);
106 rgb_matrix_update_pwm_buffers();
107
108#endif // RGB_MATRIX_ENABLE
109 shutdown_keymap();
110}
111
112__attribute__((weak)) void suspend_power_down_keymap(void) {}
113
114void suspend_power_down_user(void) { suspend_power_down_keymap(); }
115
116__attribute__((weak)) void suspend_wakeup_init_keymap(void) {}
117
118void suspend_wakeup_init_user(void) { suspend_wakeup_init_keymap(); }
119
120__attribute__((weak)) void matrix_scan_secrets(void) {}
121__attribute__((weak)) void matrix_scan_keymap(void) {}
122
123LEADER_EXTERNS();
124
125// No global matrix scan code, so just run keymap's matrix
126// scan function
127void matrix_scan_user(void) {
128 static bool has_ran_yet;
129 if (!has_ran_yet) {
130 has_ran_yet = true;
131 startup_user();
132 }
133
134 LEADER_DICTIONARY() {
135 leading = false;
136 leader_end();
137
138 // Website Refresh / XCode "Run"
139 SEQ_ONE_KEY(KC_R) {
140 SEND_STRING(SS_LGUI("r"));
141 }
142
143 SEQ_TWO_KEYS(KC_B, KC_D) {
144 SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION " Built at: " QMK_BUILDDATE);
145 }
146
147 #ifndef NO_SECRETS
148 matrix_scan_secrets();
149 #endif // !NO_SECRETS
150 }
151
152#if defined(RGB_MATRIX_ENABLE)
153 matrix_scan_rgb_matrix();
154#endif
155
156 matrix_scan_keymap();
157}
158
159__attribute__((weak)) layer_state_t layer_state_set_keymap(layer_state_t state) { return state; }
160
161// on layer change, no matter where the change was initiated
162// Then runs keymap's layer change check
163layer_state_t layer_state_set_user(layer_state_t state) {
164 state = update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST);
165#if defined(RGBLIGHT_ENABLE)
166 state = layer_state_set_rgb_light(state);
167#endif // RGBLIGHT_ENABLE
168 return layer_state_set_keymap(state);
169}
170
171__attribute__((weak)) layer_state_t default_layer_state_set_keymap(layer_state_t state) { return state; }
172
173// Runs state check and changes underglow color and animation
174layer_state_t default_layer_state_set_user(layer_state_t state) {
175 state = default_layer_state_set_keymap(state);
176#if 0
177# if defined(RGB_MATRIX_ENABLE)
178 state = default_layer_state_set_rgb(state);
179# endif // RGB_MATRIX_ENABLE
180#endif
181 return state;
182}
183
184__attribute__((weak)) void led_set_keymap(uint8_t usb_led) {}
185
186// Any custom LED code goes here.
187// So far, I only have keyboard specific code,
188// So nothing goes here.
189void led_set_user(uint8_t usb_led) { led_set_keymap(usb_led); }
190
191__attribute__((weak)) void eeconfig_init_keymap(void) {}
192
193void eeconfig_init_user(void) {
194#ifdef KEYBOARD_planck_ez
195 userspace_config.raw = 0;
196# if defined(RGB_MATRIX_ENABLE)
197 userspace_config.rgb_layer_change = true;
198# endif
199 eeconfig_update_user(userspace_config.raw);
200#endif
201 eeconfig_init_keymap();
202 keyboard_init();
203}
204
205bool hasAllBitsInMask(uint8_t value, uint8_t mask) {
206 value &= 0xF;
207 mask &= 0xF;
208
209 return (value & mask) == mask;
210}
diff --git a/users/bocaj/bocaj.h b/users/bocaj/bocaj.h
deleted file mode 100644
index e69be74da..000000000
--- a/users/bocaj/bocaj.h
+++ /dev/null
@@ -1,73 +0,0 @@
1/*
2Copyright 2017 Christopher Courtney <drashna@live.com> @drashna
3Copyright 2020 Jacob Jerrell <jacob.jerrell@gmail.com> @JacobJerrell
4
5This program is free software: you can redistribute it and/or modify
6it under the terms of the GNU General Public License as published by
7the Free Software Foundation, either version 2 of the License, or
8(at your option) any later version.
9
10This program is distributed in the hope that it will be useful,
11but WITHOUT ANY WARRANTY; without even the implied warranty of
12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13GNU General Public License for more details.
14
15You should have received a copy of the GNU General Public License
16along with this program. If not, see <http://www.gnu.org/licenses/>.
17*/
18
19#pragma once
20#include QMK_KEYBOARD_H
21
22#include "version.h"
23#include "eeprom.h"
24#include "process_records.h"
25#include "wrappers.h"
26#if defined(RGB_MATRIX_ENABLE)
27# include "rgb_matrix_stuff.h"
28#endif
29
30/* Define layer names */
31enum userspace_layers {
32 _WORKMAN = 0,
33 _QWERTY,
34 _WWORKMAN,
35 _WQWERTY,
36 _LOWER,
37 _RAISE,
38 _ADJUST,
39 _MOD,
40 LAYER_SAFE_RANGE,
41};
42
43#define MODS_SHIFT_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
44#define MODS_CTRL_MASK (MOD_BIT(KC_LCTL)|MOD_BIT(KC_RCTRL))
45#define MODS_ALT_MASK (MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
46#define MODS_GUI_MASK (MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI))
47
48bool mod_key_press_timer(uint16_t code, uint16_t mod_code, bool pressed);
49bool mod_key_press(uint16_t code, uint16_t mod_code, bool pressed, uint16_t this_timer);
50void matrix_init_keymap(void);
51void shutdown_keymap(void);
52void suspend_power_down_keymap(void);
53void suspend_wakeup_init_keymap(void);
54void matrix_scan_keymap(void);
55layer_state_t layer_state_set_keymap(layer_state_t state);
56layer_state_t default_layer_state_set_keymap(layer_state_t state);
57void led_set_keymap(uint8_t usb_led);
58void eeconfig_init_keymap(void);
59bool hasAllBitsInMask(uint8_t value, uint8_t mask);
60
61// clang-format off
62#ifdef KEYBOARD_planck_ez
63typedef union {
64 uint32_t raw;
65 struct {
66 bool rgb_layer_change :1;
67 bool rgb_matrix_idle_anim :1;
68 };
69} userspace_config_t;
70// clang-format on
71
72extern userspace_config_t userspace_config;
73#endif
diff --git a/users/bocaj/config.h b/users/bocaj/config.h
deleted file mode 100644
index 2a44aabfc..000000000
--- a/users/bocaj/config.h
+++ /dev/null
@@ -1,113 +0,0 @@
1#pragma once
2
3// Use custom magic number so that when switching branches, EEPROM always gets reset
4#define EECONFIG_MAGIC_NUMBER (uint16_t)0x1339
5
6/* Set Polling rate to 1000Hz */
7#define USB_POLLING_INTERVAL_MS 1
8
9#ifdef AUDIO_ENABLE
10
11# define AUDIO_CLICKY
12# define STARTUP_SONG SONG(RICK_ROLL)
13# define GOODBYE_SONG SONG(SONIC_RING)
14# define DEFAULT_LAYER_SONGS \
15 { SONG(QWERTY_SOUND), SONG(COLEMAK_SOUND), SONG(DVORAK_SOUND), SONG(OVERWATCH_THEME) }
16
17# define AUDIO_CLICKY_FREQ_RANDOMNESS 1.5f
18
19# define UNICODE_SONG_MAC SONG(RICK_ROLL)
20# define UNICODE_SONG_LNX SONG(RICK_ROLL)
21# define UNICODE_SONG_WIN SONG(RICK_ROLL)
22# define UNICODE_SONG_BSD SONG(RICK_ROLL)
23# define UNICODE_SONG_WINC SONG(RICK_ROLL)
24#endif // !AUDIO_ENABLE
25
26#ifdef RGB_MATRIX_ENABLE
27# define RGB_MATRIX_KEYPRESSES // reacts to keypresses (will slow down matrix scan by a lot)
28// # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (not recommened)
29# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
30// # define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
31# define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended
32// # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255
33// # define EECONFIG_RGB_MATRIX (uint32_t *)16
34
35# if defined(__AVR__) && !defined(__AVR_AT90USB1286__)
36# define DISABLE_RGB_MATRIX_ALPHAS_MODS
37# define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN
38# define DISABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
39# define DISABLE_RGB_MATRIX_BREATHING
40# define DISABLE_RGB_MATRIX_BAND_SAT
41# define DISABLE_RGB_MATRIX_BAND_VAL
42# define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
43# define DISABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
44# define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT
45# define DISABLE_RGB_MATRIX_BAND_SPIRAL_VAL
46# define DISABLE_RGB_MATRIX_CYCLE_ALL
47# define DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
48# define DISABLE_RGB_MATRIX_CYCLE_UP_DOWN
49# define DISABLE_RGB_MATRIX_CYCLE_OUT_IN
50// # define DISABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
51# define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
52# define DISABLE_RGB_MATRIX_DUAL_BEACON
53# define DISABLE_RGB_MATRIX_CYCLE_PINWHEEL
54# define DISABLE_RGB_MATRIX_CYCLE_SPIRAL
55# define DISABLE_RGB_MATRIX_RAINBOW_BEACON
56# define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS
57# define DISABLE_RGB_MATRIX_RAINDROPS
58# define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
59// # define DISABLE_RGB_MATRIX_TYPING_HEATMAP
60# define DISABLE_RGB_MATRIX_DIGITAL_RAIN
61# define DISABLE_RGB_MATRIX_SOLID_REACTIVE
62# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
63# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
64# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
65# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
66# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
67# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
68# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
69# define DISABLE_RGB_MATRIX_SPLASH
70# define DISABLE_RGB_MATRIX_MULTISPLASH
71# define DISABLE_RGB_MATRIX_SOLID_SPLASH
72# define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
73# endif // AVR
74#endif // RGB_MATRIX_ENABLE
75
76#ifdef QMK_KEYS_PER_SCAN
77# undef QMK_KEYS_PER_SCAN
78# define QMK_KEYS_PER_SCAN 1
79#endif // !QMK_KEYS_PER_SCAN
80
81// this makes it possible to do rolling combos (zx) with keys that
82// convert to other keys on hold (z becomes ctrl when you hold it,
83// and when this option isn't enabled, z rapidly followed by x
84// actually sends Ctrl-x. That's bad.)
85#define IGNORE_MOD_TAP_INTERRUPT
86#undef PERMISSIVE_HOLD
87//#define TAPPING_FORCE_HOLD
88//#define RETRO_TAPPING
89
90#define FORCE_NKRO
91
92#ifndef TAPPING_TOGGLE
93# define TAPPING_TOGGLE 1
94#endif
95
96#ifdef TAPPING_TERM
97# undef TAPPING_TERM
98#endif // TAPPING_TERM
99#if defined(KEYBOARD_ergodox_ez)
100# define TAPPING_TERM 185
101#else
102# define TAPPING_TERM 175
103#endif
104
105#define TAP_CODE_DELAY 5
106
107/* Disable unused and unneeded features to reduce on firmware size */
108#ifdef LOCKING_SUPPORT_ENABLE
109# undef LOCKING_SUPPORT_ENABLE
110#endif
111#ifdef LOCKING_RESYNC_ENABLE
112# undef LOCKING_RESYNC_ENABLE
113#endif
diff --git a/users/bocaj/process_records.c b/users/bocaj/process_records.c
deleted file mode 100644
index 9eb181ad4..000000000
--- a/users/bocaj/process_records.c
+++ /dev/null
@@ -1,111 +0,0 @@
1#include "bocaj.h"
2#include <print.h>
3
4__attribute__((weak)) bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { return true; }
5
6__attribute__((weak)) bool process_record_secrets(uint16_t keycode, keyrecord_t *record) { return true; }
7
8// Defines actions tor my global custom keycodes. Defined in bocaj.h file
9// Then runs the _keymap's record handler if not processed here
10bool process_record_user(uint16_t keycode, keyrecord_t *record) {
11
12 if (process_record_keymap(keycode, record) && process_record_secrets(keycode, record)
13#ifdef RGB_MATRIX_ENABLE
14 && process_record_user_rgb_matrix(keycode, record)
15#endif
16 ) {
17 switch (keycode) {
18 case KC_WORKMAN:
19 if (!record->event.pressed) {
20 uint8_t mods = mod_config(get_mods());
21 if (!mods) {
22 set_single_persistent_default_layer(_WORKMAN);
23
24 } else if (mods & (MODS_GUI_MASK | MODS_CTRL_MASK)) {
25 set_single_persistent_default_layer(_WWORKMAN);
26 }
27 }
28 return false;
29 break;
30 case KC_QWERTY:
31 if (!record->event.pressed) {
32 uint8_t mods = mod_config(get_mods());
33 if (!mods) {
34 set_single_persistent_default_layer(_QWERTY);
35 } else if (mods & (MODS_GUI_MASK | MODS_CTRL_MASK)) {
36 set_single_persistent_default_layer(_WQWERTY);
37 }
38 }
39 return false;
40 break;
41
42 case MC_ARRW:
43 if (!record->event.pressed) {
44 clear_mods();
45 send_string_with_delay_P(PSTR("->"), TAP_CODE_DELAY);
46 }
47 return false;
48 break;
49
50 case KC_MAKE: // Compiles the firmware, and adds the flash command based on keyboard bootloader
51 if (!record->event.pressed) {
52 clear_mods();
53 send_string_with_delay_P(PSTR("qmk compile "), TAP_CODE_DELAY);
54 send_string_with_delay_P(PSTR("-kb " QMK_KEYBOARD), TAP_CODE_DELAY);
55 send_string_with_delay_P(PSTR(SS_TAP(X_ENTER)), TAP_CODE_DELAY);
56 }
57 return false;
58 break;
59
60 case VRSN: // Prints firmware version
61 if (!record->event.pressed) {
62 send_string_with_delay_P(PSTR(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION ", Built on: " QMK_BUILDDATE), TAP_CODE_DELAY);
63 }
64 break;
65#if defined(RGB_MATRIX_ENABLE)
66 case KC_RGB_T: // This allows me to use underglow as layer indication, or as normal
67 if (!record->event.pressed) {
68 userspace_config.rgb_layer_change ^= 1;
69 dprintf("rgblight layer change [EEPROM]: %u\n", userspace_config.rgb_layer_change);
70 eeconfig_update_user(userspace_config.raw);
71 if (userspace_config.rgb_layer_change) {
72 rgblight_enable_noeeprom();
73 layer_state_set(layer_state); // This is needed to immediately set the layer color (looks better)
74 } else {
75 rgblight_disable_noeeprom();
76 }
77 }
78 return false;
79 break;
80 case RGB_TOG:
81 if (!record->event.pressed) {
82# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
83 rgb_matrix_toggle();
84# endif
85 }
86 return false;
87 break;
88 case RGB_MODE_FORWARD ... RGB_MODE_GRADIENT: // quantum_keycodes.h L400 for definitions
89 if (!record->event.pressed) {
90 bool is_eeprom_updated;
91# if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS)
92 if (userspace_config.rgb_matrix_idle_anim) {
93 userspace_config.rgb_matrix_idle_anim = false;
94 dprintf("RGB Matrix Idle Animation [EEPROM]: %u\n", userspace_config.rgb_matrix_idle_anim);
95 is_eeprom_updated = true;
96 }
97# endif
98 if (is_eeprom_updated) {
99 eeconfig_update_user(userspace_config.raw);
100 }
101 }
102 return false;
103 break;
104#endif
105 }
106 }
107#ifdef CONSOLE_ENABLE
108 uprintf("KL: kc: %u, col: %u, row: %u, pressed: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed);
109#endif
110 return true;
111}
diff --git a/users/bocaj/process_records.h b/users/bocaj/process_records.h
deleted file mode 100644
index c17e2ffdc..000000000
--- a/users/bocaj/process_records.h
+++ /dev/null
@@ -1,44 +0,0 @@
1#pragma once
2#include "bocaj.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_WORKMAN, // Sets default layer to WORKMAN
13 KC_QWERTY, // Sets default layer to QWERTY
14 // KC_COLEMAK, // Sets default layer to COLEMAK
15 // KC_DVORAK, // Sets default layer to DVORAK
16 KC_MAKE, // Run keyboard's customized make command
17 KC_RGB_T, // Toggles RGB Layer Indication mode
18 RGB_IDL, // RGB Idling animations
19 MC_ARRW, // ->
20 UC_FLIP, // (ಠ痊ಠ)┻━┻
21 UC_TABL, // ┬─┬ノ( º _ ºノ)
22 UC_SHRG, // ¯\_(ツ)_/¯
23 UC_DISA, // ಠ_ಠ
24 NEW_SAFE_RANGE // use "NEWPLACEHOLDER for keymap specific codes
25};
26
27bool process_record_secrets(uint16_t keycode, keyrecord_t *record);
28bool process_record_keymap(uint16_t keycode, keyrecord_t *record);
29
30#define QWERTY KC_QWERTY
31#define WORKMAN KC_WORKMAN
32
33#define KC_ARRW MC_ARRW
34
35#define KC_RST RESET
36
37#define MO_MOD MO(_MOD)
38#define ALT_APP ALT_T(KC_APP)
39#define HYP_LBK ALL_T(KC_LBRACKET)
40#define MEH_RBK MEH_T(KC_RBRACKET)
41#define HYP_LPR ALL_T(KC_LPRN)
42#define MEH_RPR MEH_T(KC_RPRN)
43
44#define MG_NKRO MAGIC_TOGGLE_NKRO
diff --git a/users/bocaj/readme.md b/users/bocaj/readme.md
deleted file mode 100644
index 120635967..000000000
--- a/users/bocaj/readme.md
+++ /dev/null
@@ -1,5 +0,0 @@
1# Overview
2
3This is my personal userspace file. Most of my code exists here, as it's heavily shared.
4
5The template was taken from [Drashna's userspace](https://github.com/qmk/qmk_firmware/tree/master/users/drashna). There isn't much if anything in this userspace that warrants documentation he hasn't already covered.
diff --git a/users/bocaj/rgb_matrix_stuff.c b/users/bocaj/rgb_matrix_stuff.c
deleted file mode 100644
index bc50349d2..000000000
--- a/users/bocaj/rgb_matrix_stuff.c
+++ /dev/null
@@ -1,106 +0,0 @@
1#include "bocaj.h"
2
3#include "lib/lib8tion/lib8tion.h"
4extern led_config_t g_led_config;
5
6static uint32_t hypno_timer;
7#if defined(SPLIT_KEYBOARD) || defined(KEYBOARD_ergodox_ez) || defined(KEYBOARD_crkbd)
8# define RGB_MATRIX_REST_MODE RGB_MATRIX_CYCLE_OUT_IN_DUAL
9#else
10# define RGB_MATRIX_REST_MODE RGB_MATRIX_CYCLE_OUT_IN
11#endif
12
13void rgb_matrix_set_color_row(uint8_t row, uint8_t red, uint8_t green, uint8_t blue) {
14#ifdef KEYBOARD_planck_ez
15 if (row > 2) {
16 row = 0;
17 }
18 uint8_t row_multiplier = row * 12;
19
20 rgb_matrix_set_color(1 + row_multiplier, red, green, blue);
21 rgb_matrix_set_color(2 + row_multiplier, red, green, blue);
22 rgb_matrix_set_color(3 + row_multiplier, red, green, blue);
23 rgb_matrix_set_color(4 + row_multiplier, red, green, blue);
24 rgb_matrix_set_color(5 + row_multiplier, red, green, blue);
25 rgb_matrix_set_color(6 + row_multiplier, red, green, blue);
26 rgb_matrix_set_color(7 + row_multiplier, red, green, blue);
27 rgb_matrix_set_color(8 + row_multiplier, red, green, blue);
28 rgb_matrix_set_color(9 + row_multiplier, red, green, blue);
29 rgb_matrix_set_color(10 + row_multiplier, red, green, blue);
30#endif
31}
32
33void rgb_matrix_layer_helper(uint8_t hue, uint8_t sat, uint8_t val, uint8_t mode, uint8_t speed, uint8_t led_type) {
34 HSV hsv = {hue, sat, val};
35 if (hsv.v > rgb_matrix_get_val()) {
36 hsv.v = rgb_matrix_get_val();
37 }
38
39 switch (mode) {
40 case 1: // breathing
41 {
42 uint16_t time = scale16by8(g_rgb_timer, speed / 8);
43 hsv.v = scale8(abs8(sin8(time) - 128) * 2, hsv.v);
44 RGB rgb = hsv_to_rgb(hsv);
45 for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) {
46 if (HAS_FLAGS(g_led_config.flags[i], led_type)) {
47 rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
48 }
49 }
50 break;
51 }
52 default: // Solid Color
53 {
54 RGB rgb = hsv_to_rgb(hsv);
55 for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) {
56 if (HAS_FLAGS(g_led_config.flags[i], led_type)) {
57 rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
58 }
59 }
60 break;
61 }
62 }
63}
64
65__attribute__((weak)) void rgb_matrix_indicator_keymap(void) {}
66
67void matrix_scan_rgb_matrix(void) {
68#if defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS)
69 if (userspace_config.rgb_matrix_idle_anim && rgb_matrix_get_mode() == RGB_MATRIX_TYPING_HEATMAP && timer_elapsed32(hypno_timer) > 15000) {
70 rgb_matrix_mode_noeeprom(RGB_MATRIX_REST_MODE);
71 }
72#endif
73 rgb_matrix_indicator_keymap();
74}
75
76void keyboard_post_init_rgb_matrix(void) {
77#if defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS)
78 if (userspace_config.rgb_matrix_idle_anim) {
79 rgb_matrix_mode_noeeprom(RGB_MATRIX_REST_MODE);
80 }
81#endif
82}
83
84bool process_record_user_rgb_matrix(uint16_t keycode, keyrecord_t *record) {
85#if defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS)
86 hypno_timer = timer_read32();
87 if (userspace_config.rgb_matrix_idle_anim && rgb_matrix_get_mode() == RGB_MATRIX_REST_MODE) {
88 rgb_matrix_mode_noeeprom(RGB_MATRIX_TYPING_HEATMAP);
89 }
90#endif
91 switch (keycode) {
92 case RGB_IDL:
93#if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS)
94 if (record->event.pressed) {
95 userspace_config.rgb_matrix_idle_anim ^= 1;
96 dprintf("RGB Matrix Idle Animation [EEPROM]: %u\n", userspace_config.rgb_matrix_idle_anim);
97 eeconfig_update_user(userspace_config.raw);
98 if (userspace_config.rgb_matrix_idle_anim) {
99 rgb_matrix_mode_noeeprom(RGB_MATRIX_TYPING_HEATMAP);
100 }
101 }
102#endif
103 break;
104 }
105 return true;
106}
diff --git a/users/bocaj/rgb_matrix_stuff.h b/users/bocaj/rgb_matrix_stuff.h
deleted file mode 100644
index e48add218..000000000
--- a/users/bocaj/rgb_matrix_stuff.h
+++ /dev/null
@@ -1,10 +0,0 @@
1#pragma once
2#include "quantum.h"
3
4bool process_record_user_rgb_matrix(uint16_t keycode, keyrecord_t *record);
5void keyboard_post_init_rgb_matrix(void);
6void matrix_scan_rgb_matrix(void);
7
8void rgb_matrix_set_color_all(uint8_t red, uint8_t green, uint8_t blue);
9void rgb_matrix_layer_helper(uint8_t hue, uint8_t sat, uint8_t val, uint8_t mode, uint8_t speed, uint8_t led_type);
10void rgb_matrix_set_color_row(uint8_t row, uint8_t red, uint8_t green, uint8_t blue);
diff --git a/users/bocaj/wrappers.h b/users/bocaj/wrappers.h
deleted file mode 100644
index 0f18d346a..000000000
--- a/users/bocaj/wrappers.h
+++ /dev/null
@@ -1,193 +0,0 @@
1#pragma once
2#include "bocaj.h"
3
4/*
5Since our quirky block definitions are basically a list of comma separated
6arguments, we need a wrapper in order for these definitions to be
7expanded before being used as arguments to the LAYOUT_xxx macro.
8*/
9#if (!defined(LAYOUT) && defined(KEYMAP))
10# define LAYOUT KEYMAP
11#endif
12
13// clang-format off
14#define WRAPPER_ergodox_pretty(...) LAYOUT_ergodox_pretty(__VA_ARGS__)
15#define WRAPPER_ortho_4x12(...) LAYOUT_ortho_4x12(__VA_ARGS__)
16
17/* ---------- LEFT HAND ----------- ---------- RIGHT HAND ---------- */
18#define WRAPPER_ergodox_bocaj( \
19 L00,L01,L02,L03,L04,L05,L06, R00,R01,R02,R03,R04,R05,R06, \
20 L10,L11,L12,L13,L14,L15,L16, R10,R11,R12,R13,R14,R15,R16, \
21 L20,L21,L22,L23,L24,L25, R21,R22,R23,R24,R25,R26, \
22 L30,L31,L32,L33,L34,L35,L36, R30,R31,R32,R33,R34,R35,R36, \
23 L40,L41,L42,L43,L44, R42,R43,R44,R45,R46, \
24 L55,L56, R50,R51, \
25 L54, R52, \
26 L53,L52,L51, R55,R54,R53 ) \
27 WRAPPER_ergodox_pretty( \
28 L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \
29 L10, L11, L12, L13, L14, L15, L16, R10, R11, R12, R13, R14, R15, R16, \
30 L20, L21, SFT_T(L22), GUI_T(L23), ALT_T(L24), L25, R21, ALT_T(R22), GUI_T(R23), SFT_T(R24), R25, R26, \
31 L30, CTL_T(L31), L32, L33, L34, L35, ALL_T(L36), MEH_T(R30), R31, R32, R33, R34, CTL_T(R35), R36, \
32 L40, L41, L42, L43, L44, R42, R43, R44, R45, R46, \
33 L55,L56, /* <- LHS/RHS -> */ R50,R51, \
34 L54, /* <- LHS/RHS -> */ R52, \
35 LT(_LOWER, L53),L52,L51, /* <- LHS/RHS -> */ R55,R54,LT(_RAISE, R53) \
36)
37
38#define WRAPPER_ergodox_bocaj_WIN( \
39 L00,L01,L02,L03,L04,L05,L06, R00,R01,R02,R03,R04,R05,R06, \
40 L10,L11,L12,L13,L14,L15,L16, R10,R11,R12,R13,R14,R15,R16, \
41 L20,L21,L22,L23,L24,L25, R21,R22,R23,R24,R25,R26, \
42 L30,L31,L32,L33,L34,L35,L36, R30,R31,R32,R33,R34,R35,R36, \
43 L40,L41,L42,L43,L44, R42,R43,R44,R45,R46, \
44 L55,L56, R50,R51, \
45 L54, R52, \
46 L53,L52,L51, R55,R54,R53 ) \
47 WRAPPER_ergodox_pretty( \
48 L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \
49 L10, L11, L12, L13, L14, L15, L16, R10, R11, R12, R13, R14, R15, R16, \
50 L20, L21, SFT_T(L22), CTL_T(L23), ALT_T(L24), L25, R21, ALT_T(R22), CTL_T(R23), SFT_T(R24), R25, R26, \
51 L30, GUI_T(L31), L32, L33, L34, L35, ALL_T(L36), MEH_T(R30), R31, R32, R33, R34, GUI_T(R35), R36, \
52 L40, L41, L42, L43, L44, R42, R43, R44, R45, R46, \
53 L55,L56, /* <- LHS/RHS -> */ R50,R51, \
54 L54, /* <- LHS/RHS -> */ R52, \
55 LT(_LOWER, L53),L52,L51, /* <- LHS/RHS -> */ R55,R54,LT(_RAISE, R53) \
56)
57
58/*
59 Planck EZ Wrappers
60*/
61#define WRAPPER_planck_bocaj( \
62 K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, \
63 K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, \
64 K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
65 K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C \
66)\
67 WRAPPER_ortho_4x12( \
68 K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, \
69 K11, K12, SFT_T(K13), GUI_T(K14), ALT_T(K15), K16, K17, ALT_T(K18), GUI_T(K19), SFT_T(K1A), K1B, K1C, \
70 K21, CTL_T(K22), K23, K24, K25, K26, K27, K28, K29, K2A, CTL_T(K2B), K2C, \
71 K31, K32, K33, K34, LT(_LOWER, K35), K36, K37, LT(_RAISE, K38), K39, K3A, K3B, K3C )
72
73#define WRAPPER_planck_bocaj_WIN( \
74 K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, \
75 K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, \
76 K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
77 K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C \
78)\
79 WRAPPER_ortho_4x12( \
80 K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, \
81 K11, K12, SFT_T(K13), CTL_T(K14), ALT_T(K15), K16, K17, ALT_T(K18), CTL_T(K19), SFT_T(K1A), K1B, K1C, \
82 K21, GUI_T(K22), K23, K24, K25, K26, K27, K28, K29, K2A, GUI_T(K2B), K2C, \
83 K31, K32, K33, K34, LT(_LOWER, K35), K36, K37, LT(_RAISE, K38), K39, K3A, K3B, K3C )
84
85#define WRAPPER_planck_bocaj_base( \
86 K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \
87 K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \
88 K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A \
89) \
90 WRAPPER_planck_bocaj( \
91 KC_ESC, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, KC_MINS, \
92 KC_TAB, K11, K12, K13, K14, ALL_T(K15), MEH_T(K16), K17, K18, K19, K1A, KC_QUOT, \
93 KC_LSFT, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, _______, \
94 _______, KC_LEAD, KC_UP, KC_LEFT, KC_BSPC, KC_SPC, KC_SPC, KC_ENTER, KC_RIGHT, KC_DOWN, QWERTY, WORKMAN \
95 )
96
97#define WRAPPER_planck_bocaj_base_WIN( \
98 K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \
99 K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \
100 K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A \
101) \
102 WRAPPER_planck_bocaj_WIN( \
103 KC_ESC, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, KC_MINS, \
104 KC_TAB, K11, K12, K13, K14, ALL_T(K15), MEH_T(K16), K17, K18, K19, K1A, KC_QUOT, \
105 KC_LSFT, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, _______, \
106 _______, KC_LEAD, KC_UP, KC_LEFT, KC_BSPC, KC_SPC, KC_SPC, KC_ENTER, KC_RIGHT, KC_DOWN, QWERTY, WORKMAN \
107 )
108
109/*
110Blocks for each of the four major keyboard layouts
111Organized so we can quickly adapt and modify all of them
112at once, rather than for each keyboard, one at a time.
113And this allows for much cleaner blocks in the keymaps.
114For instance Tap/Hold for Control on all of the layouts
115
116NOTE: These are all the same length. If you do a search/replace
117 then you need to add/remove underscores to keep the
118 lengths consistent.
119*/
120
121#define _________________QWERTY_L1_________________ KC_Q, KC_W, KC_E, KC_R, KC_T
122#define _________________QWERTY_L2_________________ KC_A, KC_S, KC_D, KC_F, KC_G
123#define _________________QWERTY_L3_________________ KC_Z, KC_X, KC_C, KC_V, KC_B
124
125#define _________________QWERTY_R1_________________ KC_Y, KC_U, KC_I, KC_O, KC_P
126#define _________________QWERTY_R2_________________ KC_H, KC_J, KC_K, KC_L, KC_SCLN
127#define _________________QWERTY_R3_________________ KC_N, KC_M, KC_COMM, KC_DOT, KC_SLASH
128
129#define _________________COLEMAK_L1________________ KC_Q, KC_W, KC_F, KC_P, KC_G
130#define _________________COLEMAK_L2________________ KC_A, KC_R, KC_S, KC_T, KC_D
131#define _________________COLEMAK_L3________________ KC_Z, KC_X, KC_C, KC_V, KC_B
132
133#define _________________COLEMAK_R1________________ KC_J, KC_L, KC_U, KC_Y, KC_SCLN
134#define _________________COLEMAK_R2________________ KC_H, KC_N, KC_E, KC_I, KC_O
135#define _________________COLEMAK_R3________________ KC_K, KC_M, KC_COMM, KC_DOT, KC_SLASH
136
137#define _________________DVORAK_L1_________________ KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y
138#define _________________DVORAK_L2_________________ KC_A, KC_O, KC_E, KC_U, KC_I
139#define _________________DVORAK_L3_________________ KC_SCLN, KC_Q, KC_J, KC_K, KC_X
140
141#define _________________DVORAK_R1_________________ KC_F, KC_G, KC_C, KC_R, KC_L
142#define _________________DVORAK_R2_________________ KC_D, KC_H, KC_T, KC_N, KC_S
143#define _________________DVORAK_R3_________________ KC_B, KC_M, KC_W, KC_V, KC_Z
144
145#define _________________WORKMAN_L1________________ KC_Q, KC_D, KC_R, KC_W, KC_B
146#define _________________WORKMAN_L2________________ KC_A, KC_S, KC_H, KC_T, KC_G
147#define _________________WORKMAN_L3________________ KC_Z, KC_X, KC_M, KC_C, KC_V
148
149#define _________________WORKMAN_R1________________ KC_J, KC_F, KC_U, KC_P, KC_SCLN
150#define _________________WORKMAN_R2________________ KC_Y, KC_N, KC_E, KC_O, KC_I
151#define _________________WORKMAN_R3________________ KC_K, KC_L, KC_COMM, KC_DOT, KC_SLASH
152
153#define ________________NUMBER_LEFT________________ KC_1, KC_2, KC_3, KC_4, KC_5
154#define ________________NUMBER_RIGHT_______________ KC_6, KC_7, KC_8, KC_9, KC_0
155#define _________________FUNC_LEFT_________________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5
156#define _________________FUNC_RIGHT________________ KC_F6, KC_F7, KC_F8, KC_F9, KC_F10
157
158#define ___________________BLANK___________________ _______, _______, _______, _______, _______
159#define _________________UNDEFINED_________________ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
160
161#define ___________________LOWER_L1_EXT____________________ KC_GRV, _______, _______, KC_UP, _______, KC_ARRW
162#define ___________________LOWER_L2_EXT____________________ KC_DEL, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_LPRN
163#define ___________________LOWER_L3_EXT____________________ _______, _______, _______, _______, _______, KC_LBRC
164
165#define ___________________LOWER_R1_EXT____________________ KC_MINS, KC_7, KC_8, KC_9, KC_PLUS, KC_EQUAL
166#define ___________________LOWER_R2_EXT____________________ KC_RPRN, KC_4, KC_5, KC_6, KC_ASTR, KC_BSLS
167#define ___________________LOWER_R3_EXT____________________ KC_RBRC, KC_1, KC_2, KC_3, KC_SLSH, _______
168
169// #define _________________LOWER_L1__________________ ________________NUMBER_LEFT________________
170// #define _________________LOWER_L2__________________ _______, _______, _______, _______, KC_LPRN
171// #define _________________LOWER_L3__________________ _______, _______, _______, KC_ARRW, KC_LBRC
172
173// #define _________________LOWER_R1__________________ ________________NUMBER_RIGHT_______________
174// #define _________________LOWER_R2__________________ KC_RPRN, _______, _______, _______, _______
175// #define _________________LOWER_R3__________________ KC_RBRC, _______, _______, _______, _______
176
177#define _________________RAISE_L1__________________ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC
178#define _________________RAISE_L2__________________ _________________FUNC_LEFT_________________
179#define _________________RAISE_L3__________________ ___________________BLANK___________________
180
181#define _________________RAISE_R1__________________ KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN
182#define _________________RAISE_R2__________________ _________________FUNC_RIGHT________________
183#define _________________RAISE_R3__________________ ___________________BLANK___________________
184
185#define _________________ADJUST_L1_________________ RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_TOG
186#define _________________ADJUST_L2_________________ KC__MUTE, KC__VOLDOWN, KC__VOLUP, _______, KC_MNXT
187#define _________________ADJUST_L3_________________ RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, KC_RGB_T
188
189#define _________________ADJUST_R1_________________ ___________________BLANK___________________
190#define _________________ADJUST_R2_________________ CG_SWAP, WORKMAN, QWERTY, _______, _______
191#define _________________ADJUST_R3_________________ MU_TOG , CK_TOGG, AU_ON, AU_OFF, CG_NORM
192
193// clang-format on
diff --git a/users/jjerrell/.gitignore b/users/jjerrell/.gitignore
new file mode 100644
index 000000000..1753bf931
--- /dev/null
+++ b/users/jjerrell/.gitignore
@@ -0,0 +1 @@
secrets.*
diff --git a/users/jjerrell/config.h b/users/jjerrell/config.h
new file mode 100644
index 000000000..bddafe155
--- /dev/null
+++ b/users/jjerrell/config.h
@@ -0,0 +1,26 @@
1// Copyright (C) 2021 Jerrell, Jacob <@jjerrell>
2//
3// This file is part of jjerrell.
4//
5// jjerrell is free software: you can redistribute it and/or modify
6// it under the terms of the GNU General Public License as published by
7// the Free Software Foundation, either version 3 of the License, or
8// (at your option) any later version.
9//
10// jjerrell is distributed in the hope that it will be useful,
11// but WITHOUT ANY WARRANTY; without even the implied warranty of
12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13// GNU General Public License for more details.
14//
15// You should have received a copy of the GNU General Public License
16// along with jjerrell. If not, see <http://www.gnu.org/licenses/>.
17
18#pragma once
19
20#define LEADER_TIMEOUT 250
21#define LEADER_PER_KEY_TIMING
22
23#if defined(TAP_CODE_DELAY)
24# undef TAP_CODE_DELAY
25#endif
26#define TAP_CODE_DELAY 20
diff --git a/users/jjerrell/jjerrell.c b/users/jjerrell/jjerrell.c
new file mode 100644
index 000000000..95c2acba5
--- /dev/null
+++ b/users/jjerrell/jjerrell.c
@@ -0,0 +1,138 @@
1/**
2 * Copyright (C) 2021 Jerrell, Jacob <@jjerrell>
3 *
4 * This file is part of qmk_firmware.
5 *
6 * qmk_firmware is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * qmk_firmware is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with qmk_firmware. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20#include "jjerrell.h"
21
22__attribute__((weak)) void matrix_scan_keymap(void) {}
23__attribute__((weak)) void leader_scan_secrets(void) {}
24
25#ifdef LEADER_ENABLE
26 LEADER_EXTERNS();
27 void matrix_scan_leader(void) {
28 static uint8_t mods = 0;
29 mods = get_mods();
30 LEADER_DICTIONARY() {
31 leading = false;
32 leader_end();
33 clear_mods();
34
35 // Website Refresh / XCode "Run"
36 SEQ_ONE_KEY(KC_R) {
37 SEND_STRING(SS_LGUI("r"));
38 }
39
40 SEQ_TWO_KEYS(KC_B, KC_D) {
41 send_string_with_delay_P(PSTR(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION " Built at: " QMK_BUILDDATE), TAP_CODE_DELAY);
42 }
43
44 SEQ_TWO_KEYS(KC_L, KC_C) {
45 send_string_with_delay("/** */", TAP_CODE_DELAY);
46 wait_ms(TAPPING_TERM);
47 tap_code(KC_LEFT);
48 tap_code(KC_LEFT);
49 tap_code(KC_LEFT);
50 if (!(mods & MOD_MASK_SHIFT)) {
51 tap_code(KC_ENT);
52 }
53 }
54
55 set_mods(mods);
56 #ifndef NO_SECRETS
57 leader_scan_secrets();
58 #endif // !NO_SECRETS
59 }
60 }
61#endif
62
63static bool is_first_run = true;
64void matrix_scan_user(void) {
65 if (is_first_run) {
66 is_first_run = false;
67 startup_user();
68 }
69 #ifdef LEADER_ENABLE
70 matrix_scan_leader();
71 #endif
72 matrix_scan_keymap();
73}
74
75__attribute__((weak)) layer_state_t layer_state_set_keymap(layer_state_t state) { return state; }
76
77// on layer change, no matter where the change was initiated
78// Then runs keymap's layer change check
79layer_state_t layer_state_set_user(layer_state_t state) {
80 if (!is_keyboard_master()) {
81 return state;
82 }
83
84 state = update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST);
85 state = layer_state_set_keymap(state);
86#if defined(RGBLIGHT_ENABLE)
87 state = layer_state_set_rgb_light(state);
88#endif // RGBLIGHT_ENABLE
89 return state;
90}
91
92__attribute__((weak)) void dip_switch_update_keymap(uint8_t index, bool active) {}
93void dip_switch_update_user(uint8_t index, bool active) {
94 dip_switch_update_keymap(index, active);
95}
96
97__attribute__((weak)) bool music_mask_keymap(uint16_t keycode) { return true; }
98bool music_mask_user(uint16_t keycode) {
99 switch (keycode){
100 default:
101 return music_mask_keymap(keycode);
102 break;
103 }
104}
105
106__attribute__((weak)) layer_state_t default_layer_state_set_keymap(layer_state_t state) { return state; }
107
108// Runs state check and changes underglow color and animation
109layer_state_t default_layer_state_set_user(layer_state_t state) {
110 if (!is_keyboard_master()) {
111 return state;
112 }
113 return default_layer_state_set_keymap(state);
114}
115
116#ifdef AUDIO_ENABLE
117__attribute__((weak)) void startup_keymap(void) {}
118void startup_user(void)
119{
120 wait_ms(TAP_CODE_DELAY); // gets rid of tick
121 startup_keymap();
122}
123
124__attribute__((weak)) void shutdown_keymap(void) {}
125void shutdown_user(void)
126{
127 wait_ms(TAP_CODE_DELAY);
128 stop_all_notes();
129 shutdown_keymap();
130}
131
132__attribute__((weak)) void music_on_keymap(void) {}
133void music_on_user(void)
134{
135 music_scale_user();
136 music_on_keymap();
137}
138#endif // AUDIO_ENABLE
diff --git a/users/jjerrell/jjerrell.h b/users/jjerrell/jjerrell.h
new file mode 100644
index 000000000..92b95ccc0
--- /dev/null
+++ b/users/jjerrell/jjerrell.h
@@ -0,0 +1,53 @@
1/**
2 * Copyright (C) 2021 Jerrell, Jacob <@jjerrell>
3 *
4 * This file is part of qmk_firmware.
5 *
6 * qmk_firmware is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * qmk_firmware is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with qmk_firmware. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20#pragma once
21#include QMK_KEYBOARD_H
22
23/** QMK Includes **/
24#include "version.h"
25#include "eeprom.h"
26#include "muse.h"
27
28#include "process_records.h"
29#include "wrappers.h"
30
31/************************* Userspace Layers *************************
32 * Keymaps can define additional layers by making the first case
33 * equal to `LAYER_SAFE_RANGE`
34 ********************************************************************/
35enum userspace_layers {
36 _WORKMAN,
37 _QWERTY,
38 _LOWER,
39 _RAISE,
40 _ADJUST,
41 _SPECIAL,
42 _GAME,
43 LAYER_SAFE_RANGE,
44};
45
46void matrix_scan_keymap(void);
47layer_state_t layer_state_set_keymap(layer_state_t state);
48void dip_switch_update_keymap(uint8_t index, bool active);
49bool music_mask_keymap(uint16_t keycode);
50layer_state_t default_layer_state_set_keymap(layer_state_t state);
51void startup_keymap(void);
52void shutdown_keymap(void);
53void music_on_keymap(void);
diff --git a/users/jjerrell/process_records.c b/users/jjerrell/process_records.c
new file mode 100644
index 000000000..abdcd0934
--- /dev/null
+++ b/users/jjerrell/process_records.c
@@ -0,0 +1,139 @@
1/**
2 * Copyright (C) 2021 Jerrell, Jacob <@jjerrell>
3 *
4 * This file is part of qmk_firmware.
5 *
6 * qmk_firmware is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * qmk_firmware is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with qmk_firmware. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20#include "jjerrell.h"
21
22float game_song[][2] = SONG(TO_BOLDLY_GO);
23float work_song[][2] = SONG(MARIO_GAMEOVER);
24float doom_song[][2] = SONG(E1M1_DOOM);
25
26__attribute__((weak)) bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { return true; }
27
28static uint16_t key_timer;
29
30bool process_record_user(uint16_t keycode, keyrecord_t *record) {
31 if (process_record_keymap(keycode, record)) {
32 static uint8_t mods = 0;
33 // static uint8_t layer = 0;
34 mods = get_mods();
35 switch (keycode) {
36 case KC_QWERTY:
37 if (record->event.pressed) {
38 set_single_persistent_default_layer(_QWERTY);
39 }
40 return false;
41 break;
42 case KC_WORKMAN:
43 if (record->event.pressed) {
44 set_single_persistent_default_layer(_WORKMAN);
45 }
46 return false;
47 break;
48 case KC_CCCV:
49 if (record->event.pressed) {
50 key_timer = timer_read();
51 } else {
52 clear_mods();
53 if (timer_elapsed(key_timer) > TAPPING_TERM) { // Hold, copy
54 tap_code16(G(KC_C));
55 } else if (mods & MOD_MASK_SHIFT) {
56 // Tap w/ shift held, open [Paste App](https://pasteapp.io) (no affiliation)
57 // Shift + Command(GUI) + V
58 tap_code16(S(G(KC_V)));
59 } else { // Regular tap, do paste
60 tap_code16(G(KC_V));
61 }
62 set_mods(mods);
63 }
64 return false;
65 break;
66 case KC_ARROW:
67 if (record->event.pressed) {
68 clear_mods();
69 if (mods & MOD_MASK_SHIFT) {
70 SEND_STRING("=>");
71 } else {
72 SEND_STRING("->");
73 }
74 set_mods(mods);
75 }
76 return false;
77 break;
78 case KC_MAKE:
79 if (!record->event.pressed) {
80#ifndef MAKE_BOOTLOADER
81 uint8_t temp_mod = mod_config(get_mods());
82 uint8_t temp_osm = mod_config(get_oneshot_mods());
83 clear_mods();
84 clear_oneshot_mods();
85#endif
86 send_string_with_delay_P(PSTR("qmk"), TAP_CODE_DELAY);
87#ifndef MAKE_BOOTLOADER
88 if ((temp_mod | temp_osm) & MOD_MASK_SHIFT)
89#endif
90 {
91 send_string_with_delay_P(PSTR(" flash "), TAP_CODE_DELAY);
92#ifndef MAKE_BOOTLOADER
93 } else {
94 send_string_with_delay_P(PSTR(" compile "), TAP_CODE_DELAY);
95#endif
96 }
97 send_string_with_delay_P(PSTR("-kb " QMK_KEYBOARD " -km " QMK_KEYMAP), TAP_CODE_DELAY);
98 send_string_with_delay_P(PSTR(SS_TAP(X_ENTER)), TAP_CODE_DELAY);
99 }
100 return false;
101 break;
102 case KC_VRSN:
103 if (!record->event.pressed) {
104 send_string_with_delay_P(PSTR(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION " Built at: " QMK_BUILDDATE), TAP_CODE_DELAY);
105 }
106 return false;
107 break;
108 case KC_GAME:
109 if (record->event.pressed) {
110 key_timer = timer_read();
111 } else {
112 if (IS_LAYER_OFF(_GAME)) {
113 if (timer_elapsed(key_timer) > TAPPING_TERM) {
114 layer_move(_GAME);
115#ifdef AUDIO_ENABLE
116PLAY_SONG(game_song);
117#endif
118 }
119 break;
120 // todo: cycle game layers
121 // } else if (mods & MOD_MASK_SHIFT) {
122// #ifdef AUDIO_ENABLE
123// PLAY_SONG(doom_song);
124// #endif
125// break;
126 } else {
127 layer_move(_WORKMAN);
128#ifdef AUDIO_ENABLE
129PLAY_SONG(work_song);
130#endif
131 break;
132 }
133 }
134 return false;
135 break;
136 }
137 }
138 return true;
139}
diff --git a/users/jjerrell/process_records.h b/users/jjerrell/process_records.h
new file mode 100644
index 000000000..de37421b1
--- /dev/null
+++ b/users/jjerrell/process_records.h
@@ -0,0 +1,41 @@
1// Copyright (C) 2021 Jerrell, Jacob <@jjerrell>
2//
3// This file is part of qmk_firmware.
4//
5// qmk_firmware is free software: you can redistribute it and/or modify
6// it under the terms of the GNU General Public License as published by
7// the Free Software Foundation, either version 3 of the License, or
8// (at your option) any later version.
9//
10// qmk_firmware is distributed in the hope that it will be useful,
11// but WITHOUT ANY WARRANTY; without even the implied warranty of
12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13// GNU General Public License for more details.
14//
15// You should have received a copy of the GNU General Public License
16// along with qmk_firmware. If not, see <http://www.gnu.org/licenses/>.
17
18#pragma once
19#include "jjerrell.h"
20
21#if defined(KEYMAP_SAFE_RANGE)
22# define PLACEHOLDER_SAFE_RANGE KEYMAP_SAFE_RANGE
23#else
24# define PLACEHOLDER_SAFE_RANGE SAFE_RANGE
25#endif
26
27enum userspace_keycodes {
28 KC_ARROW = PLACEHOLDER_SAFE_RANGE, // `->`
29 KC_MAKE, // Runs the keyboard's make command
30 KC_QWERTY, // Default Layer -> QWERTY
31 KC_WORKMAN, // Default Layer -> Workman
32 KC_VRSN, // Print QMK Firmware and board info
33 RGB_IDL, // Toggle RGB Idle animations
34 RGB_TGL, // Toggle RGB Layer Indication
35 KC_CCCV, // One key copy/paste,
36 KC_GAME, // To game layer. If on game layer, cycle game layers
37 NEW_SAFE_RANGE // use NEW_SAFE_RANGE for keymap specific codes
38};
39
40bool process_record_keymap(uint16_t keycode, keyrecord_t *record);
41
diff --git a/users/jjerrell/readme.md b/users/jjerrell/readme.md
new file mode 100644
index 000000000..a382524f2
--- /dev/null
+++ b/users/jjerrell/readme.md
@@ -0,0 +1,50 @@
1<!--
2 Copyright (C) 2021 Jerrell, Jacob <@jjerrell>
3
4 This file is part of qmk_firmware.
5
6 qmk_firmware is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version.
10
11 qmk_firmware is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with qmk_firmware. If not, see <http://www.gnu.org/licenses/>.
18-->
19
20# JJerrell's QMK Userspace
21
22This userspace showcases my personal journey with QMK keyboards and aims to simplify additional development, reduce code duplication, and maintain a consistent experience across my current keyboards. My original userspace has been archived because I wanted to take the time to grasp _how_ what I was doing worked -- rather than copy/pasta and blind luck.
23
24Some keyboard specific code is stored here because it's contextually relevant. It may be somewhat pedantic, but an effort has been made to wrap this code with preprocessor checks. i.e. `#if (defined(KEYBOARD_planck_ez))`.
25
26## Daily Drivers
27
281. Ergodox EZ - My first mechanical love. Now the office keyboard (if we go back). After finding inferior travel cases for exorbitant amounts of money, I built a custom travel case out of a case designed for drones and maticulous work cutting guncase foam. Around $50 with plenty of foam left over for family LARPing weapons. I'll post a picture one of these days. It also has a spot for my wireless touchpad.
292. Planck EZ - The solution to not being able to sit at a desk 100% of the time and not being able to live without QMK for any amount of time. Karabiner-Elements disables the Macbook keyboard when this is plugged in and the planck sits ontop of it with a very short usb-c cable. Probably terrible for the built in keyboard but they screwed up this generation anyway.
303. Moonlander - Just when I thought it was over, the lovely people with ZSA did it again. This one stays at home on my desk.
31
32## Features
33
34- Keymap level customization
35 - User methods implemented here will give the keymaps a chance to override functionality by optionally implementing relevant _keymap methods
36- Layer Macros
37 - WRAPPER defines in [wrapper.c] simplify consistent keymaps
38- Leader key secrets
39 - [jjerrell.c] sets up the functionality for this feature and calls into the leader_scan_secrets method.
40 - TODO: add documentation for leader_scan_secrets implementation
41
42## Issues
43
44### Tap/hold keys and shifted keycodes
45
46An immediate part of my love for QMK was it's ability to differentiate between holds and presses to a level where you can apply modifiers when a normal alpha code is held. This feature was the single-most health related improvement to adopting QMK, in my opinion.
47
48Beloved as it may be it comes with some baggage; shifted keycodes will be applied as their unshifted counterparts. I've worked around this in the past but the solution this time is a close adoption of the symbol layer inspired by the Neo keyboard.
49
50There is also a problem with relying on SFT_T() for all of your shifting needs because if you attempt to swap which fingers are holding it and don't release the first before pressing the second, shift won't register anymore. This could probably be fixed but it discourages typing in all caps because it becomes too tedious. However, most layers do have a dedicated shift key to counteract this when necessary.
diff --git a/users/bocaj/rules.mk b/users/jjerrell/rules.mk
index a0e7e93bc..db359a575 100644
--- a/users/bocaj/rules.mk
+++ b/users/jjerrell/rules.mk
@@ -1,4 +1,4 @@
1SRC += bocaj.c \ 1SRC += jjerrell.c \
2 process_records.c 2 process_records.c
3 3
4LEADER_ENABLE = yes 4LEADER_ENABLE = yes
@@ -20,7 +20,8 @@ ifneq ($(strip $(NO_SECRETS)), yes)
20 endif 20 endif
21endif 21endif
22 22
23RGB_MATRIX_ENABLE ?= no 23# TODO: RGB is next
24ifneq ($(strip $(RGB_MATRIX_ENABLE)), no) 24# RGB_MATRIX_ENABLE ?= no
25 SRC += rgb_matrix_stuff.c 25# ifneq ($(strip $(RGB_MATRIX_ENABLE)), no)
26endif 26# SRC += rgb_matrix_stuff.c
27# endif
diff --git a/users/jjerrell/wrappers.h b/users/jjerrell/wrappers.h
new file mode 100644
index 000000000..cc0f963e8
--- /dev/null
+++ b/users/jjerrell/wrappers.h
@@ -0,0 +1,329 @@
1// Copyright (C) 2021 Jerrell, Jacob <@jjerrell>
2//
3// This file is part of qmk_firmware.
4//
5// qmk_firmware is free software: you can redistribute it and/or modify
6// it under the terms of the GNU General Public License as published by
7// the Free Software Foundation, either version 3 of the License, or
8// (at your option) any later version.
9//
10// qmk_firmware is distributed in the hope that it will be useful,
11// but WITHOUT ANY WARRANTY; without even the implied warranty of
12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13// GNU General Public License for more details.
14//
15// You should have received a copy of the GNU General Public License
16// along with qmk_firmware. If not, see <http://www.gnu.org/licenses/>.
17
18#pragma once
19#include "jjerrell.h"
20
21#define QWERTY KC_QWERTY
22#define WORKMN KC_WORKMAN
23
24#define KC_CUT LGUI(KC_X)
25
26// Non-sane shortcuts for software macros or keybindings
27#define MACRO_1 ALL_T(KC_F12)
28#define MACRO_2 ALL_T(KC_F13)
29#define MACRO_3 ALL_T(KC_F14)
30#define MACRO_4 ALL_T(KC_F15)
31
32#define MACRO_5 ALL_T(KC_F16)
33#define MACRO_6 ALL_T(KC_F17)
34#define MACRO_7 ALL_T(KC_F18)
35#define MACRO_8 ALL_T(KC_F19)
36
37// clang-format off
38#if (!defined(LAYOUT) && defined(KEYMAP))
39# define LAYOUT KEYMAP
40#endif
41
42#if (defined(KEYBOARD_planck_ez))
43/** Planck EZ Empty
44 * ,-----------------------------------------------------------------------------------.
45 * | | | | | | | | | | | | |
46 * |------+------+------+------+------+------+------+------+------+------+------+------|
47 * | | | | | | | | | | | | |
48 * |------+------+------+------+------+------+------+------+------+------+------+------|
49 * | | | | | | | | | | | | |
50 * |------+------+------+------+------+------+------+------+------+------+------+------|
51 * | | | | | | | | | | | |
52 * `-----------------------------------------------------------------------------------'
53 */
54
55# define ____________________________________________________________PLANCK_VERBOSE_BOTTOM_ROW_____________________________________________________________ \
56 KC_LEAD, KC_LSFT, KC_CCCV, KC_HYPR, LT(_LOWER, KC_BSPC), SFT_T(KC_SPC), XXXXXXX, LT(_RAISE, KC_ENT), KC_MEH, RGB_TOG, RGB_IDL, LED_LEVEL
57
58# define _________________________________________PLANCK_LOWER_BOTTOM_ROW_________________________________________ \
59 KC_LEAD, KC_LSFT, KC_CCCV, KC_HYPR, KC_BSPC, KC_SPC, XXXXXXX, KC_ENT, KC_0, KC_DOT, KC_COMM, LED_LEVEL
60// TODO: It would be nice to find a way to apply the bottom row with optional left/right varargs.
61// I'm completely unsure if this language can support something like that though.
62
63/**
64 * Basic Planck EZ Wrapper to expand "block" defines before sending
65 * to LAYOUT_ortho_4x12
66 */
67# define WRAPPER_ortho_4x12(...) LAYOUT_ortho_4x12(__VA_ARGS__)
68
69# define WRAPPER_planck_common( \
70 K01, K02, K03, K04, K05, K08, K09, K0A, K0B, K0C, \
71 K11, K12, K13, K14, K15, K18, K19, K1A, K1B, K1C, \
72 K21, K22, K23, K24, K25, K28, K29, K2A, K2B, K2C \
73 ) WRAPPER_ortho_4x12( \
74 K01, K02, K03, K04, K05 , XXXXXXX , XXXXXXX, K08, K09, K0A, K0B, K0C, \
75 K11, K12, K13, K14, K15 , XXXXXXX , XXXXXXX, K18, K19, K1A, K1B, K1C, \
76 K21, K22, K23, K24, K25 , XXXXXXX , XXXXXXX, K28, K29, K2A, K2B, K2C, \
77 ____________________________________________________________PLANCK_VERBOSE_BOTTOM_ROW_____________________________________________________________ )
78
79/**
80 * Shifted Key conflicts:
81 * K12, K13, K14, K19, K1A, K1B, K21, K2C
82 */
83# define WRAPPER_planck_base( \
84 K01, K02, K03, K04, K05, K08, K09, K0A, K0B, K0C, \
85 K11, K12, K13, K14, K15, K18, K19, K1A, K1B, K1C, \
86 K21, K22, K23, K24, K25, K28, K29, K2A, K2B, K2C \
87 ) WRAPPER_ortho_4x12( \
88 K01 , K02 , K03 , K04 , K05 , KC_GAME , KC_GAME, K08, K09 , K0A , K0B , K0C, \
89 K11 , SFT_T(K12), GUI_T(K13), ALT_T(K14), K15 , XXXXXXX , XXXXXXX, K18, ALT_T(K19), GUI_T(K1A), SFT_T(K1B), K1C, \
90 CTL_T(K21), K22 , K23 , K24 , K25 , XXXXXXX , XXXXXXX, K28, K29 , K2A , K2B , CTL_T(K2C), \
91 ____________________________________________________________PLANCK_VERBOSE_BOTTOM_ROW_____________________________________________________________ )
92
93# define WRAPPER_planck_mods( \
94 K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, \
95 K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, \
96 K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
97 K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C \
98 ) WRAPPER_ortho_4x12( \
99 K01 , K02 , K03 , K04 , K05 , K06 , K07, K08, K09 , K0A , K0B , K0C, \
100 K11 , SFT_T(K12), GUI_T(K13), ALT_T(K14), K15 , K16 , K17, K18, ALT_T(K19), GUI_T(K1A), SFT_T(K1B), K1C, \
101 CTL_T(K21), K22 , K23 , K24 , K25 , K26 , K27, K28, K29 , K2A , K2B , CTL_T(K2C), \
102 K31, K32 , K33 , K34 , LT(_LOWER, K35), SFT_T(K36), XXXXXXX, LT(_RAISE, K38), K39 , K3A , K3B, K3C )
103
104
105
106// These macros are used when defining layouts in keymap.c
107# define LAYOUT_planck_base(...) WRAPPER_planck_base(__VA_ARGS__)
108# define LAYOUT_planck_common(...) WRAPPER_planck_common(__VA_ARGS__)
109# define LAYOUT_planck_mods(...) WRAPPER_planck_mods(__VA_ARGS__)
110
111#elif defined(KEYBOARD_moonlander)
112/** Moonlander Empty
113 * ( \
114 k00, k01, k02, k03, k04, k05, k06, k60, k61, k62, k63, k64, k65, k66, \
115 k10, k11, k12, k13, k14, k15, k16, k70, k71, k72, k73, k74, k75, k76, \
116 k20, k21, k22, k23, k24, k25, k26, k80, k81, k82, k83, k84, k85, k86, \
117 k30, k31, k32, k33, k34, k35, k91, k92, k93, k94, k95, k96, \
118 k40, k41, k42, k43, k44, k53, kb3, ka2, ka3, ka4, ka5, ka6, \
119 k50, k51, k52, kb4, kb5, kb6 \
120 ) \
121 */
122# define WRAPPER_moonlander(...) LAYOUT_moonlander(__VA_ARGS__)
123# define WRAPPER_moonlander_common( \
124 k11, k12, k13, k14, k15, k71, k72, k73, k74, k75, \
125 k21, k22, k23, k24, k25, k81, k82, k83, k84, k85, \
126 k31, k32, k33, k34, k35, k91, k92, k93, k94, k95, \
127 k41, k42, k43, k44, ka2, ka3, ka4, ka5 \
128 ) WRAPPER_moonlander( \
129 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
130 XXXXXXX, k11, k12, k13, k14, k15, XXXXXXX, XXXXXXX, k71, k72, k73, k74, k75, XXXXXXX, \
131 XXXXXXX, k21, k22, k23, k24, k25, XXXXXXX, XXXXXXX, k81, k82, k83, k84, k85, XXXXXXX, \
132 KC_LSFT, k31, k32, k33, k34, k35, k91, k92, k93, k94, k95, KC_RSFT, \
133 MO(_SPECIAL), k41, k42, k43, k44, TO(_GAME), XXXXXXX, ka2, ka3, ka4, ka5, MO(_SPECIAL), \
134 LT(_LOWER, KC_SPC),HYPR_T(KC_BSPC),KC_LEAD, KC_CCCV,SFT_T(KC_TAB),LT(_RAISE, KC_ENT) )
135
136# define WRAPPER_moonlander_mods( \
137 k11, k12, k13, k14, k15, k71, k72, k73, k74, k75, \
138 k21, k22, k23, k24, k25, k81, k82, k83, k84, k85, \
139 k31, k32, k33, k34, k35, k91, k92, k93, k94, k95, \
140 k41, k42, k43, k44, ka2, ka3, ka4, ka5 \
141 ) WRAPPER_moonlander_common( \
142 k11 , k12 , k13 , k14 , k15, k71, k72, k73, k74, k75, \
143 k21 , SFT_T(k22), GUI_T(k23), ALT_T(k24), k25, k81, ALT_T(k82), GUI_T(k83), SFT_T(k84), k85, \
144 CTL_T(k31), k32 , k33 , k34 , k35, k91, k92, k93, k94, CTL_T(k95), \
145 k41 , k42 , k43 , k44 , ka2, ka3, ka4, ka5 \
146 )
147# define WRAPPER_moonlander_gamepad( \
148 k00, k01, k02, k03, k04, k05, k06, \
149 k10, k11, k12, k13, k14, k15, k16, \
150 k20, k21, k22, k23, k24, k25, k26, \
151 k30, k31, k32, k33, k34, k35, \
152 k40, k41, k42, k43, k44, k53, \
153 k50, k51, k52 \
154 ) WRAPPER_moonlander( \
155 k00, k01, k02, k03, k04, k05, k06, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
156 k10, k11, k12, k13, k14, k15, k16, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
157 k20, k21, k22, k23, k24, k25, k26, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
158 k30, k31, k32, k33, k34, k35, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
159 k40, k41, k42, k43, k44, k53, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
160 k50, k51, k52, XXXXXXX, XXXXXXX, TO(_WORKMAN) \
161 )
162
163# define LAYOUT_moonlander_common(...) WRAPPER_moonlander_common(__VA_ARGS__)
164# define LAYOUT_moonlander_mods(...) WRAPPER_moonlander_mods(__VA_ARGS__)
165# define LAYOUT_moonlander_gamepad(...) WRAPPER_moonlander_gamepad(__VA_ARGS__)
166#elif defined(KEYBOARD_ergodox_ez)
167/** Ergodox EZ Empty
168 .---------------------------------------------. .---------------------------------------------.
169 | | | | | | | | ! | | | | | | |
170 !-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
171 | | | | | | | | ! | | | | | | |
172 !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
173 | | | | | | |-------! !-------! | | | | | |
174 !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
175 | | | | | | | | ! | | | | | | |
176 '-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
177 | | | | | | ! | | | | |
178 '------------------------------' '------------------------------'
179 .---------------. .---------------.
180 | | | ! | |
181 .-------+-------+-------! !-------+-------+-------.
182 ! ! | | ! | ! !
183 ! ! !-------! !-------! ! !
184 | | | | ! | | |
185 '-----------------------' '-----------------------'
186
187 ---------- LEFT HAND ----------- ---------- RIGHT HAND ----------
188 ( \
189 L00,L01,L02,L03,L04,L05,L06, R00,R01,R02,R03,R04,R05,R06, \
190 L10,L11,L12,L13,L14,L15,L16, R10,R11,R12,R13,R14,R15,R16, \
191 L20,L21,L22,L23,L24,L25, R21,R22,R23,R24,R25,R26, \
192 L30,L31,L32,L33,L34,L35,L36, R30,R31,R32,R33,R34,R35,R36, \
193 L40,L41,L42,L43,L44, R42,R43,R44,R45,R46, \
194 L55,L56, R50,R51, \
195 L54, R52, \
196 L53,L52,L51, R55,R54,R53 \
197 )
198*/
199# define WRAPPER_ergodox_ez(...) LAYOUT_ergodox_pretty(__VA_ARGS__)
200
201/** Common Wrapper
202 .---------------------------------------------. .---------------------------------------------.
203 | X | X | X | X | X | X | X | ! X | X | X | X | X | X | X |
204 !-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
205 | X | | | | | | X | ! X | | | | | | X |
206 !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
207 | X | | | | | |-------! !-------! | | | | | X |
208 !-------+-----+-----+-----x-----x-----! X ! ! X !-----x-----x-----+-----+-----+-------!
209 | X | | | | | | | ! | | | | | | X |
210 '-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
211 | SPCL | | | | | ! | | | | SPCL |
212 '------------------------------' '------------------------------'
213 .---------------. .---------------.
214 | X | X | ! X | X |
215 .-------+-------+-------! !-------+-------+-------.
216 ! Space ! BSpace| X | ! X | Tab ! Enter !
217 ! / ! / !-------! !-------! / ! / !
218 | LOWER | Hyper | LEAD | ! CCCV | Meh | RAISE |
219 '-----------------------' '-----------------------'
220*/
221# define WRAPPER_ergodox_common( \
222 L11,L12,L13,L14,L15, R11,R12,R13,R14,R15, \
223 L21,L22,L23,L24,L25, R21,R22,R23,R24,R25, \
224 L31,L32,L33,L34,L35, R31,R32,R33,R34,R35, \
225 L41,L42,L43,L44, R42,R43,R44,R45 \
226 ) WRAPPER_ergodox_ez( \
227 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
228 XXXXXXX, L11, L12, L13, L14, L15, XXXXXXX, XXXXXXX, R11, R12, R13, R14, R15, XXXXXXX, \
229 XXXXXXX, L21, L22, L23, L24, L25, R21, R22, R23, R24, R25, XXXXXXX, \
230 KC_LSFT, L31, L32, L33, L34, L35, XXXXXXX, XXXXXXX, R31, R32, R33, R34, R35, KC_RSFT, \
231 MO(_SPECIAL), L41, L42, L43, L44, R42, R43, R44, R45, MO(_SPECIAL), \
232 \
233 XXXXXXX,XXXXXXX, XXXXXXX,XXXXXXX, \
234 XXXXXXX, XXXXXXX, \
235 LT(_LOWER, KC_SPC),HYPR_T(KC_BSPC),KC_LEAD, KC_CCCV,SFT_T(KC_TAB),LT(_RAISE, KC_ENT) )
236
237/** Common Wrapper with Mod Tap/Hold overlay
238 .---------------------------------------------. .---------------------------------------------.
239 | X | X | X | X | X | X | X | ! X | X | X | X | X | X | X |
240 !-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
241 | X | | | | | | X | ! X | | | | | | X |
242 !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
243 | X | |Shift| Cmd | Alt | |-------! !-------! | Alt | Cmd |Shift| | X |
244 !-------+-----+-----+-----x-----x-----! X ! ! X !-----x-----x-----+-----+-----+-------!
245 | Sft | Ctl | | | | | | ! | | | | | Ctl | Sft |
246 '-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
247 | SPCL | | | | | ! | | | | SPCL |
248 '------------------------------' '------------------------------'
249 .---------------. .---------------.
250 | X | X | ! X | X |
251 .-------+-------+-------! !-------+-------+-------.
252 ! Space ! BSpace| X | ! X | Tab ! Enter !
253 ! / ! / !-------! !-------! / ! / !
254 | LOWER | Hyper | LEAD | ! CCCV | Meh | RAISE |
255 '-----------------------' '-----------------------'
256*/
257# define WRAPPER_ergodox_mods( \
258 L11,L12,L13,L14,L15, R11,R12,R13,R14,R15, \
259 L21,L22,L23,L24,L25, R21,R22,R23,R24,R25, \
260 L31,L32,L33,L34,L35, R31,R32,R33,R34,R35, \
261 L41,L42,L43,L44, R42,R43,R44,R45 \
262 ) WRAPPER_ergodox_common( \
263 L11 , L12 , L13 , L14 , L15, R11, R12 , R13 , R14 , R15, \
264 L21 , SFT_T(L22), GUI_T(L23), ALT_T(L24), L25, R21, ALT_T(R22), GUI_T(R23), SFT_T(R24), R25, \
265 CTL_T(L31), L32 , L33 , L34 , L35, R31, R32 , R33 , R34 , CTL_T(R35), \
266 L41 , L42 , L43 , L44 , R42 , R43 , R44 , R45 )
267
268// These macros are used when defining layouts in keymap.c
269# define LAYOUT_ergodox_common(...) WRAPPER_ergodox_common(__VA_ARGS__)
270# define LAYOUT_ergodox_mods(...) WRAPPER_ergodox_mods(__VA_ARGS__)
271#endif // END Keyboard specific wrapper defines
272/**
273 * Alpha/Num key wrappers for portability
274 */
275
276// Workman
277#define __________________WORKMN_L1__________________ KC_Q, KC_D, KC_R, KC_W, KC_B
278#define __________________WORKMN_L2__________________ KC_A, KC_S, KC_H, KC_T, KC_G
279#define __________________WORKMN_L3__________________ KC_Z, KC_X, KC_M, KC_C, KC_V
280
281#define __________________WORKMN_R1__________________ KC_J, KC_F, KC_U, KC_P, KC_SCLN
282#define __________________WORKMN_R2__________________ KC_Y, KC_N, KC_E, KC_O, KC_I
283#define __________________WORKMN_R3__________________ KC_K, KC_L, KC_COMM, KC_DOT, KC_SLSH
284
285// QWERTY
286#define __________________QWERTY_L1__________________ KC_Q, KC_W, KC_E, KC_R, KC_T
287#define __________________QWERTY_L2__________________ KC_A, KC_S, KC_D, KC_F, KC_G
288#define __________________QWERTY_L3__________________ KC_Z, KC_X, KC_C, KC_V, KC_B
289
290#define __________________QWERTY_R1__________________ KC_Y, KC_U, KC_I, KC_O, KC_P
291#define __________________QWERTY_R2__________________ KC_H, KC_J, KC_K, KC_L, KC_SCLN
292#define __________________QWERTY_R3__________________ KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH
293
294#define ________________QWERTY_R1_LHS________________ KC_P, KC_O, KC_I, KC_U, KC_Y
295#define ________________QWERTY_R2_LHS________________ KC_SCLN, KC_L, KC_K, KC_J, KC_H
296#define ________________QWERTY_R3_LHS________________ KC_SLSH, KC_DOT, KC_COMM, KC_M, KC_N
297
298// Nums
299#define ___________________NUMS_L____________________ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6
300#define ___________________NUMS_R____________________ KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL
301
302// Lower
303#define __________________LOWER_L1___________________ KC_PGUP, KC_TAB, KC_UP, KC_ENT, KC_PGDN
304#define __________________LOWER_L2___________________ KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END
305#define __________________LOWER_L3___________________ KC_ESC, KC_BSPC, KC_CUT, KC_DEL, KC_CCCV
306
307#define __________________LOWER_R1___________________ XXXXXXX, KC_7, KC_8, KC_9, KC_ASTR
308#define __________________LOWER_R2___________________ XXXXXXX, KC_4, KC_5, KC_6, KC_SLSH
309#define __________________LOWER_R3___________________ XXXXXXX, KC_1, KC_2, KC_3, KC_MINS
310// Relevant keys: -> KC_0, KC_DOT, KC_COMM, KC_PLUS <- these keys break our lovely wrapper pattern
311
312// Raise
313#define __________________RAISE_L1___________________ KC_PIPE, KC_UNDS, KC_LBRC, KC_RBRC, KC_AMPR
314#define __________________RAISE_L2___________________ KC_BSLS, KC_SLSH, KC_LCBR, KC_RCBR, KC_ASTR
315#define __________________RAISE_L3___________________ KC_HASH, KC_DLR , KC_PERC, KC_TILD, KC_GRV
316
317#define __________________RAISE_R1___________________ KC_EXLM, KC_LABK, KC_RABK, KC_MINS, KC_SCLN
318#define __________________RAISE_R2___________________ KC_QUES, KC_LPRN, KC_RPRN, KC_EQL, KC_COLN
319#define __________________RAISE_R3___________________ KC_AT, KC_QUOT, KC_DQUO, KC_PLUS, KC_CIRC
320
321// Adjust
322#define __________________ADJUST_L1__________________ KC_MAKE, DEBUG, RESET, TERM_ON, TERM_OFF
323#define __________________ADJUST_L2__________________ KC__MUTE, KC__VOLDOWN, KC__VOLUP, KC_MPLY, KC_MNXT
324#define __________________ADJUST_L3__________________ KC_VRSN, AU_ON, AU_OFF, CG_SWAP, CG_NORM
325
326#define __________________ADJUST_R1__________________ MU_MOD, MU_ON, MU_OFF, MI_ON, MI_OFF
327#define __________________ADJUST_R2__________________ MUV_IN, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD
328#define __________________ADJUST_R3__________________ MUV_DE, RGB_TOG, RGB_MOD, RGB_VAI, RGB_VAD
329// clang-format on