summaryrefslogtreecommitdiffstats
path: root/keyboards/ergodox_ez
diff options
context:
space:
mode:
authorJacob Jerrell <jacob.jerrell@gmail.com>2018-07-25 17:37:04 +0200
committerDrashna Jaelre <drashna@live.com>2018-07-25 17:37:04 +0200
commit4b5dcda1265fd2df7392588c6897cc881bf01929 (patch)
tree014dac6102875bc09e427252ccac108c757e36ff /keyboards/ergodox_ez
parentc531dfb6a778a70888a6638144e6475e45f48bac (diff)
downloadqmk_firmware-4b5dcda1265fd2df7392588c6897cc881bf01929.tar.gz
qmk_firmware-4b5dcda1265fd2df7392588c6897cc881bf01929.tar.xz
Keymap: Bocaj Ergodox Updates (#3364)
* Bocaj Layout Revamp * Pull in Upstream (#1) * Various tweaks for some Input:Club build processes * change KEYMAP to LAYOUT for all new keyboards made using this script * Add support for rev3 of the Atom47 (#2672) * Added support for rev3 of the Atom47 * Updated Atom47 readme's * Fix redefine error on rev2 and add maartenwut's keymap * Fix redefine error on LEdiodes keymap * Add Nyquist keymap (#2692) * nyquist * danielhklein nyquist setup * shift left controls * remove readme * cleanup before pr * ready for pr * Adds Phantom TKL support (#2696) * Add an info.json to phantom keyboard * Add layouts - KEYMAP_WINKEYLESS - KEYMAP_7BIT - KEYMAP_ISO - KEYMAP_ISO_WINKEYLESS * Add key_counts * Add 2 missing F-Row keys * Add TKC1800 info.json Created an info.json for the tkc1800. * Clueboard 60 info.json - adds - LAYOUT_60_ansi - LAYOUT_60_iso - KEYMAP_AEK - KEYMAP - LAYOUT_60_ansi_split_bs_rshift * Add the Speedo keyboard * Fix KC60 info.json file (#2707) * change KEYMAP to LAYOUT in all the KC60 files * Redo the info.json file * Small fixes to TKC1800 - adjust F-row to use 0.25 spacing - split left shift - add key_count * Fix some Configurator Warnings regarding LAYOUT vs KEYMAP (#2708) * change diverge 3 KC_KEYMAP to LAYOUT * Change KEYMAP to LAYOUT for handwired arrow pad * change M10A to LAYOUT for m10-a * Change KC_KEYMAP to LAYOUT_kc and KEYMAP to LAYOUT for mf68 * change KC_KEYMAP to LAYOUT for nano * Refactor to LAYOUT * refactor to LAYOUT-ansi and LAYOUT_iso for s65 * LAYOUT conversions for lfkkeyboards * missed a few renames * mini1800 for lfkeyobards support of LAYOUT * Improve state/chord handling and clean up namespace Some values that can never, ever, change were held in local variables, rather than in PROGMEM. Fixed. Change "pressed" to a signed int so the test for < 0 makes sense, and to avoid possible weird failure modes in the case where a key release comes in when pressed is already zero. (Shouldn't happen, sure, but computers are weird.) A lot of things in process_steno had external linkage for no particular reason. They've been marked static. Stuff still builds. Distinguish between currently-held keys and keys that have been held, and expose these values through a nicely-named API so other code could, say, check on the current set of steno chording in order to make displays. Also in passing fix up the "state" value having external linkage so it could clash with other people's variable declarations. The API also provides hooks for key processing and steno chord events, so you can monitor those events without having to run in matrix_scan_user and recheck the values directly. Also document these. There is no path through processing a key that doesn't end with a return false, so the nested return foo() are gone and we just return false. * Pull information from config.h and rules.mk (#2711) * Pull information from config.h and rules.mk * Readd the kbd75 maintainer * Remove obsolete info.json entries (#2712) * Clean up some long-standing errors when populating the API (#2715) * More Configurator Warning Fixes (#2716) * mf68_ble did not have the correct .c and .h files * Fix JC65 KEYMAP to LAYOUT * Change KEYMAP to LAYOUT for s60_x * Convert KEYMAP to LAYOUT for lets_split boards * Convert KEYMAP to LAYOUT * more fixes to keymap for iris * convert KEYMAP to LAYOUT for levinson keyboard * change losinggeneration's KEYMAP to LAYOUT * convert KEYMAP to LAYOUT * convert KEYMAP to LAYOUT for nyquist * convert KEYMAP to LAYOUT * convert KEYMAP to LAYOUT for viterbi * convert KEYMAP to LAYOUT * convert KEYMAP and its subsidiries to the LAYOUT standard * convert KEYMAP and its subsidiries to the new LAYOUT standard * Normacos keymap for let's split keyboard (#2691) * Cheers let's split keymap * fixed typo on norman layer of cheers keymap for let's split * fixed right handed mappings for home row * cheers keymap for let's split redefinition * updated Cheers keymap for let's split * cheers keymap for let's split updated with some terminal macros * renamed cheers let's split keymap to a more appropriate normacos * updated normacos keymap doc / removed non functional keys * reset let's split rules to default values * added more spotlight search macros * normalized keymap comments * Moved numpad on lower layer * hhkb jp personal keymap (#2698) * Add JJ40 Cockpit personal keymap (#2713) * Add JJ40 Cockpit keymap * Fix lower layer symbols * Add readme for "major" keyboards to eliminate more QMK Configurator errors (#2718) * add readme to ktype keyboard * add readme to m10a * add readme to mini1800 * add readme to parent directory * Revert "Pull in Upstream (#1)" This reverts commit eeba0cec17ccb636e4225eed88aeae72b99f5e45. * Updates to Bocaj Files - Gave up on Tap Dance for ' -> ' + Added another 'Secret' + Add ' -> ' to the Swap Hands key + Add Swap Hands to the ' -> ' key + Made Hand Swapping a momentary toggle - Removed Auto Shift + Added Layer Toggle to KC_QUOTE for the _TOOLS layer - Disabled Tap Dance * Merge remote-tracking branch 'upstream/master' * Updates to Bocaj Added Game Layers, Removed Unused Macros * Removed 'secrets.h' * Updates to Bocaj Remove 'secrets'. Remove 'sendstring_workman.h' and set related layer back to qwerty due to macro compatibility issues * Total revisioning of keymap and layout structure * Missed readme.md file * Bocaj - Permissive Hold setting enabled
Diffstat (limited to 'keyboards/ergodox_ez')
-rw-r--r--keyboards/ergodox_ez/keymaps/bocaj/bocaj.h146
-rw-r--r--keyboards/ergodox_ez/keymaps/bocaj/config.h21
-rw-r--r--keyboards/ergodox_ez/keymaps/bocaj/keymap.c340
-rw-r--r--keyboards/ergodox_ez/keymaps/bocaj/readme.md48
-rw-r--r--keyboards/ergodox_ez/keymaps/bocaj/rules.mk5
5 files changed, 560 insertions, 0 deletions
diff --git a/keyboards/ergodox_ez/keymaps/bocaj/bocaj.h b/keyboards/ergodox_ez/keymaps/bocaj/bocaj.h
new file mode 100644
index 000000000..2c41c01aa
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/bocaj/bocaj.h
@@ -0,0 +1,146 @@
+/*
+Copyright 2018 Jacob Jerrell <jacob.jerrell@gmail.com>
+
+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 "quantum.h"
+
+// Layers
+enum layers {
+ _SWRKMN = 0,
+ _HWRKMN,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+ _DIABLO
+};
+
+
+
+enum custom_keycodes {
+ KC_EPRM = SAFE_RANGE,
+ KC_SWRK,
+ KC_HWRK,
+ KC_VRSN,
+ JJ_COPY,
+ JJ_PASTE,
+ JJ_ARRW,
+ MC_LOCK,
+ KC_DIABLO_CLEAR,
+ KC_NMPD
+// UC_FLIP
+};
+
+// Space Cadet Hyper/Meh and [/]
+#define HYP_LBK ALL_T(KC_LBRACKET)
+#define MEH_RBK MEH_T(KC_RBRACKET)
+
+#define KC_LWSP LT(_LOWER, KC_SPACE)
+#define KC_RSEN LT(_RAISE, KC_ENTER)
+#define KC_ADJS TT(_ADJUST)
+
+#define XXXXXXX KC_NO
+#define _______ KC_TRNS
+
+#ifdef TAP_DANCE_ENABLE
+enum {
+ TD_D3_1 = 0,
+ TD_D3_2,
+ TD_D3_3,
+ TD_D3_4
+};
+#endif // TAP_DANCE_ENABLE
+
+// Custom Keycodes for Diablo 3 layer
+// But since TD() doesn't work when tap dance is disabled
+// We use custom codes here, so we can substitute the right stuff
+#ifdef TAP_DANCE_ENABLE
+#define KC_D3_1 TD(TD_D3_1)
+#define KC_D3_2 TD(TD_D3_2)
+#define KC_D3_3 TD(TD_D3_3)
+#define KC_D3_4 TD(TD_D3_4)
+#else // TAP_DANCE_ENABLE
+#define KC_D3_1 KC_1
+#define KC_D3_2 KC_2
+#define KC_D3_3 KC_3
+#define KC_D3_4 KC_4
+#endif // TAP_DANCE_ENABLE
+
+//define diablo macro timer variables
+extern uint16_t diablo_timer[4];
+extern uint8_t diablo_times[];
+extern uint8_t diablo_key_time[4];
+
+
+void run_diablo_macro_check(void);
+
+
+#define LAYOUT_ergodox_pretty_wrapper(...) LAYOUT_ergodox_pretty(__VA_ARGS__)
+
+/* Pretty Layout
+.---------------------------------------------. .---------------------------------------------.
+| 1 | 2 | 3 | 4 | 5 | 6 | 7 | ! 8 | 9 | 10 | 11 | 12 | 13 | 14 |
+!-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
+| 15 | 16 | 17 | 18 | 19 | 20 | 21 | ! 22 | 23 | 24 | 25 | 26 | 27 | 28 |
+!-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
+| 29 | 30 | 31 | 32 | 33 | 34 |-------! !-------! 35 | 36 | 37 | 38 | 39 | 40 |
+!-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
+| 41 | 42 | 43 | 44 | 45 | 46 | 47 | ! 48 | 49 | 50 | 51 | 52 | 53 | 54 |
+'-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
+ | 55 | 56 | 57 | 58 | 59 | .---------------. .---------------. ! 60 | 61 | 62 | 63 | 64 |
+ '------------------------------' | 65 | 66 | ! 67 | 68 | '------------------------------'
+ .-------+-------+-------! !-------+-------+-------.
+ ! ! | 69 | ! 70 | ! !
+ ! ! !-------! !-------! ! !
+ | 71 | 72 | 73 | ! 74 | 75 | 76 |
+ '-----------------------' '-----------------------'
+*/
+
+#define ______________________NUMBER_LEFT________________________ KC_1, KC_2, KC_3, KC_4, KC_5
+#define ______________________NUMBER_RIGHT_______________________ KC_6, KC_7, KC_8, KC_9, KC_0
+
+#define ______________________SPECIAL_LEFT_______________________ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC
+#define ______________________SPECIAL_RIGHT______________________ KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN
+
+#define _______________________FUNC_LEFT_________________________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5
+#define _______________________FUNC_RIGHT________________________ KC_F6, KC_F7, KC_F8, KC_F9, KC_F10
+
+#define _________________________________________________________ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+#define XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+
+#define _______________________SWORKMAN_L1_______________________ KC_Q, KC_W, KC_E, KC_R, KC_T
+#define _______________________SWORKMAN_L2_______________________ KC_A, SFT_T(KC_S), GUI_T(KC_D), ALT_T(KC_F), KC_G
+#define _______________________SWORKMAN_L3_______________________ CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B
+
+#define _______________________SWORKMAN_R1_______________________ KC_Y, KC_U, KC_I, KC_O, KC_P
+#define _______________________SWORKMAN_R2_______________________ KC_H, ALT_T(KC_J), GUI_T(KC_K), SFT_T(KC_L), KC_SCLN
+#define _______________________SWORKMAN_R3_______________________ KC_N, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLASH)
+
+// Hardware Driven Workman
+#define _______________________HWORKMAN_L1_______________________ KC_Q, KC_D, KC_R, KC_W, KC_B
+#define _______________________HWORKMAN_L2_______________________ KC_A, SFT_T(KC_S), GUI_T(KC_H), ALT_T(KC_T), KC_G
+#define _______________________HWORKMAN_L3_______________________ CTL_T(KC_Z), KC_X, KC_M, KC_C, KC_V
+
+#define _______________________HWORKMAN_R1_______________________ KC_J, KC_F, KC_U, KC_P, KC_SCLN
+#define _______________________HWORKMAN_R2_______________________ KC_Y, ALT_T(KC_N), GUI_T(KC_E), SFT_T(KC_O), KC_I
+#define _______________________HWORKMAN_R3_______________________ KC_K, KC_L, KC_COMM, KC_DOT, CTL_T(KC_SLASH)
+
+#define ___________________ERGODOX_BOTTOM_LEFT___________________ TT(_DIABLO), TT(_ADJUST), XXXXXXX, KC_UP, KC_LEFT
+#define ___________________ERGODOX_BOTTOM_RIGHT__________________ KC_RIGHT, KC_DOWN, TT(_RAISE), TT(_LOWER), TT(_ADJUST)
+
+// LEFT | RIGHT
+#define ______________________ERGODOX_THUMBS_____________________ KC_APP,KC_HOME, KC_PGUP,KC_ESC, \
+ KC_END, KC_PGDOWN, \
+ KC_LWSP,KC_BSPACE,JJ_COPY, JJ_PASTE,KC_TAB,KC_RSEN
diff --git a/keyboards/ergodox_ez/keymaps/bocaj/config.h b/keyboards/ergodox_ez/keymaps/bocaj/config.h
new file mode 100644
index 000000000..59605bc25
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/bocaj/config.h
@@ -0,0 +1,21 @@
+#ifndef USERSPACE_CONFIG_H
+ #define USERSPACE_CONFIG_H
+
+ #ifndef QMK_KEYS_PER_SCAN
+ #define QMK_KEYS_PER_SCAN 4
+ #endif // QMK KEYS PER SCAN
+
+ // this makes it possible to do rolling combos (zx) with keys that
+ // convert to other keys on hold (z becomes ctrl when you hold it,
+ // and when this option isn't enabled, z rapidly followed by x
+ // actually sends Ctrl-x. That's bad.)
+ #define IGNORE_MOD_TAP_INTERRUPT
+ #define PERMISSIVE_HOLD
+ #undef PREVENT_STUCK_MODIFIERS
+
+ // Disable action_get_macro and fn_actions, since we don't use these
+ // and it saves on space in the firmware.
+ #define NO_ACTION_MACRO
+ #define NO_ACTION_FUNCTION
+
+#endif // !USERSPACE_CONFIG_H
diff --git a/keyboards/ergodox_ez/keymaps/bocaj/keymap.c b/keyboards/ergodox_ez/keymaps/bocaj/keymap.c
new file mode 100644
index 000000000..07117f116
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/bocaj/keymap.c
@@ -0,0 +1,340 @@
+/*
+Copyright 2018 Jacob Jerrell <jacob.jerrell@gmail.com>
+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
+#include "bocaj.h"
+
+#ifdef UNICODEMAP_ENABLE
+#include "bocaj_unicode.h"
+#endif // UNICODEMAP_ENABLE
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Software Workman / QWERTY - http://www.keyboard-layout-editor.com/#/gists/b6c016a22a9d31381a276a603a42fe5f
+ .---------------------------------------------. .---------------------------------------------.
+ | ESC | 1 | 2 | 3 | 4 | 5 | -> | ! - | 6 | 7 | 8 | 9 | 0 | = |
+ !-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
+ | DEL | Q | W | E | R | T | ( | ! ) | Y | U | I | O | P | \ |
+ !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
+ | ADJST | A | S | D | F | G |-------! !-------! H | J | K | L | ; | ' |
+ !-------+-----+-----+-----x-----x-----! HYP ! ! MEH !-----x-----x-----+-----+-----+-------!
+ | SHIFT | Z | X | C | V | B | { | ! } | N | M | , | . | / | SHIFT |
+ '-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
+ | GAME | NUM | VRS | UP | LFT | .---------------. .---------------. ! RGT | DWN | RSE | LWR | ADJ |
+ '------------------------------' | APP | HOME | ! PGUP | ESC | '------------------------------'
+ .-------+-------+-------! !-------+-------+-------.
+ ! SPACE ! | END | ! PGDN | ! ENTER !
+ ! / ! BSPCE !-------! !-------! TAB ! / !
+ | LOWER | | COPY | ! PASTE | | RAISE |
+ '-----------------------' '-----------------------'
+*/
+ [_SWRKMN] = LAYOUT_ergodox_pretty_wrapper(
+ KC_ESC, ______________________NUMBER_LEFT________________________, JJ_ARRW, KC_MINUS, ______________________NUMBER_RIGHT_______________________, KC_EQUAL,
+ KC_DEL, _______________________SWORKMAN_L1_______________________, KC_LPRN, KC_RPRN, _______________________SWORKMAN_R1_______________________, KC_BSLS,
+ KC_ADJS,_______________________SWORKMAN_L2_______________________, _______________________SWORKMAN_R2_______________________, KC_QUOTE,
+ KC_LSFT,_______________________SWORKMAN_L3_______________________, HYP_LBK, MEH_RBK, _______________________SWORKMAN_R3_______________________, KC_RSFT,
+ ___________________ERGODOX_BOTTOM_LEFT___________________, ___________________ERGODOX_BOTTOM_RIGHT__________________,
+ ______________________ERGODOX_THUMBS_____________________
+ ),
+/* Hardware Workman - http://www.keyboard-layout-editor.com/#/gists/7a07cb982ec3597ba3e3d947554225f1
+ .---------------------------------------------. .---------------------------------------------.
+ | ESC | 1 | 2 | 3 | 4 | 5 | -> | ! - | 6 | 7 | 8 | 9 | 0 | = |
+ !-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
+ | DEL | Q | D | R | W | B | ( | ! ) | J | F | U | P | ; | \ |
+ !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
+ | ADJST | A | S | H | T | G |-------! !-------! Y | N | E | O | I | ' |
+ !-------+-----+-----+-----x-----x-----! HYP ! ! MEH !-----x-----x-----+-----+-----+-------!
+ | SHIFT | Z | X | M | C | V | { | ! } | K | L | , | . | / | SHIFT |
+ '-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
+ | GAME | NUM | VRS | UP | LFT | .---------------. .---------------. ! RGT | DWN | RSE | LWR | ADJ |
+ '------------------------------' | APP | HOME | ! PGUP | ESC | '------------------------------'
+ .-------+-------+-------! !-------+-------+-------.
+ ! SPACE ! | END | ! PGDN | ! ENTER !
+ ! / ! BSPCE !-------! !-------! TAB ! / !
+ | LOWER | | COPY | ! PASTE | | RAISE |
+ '-----------------------' '-----------------------'
+*/
+ [_HWRKMN] = LAYOUT_ergodox_pretty_wrapper(
+ KC_ESC, ______________________NUMBER_LEFT________________________, JJ_ARRW, KC_MINUS, ______________________NUMBER_RIGHT_______________________, KC_EQUAL,
+ KC_DEL, _______________________HWORKMAN_L1_______________________, KC_LPRN, KC_RPRN, _______________________HWORKMAN_R1_______________________, KC_BSLS,
+ KC_ADJS,_______________________HWORKMAN_L2_______________________, _______________________HWORKMAN_R2_______________________, KC_QUOTE,
+ KC_LSFT,_______________________HWORKMAN_L3_______________________, HYP_LBK, MEH_RBK, _______________________HWORKMAN_R3_______________________, KC_RSFT,
+ ___________________ERGODOX_BOTTOM_LEFT___________________, ___________________ERGODOX_BOTTOM_RIGHT__________________,
+ ______________________ERGODOX_THUMBS_____________________
+ ),
+/* Lower - http://www.keyboard-layout-editor.com/#/gists/f1d745a88d1c48ab55e095efd9e7a43a
+ .---------------------------------------------. .---------------------------------------------.
+ | | F1 | F2 | F3 | F4 | F5 | | ! | F6 | F7 | F8 | F9 | F10 | |
+ !-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
+ | ` | 1 | 2 | 3 | 4 | 5 | | ! | 6 | 7 | 8 | 9 | 0 | |
+ !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
+ | | | | | | |-------! !-------! | | | | | |
+ !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
+ | | | | | | | | ! | | | | | | |
+ '-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
+ | | | | | | .---------------. .---------------. ! | | | | |
+ '------------------------------' | | | ! | | '------------------------------'
+ .-------+-------+-------! !-------+-------+-------.
+ ! ! | | ! | ! !
+ ! ! !-------! !-------! ! !
+ | | | | ! | | |
+ '-----------------------' '-----------------------'
+*/
+ [_LOWER] = LAYOUT_ergodox_pretty_wrapper(
+ _______,_______________________FUNC_LEFT_________________________, _______, _______, _______________________FUNC_RIGHT________________________, _______,
+ KC_GRV ,______________________NUMBER_LEFT________________________, _______, _______, ______________________NUMBER_RIGHT_______________________, _______,
+ _______,_________________________________________________________, _________________________________________________________, _______,
+ _______,_________________________________________________________, _______, _______, _________________________________________________________, _______,
+ _________________________________________________________, _________________________________________________________,
+ ______________________ERGODOX_THUMBS_____________________
+ ),
+/* Raise - http://www.keyboard-layout-editor.com/#/gists/e0f591ec2ce9f24675a02d15c7048b25
+ .---------------------------------------------. .---------------------------------------------.
+ | | F1 | F2 | F3 | F4 | F5 | | ! _ | F6 | F7 | F8 | F9 | F10 | |
+ !-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
+ | ~ | ! | @ | # | $ | % | | ! | ^ | & | * | ( | ) | |
+ !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
+ | | | | | | |-------! !-------! | | | | | |
+ !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
+ | | | | | | | | ! | | | | | | |
+ '-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
+ | | | | | | .---------------. .---------------. ! | | | | |
+ '------------------------------' | | | ! | | '------------------------------'
+ .-------+-------+-------! !-------+-------+-------.
+ ! ! | | ! | ! !
+ ! ! !-------! !-------! ! !
+ | | | | ! | | |
+ '-----------------------' '-----------------------'
+*/
+ [_RAISE] = LAYOUT_ergodox_pretty_wrapper(
+ _______,_______________________FUNC_LEFT_________________________, _______, KC_UNDS, _______________________FUNC_RIGHT________________________, _______,
+ KC_TILD,______________________SPECIAL_LEFT_______________________, _______, _______, ______________________SPECIAL_RIGHT______________________, _______,
+ _______,_________________________________________________________, _________________________________________________________, _______,
+ _______,_________________________________________________________, _______, _______, _________________________________________________________, _______,
+ _________________________________________________________, _________________________________________________________,
+ ______________________ERGODOX_THUMBS_____________________
+ ),
+ /* Adjust - http://www.keyboard-layout-editor.com/#/gists/dedeae17b35a5d5f745a42aaea78f007
+ .---------------------------------------------. .---------------------------------------------.
+ | | | | | | | EPRM | ! EPRM | | | | | | |
+ !-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
+ | | | | | | | | ! | | 7 | 8 | 9 | * | |
+ !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
+ | | 🔇 | 🔉 | 🔊 | LCK | |-------! !-------! | 4 | 5 | 6 | + | SWRKM |
+ !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
+ | | | | | | | | ! | | 1 | 2 | 3 | - | HWRKM |
+ '-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
+ | | | | | | .---------------. .---------------. ! 0 | . | , | = | |
+ '------------------------------' | | | ! | | '------------------------------'
+ .-------+-------+-------! !-------+-------+-------.
+ ! ! | | ! | ! !
+ ! ! !-------! !-------! ! !
+ | | | | ! | | |
+ '-----------------------' '-----------------------'
+*/
+ [_ADJUST] = LAYOUT_ergodox_pretty_wrapper(
+ XXXXXXX,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, KC_EPRM, KC_EPRM, XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, XXXXXXX,
+ XXXXXXX,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_7, KC_KP_8, KC_KP_9, KC_PAST, XXXXXXX,
+ _______,KC__MUTE, KC__VOLDOWN, KC__VOLUP, MC_LOCK, XXXXXXX, XXXXXXX, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, KC_SWRK,
+ XXXXXXX,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_1, KC_KP_2, KC_KP_3, KC_PMNS, KC_HWRK,
+ XXXXXXX,_______,XXXXXXX,XXXXXXX,XXXXXXX, KC_KP_0, KC_PDOT, KC_COMM, KC_PEQL, _______,
+ ______________________ERGODOX_THUMBS_____________________
+ ),
+// Diablo - http://www.keyboard-layout-editor.com/#/gists/28476e4237e77d4835ac8a9d7e5f9b2c
+ [_DIABLO] = LAYOUT_ergodox_pretty_wrapper(
+ KC_ESC , KC_V , KC_D ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_TAB , KC_S , KC_I , KC_F , KC_T , KC_J ,XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_7, KC_KP_8, KC_KP_9, XXXXXXX, XXXXXXX,
+ KC_Q , KC_1 , KC_2 , KC_3 , KC_4 , KC_M , XXXXXXX, KC_KP_4, KC_KP_5, KC_KP_6, XXXXXXX, XXXXXXX,
+ KC_LSFT,KC_D3_1 ,KC_D3_2 ,KC_D3_3 ,KC_D3_4 ,XXXXXXX ,XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_1, KC_KP_2, KC_KP_3, XXXXXXX, XXXXXXX,
+ _______,ALT_T(KC_Z) ,KC_G ,KC_Y ,XXXXXXX , KC_KP_0, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX,XXXXXXX,
+ XXXXXXX, XXXXXXX,
+ KC_BTN1,KC_BTN2,KC_DIABLO_CLEAR, XXXXXXX,XXXXXXX,XXXXXXX
+ )
+};
+
+// Defines actions for my custom keycodes
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ // KC_COPY and KC_PASTE have problems with different hardware/software mappings
+ // e.g. If the mappings conflict, KC_COPY will send Cmd+M which minimizes the
+ // window and is very annoying. JJ_COPY and JJ_PASTE fix this by sending the
+ // raw character rather than the KC_* code
+ case JJ_COPY:
+ if (!record->event.pressed) {
+ SEND_STRING(SS_LGUI("c"));
+ }
+ return false;
+ break;
+ case JJ_PASTE:
+ if (!record->event.pressed) {
+ SEND_STRING(SS_LGUI("v"));
+ }
+ return false;
+ break;
+ case JJ_ARRW:
+ if (!record->event.pressed) {
+ SEND_STRING("->");
+ }
+ return false;
+ break;
+ case KC_SWRK:
+ if (!record->event.pressed) {
+ set_single_persistent_default_layer(_SWRKMN);
+ layer_move(_SWRKMN);
+ ergodox_blink_all_leds();
+ ergodox_blink_all_leds();
+ }
+ return false;
+ break;
+ case KC_HWRK:
+ if (!record->event.pressed) {
+ set_single_persistent_default_layer(_HWRKMN);
+ layer_move(_HWRKMN);
+ ergodox_blink_all_leds();
+ ergodox_blink_all_leds();
+ }
+ return false;
+ break;
+ case KC_EPRM:
+ if (!record->event.pressed) {
+ ergodox_blink_all_leds();
+ eeconfig_init();
+ }
+ return false;
+ break;
+ case MC_LOCK:
+ if (!record->event.pressed) {
+ layer_move(_HWRKMN);
+ SEND_STRING(SS_LCTRL(SS_LGUI("q")));
+ }
+ return false;
+ break;
+ case KC_DIABLO_CLEAR:
+#ifdef TAP_DANCE_ENABLE
+ if (record->event.pressed) {
+ uint8_t dtime;
+ for (dtime = 0; dtime < 4; dtime++) {
+ diablo_key_time[dtime] = diablo_times[0];
+ }
+ }
+#endif // TAP_DANCE_ENABLE
+ return false;
+ break;
+ }
+ return true;
+}
+
+void tap(uint16_t keycode){ register_code(keycode); unregister_code(keycode); };
+
+// Diablo III Fun stuff
+//define diablo macro timer variables
+uint16_t diablo_timer[4];
+uint8_t diablo_times[] = { 0, 1, 3, 5, 10, 30 };
+uint8_t diablo_key_time[4];
+
+// has the correct number of seconds elapsed (as defined by diablo_times)
+bool check_dtimer(uint8_t dtimer) { return (timer_elapsed(diablo_timer[dtimer]) < (diablo_key_time[dtimer] * 1000)) ? false : true; };
+
+// Cycle through the times for the macro, starting at 0, for disabled.
+// Max of six values, so don't exceed
+void diablo_tapdance_master(qk_tap_dance_state_t *state, void *user_data, uint8_t diablo_key) {
+ if (state->count >= 7) {
+ diablo_key_time[diablo_key] = diablo_times[0];
+ reset_tap_dance(state);
+ } else {
+ diablo_key_time[diablo_key] = diablo_times[state->count - 1];
+ }
+}
+
+// Would rather have one function for all of this, but no idea how to do that...
+void diablo_tapdance1(qk_tap_dance_state_t *state, void *user_data) { diablo_tapdance_master(state, user_data, 0); }
+void diablo_tapdance2(qk_tap_dance_state_t *state, void *user_data) { diablo_tapdance_master(state, user_data, 1); }
+void diablo_tapdance3(qk_tap_dance_state_t *state, void *user_data) { diablo_tapdance_master(state, user_data, 2); }
+void diablo_tapdance4(qk_tap_dance_state_t *state, void *user_data) { diablo_tapdance_master(state, user_data, 3); }
+
+//Tap Dance Definitions
+qk_tap_dance_action_t tap_dance_actions[] = {
+ // tap once to disable, and more to enable timed micros
+ [TD_D3_1] = ACTION_TAP_DANCE_FN(diablo_tapdance1),
+ [TD_D3_2] = ACTION_TAP_DANCE_FN(diablo_tapdance2),
+ [TD_D3_3] = ACTION_TAP_DANCE_FN(diablo_tapdance3),
+ [TD_D3_4] = ACTION_TAP_DANCE_FN(diablo_tapdance4),
+};
+
+// Sends the key press to system, but only if on the Diablo layer
+void send_diablo_keystroke(uint8_t diablo_key) {
+ if (biton32(layer_state) == _DIABLO) {
+ switch (diablo_key) {
+ case 0:
+ tap(KC_1); break;
+ case 1:
+ tap(KC_2); break;
+ case 2:
+ tap(KC_3); break;
+ case 3:
+ tap(KC_4); break;
+ }
+ }
+}
+
+// Checks each of the 4 timers/keys to see if enough time has elapsed
+// Runs the "send string" command if enough time has passed, and resets the timer.
+void run_diablo_macro_check(void) {
+ uint8_t dtime;
+ for (dtime = 0; dtime < 4; dtime++) {
+ if (check_dtimer(dtime) && diablo_key_time[dtime]) {
+ diablo_timer[dtime] = timer_read();
+ send_diablo_keystroke(dtime);
+ }
+ }
+}
+
+void matrix_scan_user(void) {
+ uint8_t layer = biton32(layer_state);
+ ergodox_board_led_off();
+ ergodox_right_led_1_off();
+ ergodox_right_led_2_off();
+ ergodox_right_led_3_off();
+ switch (layer) {
+ /*
+ Lights are treated as binary here for easy identification.
+ LED1 = 4; LED2 = 2; LED1 = 1
+ This allows for up to 8 identified layers (default layers being no lights on)
+ Which is way more than I should ever need
+ */
+ case _LOWER:
+ ergodox_right_led_3_on();
+ ergodox_right_led_3_set(10); // Default brightness is deadly in a dark room
+ break;
+ case _RAISE:
+ ergodox_right_led_2_on();
+ ergodox_right_led_2_set(10);
+ break;
+ case _ADJUST:
+ ergodox_right_led_2_on();
+ ergodox_right_led_2_set(10);
+ ergodox_right_led_3_on();
+ ergodox_right_led_3_set(10);
+ break;
+ case _DIABLO:
+ ergodox_right_led_1_on();
+ ergodox_right_led_1_set(10);
+ break;
+ default:
+ // none
+ break;
+ }
+ #ifdef TAP_DANCE_ENABLE
+ run_diablo_macro_check();
+ #endif
+};
diff --git a/keyboards/ergodox_ez/keymaps/bocaj/readme.md b/keyboards/ergodox_ez/keymaps/bocaj/readme.md
new file mode 100644
index 000000000..9d5aa6050
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/bocaj/readme.md
@@ -0,0 +1,48 @@
+# Ergodox EZ Layout by JacobJerrell
+
+My personal Ergodox EZ layout.
+
+## Summary
+
+Contains two base layers because I carry my keyboard between different machines and occassionally use the machines without this keyboard. A side-effect to using it in this manner (with a non-QWERTY layout) is that software/hardware mappings conflict so this allows a quick (2-buttons) to get the keyboard to a compatible layer
+
+## Layers
+
+| Layer | Purpose |
+| ----- | ------- |
+| 0 | [Hardware Workman](#hardware-workman) - For OS mapped to QWERTY |
+| 1 | [Software Workman](#software-workman) - For OS mapped to Workman |
+| 2 | [Lower](#lower) |
+| 3 | [Raise](#raise) |
+| 4 | [Adjust](#adjust) |
+| 5 | [Diablo III](#diablo-iii) |
+
+### Hardware Workman
+
+For easy plug and play into QWERTY machines
+![Hardware Workman](https://imgur.com/HHMIOEf.png)
+
+### Software Workman
+
+To switch to when I was previously using the laptop keyboard with software mapped to Workman. Or so other people can take the Ergodox for a spin.
+![Software Workman](https://imgur.com/WnSci7o.png)
+
+### Lower
+
+Reveals F1-12 keys and brings numkeys down.
+![Lowered](https://imgur.com/mGfjwcn.png)
+
+### Raise
+
+Reveals F1-F12 keys and gives shifted numkeys.
+![Raised](https://imgur.com/NC96Jus.png)
+
+### Adjust
+
+Numpad, Wipe EEPROM, OSX Volume Control, OSX Lockscreen, and Default Layer Switching.
+![Adjusted](https://imgur.com/aQtOxZU.png)
+
+### Diablo III
+
+Arranged to make playing on a laptop much more enjoyable. Credit for the D1-4 macros (as well as much of the ideas in this layout goes to Drashna)
+![Diablo III](https://imgur.com/5eQcDOQ.png)
diff --git a/keyboards/ergodox_ez/keymaps/bocaj/rules.mk b/keyboards/ergodox_ez/keymaps/bocaj/rules.mk
new file mode 100644
index 000000000..b667841a1
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/bocaj/rules.mk
@@ -0,0 +1,5 @@
+AUTO_SHIFT_ENABLE = no
+COMMAND_ENABLE = no
+SWAP_HANDS_ENABLE = no
+TAP_DANCE_ENABLE = yes
+EXTRAKEY_ENABLE = no