summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--keyboards/gherkin/keymaps/wanleg/config.h24
-rw-r--r--keyboards/gherkin/keymaps/wanleg/keymap.c218
-rw-r--r--keyboards/gherkin/keymaps/wanleg/rules.mk7
-rw-r--r--layouts/community/ortho_3x10/layout.json3
-rw-r--r--layouts/community/ortho_3x10/readme.md3
-rw-r--r--layouts/community/ortho_3x10/wanleg/config.h9
-rw-r--r--layouts/community/ortho_3x10/wanleg/keymap.c29
-rw-r--r--layouts/community/ortho_3x10/wanleg/readme.md (renamed from keyboards/gherkin/keymaps/wanleg/readme.md)13
-rw-r--r--layouts/community/ortho_3x10/wanleg/rules.mk3
-rw-r--r--layouts/community/ortho_4x12/wanleg/config.h15
-rw-r--r--layouts/community/ortho_4x12/wanleg/keymap.c67
-rw-r--r--layouts/community/ortho_4x12/wanleg/readme.md24
-rw-r--r--layouts/community/ortho_4x12/wanleg/rules.mk6
-rw-r--r--layouts/community/ortho_5x15/wanleg/config.h3
-rw-r--r--layouts/community/ortho_5x15/wanleg/keymap.c176
-rw-r--r--layouts/community/ortho_5x15/wanleg/rules.mk1
-rw-r--r--users/wanleg/config.h32
-rw-r--r--users/wanleg/readme.md14
-rw-r--r--users/wanleg/rules.mk19
-rw-r--r--users/wanleg/tapdances.c110
-rw-r--r--users/wanleg/wanleg.c158
-rw-r--r--users/wanleg/wanleg.h308
22 files changed, 985 insertions, 257 deletions
diff --git a/keyboards/gherkin/keymaps/wanleg/config.h b/keyboards/gherkin/keymaps/wanleg/config.h
deleted file mode 100644
index 98e2b23380..0000000000
--- a/keyboards/gherkin/keymaps/wanleg/config.h
+++ /dev/null
@@ -1,24 +0,0 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
-#endif
-
-#define PREVENT_STUCK_MODIFIERS
-
-//Tap Dance Prerequisite
-#define TAPPING_TERM 200
-
-//Mousekeys Settings
-#define MOUSEKEY_INTERVAL 16
-#define MOUSEKEY_DELAY 0
-#define MOUSEKEY_TIME_TO_MAX 60
-#define MOUSEKEY_MAX_SPEED 7
-#define MOUSEKEY_WHEEL_DELAY 0
-
-/* for QMK DFU bootloader */
-/* not required if using default ProMicro bootloader */
-/* set top left key as bootloader mode escape key */
-#define QMK_ESC_OUTPUT B4 // usually COL
-#define QMK_ESC_INPUT F7 // usually ROW
-#define QMK_LED B0 \ No newline at end of file
diff --git a/keyboards/gherkin/keymaps/wanleg/keymap.c b/keyboards/gherkin/keymaps/wanleg/keymap.c
deleted file mode 100644
index 108ed40e53..0000000000
--- a/keyboards/gherkin/keymaps/wanleg/keymap.c
+++ /dev/null
@@ -1,218 +0,0 @@
-/* Copyright 2017 Brian Fong
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-#include QMK_KEYBOARD_H
-
-// Each layer gets a name for readability, which is then used in the keymap matrix below.
-// The underscores don't mean anything - you can have a layer called STUFF or any other name.
-// Layer names don't all need to be of the same length, obviously, and you can also skip them
-// entirely and just use numbers.
-#define _QW 0
-#define DIR 1
-#define NUM 2
-#define ETC 3
-
-// Readability keycodes
-#define _______ KC_TRNS
-
-
-/////////////// TAP DANCE SECTION START ///////////////
-//Tap Dance Declarations (list of my tap dance configurations)
-enum {
- TD_SFT_CAPS = 0
- ,TD_Q_ESC
- ,ENT_TAP_DANCE
- ,DEL_TAP_DANCE
-};
-
-///// QUAD FUNCTION TAP DANCE GENERAL SETUP SECTION START /////
-///// (no need to edit this section) /////
-//Enums used to clearly convey the state of the tap dance
-enum {
- SINGLE_TAP = 1,
- SINGLE_HOLD = 2,
- DOUBLE_TAP = 3,
- DOUBLE_HOLD = 4,
- DOUBLE_SINGLE_TAP = 5 //send SINGLE_TAP twice - NOT DOUBLE_TAP
- // Add more enums here if you want for triple, quadruple, etc.
-};
-
-typedef struct {
- bool is_press_action;
- int state;
-} tap;
-
-int cur_dance (qk_tap_dance_state_t *state) {
- if (state->count == 1) {
- //If count = 1, and it has been interrupted - it doesn't matter if it is pressed or not: Send SINGLE_TAP
- if (state->interrupted || !state->pressed) return SINGLE_TAP;
- if (state->interrupted) return SINGLE_TAP;
- else return SINGLE_HOLD;
- }
- //If count = 2, and it has been interrupted - assume that user is trying to type the letter associated
- //with single tap.
- else if (state->count == 2) {
- if (state->interrupted) return DOUBLE_SINGLE_TAP;
- else if (state->pressed) return DOUBLE_HOLD;
- else return DOUBLE_TAP;
- }
- else return 6; //magic number. At some point this method will expand to work for more presses
-}
-///// QUAD FUNCTION TAP DANCE GENERAL SETUP SECTION END /////
-///// QUAD FUNCTION TAP DANCE PERSONALIZATION SECTION START /////
-//instantialize an instance of 'tap' for the 'ENT' tap dance.
-static tap ENTtap_state = {
- .is_press_action = true,
- .state = 0
-};
-
-void ENT_finished (qk_tap_dance_state_t *state, void *user_data) {
- ENTtap_state.state = cur_dance(state);
- switch (ENTtap_state.state) {
- case SINGLE_TAP: register_code(KC_SPC); break;
- case SINGLE_HOLD: register_code(KC_LSFT); break;
- case DOUBLE_TAP: register_code(KC_ENT); break;
- case DOUBLE_HOLD: register_code(KC_NO); break; // setting double hold to do nothing (change this if you want)
- case DOUBLE_SINGLE_TAP: register_code(KC_SPC); unregister_code(KC_SPC); register_code(KC_SPC);
- //Last case is for fast typing. Assuming your key is `f`:
- //For example, when typing the word `buffer`, and you want to make sure that you send `ff` and not `Esc`.
- //In order to type `ff` when typing fast, the next character will have to be hit within the `TAPPING_TERM`, which by default is 200ms.
- }
-}
-
-void ENT_reset (qk_tap_dance_state_t *state, void *user_data) {
- switch (ENTtap_state.state) {
- case SINGLE_TAP: unregister_code(KC_SPC); break;
- case SINGLE_HOLD: unregister_code(KC_LSFT); break;
- case DOUBLE_TAP: unregister_code(KC_ENT); break;
- case DOUBLE_HOLD: unregister_code(KC_NO);
- case DOUBLE_SINGLE_TAP: unregister_code(KC_SPC);
- }
- ENTtap_state.state = 0;
-}
-
-//instanalize an instance of 'tap' for the 'DEL' tap dance.
-static tap DELtap_state = {
- .is_press_action = true,
- .state = 0
-};
-
-void DEL_finished (qk_tap_dance_state_t *state, void *user_data) {
- DELtap_state.state = cur_dance(state);
- switch (DELtap_state.state) {
- case SINGLE_TAP: register_code(KC_BSPC); break;
- case SINGLE_HOLD: register_code(KC_LCTL); break;
- case DOUBLE_TAP: register_code(KC_DEL); break;
- case DOUBLE_HOLD: register_code(KC_NO); break;
- case DOUBLE_SINGLE_TAP: register_code(KC_BSPC); unregister_code(KC_BSPC); register_code(KC_BSPC);
- }
-}
-
-void DEL_reset (qk_tap_dance_state_t *state, void *user_data) {
- switch (DELtap_state.state) {
- case SINGLE_TAP: unregister_code(KC_BSPC); break;
- case SINGLE_HOLD: unregister_code(KC_LCTL); break;
- case DOUBLE_TAP: unregister_code(KC_DEL); break;
- case DOUBLE_HOLD: unregister_code(KC_NO);
- case DOUBLE_SINGLE_TAP: unregister_code(KC_BSPC);
- }
- DELtap_state.state = 0;
-}
-///// QUAD FUNCTION TAP DANCE PERSONALIZATION SECTION END /////
-
-//Tap Dance Definitions
-//THIS SECTION HAS TO BE AT THE END OF THE TAP DANCE SECTION
-qk_tap_dance_action_t tap_dance_actions[] = {
- [TD_SFT_CAPS] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPS)
-// Other declarations would go here, separated by commas, if you have them
- ,[TD_Q_ESC] = ACTION_TAP_DANCE_DOUBLE(KC_Q, KC_ESC)
- ,[ENT_TAP_DANCE] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ENT_finished, ENT_reset)
- ,[DEL_TAP_DANCE] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, DEL_finished, DEL_reset)
-};
-
-//In Layer declaration, add tap dance item in place of a key code
-//TD(TD_SFT_CAPS)
-
-///////////// TAP DANCE SECTION END ///////////////
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- /* Qwerty
- * .-----------------------------------------------------------------------------------------.
- * | Q//ESC | W | E | R | T | Y | U | I | O | P |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | A | S | D | F | G | H | J | K | L | SPACE |
- * | | | | | | | | | |SFThold |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | Z | X | C | V/NUM | B/ETC | N | M/DIR | ,/GUI | ./ALT | BKSC |
- * | SFThold| | | | | | | | |CTRLhold|
- * '-----------------------------------------------------------------------------------------'
- */
- [_QW] = LAYOUT_ortho_3x10( /* Qwerty*/
- TD(TD_Q_ESC), KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
- KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, SFT_T(KC_SPC),
- SFT_T(KC_Z), KC_X, KC_C, LT(NUM, KC_V), LT(ETC, KC_B), KC_N, LT(DIR, KC_M), GUI_T(KC_COMM), ALT_T(KC_DOT), CTL_T(KC_BSPC)
- ),
-
- /*
- * Directional Modifiers
- * .-----------------------------------------------------------------------------------------.
- * | TAB | up | | INS | CTRL | SHIFT | PgUp | HOME | - | = |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | left | down | right | PrScr | SHIFT | CTRL | PgDn | END | [ | ] |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | P-Brk | | | | | | | RGUI | ALT | / |
- * '-----------------------------------------------------------------------------------------'
- */
- [DIR] = LAYOUT_ortho_3x10( /* Directional Modifiers */
- KC_TAB, KC_UP, _______, KC_INS, KC_LCTL, KC_RSFT, KC_PGUP, KC_HOME, KC_MINS, KC_EQL,
- KC_LEFT, KC_DOWN, KC_RGHT, KC_PSCR, KC_LSFT, KC_RCTL, KC_PGDN, KC_END, KC_LBRC, KC_RBRC,
- KC_PAUS, _______, _______, _______, _______, _______, _______, KC_RGUI, KC_LALT, KC_SLSH
- ),
-
- /*
- * Numbers
- * .-----------------------------------------------------------------------------------------.
- * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | F11 | F12 | | | | ENTER | SHIFT | GUI | ./ALT | BKSC |
- * | | | | | | | | | |CTRLhold|
- * '-----------------------------------------------------------------------------------------'
- */
- [NUM] = LAYOUT_ortho_3x10 ( /* Numbers */
- KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
- KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
- KC_F11, KC_F12, _______, _______, _______, KC_ENT, KC_RSFT, KC_RGUI, ALT_T(KC_DOT), CTL_T(KC_BSPC)
- ),
-
- /*
- * ETC
- * .-----------------------------------------------------------------------------------------.
- * | ` | mUP | | | RESET | SHIFT | mUp | mDown | | \ |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | mLeft | mDown | mRight | | SHIFT | mBtn3 | mBtn1 | mBtn2 | ; | ' |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | Sft//Cp| | | | | C-A-D | mLeft | mRight | ALT | DEL |
- * '-----------------------------------------------------------------------------------------'
- */
- [ETC] = LAYOUT_ortho_3x10( /* ETC */
- KC_GRV, KC_MS_U, _______, _______, RESET, KC_RSFT, KC_WH_U, KC_WH_D, _______, KC_BSLS,
- KC_MS_L, KC_MS_D, KC_MS_R, _______, KC_LSFT, KC_BTN3, KC_BTN1, KC_BTN2, KC_SCLN, KC_QUOT,
- TD(TD_SFT_CAPS), _______, _______, _______, _______, LALT(LCTL(KC_DEL)), KC_WH_L, KC_WH_R, KC_LALT, KC_DEL
- ),
-
-};
diff --git a/keyboards/gherkin/keymaps/wanleg/rules.mk b/keyboards/gherkin/keymaps/wanleg/rules.mk
deleted file mode 100644
index 7f2ff33277..0000000000
--- a/keyboards/gherkin/keymaps/wanleg/rules.mk
+++ /dev/null
@@ -1,7 +0,0 @@
-TAP_DANCE_ENABLE = yes # Enable Tap Dance (comment if not being implemented)
-
-#If ProMicro has QMK DFU bootloader instead of Caterina,
-#run "make <keyboard>:<keymap> dfu=qmk" when compiling to ensure it is flagged properly after being flashed
-ifeq ($(strip $(dfu)), qmk)
- BOOTLOADER = qmk-dfu
-endif \ No newline at end of file
diff --git a/layouts/community/ortho_3x10/layout.json b/layouts/community/ortho_3x10/layout.json
new file mode 100644
index 0000000000..6600f32a6a
--- /dev/null
+++ b/layouts/community/ortho_3x10/layout.json
@@ -0,0 +1,3 @@
+["","","","","","","","","",""],
+["","","","","","","","","",""],
+["","","","","","","","","",""]
diff --git a/layouts/community/ortho_3x10/readme.md b/layouts/community/ortho_3x10/readme.md
new file mode 100644
index 0000000000..e0a31cdf63
--- /dev/null
+++ b/layouts/community/ortho_3x10/readme.md
@@ -0,0 +1,3 @@
+# ortho_3x10
+
+ LAYOUT_ortho_3x10
diff --git a/layouts/community/ortho_3x10/wanleg/config.h b/layouts/community/ortho_3x10/wanleg/config.h
new file mode 100644
index 0000000000..6719a4591e
--- /dev/null
+++ b/layouts/community/ortho_3x10/wanleg/config.h
@@ -0,0 +1,9 @@
+#pragma once
+
+//QMK DFU settings (ProMicro boards)
+// set top left key as bootloader mode escape key on Gherkin
+#if defined(KEYBOARD_gherkin)
+#define QMK_LED B0
+#define QMK_ESC_OUTPUT B4 // usually COL
+#define QMK_ESC_INPUT F7 // usually ROW
+#endif
diff --git a/layouts/community/ortho_3x10/wanleg/keymap.c b/layouts/community/ortho_3x10/wanleg/keymap.c
new file mode 100644
index 0000000000..44be300a41
--- /dev/null
+++ b/layouts/community/ortho_3x10/wanleg/keymap.c
@@ -0,0 +1,29 @@
+#include QMK_KEYBOARD_H
+#include "wanleg.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[gGK] = LAYOUT_ortho_3x10_wrapper(
+ _______________Gherkin_Row_0_______________,
+ _______________Gherkin_Row_1_______________,
+ _______________Gherkin_Row_2_______________
+),
+
+[gNUM] = LAYOUT_ortho_3x10_wrapper(
+ _______________Gherkin_NUM_0_______________,
+ _______________Gherkin_NUM_1_______________,
+ _______________Gherkin_NUM_2_______________
+),
+
+[gDIR] = LAYOUT_ortho_3x10_wrapper(
+ _______________Gherkin_DIR_0_______________,
+ _______________Gherkin_DIR_1_______________,
+ _______________Gherkin_DIR_2_______________
+),
+
+[gETC] = LAYOUT_ortho_3x10_wrapper(
+ _______________Gherkin_ETC_0_______________,
+ _______________Gherkin_ETC_1_______________,
+ _______________Gherkin_ETC_2_______________
+),
+
+};
diff --git a/keyboards/gherkin/keymaps/wanleg/readme.md b/layouts/community/ortho_3x10/wanleg/readme.md
index 0b1b099c4a..ef6c1f9dbb 100644
--- a/keyboards/gherkin/keymaps/wanleg/readme.md
+++ b/layouts/community/ortho_3x10/wanleg/readme.md
@@ -1,7 +1,7 @@
![Gherkin Wanleg Layout Image](https://i.imgur.com/nCPog2W.png)
# Gherkin Wanleg Layout
-This is the layout I came up with to preserve a standard QWERTY 104 key ANSI layout as much as possible, in as few layers as possible for a 30 key board.
-I originally set up a few Tap Dance keys, but dropped half of them in favor of chorded versions since in actual use, they tended to impede typing speed more than their current two-key versions.
+This is the layout I came up with to preserve a standard QWERTY 104 key ANSI layout as much as possible, in as few layers as possible for a 30 key board.
+I originally set up a few Tap Dance keys, but dropped half of them in favor of chorded versions since in actual use, they tended to impede typing speed more than their current two-key versions.
I've left them in my `keymap.c` ready for use if anyone wants to try them out:
Legend Name | Single Tap | Double Tap | Hold
@@ -57,7 +57,7 @@ The instructions below have been adapted from https://www.reddit.com/r/olkb/comm
| 5V | VCC |
## Make the QMK DFU .hex
-3. In `config.h` add the following. This is already set up in `qmk_firmware/keyboards/gherkin/wanleg`. You only need to do this on other keymaps.
+3. In `config.h` add the following. This is already set up in `qmk_firmware/layouts/community/ortho_3x10/wanleg`. You only need to do this on other keymaps.
```
#define QMK_ESC_OUTPUT B4
#define QMK_ESC_INPUT F7
@@ -68,12 +68,10 @@ You hit the bootloader escape key to exit bootloader mode after you've hit the R
On a Gherkin, B4/F7 corresponds to the top-left corner key.
`B0` is an indicator light on one of the ProMicro's onboard LEDs. With QMK DFU, it will flash to indicate the ProMicro is in bootloader mode.
You can add `#define QMK_SPEAKER C6` if you have a speaker hooked up to pin C6. The Gherkin PCB already uses pin C6 in its switch layout, so you cannot use a speaker on a standard Gherkin.
-4. Also, you should add `BOOTLOADER = qmk-dfu` to your `rules.mk` file, so it is flagged properly. Again, this is already set up in `qmk_firmware/keyboards/gherkin/wanleg`.
+4. Also, you should add `BOOTLOADER = qmk-dfu` to your `rules.mk` file, so it is flagged properly. Again, this is already set up in `qmk_firmware/layouts/community/ortho_3x10/wanleg`.
5. Once you've made the required edits, it's time to compile the firmware. If you use the `:production` target when compiling, it will produce the usual `.hex` file as well as `_bootloader.hex` and `_production.hex` files. The `_production.hex` will be what we want. This contains the bootloader and the firmware, so we only have to flash once (rather than flash the bootloader, and THEN flash the firmware).
For example
`make <keyboard>:<keymap>:production`
-For my particular keymap, for reasons listed in the **Using QMK DFU** section, you should use the following to ensure the bootloader is set properly
-`make gherkin:wanleg:production dfu=qmk`
## Burn QMK DFU
6. Navigate to the directory with your `_production.hex` file, and burn it with the following command
@@ -82,5 +80,4 @@ Change `comPORT` to whatever port is used by the Arduino (e.g. `com11` in Window
## Using QMK DFU
7. Once QMK DFU is burned to your ProMicro, you can then flash subsequent hex files with
-`make gherkin:<keymap>:dfu dfu=qmk`
-The `dfu=qmk` conditional will set `BOOTLOADER = qmk-dfu` instead of `BOOTLOADER = caterina`
+`make gherkin:<keymap>:dfu`
diff --git a/layouts/community/ortho_3x10/wanleg/rules.mk b/layouts/community/ortho_3x10/wanleg/rules.mk
new file mode 100644
index 0000000000..90841d2abe
--- /dev/null
+++ b/layouts/community/ortho_3x10/wanleg/rules.mk
@@ -0,0 +1,3 @@
+SWAP_HANDS_ENABLE = no
+
+BOOTLOADER = qmk-dfu \ No newline at end of file
diff --git a/layouts/community/ortho_4x12/wanleg/config.h b/layouts/community/ortho_4x12/wanleg/config.h
new file mode 100644
index 0000000000..2c6fcc75f0
--- /dev/null
+++ b/layouts/community/ortho_4x12/wanleg/config.h
@@ -0,0 +1,15 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+//QMK DFU settings (ProMicro boards)
+// set top left key as bootloader mode escape key on Lets Split rev2
+#if defined(KEYBOARD_lets_split_rev2)
+#define QMK_LED B0
+#define QMK_ESC_OUTPUT F6 // usually COL
+#define QMK_ESC_INPUT D7 // usually ROW
+#define USE_SERIAL
+#undef USE_I2C
+#define EE_HANDS
+#endif
+
+#endif
diff --git a/layouts/community/ortho_4x12/wanleg/keymap.c b/layouts/community/ortho_4x12/wanleg/keymap.c
new file mode 100644
index 0000000000..43cae711ac
--- /dev/null
+++ b/layouts/community/ortho_4x12/wanleg/keymap.c
@@ -0,0 +1,67 @@
+#include QMK_KEYBOARD_H
+#include "wanleg.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+#if defined(KEYBOARD_lets_split_rev2)
+[_GK] = LAYOUT_ortho_4x12_wrapper(
+ _______________GherkinLike_0_______________,
+ _______________GherkinLike_1_______________,
+ _______________GherkinLike_2_______________,
+ _______________GherkinLike_3_OneHand_______
+),
+[ONE] = LAYOUT_ortho_4x12_wrapper(
+ _______________Qwerty_Row__0_______________,
+ _______________Qwerty_Row__1_______________,
+ _______________Qwerty_Row__2_______________,
+ KC_LCTL, KC_LGUI, KC_LALT, GHERKIN, SUBTER, SH_T(KC_SPC), KC_SPC, SUPRA, KC_RGUI, KC_RALT, KC_RGUI, KC_RCTL
+),
+#else
+[_GK] = LAYOUT_ortho_4x12_wrapper(
+ _______________GherkinLike_0_______________,
+ _______________GherkinLike_1_______________,
+ _______________GherkinLike_2_______________,
+ _______________GherkinLike_3_______________
+),
+#endif
+[_QW] = LAYOUT_ortho_4x12_wrapper(
+ _______________Qwerty_Row__0_______________,
+ _______________Qwerty_Row__1_______________,
+ _______________Qwerty_Row__2_______________,
+ _______________Qwerty_Row__3_______________
+),
+
+[SUP] = LAYOUT_ortho_4x12_wrapper(
+ ________________SUPRA_Row_0________________,
+ ________________SUPRA_Row_1________________,
+ ________________SUPRA_Row_2________________,
+ ________________SUPRA_Row_3________________
+),
+
+[SUB] = LAYOUT_ortho_4x12_wrapper(
+ _______________SUBTER_Row__0_______________,
+ _______________SUBTER_Row__1_______________,
+ _______________SUBTER_Row__2_______________,
+ _______________SUBTER_Row__3_______________
+),
+
+[NUM] = LAYOUT_ortho_4x12_wrapper(
+ _______________NUMBERS_Row_0_______________,
+ _______________NUMBERS_Row_1_______________,
+ _______________NUMBERS_Row_2_______________,
+ _______________NUMBERS_Row_3_______________
+),
+
+[DIR] = LAYOUT_ortho_4x12_wrapper(
+ _____________DIRECTIONS_Row__0_____________,
+ _____________DIRECTIONS_Row__1_____________,
+ _____________DIRECTIONS_Row__2_____________,
+ _____________DIRECTIONS_Row__3_____________
+),
+
+[ETC] = LAYOUT_ortho_4x12_wrapper(
+ ______________ETCETERA_Row__0______________,
+ ______________ETCETERA_Row__1______________,
+ ______________ETCETERA_Row__2______________,
+ ______________ETCETERA_Row__3______________
+),
+};
diff --git a/layouts/community/ortho_4x12/wanleg/readme.md b/layouts/community/ortho_4x12/wanleg/readme.md
new file mode 100644
index 0000000000..2f89d1de61
--- /dev/null
+++ b/layouts/community/ortho_4x12/wanleg/readme.md
@@ -0,0 +1,24 @@
+# Let's Split Flashing
+(More information at `qmk_firmware/layouts/community/ortho_3x10/wanleg/readme.md`)
+## Make the QMK DFU .hex
+`make lets_split/rev2:wanleg:production dfu=qmk`
+
+## Burning EEPROM settings and Firmware
+Navigate to the directory with your .hex file and the `eeprom-lefthand.eep` and `eeprom-righthand.eep` files in it.
+**Burn Left Side With QMK DFU and Firmware**
+`avrdude -b 19200 -c avrisp -p m32u4 -v -e -U lock:w:0x3F:m -U efuse:w:0xC3:m -U hfuse:w:0xD9:m -U lfuse:w:0x5E:m -U eeprom:w:eeprom-lefthand.eep -P comPORT -U flash:w:YOUR_production.hex:a`
+
+**Burn Right Side With QMK DFU and Firmware**
+`avrdude -b 19200 -c avrisp -p m32u4 -v -e -U lock:w:0x3F:m -U efuse:w:0xC3:m -U hfuse:w:0xD9:m -U lfuse:w:0x5E:m -U eeprom:w:eeprom-righthand.eep -P comPORT -U flash:w:YOUR_production.hex:a`
+
+Change `comPORT` to whatever port is used by the Arduino (e.g. `com11` in Windows or `/dev/ttyACM0` in Linux). Use Device Manager in Windows to find the port being used. Use `ls /dev/tty*` in Linux. Change `YOUR_production.hex` to whatever you've created in the previous step.
+
+## Using QMK DFU
+Once QMK DFU is burned to your ProMicro, you can then flash subsequent hex files with
+`make lets_split/rev2:<keymap>:dfu dfu=qmk`
+The `dfu=qmk` conditional will set `BOOTLOADER = qmk-dfu` instead of `BOOTLOADER = caterina`
+
+---
+# JJ40
+## To Do
+- [ ] Mousekeys not working with Userspace for some reason (jj40 only) \ No newline at end of file
diff --git a/layouts/community/ortho_4x12/wanleg/rules.mk b/layouts/community/ortho_4x12/wanleg/rules.mk
new file mode 100644
index 0000000000..79929689cb
--- /dev/null
+++ b/layouts/community/ortho_4x12/wanleg/rules.mk
@@ -0,0 +1,6 @@
+AUDIO_ENABLE = no
+SWAP_HANDS_ENABLE = yes
+
+ifeq ($(strip $(KEYBOARD)), jj40)
+ SWAP_HANDS_ENABLE = no
+endif \ No newline at end of file
diff --git a/layouts/community/ortho_5x15/wanleg/config.h b/layouts/community/ortho_5x15/wanleg/config.h
new file mode 100644
index 0000000000..a55fc6a3eb
--- /dev/null
+++ b/layouts/community/ortho_5x15/wanleg/config.h
@@ -0,0 +1,3 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+#endif
diff --git a/layouts/community/ortho_5x15/wanleg/keymap.c b/layouts/community/ortho_5x15/wanleg/keymap.c
new file mode 100644
index 0000000000..7731edb6a2
--- /dev/null
+++ b/layouts/community/ortho_5x15/wanleg/keymap.c
@@ -0,0 +1,176 @@
+#include QMK_KEYBOARD_H
+#include "wanleg.h"
+
+#define _________________BLANK_75__________________ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+#define _________________Num_Row_75________________ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_NLCK
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* QWERTY 75
+ * .--------------------------------------------------------------------------------------------------------------------------------------.
+ * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | NUMLOCK| gherkin| | FN |
+ * |-----------------------------------------------------------------------------------------------------------+--------+--------+--------|
+ * | | 7 | 8 | 9 |
+ * | |--------+--------+--------|
+ * | 4x12 QWERTY LAYOUT | 4 | 5 | 6 |
+ * | |--------+--------+--------|
+ * | | 1 | 2 | 3 |
+ * | |--------+--------+--------|
+ * | | 0 | 0 | . |
+ * '--------------------------------------------------------------------------------------------------------------------------------------'
+ */
+[QW75] = LAYOUT_ortho_5x15_wrapper(
+ _________________Num_Row_75________________, GHERKIN75, XXXXXXX, FUNCTION75,
+ _______________Qwerty_Row__0_______________, KC_KP_7, KC_KP_8, KC_KP_9,
+ _______________Qwerty_Row__1_______________, KC_KP_4, KC_KP_5, KC_KP_6,
+ _______________Qwerty_Row__2_______________, KC_KP_1, KC_KP_2, KC_KP_3,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_LALT, SUBTER75, KC_LSFT, KC_SPC, SUPRA75, KC_RGUI, KC_RALT, KC_DEL, KC_RCTL, KC_KP_0, KC_KP_0, KC_KP_DOT
+),
+
+ /* Gherkin 75
+ * .--------------------------------------------------------------------------------------------------------------------------------------.
+ * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | NUMLOCK| qwerty | | FN |
+ * |-----------------------------------------------------------------------------------------------------------+--------+--------+--------|
+ * | | 7 | 8 | 9 |
+ * | |--------+--------+--------|
+ * | 4x12 GHERKIN LAYOUT | 4 | 5 | 6 |
+ * | |--------+--------+--------|
+ * | | 1 | 2 | 3 |
+ * | |--------+--------+--------|
+ * | | 0 | 0 | . |
+ * '--------------------------------------------------------------------------------------------------------------------------------------'
+ */
+[GK75] = LAYOUT_ortho_5x15_wrapper(
+ _________________Num_Row_75________________, QWERTY75, XXXXXXX, FUNCTION75,
+ _______________GherkinLike_0_______________, KC_KP_7, KC_KP_8, KC_KP_9,
+ _______________GherkinLike_1_______________, KC_KP_4, KC_KP_5, KC_KP_6,
+ TD(TD_SFT_CAPS), SFT_T(KC_Z), KC_X, KC_C, LT(NUM75, KC_V), LT(ETC75, KC_B), KC_N, LT(DIR75, KC_M), GUI_T(KC_COMM), ALT_T(KC_DOT), CTL_T(KC_BSPC), SFT_T(KC_ENT), KC_KP_1, KC_KP_2, KC_KP_3,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_LALT, NUMBER75, ETCETERA75, KC_SPC,DIRECTION75, KC_RGUI, KC_RALT, KC_DEL, KC_RCTL, KC_KP_0, KC_KP_0, KC_KP_DOT
+),
+
+ /* SUBTER75
+ * .--------------------------------------------------------------------------------------------------------------------------------------.
+ * | SUBTER ROW 0 LAYOUT | | | |
+ * |-----------------------------------------------------------------------------------------------------------+--------+-----------------|
+ * | | / | * | - |
+ * | |--------+--------+--------|
+ * | 4x12 SUBTER LAYOUT | | | + |
+ * | |--------+--------+--------|
+ * | | | | ENTER |
+ * | |--------+--------+--------|
+ * | | | | |
+ * '--------------------------------------------------------------------------------------------------------------------------------------'
+ */
+[SUB75] = LAYOUT_ortho_5x15_wrapper(
+ _______________SUBTER_Row__0_______________, _______, _______, _______,
+ _______________SUBTER_Row__0_______________, KC_PSLS, KC_PAST, KC_PMNS,
+ _______________SUBTER_Row__1_______________, _______, _______, KC_PPLS,
+ _______________SUBTER_Row__2_______________, _______, _______, KC_PENT,
+ _______, _______, GHERKIN75, _______, _______, _______, KC_ENT, KC_LSFT, _______, _______, _______, _______, _______, _______, _______
+),
+
+/* SUPRA75
+ * .--------------------------------------------------------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+ * | | | | |
+ * | |--------+--------+--------|
+ * | 4x12 SUPRA LAYOUT | | | |
+ * | |--------+--------+--------|
+ * | | | | |
+ * | |--------+--------+--------|
+ * | | | | |
+ * '--------------------------------------------------------------------------------------------------------------------------------------'
+ */
+[SUP75] = LAYOUT_ortho_5x15_wrapper(
+ _________________BLANK_75__________________,
+ ________________SUPRA_Row_0________________, _______, _______, _______,
+ ________________SUPRA_Row_1________________, _______, _______, _______,
+ ________________SUPRA_Row_2________________, _______, _______, _______,
+ _________________BLANK_75__________________
+),
+
+/* Gherkin 75 Numbers
+ * .--------------------------------------------------------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |-----------------------------------------------------------------------------------------------------------|--------+-----------------|
+ * | | / | * | - |
+ * | |--------+--------+--------|
+ * | 4x12 NUMBERS LAYOUT | | | + |
+ * | |--------+--------+--------|
+ * | | | | ENTER |
+ * | |--------+--------+--------|
+ * | | | | |
+ * '--------------------------------------------------------------------------------------------------------------------------------------'
+ */
+[NUM75] = LAYOUT_ortho_5x15_wrapper(
+ _________________BLANK_75__________________,
+ _______________NUMBERS_Row_0_______________, KC_PSLS, KC_PAST, KC_PMNS,
+ _______________NUMBERS_Row_1_______________, _______, _______, KC_PPLS,
+ _______________NUMBERS_Row_2_______________, _______, _______, KC_PENT,
+ _______________NUMBERS_Row_3_______________, _______, _______, _______
+),
+
+/* Gherkin 75 Et Cetera
+ * .--------------------------------------------------------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |-----------------------------------------------------------------------------------------------------------|--------+-----------------|
+ * | | | | |
+ * | |--------+--------+--------|
+ * | 4x12 ETCETERA LAYOUT | | | |
+ * | |--------+--------+--------|
+ * |