aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--keyboards/moonlander/keymaps/jjerrell/config.h27
-rw-r--r--keyboards/moonlander/keymaps/jjerrell/keymap.c117
-rw-r--r--keyboards/moonlander/keymaps/jjerrell/readme.md3
-rw-r--r--keyboards/moonlander/keymaps/jjerrell/rules.mk1
-rw-r--r--layouts/community/ergodox/bocaj/config.h4
-rw-r--r--layouts/community/ergodox/bocaj/keymap.c175
-rw-r--r--layouts/community/ergodox/bocaj/readme.md28
-rw-r--r--layouts/community/ergodox/bocaj/rules.mk14
-rw-r--r--layouts/community/ergodox/jjerrell/config.h21
-rw-r--r--layouts/community/ergodox/jjerrell/keymap.c129
-rw-r--r--layouts/community/ergodox/jjerrell/readme.md5
-rw-r--r--layouts/community/ergodox/jjerrell/rules.mk14
-rw-r--r--layouts/community/ortho_4x12/bocaj/config.h106
-rw-r--r--layouts/community/ortho_4x12/bocaj/keymap.c287
-rw-r--r--layouts/community/ortho_4x12/bocaj/readme.md23
-rw-r--r--layouts/community/ortho_4x12/bocaj/rules.mk43
-rw-r--r--layouts/community/ortho_4x12/jjerrell/config.h57
-rw-r--r--layouts/community/ortho_4x12/jjerrell/keymap.c227
-rw-r--r--layouts/community/ortho_4x12/jjerrell/readme.md7
-rw-r--r--layouts/community/ortho_4x12/jjerrell/rules.mk8
-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
40 files changed, 1399 insertions, 1575 deletions
diff --git a/keyboards/moonlander/keymaps/jjerrell/config.h b/keyboards/moonlander/keymaps/jjerrell/config.h
new file mode 100644
index 000000000..1fd17fbbe
--- /dev/null
+++ b/keyboards/moonlander/keymaps/jjerrell/config.h
@@ -0,0 +1,27 @@
1/* Copyright 2020 ZSA Technology Labs, Inc <@zsa>
2 * Copyright 2020 Jack Humbert <jack.humb@gmail.com>
3 * Copyright 2020 Christopher Courtney <drashna@live.com> (@drashna)
4 * Copyright 2021 Jacob Jerrell <@jjerrell>
5 *
6 * This program 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 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20#pragma once
21
22#define ORYX_CONFIGURATOR
23
24#undef PRODUCT
25#define PRODUCT Moonlander Mark I - Modified by <@jjerrell>
26
27#define IGNORE_MOD_TAP_INTERRUPT
diff --git a/keyboards/moonlander/keymaps/jjerrell/keymap.c b/keyboards/moonlander/keymaps/jjerrell/keymap.c
new file mode 100644
index 000000000..012b77367
--- /dev/null
+++ b/keyboards/moonlander/keymaps/jjerrell/keymap.c
@@ -0,0 +1,117 @@
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
22enum moonlander_layers {
23 _GAME_LOWER = LAYER_SAFE_RANGE,
24 // _GAME_RAISE,
25};
26
27// clang-format off
28const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
29 [_WORKMAN] = LAYOUT_moonlander_mods(
30 __________________WORKMN_L1__________________, __________________WORKMN_R1__________________,
31 __________________WORKMN_L2__________________, __________________WORKMN_R2__________________,
32 __________________WORKMN_L3__________________, __________________WORKMN_R3__________________,
33 XXXXXXX, XXXXXXX, XXXXXXX, KC_LSFT, KC_RSFT, XXXXXXX, XXXXXXX, XXXXXXX
34 ),
35
36 [_LOWER] = LAYOUT_moonlander_mods(
37 __________________LOWER_L1___________________, __________________LOWER_R1___________________,
38 __________________LOWER_L2___________________, __________________LOWER_R2___________________,
39 __________________LOWER_L3___________________, __________________LOWER_R3___________________,
40 XXXXXXX, XXXXXXX, XXXXXXX, KC_LSFT, KC_0, KC_DOT, KC_COMM, KC_PLUS
41 ),
42
43 [_RAISE] = LAYOUT_moonlander_common(
44 __________________RAISE_L1___________________, __________________RAISE_R1___________________,
45 __________________RAISE_L2___________________, __________________RAISE_R2___________________,
46 __________________RAISE_L3___________________, __________________RAISE_R3___________________,
47 XXXXXXX, XXXXXXX, XXXXXXX, KC_LSFT, KC_RSFT, XXXXXXX, XXXXXXX, XXXXXXX
48 ),
49
50 [_ADJUST] = LAYOUT_moonlander_common(
51 __________________ADJUST_L1__________________, __________________ADJUST_R1__________________,
52 __________________ADJUST_L2__________________, __________________ADJUST_R2__________________,
53 __________________ADJUST_L3__________________, __________________ADJUST_R3__________________,
54 XXXXXXX, XXXXXXX, XXXXXXX, KC_LSFT, KC_RSFT, XXXXXXX, XXXXXXX, XXXXXXX
55 ),
56
57 [_SPECIAL] = LAYOUT_moonlander_common(
58 XXXXXXX, XXXXXXX, KC_WH_D, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
59 XXXXXXX, KC_WH_L, KC_WH_U, KC_WH_R, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
60 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
61 XXXXXXX, XXXXXXX, XXXXXXX, KC_LALT, KC_RALT, XXXXXXX, XXXXXXX, XXXXXXX
62 ),
63
64 [_GAME] = LAYOUT_moonlander_gamepad(
65 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6,
66 KC_TAB, __________________QWERTY_L1__________________, KC_SLSH,
67 KC_LALT, __________________QWERTY_L2__________________, KC_BSLS,
68 KC_LSFT, __________________QWERTY_L3__________________,
69 KC_LGUI, MACRO_1, MACRO_2, MACRO_3, MACRO_4, KC_LOCK,
70 KC_SPC, KC_BTN2, MO(_LOWER)
71 ),
72 [_GAME_LOWER] = LAYOUT_moonlander_gamepad(
73 KC_GRV, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL,
74 KC_TAB, __________________QWERTY_L1__________________, KC_SLSH,
75 KC_LALT, __________________QWERTY_L2__________________, KC_BSLS,
76 KC_LSFT, __________________QWERTY_L3__________________,
77 KC_LGUI, MACRO_5, MACRO_6, MACRO_7, MACRO_8, KC_LOCK,
78 KC_SPC, KC_BTN2, MO(_LOWER)
79 )
80};
81// clang-format on
82
83layer_state_t layer_state_set_keymap(layer_state_t state) {
84 ML_LED_1(0);
85 ML_LED_2(0);
86 ML_LED_3(0);
87 ML_LED_4(0);
88 ML_LED_5(0);
89 ML_LED_6(0);
90 state = update_tri_layer_state(state, _GAME, _LOWER, _GAME_LOWER);
91 switch (get_highest_layer(state)) {
92 case 1:
93 ML_LED_1(1);
94 ML_LED_4(1);
95 break;
96 case 2:
97 ML_LED_2(1);
98 ML_LED_5(1);
99 break;
100 case 3:
101 ML_LED_3(1);
102 break;
103 case 4:
104 ML_LED_4(1);
105 break;
106 case 5:
107 ML_LED_5(1);
108 break;
109 case 6:
110 ML_LED_6(1);
111 break;
112 default:
113 break;
114 }
115
116 return state;
117}
diff --git a/keyboards/moonlander/keymaps/jjerrell/readme.md b/keyboards/moonlander/keymaps/jjerrell/readme.md
new file mode 100644
index 000000000..51476f8ab
--- /dev/null
+++ b/keyboards/moonlander/keymaps/jjerrell/readme.md
@@ -0,0 +1,3 @@
1# Jacob Jerrell's Moonlander Keymap
2
3Concrete proof and acceptance of a problem. There is some not so custom Moonlander LED control in here but everything else is implemented in [my userspace](../../../../users/jjerrell/).
diff --git a/keyboards/moonlander/keymaps/jjerrell/rules.mk b/keyboards/moonlander/keymaps/jjerrell/rules.mk
new file mode 100644
index 000000000..ef72559a0
--- /dev/null
+++ b/keyboards/moonlander/keymaps/jjerrell/rules.mk
@@ -0,0 +1 @@
AUDIO_ENABLE = yes
diff --git a/layouts/community/ergodox/bocaj/config.h b/layouts/community/ergodox/bocaj/config.h
deleted file mode 100644
index 621ae784c..000000000
--- a/layouts/community/ergodox/bocaj/config.h
+++ /dev/null
@@ -1,4 +0,0 @@
1#pragma once
2
3#define LEADER_TIMEOUT 250
4#define LEADER_PER_KEY_TIMING
diff --git a/layouts/community/ergodox/bocaj/keymap.c b/layouts/community/ergodox/bocaj/keymap.c
deleted file mode 100644
index ba105a8f1..000000000
--- a/layouts/community/ergodox/bocaj/keymap.c
+++ /dev/null
@@ -1,175 +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/*
21 * The `LAYOUT_ergodox_pretty_base` macro is a template to allow the use of
22 * identical modifiers for the default layouts (eg QWERTY, Colemak, Dvorak,
23 * etc), so that there is no need to set them up for each layout, and modify
24 * all of them if I want to change them. This helps to keep consistency and
25 * ease of use. K## is a placeholder to pass through the individual keycodes
26 */
27#define LAYOUT_ergodox_bocaj(...) WRAPPER_ergodox_bocaj(__VA_ARGS__)
28#define LAYOUT_ergodox_bocaj_WIN(...) WRAPPER_ergodox_bocaj_WIN(__VA_ARGS__)
29
30const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
31
32 [_WORKMAN] = LAYOUT_ergodox_bocaj(
33 KC_ESC, ________________NUMBER_LEFT________________, KC_ARRW, KC_MINS, ________________NUMBER_RIGHT_______________, KC_EQUAL,
34 KC_DEL, _________________WORKMAN_L1________________, KC_LPRN, KC_RPRN, _________________WORKMAN_R1________________, KC_BSLS,
35 _______, _________________WORKMAN_L2________________, _________________WORKMAN_R2________________, KC_QUOT,
36 KC_LSFT, _________________WORKMAN_L3________________, KC_LBRC, KC_RBRC, _________________WORKMAN_R3________________, _______,
37 MO_MOD, KC_PGUP, KC_HOME, KC_UP, KC_LEFT, KC_RIGHT, KC_DOWN, KC_END, KC_PGDN, WORKMAN,
38 KC_APP,KC_HOME, /* <- LHS/RHS -> */ KC_END,KC_ESC,
39 KC_PGUP, /* <- LHS/RHS -> */ KC_PGDN,
40 KC_SPACE,KC_BSPACE,KC_LEAD, /* <- LHS/RHS -> */ KC_LOCK,KC_TAB,KC_ENTER
41 ),
42
43 [_WWORKMAN] = LAYOUT_ergodox_bocaj_WIN(
44 KC_ESC, ________________NUMBER_LEFT________________, KC_ARRW, KC_MINS, ________________NUMBER_RIGHT_______________, KC_EQUAL,
45 KC_DEL, _________________WORKMAN_L1________________, KC_LPRN, KC_RPRN, _________________WORKMAN_R1________________, KC_BSLS,
46 _______, _________________WORKMAN_L2________________, _________________WORKMAN_R2________________, KC_QUOT,
47 KC_LSFT, _________________WORKMAN_L3________________, KC_LBRC, KC_RBRC, _________________WORKMAN_R3________________, _______,
48 MO_MOD, KC_PGUP, KC_HOME, KC_UP, KC_LEFT, KC_RIGHT, KC_DOWN, KC_END, KC_PGDN, WORKMAN,
49 KC_APP,KC_HOME, /* <- LHS/RHS -> */ KC_END,KC_ESC,
50 KC_PGUP, /* <- LHS/RHS -> */ KC_PGDN,
51 KC_SPACE,KC_BSPACE,KC_LEAD, /* <- LHS/RHS -> */ KC_LOCK,KC_TAB,KC_ENTER
52 ),
53
54 [_LOWER] = LAYOUT_ergodox_bocaj(
55 KC_GRV, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
56 _______, _______, _______, KC_UP, _______, _______, _______, _______, _______, KC_7, KC_8, KC_9, KC_BSLS, _______,
57 _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, KC_4, KC_5, KC_6, KC_ASTR, _______,
58 _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_1, KC_2, KC_3, KC_PLUS, _______,
59 _______, _______, _______, _______, _______, KC_0, KC_DOT, KC_COMM, KC_MINS, _______,
60 KC_APP,KC_HOME, /* <- LHS/RHS -> */ KC_END,KC_ESC,
61 KC_PGUP, /* <- LHS/RHS -> */ KC_PGDN,
62 KC_SPACE,KC_BSPACE,KC_LEAD, /* <- LHS/RHS -> */ KC_LOCK,KC_TAB,KC_ENTER
63 ),
64
65 [_RAISE] = LAYOUT_ergodox_bocaj(
66 KC_TILD, _________________RAISE_L1__________________, _______, _______, _________________RAISE_R1__________________, _______,
67 KC_F11, _________________RAISE_L2__________________, _______, _______, _________________RAISE_R2__________________, KC_F12,
68 _______, _________________RAISE_L3__________________, _________________RAISE_R3__________________, _______,
69 _______, _______, KC_MRWD, KC_MPLY, KC_MFFD, _______, _______, _______, ___________________BLANK___________________, _______,
70 ___________________BLANK___________________, ___________________BLANK___________________,
71 KC_APP,KC_HOME, /* <- LHS/RHS -> */ KC_END,KC_ESC,
72 KC_PGUP, /* <- LHS/RHS -> */ KC_PGDN,
73 KC_SPACE,KC_BSPACE,KC_LEAD, /* <- LHS/RHS -> */ KC_LOCK,KC_TAB,KC_ENTER
74 ),
75
76 [_ADJUST] = LAYOUT_ergodox_pretty(
77 KC_MAKE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RST,
78 VRSN, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, EEP_RST,
79 _______, KC__MUTE, KC__VOLDOWN, KC__VOLUP, _______, KC_MNXT, _______, _______, _______, _______, _______, _______,
80 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
81 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
82 KC_APP,KC_HOME, /* <- LHS/RHS -> */ KC_END,KC_ESC,
83 KC_PGUP, /* <- LHS/RHS -> */ KC_PGDN,
84 KC_SPACE,KC_BSPACE,KC_LEAD, /* <- LHS/RHS -> */ KC_LOCK,KC_TAB,KC_ENTER
85 ),
86
87 // Wrapping Mouse-Wheel Keys with `X_T()` style functions seems
88 // to break the mouse button. So we can't use the wrapper here.
89 [_MOD] = LAYOUT_ergodox_pretty(
90 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
91 _______, _______, _______, KC_WH_D, _______, _______, _______, _______, _______, _______, KC_MS_U, _______, _______, _______,
92 _______, _______, KC_WH_L, KC_WH_U, KC_WH_R, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______,
93 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
94 _______, _______, _______, _______, KC_ACL0, KC_ACL1, KC_ACL2, _______, _______, _______,
95 _______,_______, /* <- LHS/RHS -> */ _______,_______,
96 _______, /* <- LHS/RHS -> */ _______,
97 KC_BTN1,KC_BTN2,_______, /* <- LHS/RHS -> */ _______,KC_BTN3,KC_BTN4
98 )
99
100};
101// clang-format on
102
103bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
104 return true;
105}
106
107void matrix_init_keymap(void) {};
108
109// Runs whenever there is a layer state change.
110layer_state_t layer_state_set_keymap(layer_state_t state) {
111 ergodox_board_led_off();
112 ergodox_right_led_1_off();
113 ergodox_right_led_2_off();
114 ergodox_right_led_3_off();
115
116 uint8_t layer = get_highest_layer(state);
117 switch (layer) {
118 case _LOWER:
119 ergodox_right_led_3_on();
120 break;
121 case _MOD:
122 ergodox_right_led_2_on();
123 break;
124 case _RAISE:
125 ergodox_right_led_1_on();
126 break;
127 case _ADJUST:
128 ergodox_right_led_1_on();
129 ergodox_right_led_2_on();
130 break;
131 default:
132 break;
133 }
134
135 ergodox_right_led_1_set(25);
136 ergodox_right_led_2_set(25);
137 ergodox_right_led_3_set(25);
138
139 return state;
140};
141
142void matrix_scan_keymap(void) {
143 uint8_t modifiers = get_mods();
144 uint8_t led_usb_state = host_keyboard_leds();
145 uint8_t one_shot = get_oneshot_mods();
146 uint8_t layer_is_workman = layer_state_is(_WORKMAN);
147
148 if ((modifiers) && (layer_is_workman)) {
149 if (modifiers & MODS_SHIFT_MASK || led_usb_state & (1<<USB_LED_CAPS_LOCK) || one_shot & MODS_SHIFT_MASK) {
150 ergodox_right_led_1_on();
151 ergodox_right_led_1_set( 25 );
152 } else {
153 ergodox_right_led_1_off();
154 }
155 if ((modifiers & MODS_CTRL_MASK || one_shot & MODS_CTRL_MASK) && (modifiers & MODS_GUI_MASK || one_shot & MODS_GUI_MASK)) {
156 ergodox_right_led_2_on();
157 ergodox_right_led_2_set( 50 );
158 } else if ((modifiers & MODS_CTRL_MASK || one_shot & MODS_CTRL_MASK) || (modifiers & MODS_GUI_MASK || one_shot & MODS_GUI_MASK)) {
159 ergodox_right_led_2_on();
160 ergodox_right_led_2_set( 10 );
161 } else {
162 ergodox_right_led_2_off();
163 }
164 if (modifiers & MODS_ALT_MASK || one_shot & MODS_ALT_MASK) {
165 ergodox_right_led_3_on();
166 ergodox_right_led_3_set( 10 );
167 } else {
168 ergodox_right_led_3_off();
169 }
170 } else if (!(modifiers) && (layer_is_workman)) {
171 ergodox_right_led_1_off();
172 ergodox_right_led_2_off();
173 ergodox_right_led_3_off();
174 }
175};
diff --git a/layouts/community/ergodox/bocaj/readme.md b/layouts/community/ergodox/bocaj/readme.md
deleted file mode 100644
index f8bce4e57..000000000
--- a/layouts/community/ergodox/bocaj/readme.md
+++ /dev/null
@@ -1,28 +0,0 @@
1# Overview
2
3This is my personal Ergodox EZ configuration, and my daily driver.
4
5Most of the code resides in my userspace and is heavily based upon [Drashna's work](https://github.com/qmk/qmk_firmware/tree/master/users/drashna)... although considerably slimmed down.
6
7## How to build
8
9Put simply:
10`make ergodox_ez:bocaj`
11
12On that note, I use a separate workspace when making changes to my layouts or userspace. In that repo, there is a tool that does this for me. See [JacobJerrell/qmk_layouts/tools/](https://github.com/JacobJerrell/qmk_layouts/tree/master/tools)
13
14## Layers
15
16* WORKMAN: No one uses this board but me and I've never had a reason to switch to QWERTY
17* LOWER:
18 * Left: Grave and navigation arrows
19 * Right: Numpad
20* RAISE:
21 * Symbols across the top, F-Keys on the second row
22* ADJUST
23 * Audio control, make/reset/version macros
24* MOD: mouse navigation
25
26## Ergodox Specifics
27
28I don't have the underglow or backlit versions so the 3 LEDs on the right board are used for layer indication if not on the base layer. If you're on the base layer, they're used for mod-key indicators.
diff --git a/layouts/community/ergodox/bocaj/rules.mk b/layouts/community/ergodox/bocaj/rules.mk
deleted file mode 100644
index c6a306fda..000000000
--- a/layouts/community/ergodox/bocaj/rules.mk
+++ /dev/null
@@ -1,14 +0,0 @@
1BOOTMAGIC_ENABLE = full
2TAP_DANCE_ENABLE = no
3COMMAND_ENABLE = no # Commands for debug and configuration
4CONSOLE_ENABLE = yes
5SPACE_CADET_ENABLE = no
6KEY_LOCK_ENABLE = yes
7MOUSEKEY_ENABLE = yes
8EXTRAKEY_ENABLE = yes
9LEADER_ENABLE = yes
10
11UNICODE_ENABLE = no
12UNICODEMAP_ENABLE = no
13RGB_MATRIX_ENABLE = no
14RGBLIGHT_ENABLE = no
diff --git a/layouts/community/ergodox/jjerrell/config.h b/layouts/community/ergodox/jjerrell/config.h
new file mode 100644
index 000000000..8223108d1
--- /dev/null
+++ b/layouts/community/ergodox/jjerrell/config.h
@@ -0,0 +1,21 @@
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#ifdef KEYBOARD_ergodox_ez
19#undef PRODUCT
20#define PRODUCT ErgoDox EZ - Modified by <@jjerrell>
21#endif
diff --git a/layouts/community/ergodox/jjerrell/keymap.c b/layouts/community/ergodox/jjerrell/keymap.c
new file mode 100644
index 000000000..110a8aba6
--- /dev/null
+++ b/layouts/community/ergodox/jjerrell/keymap.c
@@ -0,0 +1,129 @@
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
22const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
23 // clang-format off
24 [_WORKMAN] = LAYOUT_ergodox_mods(
25 __________________WORKMN_L1__________________, __________________WORKMN_R1__________________,
26 __________________WORKMN_L2__________________, __________________WORKMN_R2__________________,
27 __________________WORKMN_L3__________________, __________________WORKMN_R3__________________,
28 XXXXXXX, XXXXXXX, XXXXXXX, KC_LSFT, KC_RSFT, XXXXXXX, XXXXXXX, XXXXXXX
29 ),
30 /* Lower - Nav/Select/Nums */
31 [_LOWER] = LAYOUT_ergodox_mods(
32 __________________LOWER_L1___________________, __________________LOWER_R1___________________,
33 __________________LOWER_L2___________________, __________________LOWER_R2___________________,
34 __________________LOWER_L3___________________, __________________LOWER_R3___________________,
35 XXXXXXX, XXXXXXX, XXXXXXX, KC_LSFT, KC_0, KC_DOT, KC_COMM, KC_PLUS
36 ),
37 /* Raise - Symbols */
38 [_RAISE] = LAYOUT_ergodox_common(
39 __________________RAISE_L1___________________, __________________RAISE_R1___________________,
40 __________________RAISE_L2___________________, __________________RAISE_R2___________________,
41 __________________RAISE_L3___________________, __________________RAISE_R3___________________,
42 XXXXXXX, XXXXXXX, XXXXXXX, KC_LSFT, KC_RSFT, XXXXXXX, XXXXXXX, XXXXXXX
43 ),
44 /* Adjust (Lower + Raise) */
45 [_ADJUST] = LAYOUT_ergodox_common(
46 __________________ADJUST_L1__________________, __________________ADJUST_R1__________________,
47 __________________ADJUST_L2__________________, __________________ADJUST_R2__________________,
48 __________________ADJUST_L3__________________, __________________ADJUST_R3__________________,
49 XXXXXXX, XXXXXXX, XXXXXXX, KC_LSFT, KC_RSFT, XXXXXXX, XXXXXXX, XXXXXXX
50 ),
51 [_SPECIAL] = LAYOUT_ergodox_common(
52 XXXXXXX, XXXXXXX, KC_WH_D, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
53 XXXXXXX, KC_WH_L, KC_WH_U, KC_WH_R, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
54 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
55 XXXXXXX, XXXXXXX, XXXXXXX, KC_LALT, KC_RALT, XXXXXXX, XXXXXXX, XXXXXXX
56 )
57// clang-format on
58};
59
60#ifdef KEYBOARD_ergodox_ez
61// Runs whenever there is a layer state change.
62layer_state_t layer_state_set_keymap(layer_state_t state) {
63 ergodox_board_led_off();
64 ergodox_right_led_1_off();
65 ergodox_right_led_2_off();
66 ergodox_right_led_3_off();
67
68 uint8_t layer = get_highest_layer(state);
69 switch (layer) {
70 case _LOWER:
71 ergodox_right_led_3_on();
72 break;
73 case _RAISE:
74 ergodox_right_led_1_on();
75 break;
76 case _ADJUST:
77 ergodox_right_led_1_on();
78 ergodox_right_led_2_on();
79 ergodox_right_led_3_on();
80 break;
81 case _SPECIAL:
82 ergodox_right_led_2_on();
83 break;
84 default:
85 break;
86 }
87
88 ergodox_right_led_1_set(25);
89 ergodox_right_led_2_set(25);
90 ergodox_right_led_3_set(25);
91
92 return state;
93};
94
95void matrix_scan_keymap(void) {
96 uint8_t modifiers = get_mods();
97 uint8_t led_usb_state = host_keyboard_leds();
98 uint8_t one_shot = get_oneshot_mods();
99 uint8_t layer_is_workman = layer_state_is(_WORKMAN);
100
101 if ((modifiers) && (layer_is_workman)) {
102 if (modifiers & MOD_MASK_SHIFT || led_usb_state & (1<<USB_LED_CAPS_LOCK) || one_shot & MOD_MASK_SHIFT) {
103 ergodox_right_led_1_on();
104 ergodox_right_led_1_set( 25 );
105 } else {
106 ergodox_right_led_1_off();
107 }
108 if ((modifiers & MOD_MASK_CTRL || one_shot & MOD_MASK_CTRL) && (modifiers & MOD_MASK_GUI || one_shot & MOD_MASK_GUI)) {
109 ergodox_right_led_2_on();
110 ergodox_right_led_2_set( 50 );
111 } else if ((modifiers & MOD_MASK_CTRL || one_shot & MOD_MASK_CTRL) || (modifiers & MOD_MASK_GUI || one_shot & MOD_MASK_GUI)) {
112 ergodox_right_led_2_on();
113 ergodox_right_led_2_set( 10 );
114 } else {
115 ergodox_right_led_2_off();
116 }
117 if (modifiers & MOD_MASK_ALT || one_shot & MOD_MASK_ALT) {
118 ergodox_right_led_3_on();
119 ergodox_right_led_3_set( 10 );
120 } else {
121 ergodox_right_led_3_off();
122 }
123 } else if (layer_is_workman) {
124 ergodox_right_led_1_off();
125 ergodox_right_led_2_off();
126 ergodox_right_led_3_off();
127 }
128};
129#endif
diff --git a/layouts/community/ergodox/jjerrell/readme.md b/layouts/community/ergodox/jjerrell/readme.md
new file mode 100644
index 000000000..6b89134c2
--- /dev/null
+++ b/layouts/community/ergodox/jjerrell/readme.md
@@ -0,0 +1,5 @@
1# Jacob Jerrell's Ergodox Layout
2
3This is my original QMK keyboard. There isn't much to see here aside from some control over the 3 ergodox_right LEDs for layer & modifier indication.
4
5The bulk of the functionality is implemented in [my userspace](../../../../users/jjerrell) so it can be shared among my other keyboards.
diff --git a/layouts/community/ergodox/jjerrell/rules.mk b/layouts/community/ergodox/jjerrell/rules.mk
new file mode 100644
index 000000000..4288a264c
--- /dev/null
+++ b/layouts/community/ergodox/jjerrell/rules.mk
@@ -0,0 +1,14 @@
1BOOTMAGIC_ENABLE = lite
2TAP_DANCE_ENABLE = no
3COMMAND_ENABLE = no
4CONSOLE_ENABLE = yes
5SPACE_CADET_ENABLE = no
6KEY_LOCK_ENABLE = no
7MOUSEKEY_ENABLE = yes
8EXTRAKEY_ENABLE = yes
9LEADER_ENABLE = yes
10
11UNICODE_ENABLE = no
12UNICODEMAP_ENABLE = no
13RGB_MATRIX_ENABLE = no
14RGBLIGHT_ENABLE = no
diff --git a/layouts/community/ortho_4x12/bocaj/config.h b/layouts/community/ortho_4x12/bocaj/config.h
deleted file mode 100644
index 9a65684f3..000000000
--- a/layouts/community/ortho_4x12/bocaj/config.h
+++ /dev/null
@@ -1,106 +0,0 @@
1#pragma once
2
3#define LEADER_TIMEOUT 250
4#define LEADER_PER_KEY_TIMING
5
6#if defined(RGBLIGHT_ENABLE) && !defined(RGBLED_NUM)
7# if defined(KEYBOARD_planck_light)
8# define RGB_DI_PIN A0
9# define RGBLED_NUM 13 // Number of LEDs
10# endif
11# define RGBLIGHT_HUE_STEP 12
12# define RGBLIGHT_SAT_STEP 12
13# define RGBLIGHT_VAL_STEP 12
14# define RGBLIGHT_EFFECT_KNIGHT_LENGTH 2
15# define RGBLIGHT_EFFECT_SNAKE_LENGTH 2
16# ifdef RGB_MATRIX_ENABLE
17# define RGBLIGHT_DISABLE_KEYCODES
18# endif
19#endif // RGBLIGHT_ENABLE
20
21#ifdef RGB_MATRIX_ENABLE
22# define RGB_MATRIX_KEYPRESSES // reacts to keypresses (will slow down matrix scan by a lot)
23// #define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (not recommened)
24# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
25// #define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
26// #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
27# define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended
28# undef RGB_MATRIX_LED_PROCESS_LIMIT
29# undef RGB_MATRIX_LED_FLUSH_LIMIT
30#endif
31
32#if defined(KEYBOARD_planck_ez)
33# undef PRODUCT
34# define PRODUCT Bocaj Hacked Planck EZ
35#endif
36
37#define EEPROM_I2C_RM24C512C
38
39#define ENCODER_DIRECTION_FLIP
40/*
41 * MIDI options
42 */
43
44/* enable basic MIDI features:
45 - MIDI notes can be sent when in Music mode is on
46*/
47
48// #define MIDI_BASIC
49
50/* enable advanced MIDI features:
51 - MIDI notes can be added to the keymap
52 - Octave shift and transpose
53 - Virtual sustain, portamento, and modulation wheel
54 - etc.
55*/
56//#define MIDI_ADVANCED
57
58/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
59//#define MIDI_TONE_KEYCODE_OCTAVES 2
60
61#define FB_ERM_LRA 1 /* For ERM:0 or LRA:1*/
62#define FB_BRAKEFACTOR 6 /* For 1x:0, 2x:1, 3x:2, 4x:3, 6x:4, 8x:5, 16x:6, Disable Braking:7 */
63#define FB_LOOPGAIN 1 /* For Low:0, Medium:1, High:2, Very High:3 */
64
65/* default 3V ERM vibration motor voltage and library*/
66#if FB_ERM_LRA == 0
67# define RATED_VOLTAGE 3
68# define V_RMS 2.3
69# define V_PEAK 3.30
70/* Library Selection */
71# define LIB_SELECTION 4 /* For Empty:0' TS2200 library A to D:1-5, LRA Library: 6 */
72
73/* default 2V LRA voltage and library */
74#elif FB_ERM_LRA == 1
75# define RATED_VOLTAGE 2
76# define V_RMS 2.0
77# define V_PEAK 2.85
78# define F_LRA 200
79/* Library Selection */
80# define LIB_SELECTION 6 /* For Empty:0' TS2200 library A to D:1-5, LRA Library: 6 */
81
82#endif
83
84/* Control 1 register settings */
85#define DRIVE_TIME 25
86#define AC_COUPLE 0
87#define STARTUP_BOOST 1
88
89/* Control 2 Settings */
90#define BIDIR_INPUT 1
91#define BRAKE_STAB 1 /* Loopgain is reduced when braking is almost complete to improve stability */
92#define SAMPLE_TIME 3
93#define BLANKING_TIME 1
94#define IDISS_TIME 1
95
96/* Control 3 settings */
97#define NG_THRESH 2
98#define ERM_OPEN_LOOP 1
99#define SUPPLY_COMP_DIS 0
100#define DATA_FORMAT_RTO 0
101#define LRA_DRIVE_MODE 0
102#define N_PWM_ANALOG 0
103#define LRA_OPEN_LOOP 0
104/* Control 4 settings */
105#define ZC_DET_TIME 0
106#define AUTO_CAL_TIME 3
diff --git a/layouts/community/ortho_4x12/bocaj/keymap.c b/layouts/community/ortho_4x12/bocaj/keymap.c
deleted file mode 100644
index 6adbb6d61..000000000
--- a/layouts/community/ortho_4x12/bocaj/keymap.c
+++ /dev/null
@@ -1,287 +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 BACKLIGHT_ENABLE
21enum planck_keycodes {
22 BACKLIT = NEW_SAFE_RANGE,
23 TH_LVL,
24};
25
26#else
27# define BACKLIT OSM(MOD_LSFT)
28enum planck_keycodes {
29 TH_LVL = NEW_SAFE_RANGE,
30};
31#endif
32
33/*
34 * Tap/Hold Wrapper
35 * ,-----------------------------------------------------------------------------------.
36 * | | | | | | | | | | | | |
37 * |------+------+------+------+------+------+------+------+------+------+------+------|
38 * | | |Shift | Cmd | Alt | | | Alt | Cmd |Shift | | |
39 * |------+------+------+------+------+------+------+------+------+------+------+------|
40 * | | Ctrl | | | | | | | | | Ctrl | |
41 * |------+------+------+------+------+------+------+------+------+------+------+------|
42 * | | | | |Lower | |Raise | | | | |
43 * `-----------------------------------------------------------------------------------'
44 */
45#define LAYOUT_ortho_4x12_bocaj(...) WRAPPER_planck_bocaj(__VA_ARGS__)
46
47/*
48 * Base Alphanumeric Wrapper + Tap/Hold Wrapper
49 * ,-----------------------------------------------------------------------------------.
50 * | Esc | | | | | | | | | | | - |
51 * |------+------+------+------+------+------+------+------+------+------+------+------|
52 * | Tab | | | | | HYPR | MEH | | | | | ' |
53 * |------+------+------+------+------+------+------+------+------+------+------+------|
54 * | Shift| | | | | | | | | | | TTMOD|
55 * |------+------+------+------+------+------+------+------+------+------+------+------|
56 * | MOMOD| Lead | Up | Left |BkSpc | Space |Enter |Right | Down | XXX | XXX |
57 * `-----------------------------------------------------------------------------------'
58 */
59#define LAYOUT_ortho_4x12_bocaj_base(...) WRAPPER_planck_bocaj_base(__VA_ARGS__)
60#define LAYOUT_ortho_4x12_bocaj_base_WIN(...) WRAPPER_planck_bocaj_base_WIN(__VA_ARGS__)
61
62const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
63
64 [_WORKMAN] = LAYOUT_ortho_4x12_bocaj_base(
65 _________________WORKMAN_L1________________, _________________WORKMAN_R1________________,
66 _________________WORKMAN_L2________________, _________________WORKMAN_R2________________,
67 _________________WORKMAN_L3________________, _________________WORKMAN_R3________________
68 ),
69 [_WWORKMAN] = LAYOUT_ortho_4x12_bocaj_base_WIN(
70 _________________WORKMAN_L1________________, _________________WORKMAN_R1________________,
71 _________________WORKMAN_L2________________, _________________WORKMAN_R2________________,
72 _________________WORKMAN_L3________________, _________________WORKMAN_R3________________
73 ),
74
75 [_QWERTY] = LAYOUT_ortho_4x12_bocaj_base(
76 _________________QWERTY_L1_________________, _________________QWERTY_R1_________________,
77 _________________QWERTY_L2_________________, _________________QWERTY_R2_________________,
78 _________________QWERTY_L3_________________, _________________QWERTY_R3_________________
79 ),
80 [_WQWERTY] = LAYOUT_ortho_4x12_bocaj_base_WIN(
81 _________________QWERTY_L1_________________, _________________QWERTY_R1_________________,
82 _________________QWERTY_L2_________________, _________________QWERTY_R2_________________,
83 _________________QWERTY_L3_________________, _________________QWERTY_R3_________________
84 ),
85
86 [_LOWER] = LAYOUT_ortho_4x12_bocaj(
87 ___________________LOWER_L1_EXT____________________, ___________________LOWER_R1_EXT____________________,
88 ___________________LOWER_L2_EXT____________________, ___________________LOWER_R2_EXT____________________,
89 ___________________LOWER_L3_EXT____________________, ___________________LOWER_R3_EXT____________________,
90 _______, _______, _______, _______, _______, _______, _______, KC_0, KC_DOT, KC_COMM, _______, _______
91 ),
92
93 [_RAISE] = LAYOUT_ortho_4x12_bocaj(
94 KC_TILD, _________________RAISE_L1__________________, _________________RAISE_R1__________________, KC_EQUAL,
95 KC_F11, _________________RAISE_L2__________________, _________________RAISE_R2__________________, KC_F12,
96 _______, _________________RAISE_L3__________________, _________________RAISE_R3__________________, _______,
97 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
98 ),
99
100 [_ADJUST] = WRAPPER_ortho_4x12(
101 KC_MAKE, _________________ADJUST_L1_________________, _________________ADJUST_R1_________________, KC_RST,
102 VRSN, _________________ADJUST_L2_________________, _________________ADJUST_R2_________________, EEP_RST,
103 TH_LVL, _________________ADJUST_L3_________________, _________________ADJUST_R3_________________, RGB_IDL,
104 HPT_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
105 )
106
107};
108// clang-format on
109
110bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
111 switch (keycode) {
112#ifdef BACKLIGHT_ENABLE
113 case BACKLIT:
114 if (record->event.pressed) {
115 register_code(KC_RSFT);
116# ifdef BACKLIGHT_ENABLE
117 backlight_step();
118# endif
119 } else {
120 unregister_code(KC_RSFT);
121 }
122 break;
123#endif
124#ifdef KEYBOARD_planck_ez
125 case TH_LVL:
126 if (record->event.pressed) {
127 keyboard_config.led_level++;
128 if (keyboard_config.led_level > 4) {
129 keyboard_config.led_level = 0;
130 }
131 planck_ez_right_led_level((uint8_t)keyboard_config.led_level * 255 / 4);
132 planck_ez_left_led_level((uint8_t)keyboard_config.led_level * 255 / 4);
133 eeconfig_update_kb(keyboard_config.raw);
134 layer_state_set_kb(layer_state);
135 }
136 break;
137#endif
138 }
139 return true;
140}
141
142bool music_mask_user(uint16_t keycode) {
143 switch (keycode) {
144 default:
145 return true;
146 }
147}
148
149#ifdef RGB_MATRIX_ENABLE
150
151// clang-format off
152void suspend_power_down_keymap(void) {
153 rgb_matrix_set_suspend_state(true);
154}
155
156void suspend_wakeup_init_keymap(void) {
157 rgb_matrix_set_suspend_state(false);
158}
159// clang-format on
160
161void rgb_matrix_indicators_user(void) {
162 uint8_t this_mod = get_mods();
163 uint8_t this_led = host_keyboard_leds();
164 uint8_t this_osm = get_oneshot_mods();
165 bool is_ez;
166# ifdef KEYBOARD_planck_ez
167 is_ez = true;
168# endif
169
170 if (g_suspend_state || !rgb_matrix_config.enable) return;
171
172# if defined(RGBLIGHT_ENABLE)
173 if (!userspace_config.rgb_layer_change)
174# else
175 if (userspace_config.rgb_layer_change)
176# endif
177 {
178 switch (get_highest_layer(layer_state)) {
179 case _MOD:
180 rgb_matrix_layer_helper(HSV_ORANGE, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER);
181 break;
182 case _RAISE:
183 rgb_matrix_layer_helper(HSV_BLUE, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER);
184 break;
185 case _LOWER:
186 rgb_matrix_layer_helper(HSV_GREEN, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER);
187 break;
188 case _ADJUST:
189 rgb_matrix_layer_helper(HSV_RED, 1, rgb_matrix_config.speed, LED_FLAG_MODIFIER);
190 break;
191 default: {
192 bool mods_enabled = false;
193 switch (get_highest_layer(default_layer_state)) {
194 case _QWERTY:
195 rgb_matrix_layer_helper(HSV_CYAN, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER);
196 break;
197 case _WQWERTY:
198 rgb_matrix_layer_helper(HSV_BLUE, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER);
199 break;
200 case _WORKMAN:
201 rgb_matrix_layer_helper(HSV_SPRINGGREEN, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER);
202 break;
203 case _WWORKMAN:
204 rgb_matrix_layer_helper(HSV_GREEN, mods_enabled, rgb_matrix_config.speed, LED_FLAG_MODIFIER);
205 break;
206 }
207 break;
208 }
209 }
210 }
211
212 switch (get_highest_layer(default_layer_state)) {
213 case _QWERTY:
214 rgb_matrix_set_color(is_ez ? 41 : 42, 0x00, 0xFF, 0xFF);
215 break;
216 case _WORKMAN:
217 rgb_matrix_set_color(is_ez ? 41 : 42, 0xD9, 0xA5, 0x21);
218 break;
219 }
220
221 if ((this_mod | this_osm) & MODS_SHIFT_MASK || this_led & (1 << USB_LED_CAPS_LOCK)) {
222 rgb_matrix_set_color_row(0, 0x00, 0xFF, 0x00);
223 }
224 if ((this_mod | this_osm) & MODS_CTRL_MASK && (this_mod | this_osm) & MODS_GUI_MASK) {
225 rgb_matrix_set_color_row(1, 0xFF, 0xD9, 0xFF);
226 } else if ((this_mod | this_osm) & MODS_CTRL_MASK) {
227 rgb_matrix_set_color_row(1, 0xFF, 0x00, 0x00);
228 } else if ((this_mod | this_osm) & MODS_GUI_MASK) {
229 rgb_matrix_set_color_row(1, 0xFF, 0xD9, 0x00);
230 }
231 if ((this_mod | this_osm) & MODS_ALT_MASK) {
232 rgb_matrix_set_color_row(2, 0x00, 0x00, 0xFF);
233 }
234}
235#endif // RGB_MATRIX_INIT
236
237void matrix_init_keymap(void) {}
238
239#ifdef ENCODER_ENABLE
240bool encoder_update_user(uint8_t index, bool clockwise) {
241 switch (get_highest_layer(layer_state)) {
242 case _RAISE:
243 clockwise ? tap_code(KC_VOLD) : tap_code(KC_VOLU);
244 break;
245 case _LOWER:
246# ifdef RGB_MATRIX_ENABLE
247 clockwise ? rgb_matrix_step() : rgb_matrix_step_reverse();
248# else
249 clockwise ? tap_code(KC_PGDN) : tap_code(KC_PGUP);
250# endif
251 break;
252 case _ADJUST:
253# ifdef AUDIO_CLICKY
254 clockwise ? clicky_freq_up() : clicky_freq_down();
255# endif
256 break;
257 default:
258 clockwise ? tap_code(KC_DOWN) : tap_code(KC_UP);
259 }
260# ifdef AUDIO_CLICKY
261 clicky_play();
262# endif
263 return true;
264}
265#endif // ENCODER_ENABLE
266
267#ifdef KEYBOARD_planck_ez
268layer_state_t layer_state_set_keymap(layer_state_t state) {
269 planck_ez_left_led_off();
270 planck_ez_right_led_off();
271 switch (get_highest_layer(state)) {
272 case _LOWER:
273 planck_ez_left_led_on();
274 break;
275 case _RAISE:
276 planck_ez_right_led_on();
277 break;
278 case _ADJUST:
279 planck_ez_right_led_on();
280 planck_ez_left_led_on();
281 break;
282 default:
283 break;
284 }
285 return state;
286}
287#endif
diff --git a/layouts/community/ortho_4x12/bocaj/readme.md b/layouts/community/ortho_4x12/bocaj/readme.md
deleted file mode 100644
index a3716b8dc..000000000
--- a/layouts/community/ortho_4x12/bocaj/readme.md
+++ /dev/null
@@ -1,23 +0,0 @@
1# Overview
2
3This is my Planck EZ layout, heavily based upon [my ergodox layout](../../ergodox/bocaj/).
4
5I got this keyboard for two reasons:
6
71. QMK spoiled me and the Ergodox isn't incredibly portable (ok 3 reasons)
82. This can sit ontop of my janky Macbook Pro keyboard (disabled with Karabiner if the planck is connected) when I want to work from the couch.
9
10## How to Build
11
12Put simply:
13`make planck/ez:bocaj`
14
15On that note, I use a separate workspace when making changes to my layouts or userspace. In that repo, there is a tool that does this for me. See [JacobJerrell/qmk_layouts/tools/](https://github.com/JacobJerrell/qmk_layouts/tree/master/tools) until I get documentation finished (Write code first, define requirements second... right?).
16
17## Layers
18
19* WORKMAN/QWERTY: Default is workman, can be switched via the ADJUST layer. Idk why you would though.
20* LOWER: Nums across the top, switches enter key to tab and tab key to delete. Symbols in the middle, remenascent of the ergodox
21* RAISE: Symbols across the top, F-Keys on the 2nd row. Switches backspace to delete
22* ADJUST: Computer Audio controls, RGB controls, Sound controls, macros, etc.
23* MOD: Mouse controls under the left hand. Numpad under the right hand \ No newline at end of file
diff --git a/layouts/community/ortho_4x12/bocaj/rules.mk b/layouts/community/ortho_4x12/bocaj/rules.mk
deleted file mode 100644
index 5c642e65c..000000000
--- a/layouts/community/ortho_4x12/bocaj/rules.mk
+++ /dev/null
@@ -1,43 +0,0 @@
1BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration(+1000)
2MOUSEKEY_ENABLE = no # Mouse keys(+4700)
3EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
4TAP_DANCE_ENABLE = no
5SPACE_CADET_ENABLE = no
6NKRO_ENABLE = yes
7
8ifneq ($(strip $(KEYBOARD)), planck/rev6)
9 CONSOLE_ENABLE = no
10 COMMAND_ENABLE = no
11 ifeq ($(strip $(LAYOUT_HAS_RGB)), yes)
12 RGBLIGHT_ENABLE = yes
13 INDICATOR_LIGHTS = yes
14 RGBLIGHT_TWINKLE = yes
15 RGBLIGHT_STARTUP_ANIMATION = yes
16 endif
17else
18 CONSOLE_ENABLE = yes
19 COMMAND_ENABLE = yes
20 RGBLIGHT_ENABLE = yes
21 RGBLIGHT_STARTUP_ANIMATION = yes
22 RGB_MATRIX_ENABLE = no
23 AUDIO_ENABLE = yes
24 EEPROM_DRIVER = i2c
25endif
26ifeq ($(strip $(KEYBOARD)), planck/light)
27 RGB_MATRIX_ENABLE = yes
28 RGBLIGHT_ENABLE = yes
29 RGBLIGHT_STARTUP_ANIMATION = yes
30 AUDIO_ENABLE = yes
31 # HAPTIC_ENABLE += SOLENOID
32endif
33ifeq ($(strip $(KEYBOARD)), planck/ez)
34 RGBLIGHT_ENABLE = no
35 ENCODER_ENABLE = yes
36 RGB_MATRIX_ENABLE = IS31FL3737
37 INDICATOR_LIGHTS = yes
38 RGBLIGHT_TWINKLE = yes
39 RGBLIGHT_STARTUP_ANIMATION = yes
40 CONSOLE_ENABLE = yes
41 COMMAND_ENABLE = yes
42 AUDIO_ENABLE = yes
43endif
diff --git a/layouts/community/ortho_4x12/jjerrell/config.h b/layouts/community/ortho_4x12/jjerrell/config.h
new file mode 100644
index 000000000..aee885b8d
--- /dev/null
+++ b/layouts/community/ortho_4x12/jjerrell/config.h
@@ -0,0 +1,57 @@
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
20// Allows time for repositioning hands due to awkward key placement
21#define LEADER_NO_TIMEOUT
22
23#ifdef AUDIO_ENABLE
24 #define STARTUP_SONG SONG(PLANCK_SOUND)
25 // #define STARTUP_SONG SONG(NO_SOUND)
26
27 #define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
28 SONG(COLEMAK_SOUND), \
29 SONG(DVORAK_SOUND) \
30 }
31#endif
32
33#ifdef KEYBOARD_planck_ez_glow
34#undef PRODUCT
35#define PRODUCT Planck EZ Glow - Modified by <@jjerrell>
36#endif
37
38/*
39 * MIDI options
40 */
41
42/* enable basic MIDI features:
43 - MIDI notes can be sent when in Music mode is on
44*/
45
46#define MIDI_BASIC
47
48/* enable advanced MIDI features:
49 - MIDI notes can be added to the keymap
50 - Octave shift and transpose
51 - Virtual sustain, portamento, and modulation wheel
52 - etc.
53*/
54//#define MIDI_ADVANCED
55
56// Most tactile encoders have detents every 4 stages
57#define ENCODER_RESOLUTION 4
diff --git a/layouts/community/ortho_4x12/jjerrell/keymap.c b/layouts/community/ortho_4x12/jjerrell/keymap.c
new file mode 100644
index 000000000..d873907e9
--- /dev/null
+++ b/layouts/community/ortho_4x12/jjerrell/keymap.c
@@ -0,0 +1,227 @@
1/* Copyright 2015-2017 Jack Humbert
2 * Copyright 2021 Jacob Jerrell <@jjerrell>
3 *
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#include "jjerrell.h"
19
20enum planck_layers {
21 _GAME_LOWER = LAYER_SAFE_RANGE,
22 // _GAME_RAISE,
23};
24
25#define LAYOUT_planck_plain(...) WRAPPER_ortho_4x12(__VA_ARGS__)
26
27// clang-format off
28const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
29 [_WORKMAN] = LAYOUT_planck_base(
30 __________________WORKMN_L1__________________, __________________WORKMN_R1__________________,
31 __________________WORKMN_L2__________________, __________________WORKMN_R2__________________,
32 __________________WORKMN_L3__________________, __________________WORKMN_R3__________________
33 ),
34 /* Lower - Nav/Select/Nums
35 * ,-----------------------------------------------------------------------------------.
36 * | PGUP | BSPC | UP | DEL | PGDN | | | | 7 | 8 | 9 | * |
37 * |------+------+------+------+------+------+------+------+------+------+------+------|
38 * | HOME | LEFT | DOWN | RGHT | END | | | | 4 | 5 | 6 | / |
39 * |------+------+------+------+------+------+------+------+------+------+------+------|
40 * | ESC | TAB | | ENTR | | | | | 1 | 2 | 3 | - |
41 * |------+------+------+------+------+------+------+------+------+------+------+------|
42 * | | | | | held | SPACE | ENTR | 0 | . | , | + |
43 * `-----------------------------------------------------------------------------------'
44 */
45 [_LOWER] = LAYOUT_planck_mods(
46 __________________LOWER_L1___________________, XXXXXXX, XXXXXXX, __________________LOWER_R1___________________,
47 __________________LOWER_L2___________________, XXXXXXX, XXXXXXX, __________________LOWER_R2___________________,
48 __________________LOWER_L3___________________, XXXXXXX, XXXXXXX, __________________LOWER_R3___________________,
49 _________________________________________PLANCK_LOWER_BOTTOM_ROW_________________________________________
50 ),
51 /* Raise - Symbols
52 * ,-----------------------------------------------------------------------------------.
53 * | % | _ | [ | ] | ^ | | | ! | < | > | = | : |
54 * |------+------+------+------+------+------+------+------+------+------+------+------|
55 * | \ | / | { | } | * | | | ? | ( | ) | - | ; |
56 * |------+------+------+------+------+------+------+------+------+------+------+------|
57 * | # | $ | | | ~ | ` | | | @ | " | ' | + | & |
58 * |------+------+------+------+------+------+------+------+------+------+------+------|
59 * | | LEAD | | | BSPC | SPACE | held | | | | |
60 * `-----------------------------------------------------------------------------------'
61 */
62 [_RAISE] = LAYOUT_planck_common(
63 __________________RAISE_L1___________________, __________________RAISE_R1___________________,
64 __________________RAISE_L2___________________, __________________RAISE_R2___________________,
65 __________________RAISE_L3___________________, __________________RAISE_R3___________________
66 ),
67 /* Adjust (Lower + Raise)
68 * ,-----------------------------------------------------------------------------------.
69 * | Make | Debug|Reset |TermOn|TrmOff| | |MusMod|Mus On|MusOff|MidiOn|MidOff|
70 * |------+------+------+------+------+------+------+------+------+------+------+------|
71 * | Mute | Vol- | Vol+ | Play | Skip | | |Voice-| HUE+ | HUE- | SAT+ | SAT- |
72 * |------+------+------+------+------+------+------+------+------+------+------+------|
73 * | Vrsn | AudOn|AudOff|CGswap|CGnorm| | |Voice+|RGBTog|RGBMod|BRGHT+|BRGHT-|
74 * |------+------+------+------+------+------+------+------+------+------+------+------|
75 * | | | | | held | | held | | | | |
76 * `-----------------------------------------------------------------------------------'
77 */
78 [_ADJUST] = LAYOUT_planck_common(
79 __________________ADJUST_L1__________________, __________________ADJUST_R1__________________,
80 __________________ADJUST_L2__________________, __________________ADJUST_R2__________________,
81 __________________ADJUST_L3__________________, __________________ADJUST_R3__________________
82 ),
83 [_GAME] = LAYOUT_planck_plain(
84 __________________QWERTY_L1__________________, _______, _______, XXXXXXX, KC_9, KC_0, KC_MINS, KC_EQL,
85 __________________QWERTY_L2__________________, XXXXXXX, XXXXXXX, XXXXXXX, KC_5, KC_6, KC_7, KC_8,
86 __________________QWERTY_L3__________________, XXXXXXX, XXXXXXX, XXXXXXX, KC_1, KC_2, KC_3, KC_4,
87 KC_LSFT, KC_LGUI, KC_LALT, KC_LCTL, LT(_LOWER, KC_BSPC), KC_SPC, XXXXXXX, LT(_WORKMAN, KC_ENT), MACRO_1, MACRO_2, MACRO_3, MACRO_4
88 ),
89 [_GAME_LOWER] = LAYOUT_planck_plain(
90 _______, _______, _______, _______, _______, _______, _______, _______, C(_______), C(_______), C(_______), C(_______),
91 _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, _______, C(_______), C(_______), C(_______), C(_______),
92 _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, _______, C(_______), C(_______), C(_______), C(_______),
93 MACRO_1, MACRO_2, MACRO_3, MACRO_4, _______, _______, XXXXXXX, _______, MACRO_5, MACRO_6, MACRO_7, MACRO_8
94 )
95
96};
97// clang-format on
98
99bool muse_mode = false;
100uint8_t last_muse_note = 0;
101uint16_t muse_counter = 0;
102uint8_t muse_offset = 70;
103uint16_t muse_tempo = 50;
104
105#ifdef KEYBOARD_planck_ez
106void planck_ez_teeth_set(layer_state_t state) {
107 switch (get_highest_layer(state)) {
108 case _LOWER:
109 planck_ez_left_led_level(40);
110 break;
111 case _RAISE:
112 planck_ez_right_led_level(40);
113 break;
114 case _ADJUST:
115 planck_ez_left_led_level(40);
116 planck_ez_right_led_level(40);
117 break;
118 case _GAME_LOWER:
119 planck_ez_left_led_level(20);
120 break;
121// todo case _GAME_RAISE:
122 // planck_ez_right_led_level(20);
123 // break;
124 case _WORKMAN:
125 if (IS_LAYER_ON(_GAME)) {
126 planck_ez_left_led_level(60);
127 planck_ez_right_led_level(60);
128 break;
129 }
130 default:
131 planck_ez_left_led_off();
132 planck_ez_right_led_off();
133 break;
134 }
135}
136
137layer_state_t layer_state_set_keymap(layer_state_t state) {
138 planck_ez_left_led_off();
139 planck_ez_right_led_off();
140 state = update_tri_layer_state(state, _GAME, _LOWER, _GAME_LOWER);
141 planck_ez_teeth_set(state);
142 return state;
143}
144#endif
145
146bool encoder_update(bool clockwise) {
147 if (muse_mode) {
148 if (IS_LAYER_ON(_RAISE)) {
149 if (clockwise) {
150 muse_offset++;
151 } else {
152 muse_offset--;
153 }
154 } else {
155 if (clockwise) {
156 muse_tempo+=1;
157 } else {
158 muse_tempo-=1;
159 }
160 }
161 } else {
162 if (clockwise) {
163# ifdef MOUSEKEY_ENABLE
164 tap_code(KC_MS_WH_DOWN);
165# else
166 tap_code(KC_PGDN);
167# endif
168 } else {
169# ifdef MOUSEKEY_ENABLE
170 tap_code(KC_MS_WH_UP);
171# else
172 tap_code(KC_PGUP);
173# endif
174 }
175 }
176 return true;
177}
178
179void dip_switch_update_keymap(uint8_t index, bool active) {
180 switch (index) {
181 case 0: {
182 if (active) {
183 layer_on(_ADJUST);
184 } else {
185 layer_off(_ADJUST);
186 }
187 break;
188 }
189 case 1:
190 if (active) {
191 muse_mode = true;
192 } else {
193 muse_mode = false;
194 }
195 }
196}
197
198#ifdef AUDIO_ENABLE
199void matrix_scan_keymap(void) {
200 if (muse_mode) {
201 if (muse_counter == 0) {
202 uint8_t muse_note = muse_offset + SCALE[muse_clock_pulse()];
203 if (muse_note != last_muse_note) {
204 stop_note(compute_freq_for_midi_note(last_muse_note));
205 play_note(compute_freq_for_midi_note(muse_note), 0xF);
206 last_muse_note = muse_note;
207 }
208 }
209 muse_counter = (muse_counter + 1) % muse_tempo;
210 } else {
211 if (muse_counter) {
212 stop_all_notes();
213 muse_counter = 0;
214 }
215 }
216}
217#endif
218
219bool music_mask_keymap(uint16_t keycode) {
220 switch (keycode) {
221 case _RAISE:
222 case _LOWER:
223 return false;
224 default:
225 return true;
226 }
227}
diff --git a/layouts/community/ortho_4x12/jjerrell/readme.md b/layouts/community/ortho_4x12/jjerrell/readme.md
new file mode 100644
index 000000000..ec947ea35
--- /dev/null
+++ b/layouts/community/ortho_4x12/jjerrell/readme.md
@@ -0,0 +1,7 @@
1# JJerrell's Planck EZ Layout
2
3As with my other keymaps, this layout is a close adaptation of the Neo keyboard. Obvious differences are that the alpha keymap is Workman and if you're already used to the secondary layers of the Neo keymap, this might be very uncomfortable for you because of slight variations.
4
5The keymap has been setup to pretty much remove the center columns above the spacebar and limit use of the bottom row by supplying paths to removed functionality that are simpler to process mentally and require less finger acrobatics.
6
7My ownership of this keyboard could not have been easily predicted because my original justification of this hobby was health related. I found QMK through the Ergodox EZ and this keyboard is a result of that discovery -- I could not live without some QMK features. As you can see, my problem has come full circle... now I use this keyboard when I'm not at a desk and it's tiny. This is offset by eliminating use of the center columns, relying on a symbol layer almost exclusively, and relying on a navigation layer instead of getting by with the minimum on the alpha layers which became uncomfortable even with the thumbs doing the heavy lifting and mods being comfortably placed on the home row.
diff --git a/layouts/community/ortho_4x12/jjerrell/rules.mk b/layouts/community/ortho_4x12/jjerrell/rules.mk
new file mode 100644
index 000000000..39f31a266
--- /dev/null
+++ b/layouts/community/ortho_4x12/jjerrell/rules.mk
@@ -0,0 +1,8 @@
1SRC += muse.c
2
3BOOTMAGIC_ENABLE = lite
4MOUSEKEY_ENABLE = no
5EXTRAKEY_ENABLE = yes
6TAP_DANCE_ENABLE = no
7SPACE_CADET_ENABLE = no
8NKRO_ENABLE = no
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