summaryrefslogtreecommitdiff
path: root/keyboards/ergodox_ez/keymaps
diff options
context:
space:
mode:
authorIsmael Venegas Castelló <ismael.vc1337@gmail.com>2018-12-19 18:49:56 -0600
committerDrashna Jaelre <drashna@live.com>2018-12-19 16:49:56 -0800
commit5eb8f3f6b51cecc067aaedfb8b2f08cb626381bb (patch)
treeb9e1b89d43ec3be60d03daa052556f90a7190dd6 /keyboards/ergodox_ez/keymaps
parentb13162f7fd5a4c09dff15ff6f9713526622925a7 (diff)
Keymap: Refactor Hacker Dvorak (#4688)
Programmer Dvorak based layout for the Ergodox EZ.
Diffstat (limited to 'keyboards/ergodox_ez/keymaps')
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/config.h50
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/default.png.md1
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/default_highres.png.md1
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/gulpfile.js10
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/hacker_dvorak.c353
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/keycodes/aliases_definitions.c5
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/keycodes/custom_keycodes.c8
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/keymap.c800
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/layers/layers_definitions.c12
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/leader/leader_dictionary.c14
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/leader/leader_setup.c14
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/plover/plover_mode.c20
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/readme.md10
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/rules.mk33
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/none_lead.c40
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/tap_dance_actions.c20
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/tap_dance_setup.c75
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/tap_dances.c74
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/user/eeconfig_init_user.c3
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/user/layer_set_state_user.c121
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/user/matrix_scan_user.c12
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/user/process_record_user.c75
22 files changed, 925 insertions, 826 deletions
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/config.h b/keyboards/ergodox_ez/keymaps/hacker_dvorak/config.h
index c6b86004c5..e188d95d51 100644
--- a/keyboards/ergodox_ez/keymaps/hacker_dvorak/config.h
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/config.h
@@ -5,26 +5,33 @@
#pragma once
-/* Keyboard Settings */
#undef TAPPING_TERM
-#define TAPPING_TERM 150
+#define TAPPING_TERM 200
#undef DEBOUNCE
#define DEBOUNCE 10
#undef IGNORE_MOD_TAP_INTERRUPT
-#define IGNORE_MOD_TAP_INTERRUPT
#undef FORCE_NKRO
#define FORCE_NKRO
-/* This isn't defined by default, so there is no need to undefine it first. */
-#define LEADER_TIMEOUT 500
+#undef TAPPING_TOGGLE
+#define TAPPING_TOGGLE 5
+
+#define LEADER_TIMEOUT 1000
+#define IGNORE_MOD_TAP_INTERRUPT
#define PERMISSIVE_HOLD
#define QMK_KEYS_PER_SCAN 4
+#define DANCING_TERM 175
+
+#define ONESHOT_TAP_TOGGLE 5
+#define ONESHOT_TIMEOUT 5000
+
+#define COMBO_COUNT 4
+#define COMBO_TERM 200
-// RGB Lights
#undef RGBLIGHT_HUE_STEP
#define RGBLIGHT_HUE_STEP 24
@@ -40,11 +47,7 @@
#undef RGBLIGHT_LIMIT_VAL
#define RGBLIGHT_LIMIT_VAL 255
-/* This isn't defined by default, so there is no need to undefine it first. */
-#define RGBLIGHT_SLEEP
-
-// Mouse
#undef MOUSEKEY_INTERVAL
#define MOUSEKEY_INTERVAL 10
@@ -52,31 +55,34 @@
#define MOUSEKEY_DELAY 15
#undef MOUSEKEY_MAX_SPEED
-#define MOUSEKEY_MAX_SPEED 15
+#define MOUSEKEY_MAX_SPEED 20
#undef MOUSEKEY_TIME_TO_MAX
-#define MOUSEKEY_TIME_TO_MAX 150
+#define MOUSEKEY_TIME_TO_MAX 200
#undef MOUSEKEY_WHEEL_MAX_SPEED
-#define MOUSEKEY_WHEEL_MAX_SPEED 15
+#define MOUSEKEY_WHEEL_MAX_SPEED 20
#undef MOUSEKEY_WHEEL_TIME_TO_MAX
-#define MOUSEKEY_WHEEL_TIME_TO_MAX 150
+#define MOUSEKEY_WHEEL_TIME_TO_MAX 200
-/* This is defined only if CONSOLE_ENABLE is set to "yes" */
// #undef NO_DEBUG
// #define NO_DEBUG
// #undef NO_PRINT
// #define NO_PRINT
-/* For COMBO only*/
-// #define COMBO_COUNT 1
-// #define COMBO_TERM 200
+// #define RETRO_TAPPING
+// #define TAPPING_FORCE_HOLD
+
+// #define AUTO_SHIFT_TIMEOUT 150
+// #define NO_AUTO_SHIFT_SPECIAL
+// #define NO_AUTO_SHIFT_NUMERIC
+// #define NO_AUTO_SHIFT_ALPHA
-/* For tap toggle */
-// #define TAPPING_TOGGLE 2
-// #define ONESHOT_TAP_TOGGLE 2
-// #define ONESHOT_TIMEOUT 300
+// #define EXTRA_LONG_COMBOS
+// #define EXTRA_EXTRA_LONG_COMBOS
+// #define COMBO_ALLOW_ACTION_KEYS
+// #define RGBLIGHT_SLEEP
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/default.png.md b/keyboards/ergodox_ez/keymaps/hacker_dvorak/default.png.md
deleted file mode 100644
index 744e7d172a..0000000000
--- a/keyboards/ergodox_ez/keymaps/hacker_dvorak/default.png.md
+++ /dev/null
@@ -1 +0,0 @@
-https://i.imgur.com/fKX0Zbs.png
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/default_highres.png.md b/keyboards/ergodox_ez/keymaps/hacker_dvorak/default_highres.png.md
deleted file mode 100644
index 074e0634d2..0000000000
--- a/keyboards/ergodox_ez/keymaps/hacker_dvorak/default_highres.png.md
+++ /dev/null
@@ -1 +0,0 @@
-https://i.imgur.com/giAc3M9.jpg
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/gulpfile.js b/keyboards/ergodox_ez/keymaps/hacker_dvorak/gulpfile.js
index 338b0c6ba2..23f19d18af 100644
--- a/keyboards/ergodox_ez/keymaps/hacker_dvorak/gulpfile.js
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/gulpfile.js
@@ -1,7 +1,7 @@
let gulp = require('gulp');
let run = require('gulp-run-command').default;
-
+
gulp.task('clean', run('rm -rf ../../../../.build'));
gulp.task('build', ['clean'], run('make -C ../../../../ ergodox_ez:hacker_dvorak', {
@@ -9,5 +9,11 @@ gulp.task('build', ['clean'], run('make -C ../../../../ ergodox_ez:hacker_dvorak
}));
gulp.task('watch', ['build'], () => {
- gulp.watch(['keymap.c', 'config.h', 'rules.mk'], ['build']);
+ gulp.watch([
+ 'keymap.c',
+ 'config.h',
+ 'rules.mk',
+ ], ['build']);
});
+
+gulp.task('default', ['watch']);
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/hacker_dvorak.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/hacker_dvorak.c
new file mode 100644
index 0000000000..65878a67cb
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/hacker_dvorak.c
@@ -0,0 +1,353 @@
+// Keyboard keymap:
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [DVORAK] = LAYOUT_ergodox(
+
+ // HACKER DVORAK left hand
+
+ //------------------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------------+------------------------//
+ // ESCAPE | | | | | | START RECORDING //
+ // | | | | | | //
+ KC_ESC, TD(GRV_TILD), TD(AT_DLR), TD(LCBR_LABK), TD(LPRN_LBRC), TD(EXLM_QUES), DYN_REC_START1, //
+ // | ~ | $ | < | [ | ? | //
+ // | TAP DANCE: ` | TAP DANCE: @ TAP DANCE: { | TAP DANCE: ( | TAP DANCE: ! | DYNAMIC MARCO 1 //
+ //------------------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------------+------------------------//
+ // TAB | MOD TAP: ALT+SHIFT | MOD TAP: CTRL+ALT | MOD TAP: CTRL+SHIFT | P | Y | //
+ // | | | | | | //
+ KC_TAB, TD(NONE_LEAD), TD(QUOT_DQUO), TD(DOT_COMM), ALL_T(KC_P), MEH_T(KC_Y), DYN_MACRO_PLAY1, //
+ // | LEAD | " | , | | | //
+ // | TAP DANCE: NONE | TAP DANCE: ' | TAP DANCE: . | MOD TAP: HYPER | MOD TAP: MEH | //
+ //------------------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------------| PLAY DYNAMIC MACRO 1 //
+ // | MOD TAP: ALT | MOD TAP: CTRL | LAYER TAP: SHIFT | LAYER TAP: ARROW KEYS | MOD TAP: GUI | //
+ // | | | | Ü | | //
+ TD(EQL_PLUS), ALT_T(KC_A), CTL_T(KC_O), SFT_T(KC_E), LT(ARROWS, KC_U), LGUI_T(KC_I), //-----------------------//
+ // + | Á | Ó | É | Ú | Í | //
+ // TAP DANCE: = | TAP DANCE: A | TAP DANCE: O | TAP DANCE: E | TAP DANCE: U | TAP DANCE: I | //
+ //------------------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------------| META //
+ // STOP RECORDING | MOD TAP: GUI+SHIFT+ALT | Q | J | K | X | //
+ // | | | | | | //
+ DYN_REC_STOP, TD(SCLN_COLN), SGUI_T(KC_Q), LT(MEDIA_FN, KC_J), LT(NUMPAD, KC_K), LCAG_T(KC_X), KC_LGUI, //
+ // | : | | | | | //
+ // DYNAMIC MACRO | TAP DANCE: ; | MOD TAP: SHIFT+GUI | LAYER TAP: MEDIA/F-KEYS | LAYER TAP: ATM NUMPAD | MOD TAP: CTL+ALT+GUI | //
+ //------------------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------------+------------------------//
+ // LAYERS SWITCHER | APPLICATION MENU | | | //
+ // | | | | SCROLL //
+ TG(LAYERS), KC_APP, KC_NLCK, KC_SLCK, KC_CAPS, //
+ // | | | | NUM //
+ // LAYER TOGGLE | | | | TAP DANCE: CAPS //
+ //------------------------+-------------------------+-------------------------+-------------------------+------------------------//
+
+ // HACKER DVORAK left thumb
+
+ //------------------------+------------------------//
+ // MOUSE WHEEL LEFT | MOUSE WHEEL RIGHT //
+ // | //
+ KC_WH_L, KC_WH_R, //
+ // | //
+ // | //
+ //-------------------------+-------------------------+------------------------//
+ // | | HOME //
+ // | | //
+ /* SPACE | BACKSPACE */ KC_HOME, //
+ // | | //
+ // | | //
+ KC_SPC, KC_BSPC, //-----------------------//
+ // | | END //
+ // | | //
+ /* | */ KC_END, //
+ // | | //
+ // | | //
+ //-------------------------+-------------------------+------------------------//
+
+ // HACKER DVORAK right hand
+
+ //------------------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------------+------------------------//
+ // | | | | | | //
+ // | | | | | | //
+ DYN_REC_START2, TD(APMR_PIPE), TD(RPRN_RBRC), TD(RCBR_RABK), TD(HASH_PERC), TD(ASTR_CIRC), XXXXXXX, //
+ // | | | | | | //
+ // | | | | | | //
+ //------------------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------------+------------------------//
+ // | | | | | | //
+ // | | | | | | //
+ DYN_MACRO_PLAY2, MEH_T(KC_F), ALL_T(KC_G), C_S_T(KC_C), LCA_T(KC_R), LAS_T(KC_L), TD(SLSH_BSLS), //
+ // | | | | | | //
+ // | | | | | | //
+ // |-------------------------+-------------------------+-------------------------+-------------------------+-------------------------+------------------------//
+ // | | | | | | //
+ // | | | | | | //
+ /*-----------------------*/ LGUI_T(KC_D), LT(MOUSE, KC_H), SFT_T(KC_T), CTL_T(KC_N), ALT_T(KC_S), TD(MINS_UNDS), //
+ // | | | | | | //
+ // | | | | | | //
+ // |-------------------------+-------------------------+-------------------------+-------------------------+-------------------------+------------------------//
+ // | | | | | | //
+ // | | | | | | //
+ KC_LGUI, LCAG_T(KC_B), LT(HYPER, KC_M), LT(MEDIA_FN, KC_W), SGUI_T(KC_V), LGAS_T(KC_Z), COMPOSE, //
+ // | | | | | | //
+ // | | | | | | ⎄ //
+ //------------------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------------+------------------------//
+ // | | | | //
+ // | | | | //
+ KC_LEFT, KC_UP, KC_DOWN, KC_RGHT, KC_SYSREQ, //
+ // | | | | //
+ // | | | | //
+ //------------------------+-------------------------+-------------------------+-------------------------+------------------------//
+
+ // HACKER DVORAK right thumb
+
+ //------------------------+------------------------//
+ // | //
+ // | //
+ KC_WH_U, KC_WH_D, //
+ // | //
+ // | //
+ //------------------------+-------------------------+------------------------//
+ // | | //
+ // | | //
+ KC_PGUP, // | //
+ // | | //
+ // | | //
+ //------------------------| | //
+ // | | //
+ // | | //
+ KC_PGDN, KC_DEL, KC_ENT //
+ // | | //
+ // | | //
+ //------------------------+-------------------------+------------------------//
+
+ ),
+
+ [PLOVER] = LAYOUT_ergodox(
+ // left hand
+ XXXXXXX, XXXXXXX, KC_MS_BTN2, KC_MS_UP, KC_MS_BTN1, KC_MS_BTN3, GUI_T(KC_NO),
+ KC_ESC, KC_MS_BTN4, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_MS_BTN5, PV_NUM,
+ KC_TAB, PV_LS, PV_LT, PV_LP, PV_LH, PV_STAR,
+ KC_CLCK, PV_LS, PV_LK, PV_LW, PV_LR, PV_STAR, PV_STAR,
+ XXXXXXX, TG(LAYERS), PV_NUM, PV_NUM, PV_NUM,
+
+ // left thumb
+ KC_SPACE, KC_BSPACE,
+ KC_HOME,
+ PV_A, PV_O, KC_END,
+
+ // right hand
+ KC_MS_ACCEL2, KC_MS_ACCEL1, KC_MS_ACCEL0, KC_UP, KC_APPLICATION, XXXXXXX, KC_MS_WH_UP,
+ PV_NUM, KC_MS_WH_LEFT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_MS_WH_RIGHT, KC_MS_WH_DOWN,
+ PV_STAR, PV_RF, PV_RP, PV_RL, PV_RT, PV_RD,
+ PV_STAR, PV_STAR, PV_RR, PV_RB, PV_RG, PV_RS, PV_RZ,
+ PV_NUM, PV_NUM, PV_NUM, PV_NUM, XXXXXXX,
+
+ // right thumb
+ KC_DELETE, KC_ENTER,
+ KC_PGUP,
+ KC_PGDOWN, PV_E, PV_U
+ ),
+
+ [GAMING] = LAYOUT_ergodox(
+ // left hand
+ KC_ESCAPE, GUI_T(KC_MINS), KC_I, KC_O, KC_P, ALGR_T(KC_EQL), KC_T,
+ KC_TAB, KC_LALT, KC_Q, KC_W, KC_E, ALL_T(KC_R), KC_G,
+ LT(MOUSE, KC_GRV), KC_LCTRL, KC_A, KC_S, KC_D, MEH_T(KC_F),
+ KC_BSLS, KC_LSHIFT, KC_Z, KC_X, KC_C, SCMD_T(KC_V), KC_M,
+ XXXXXXX, TG(LAYERS), KC_COMM, KC_DOT, KC_LBRC,
+
+ // left thumb
+ MO(MEDIA_FN), KC_NLCK,
+ KC_SCLN,
+ KC_SPACE, KC_ENTER, KC_BSPACE,
+
+ // right hand
+ KC_QUOT, KC_Y, KC_K, KC_U, KC_KP_7, KC_KP_8, KC_KP_9,
+ KC_MS_WH_UP, KC_H, KC_J, KC_L, KC_KP_4, KC_KP_2, KC_KP_6,
+ KC_B, KC_MS_UP, KC_N, KC_KP_1, KC_KP_5, KC_KP_3,
+ KC_MS_WH_DOWN, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_UP, KC_KP_0, KC_SLASH,
+ KC_RBRC, KC_LEFT, KC_DOWN, KC_RIGHT, XXXXXXX,
+
+ // right thumb
+ KC_MS_BTN5, MO(HYPER),
+ KC_MS_BTN4,
+ KC_MS_BTN3, KC_MS_BTN2, KC_MS_BTN1
+ ),
+
+ [ARROWS] = LAYOUT_ergodox(
+ // left hand
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, SCMD_T(KC_NO), MEH_T(KC_NO), ALL_T(KC_NO), XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, KC_LCTRL, KC_LSHIFT, XXXXXXX, _______, XXXXXXX,
+ XXXXXXX, KC_RALT, KC_LALT, GUI_T(KC_NO), XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ // left thumb
+ XXXXXXX, XXXXXXX,
+ KC_HOME,
+ KC_SPACE, KC_BSPACE, KC_END,
+
+ // right hand
+ LGUI(KC_X), XXXXXXX, LCTL(KC_X), KC_MS_WH_UP, XXXXXXX, XXXXXXX, XXXXXXX,
+ LGUI(KC_C), XXXXXXX, LCTL(KC_C), KC_UP, SCTL(KC_C), LCTL(KC_Z), LGUI(KC_Z),
+ KC_MS_WH_LEFT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_MS_WH_RIGHT, KC_APPLICATION,
+ LGUI(KC_V), XXXXXXX, LCTL(KC_V), KC_MS_WH_DOWN, SCTL(KC_V), LCTL(KC_Y), SGUI(KC_Z),
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SLCK,
+
+ // right thumb
+ XXXXXXX, XXXXXXX,
+ KC_PGUP,
+ KC_PGDOWN, KC_DELETE, KC_ENTER
+ ),
+
+ [MOUSE] = LAYOUT_ergodox(
+ // left hand
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_WH_UP, LCTL(KC_X), XXXXXXX, LGUI(KC_X),
+ LGUI(KC_Z), LCTL(KC_Z), SCTL(KC_C), KC_MS_UP, LCTL(KC_C), KC_MS_BTN4, LGUI(KC_C),
+ KC_MS_BTN3, KC_MS_WH_LEFT, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_MS_WH_RIGHT,
+ LGUI(KC_Z), LCTL(KC_Y), SCTL(KC_V), KC_MS_WH_DOWN, LCTL(KC_V), KC_MS_BTN5, LGUI(KC_V),
+ KC_SLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ // left thumb
+ XXXXXXX, XXXXXXX,
+ XXXXXXX,
+ KC_MS_BTN1, KC_MS_BTN2, XXXXXXX,
+
+ // right hand
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, ALL_T(KC_NO), MEH_T(KC_NO), SCMD_T(KC_NO), XXXXXXX,
+ XXXXXXX, _______, KC_MS_ACCEL1, KC_LSHIFT, KC_LCTRL, KC_MS_ACCEL2,
+ XXXXXXX, XXXXXXX, XXXXXXX, GUI_T(KC_NO), KC_LALT, KC_RALT, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ // right thumb
+ XXXXXXX, XXXXXXX,
+ XXXXXXX,
+ XXXXXXX, XXXXXXX, KC_MS_ACCEL0
+ ),
+
+ [NUMPAD] = LAYOUT_ergodox(
+ // left hand
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, GUI_T(KC_NO), XXXXXXX, ALL_T(KC_NO), XXXXXXX, XXXXXXX,
+ _______, KC_LCTRL, KC_LSHIFT, _______, MEH_T(KC_NO), XXXXXXX,
+ XXXXXXX, KC_RALT, KC_LALT, XXXXXXX, SCMD_T(KC_NO), XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ // left thumb
+ XXXXXXX, XXXXXXX,
+ KC_HOME,
+ KC_SPACE, KC_BSPACE, KC_END,
+
+ // right hand
+ KC_X, KC_A, KC_B, KC_C, KC_D, KC_E, KC_F,
+ KC_O, KC_I, KC_1, KC_2, KC_3, KC_SLSH, KC_PERC,
+ KC_M, KC_4, KC_5, KC_6, KC_PLUS, KC_MINS,
+ KC_L, KC_J, KC_7, KC_8, KC_9, KC_ASTR, KC_CIRC,
+ KC_DOT, KC_0, KC_COMM, KC_UNDS, KC_BSLS,
+
+ // right thumb
+ XXXXXXX, XXXXXXX,
+ KC_PGUP,
+ KC_PGDOWN, KC_DELETE, KC_ENTER
+ ),
+
+ [LAYERS] = LAYOUT_ergodox(
+ // left hand
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ // left thumb
+ XXXXXXX, XXXXXXX,
+ XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX,
+
+ // right hand
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, TO(DVORAK), TO(PLOVER), TO(GAMING), XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ // right thumb
+ XXXXXXX, XXXXXXX,
+ XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX
+ ),
+
+ [MEDIA_FN] = LAYOUT_ergodox(
+ // left hand
+ KC_VOLD, KC_MUTE, RGB_TOG, XXXXXXX, KC_MAIL, KC_FIND, KC_WWW_REFRESH,
+ KC_MPRV, KC_F9, KC_F7, KC_F5, KC_F3, KC_F1, KC_WWW_HOME,
+ KC_PAUS, KC_F19, KC_F17, KC_F15, KC_F13, KC_F11,
+ RGB_HUD, XXXXXXX, XXXXXXX, _______, KC_F23, KC_F21, KC_WWW_BACK,
+ RGB_VAD, KC_CLCK, KC_PSCREEN, XXXXXXX, MO(FIRMWARE),
+
+ // left thumb
+ _______, XXXXXXX,
+ XXXXXXX,
+ XXXXXXX, XXXXXXX, KC_MEDIA_EJECT,
+
+ // right hand
+ KC_WWW_FAVORITES, KC_MYCM, KC_CALC, XXXXXXX, RGB_MOD, RGB_M_P, KC_VOLU,
+ KC_WWW_SEARCH, KC_F2, KC_F4, KC_F6, KC_F8, KC_F10, KC_MNXT,
+ KC_F12, KC_F14, KC_F16, KC_F18, KC_F20, KC_MPLY,
+ KC_WWW_FORWARD, KC_F22, KC_F24, _______, XXXXXXX, XXXXXXX, RGB_HUI,
+ KC_PWR, XXXXXXX, KC_SLEP, KC_WAKE, RGB_VAI,
+
+ // right thumb
+ XXXXXXX, XXXXXXX,
+ XXXXXXX,
+ RGB_GREEN, XXXXXXX, XXXXXXX
+ ),
+
+ [HYPER] = LAYOUT_ergodox(
+ // left hand
+ XXXXXXX, HYPR(KC_F1), HYPR(KC_F2), HYPR(KC_F3), HYPR(KC_F4), HYPR(KC_F5), XXXXXXX,
+ XXXXXXX, HYPR(KC_F6), HYPR(KC_F7), HYPR(KC_F8), HYPR(KC_F9), HYPR(KC_F10), XXXXXXX,
+ XXXXXXX, HYPR(KC_F11), HYPR(KC_F12), HYPR(KC_F13), HYPR(KC_F14), HYPR(KC_F15),
+ XXXXXXX, HYPR(KC_F16), HYPR(KC_F17), HYPR(KC_F18), HYPR(KC_F19), HYPR(KC_F20), XXXXXXX,
+ XXXXXXX, HYPR(KC_F21), HYPR(KC_F22), HYPR(KC_F23), HYPR(KC_F24),
+
+ // left thumb
+ XXXXXXX, XXXXXXX,
+ XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX,
+
+ // right hand
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ // right thumb
+ XXXXXXX, _______,
+ XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX
+ ),
+
+ [FIRMWARE] = LAYOUT_ergodox(
+
+ // left hand
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
+
+ // left thumb
+ XXXXXXX, XXXXXXX,
+ XXXXXXX,
+ RESET, XXXXXXX, XXXXXXX,
+
+ // right hand
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ // right thumb
+ XXXXXXX, XXXXXXX,
+ XXXXXXX,
+ XXXXXXX, XXXXXXX, EEP_RST
+ )
+};
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/keycodes/aliases_definitions.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/keycodes/aliases_definitions.c
new file mode 100644
index 0000000000..e5eba18202
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/keycodes/aliases_definitions.c
@@ -0,0 +1,5 @@
+// Keycode aliases
+#define SCTL(kc) LSFT(LCTL(kc)) // Modifier keys: SHIFT+CTRL+kc combination.
+#define LGAS_T(kc) MT(MOD_LGUI | MOD_LALT | MOD_LSFT, kc) // Mod tap: kc when tapped, GUI+ALT+SHIFT when held.
+#define LAS_T(kc) MT(MOD_LALT | MOD_LSFT, kc) // Mod tap: kc when tapped, ALT+SHIFT whin held.
+#define COMPOSE KC_RALT // Compose key (used to input characters like á, ñ, ü).
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/keycodes/custom_keycodes.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/keycodes/custom_keycodes.c
new file mode 100644
index 0000000000..368062172b
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/keycodes/custom_keycodes.c
@@ -0,0 +1,8 @@
+// Define custom user keycodes:
+enum custom_keycodes {
+ PLACEHOLDER = SAFE_RANGE, // Can always be here.
+ RGB_GREEN, // To set default RGB layer as green once.
+ MY_CUSTOM_MACRO, // Custom macro example.
+ MY_OTHER_MACRO, // Custom macro example.
+ DYNAMIC_MACRO_RANGE // Should always be the last.
+};
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/keymap.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/keymap.c
index c42b551084..af06d2bd81 100644
--- a/keyboards/ergodox_ez/keymaps/hacker_dvorak/keymap.c
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/keymap.c
@@ -1,781 +1,19 @@
-#include QMK_KEYBOARD_H
-#include "keymap_dvorak.h"
-#include "sendstring_dvorak.h"
-#include "keymap_plover.h"
-#include "keymap_plover_dvorak.h"
-
-
-#define SCTL(kc) LSFT(LCTL(kc))
-
-// Layers
-enum layers {
- DVORAK_US = 0,
- PLOVER_US,
- GAMING_US,
- ARROWS_US,
- MOUSE_US,
- NUMPAD_US,
- LAYERS_US,
- DVORAK_DV,
- PLOVER_DV,
- GAMING_DV,
- ARROWS_DV,
- MOUSE_DV,
- NUMPAD_DV,
- LAYERS_DV,
- MEDIA_FN,
- HYPER_FN,
- MEH_FN,
- MEH_FN_PLUS,
- FIRMWARE
-};
-
-int CAPS_LOCK = 0;
-int NUM_LOCK = 0;
-int SCROLL_LOCK = 0;
-
-enum tap_dances {
- TD_ESC_CAPS = 0
-};
-
-qk_tap_dance_action_t tap_dance_actions[] = {
- [TD_ESC_CAPS] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_CLCK)
-};
-
-
-enum custom_keycodes {
- PLACEHOLDER = SAFE_RANGE, // can always be here
- RGB_GREEN // to set default RGB layer as green once
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /*
- * ,--------------------------------------------------. ,--------------------------------------------------.
- * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | | 38 | 39 | 40 | 41 | 42 | 43 | 44 |
- * |--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
- * | 7 | 8 | 9 | 10 | 11 | 12 | 13 | | 45 | 46 | 47 | 48 | 49 | 50 | 51 |
- * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
- * | 14 | 15 | 16 | 17 | 18 | 19 |------| |------| 52 | 53 | 54 | 55 | 56 | 57 |
- * |--------+------+------+------+------+------| 26 | | 58 |------+------+------+------+------+--------|
- * | 20 | 21 | 22 | 23 | 24 | 25 | | | | 59 | 60 | 61 | 62 | 63 | 64 |
- * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
- * | 27 | 28 | 29 | 30 | 31 | | 65 | 66 | 67 | 68 | 69 |
- * `----------------------------------' `----------------------------------'
- * ,-------------. ,-------------.
- * | 32 | 33 | | 70 | 71 |
- * ,------+------+------| |------+------+------.
- * | | | 34 | | 72 | | |
- * | 35 | 36 |------| |------| 74 | 75 |
- * | | | 37 | | 73 | | |
- * `--------------------' `--------------------'
- */
- [DVORAK_US] = LAYOUT_ergodox(
- // left hand
- KC_ESC, KC_LABK, KC_LCBR, KC_LBRC, KC_LPRN, KC_EXLM, KC_AMPR,
- KC_TAB, KC_QUOT, SCMD_T(KC_COMM), MEH_T(KC_DOT), ALL_T(KC_P), KC_Y, KC_AT,
- KC_EQL, CTL_T(KC_A), SFT_T(KC_O), LT(NUMPAD_US, KC_E), LT(ARROWS_US, KC_U), KC_I,
- KC_BSLS, ALGR_T(KC_SCLN), ALT_T(KC_Q), LT(MEDIA_FN, KC_J), GUI_T(KC_K), KC_X, KC_PERC,
- MO(MEH_FN), TG(LAYERS_US), KC_CIRC, KC_PLUS, KC_COLN,
-
- // left thumb
- KC_LEFT, KC_RGHT,
- KC_HOME,
- KC_SPC, KC_BSPC, KC_END,
-
- // right hand
- KC_PIPE, KC_QUES, KC_RPRN, KC_RBRC, KC_RCBR, KC_RABK, KC_ASTR,
- KC_HASH, KC_F, ALL_T(KC_G), MEH_T(KC_C), SCMD_T(KC_R), KC_L, KC_SLSH,
- KC_D, LT(MOUSE_US, KC_H), LT(HYPER_FN, KC_T), SFT_T(KC_N), CTL_T(KC_S), KC_MINS,
- KC_DLR, KC_B, GUI_T(KC_M), LT(MEDIA_FN, KC_W), ALT_T(KC_V), ALGR_T(KC_Z), KC_GRV,
- KC_DQUO, KC_UNDS, KC_TILD, TG(DVORAK_DV), MO(MEH_FN_PLUS),
-
- // right thumb
- KC_UP, KC_DOWN,
- KC_PGUP,
- KC_PGDN, KC_DEL, KC_ENT
- ),
-
- [PLOVER_US] = LAYOUT_ergodox(
- // left hand
- XXXXXXX, XXXXXXX, KC_MS_BTN2, KC_MS_UP, KC_MS_BTN1, KC_MS_BTN3, GUI_T(KC_NO),
- KC_ESC, KC_MS_BTN4, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_MS_BTN5, PV_NUM,
- KC_TAB, PV_LS, PV_LT, PV_LP, PV_LH, PV_STAR,
- KC_CLCK, PV_LS, PV_LK, PV_LW, PV_LR, PV_STAR, PV_STAR,
- MO(MEH_FN), TG(LAYERS_US), PV_NUM, PV_NUM, PV_NUM,
-
- // left thumb
- KC_SPACE, KC_BSPACE,
- KC_HOME,
- PV_A, PV_O, KC_END,
-
- // right hand
- KC_MS_ACCEL2, KC_MS_ACCEL1, KC_MS_ACCEL0, KC_UP, KC_APPLICATION, XXXXXXX, KC_MS_WH_UP,
- PV_NUM, KC_MS_WH_LEFT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_MS_WH_RIGHT, KC_MS_WH_DOWN,
- PV_STAR, PV_RF, PV_RP, PV_RL, PV_RT, PV_RD,
- PV_STAR, PV_STAR, PV_RR, PV_RB, PV_RG, PV_RS, PV_RZ,
- PV_NUM, PV_NUM, PV_NUM, PV_NUM, MO(MEH_FN_PLUS),
-
- // right thumb
- KC_DELETE, KC_ENTER,
- KC_PGUP,
- KC_PGDOWN, PV_E, PV_U
- ),
-
- [GAMING_US] = LAYOUT_ergodox(
- // left hand
- KC_ESCAPE, GUI_T(KC_MINS), KC_I, KC_O, KC_P, ALGR_T(KC_EQL), KC_T,
- KC_TAB, KC_LALT, KC_Q, KC_W, KC_E, ALL_T(KC_R), KC_G,
- LT(MOUSE_US, KC_GRV), KC_LCTRL, KC_A, KC_S, KC_D, MEH_T(KC_F),
- KC_BSLS, KC_LSHIFT, KC_Z, KC_X, KC_C, SCMD_T(KC_V), KC_M,
- MO(MEH_FN), TG(LAYERS_US), KC_COMM, KC_DOT, KC_LBRC,
-
- // left thumb
- MO(MEDIA_FN), KC_NLCK,
- KC_SCLN,
- KC_SPACE, KC_ENTER, KC_BSPACE,
-
- // right hand
- KC_QUOT, KC_Y, KC_K, KC_U, KC_KP_7, KC_KP_8, KC_KP_9,
- KC_MS_WH_UP, KC_H, KC_J, KC_L, KC_KP_4, KC_KP_2, KC_KP_6,
- KC_B, KC_MS_UP, KC_N, KC_KP_1, KC_KP_5, KC_KP_3,
- KC_MS_WH_DOWN, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_UP, KC_KP_0, KC_SLASH,
- KC_RBRC, KC_LEFT, KC_DOWN, KC_RIGHT, MO(MEH_FN_PLUS),
-
- // right thumb
- KC_MS_BTN5, MO(HYPER_FN),
- KC_MS_BTN4,
- KC_MS_BTN3, KC_MS_BTN2, KC_MS_BTN1
- ),
-
- [ARROWS_US] = LAYOUT_ergodox(
- // left hand
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, SCMD_T(KC_NO), MEH_T(KC_NO), ALL_T(KC_NO), XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, KC_LCTRL, KC_LSHIFT, XXXXXXX, _______, XXXXXXX,
- XXXXXXX, KC_RALT, KC_LALT, GUI_T(KC_NO), XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
-
- // left thumb
- XXXXXXX, XXXXXXX,
- KC_HOME,
- KC_SPACE, KC_BSPACE, KC_END,
-
- // right hand
- LGUI(KC_X), XXXXXXX, LCTL(KC_X), KC_MS_WH_UP, XXXXXXX, XXXXXXX, XXXXXXX,
- LGUI(KC_C), XXXXXXX, LCTL(KC_C), KC_UP, SCTL(KC_C), LCTL(KC_Z), LGUI(KC_Z),
- KC_MS_WH_LEFT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_MS_WH_RIGHT, KC_APPLICATION,
- LGUI(KC_V), XXXXXXX, LCTL(KC_V), KC_MS_WH_DOWN, SCTL(KC_V), LCTL(KC_Y), SGUI(KC_Z),
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SLCK,
-
- // right thumb
- XXXXXXX, XXXXXXX,
- KC_PGUP,
- KC_PGDOWN, KC_DELETE, KC_ENTER
- ),
-
- [MOUSE_US] = LAYOUT_ergodox(
- // left hand
- XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_WH_UP, LCTL(KC_X), XXXXXXX, LGUI(KC_X),
- LGUI(KC_Z), LCTL(KC_Z), SCTL(KC_C), KC_MS_UP, LCTL(KC_C), KC_MS_BTN4, LGUI(KC_C),
- KC_MS_BTN3, KC_MS_WH_LEFT, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_MS_WH_RIGHT,
- LGUI(KC_Z), LCTL(KC_Y), SCTL(KC_V), KC_MS_WH_DOWN, LCTL(KC_V), KC_MS_BTN5, LGUI(KC_V),
- KC_SLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
-
- // left thumb
- XXXXXXX, XXXXXXX,
- XXXXXXX,
- KC_MS_BTN1, KC_MS_BTN2, XXXXXXX,
-
- // right hand
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, ALL_T(KC_NO), MEH_T(KC_NO), SCMD_T(KC_NO), XXXXXXX,
- XXXXXXX, _______, KC_MS_ACCEL1, KC_LSHIFT, KC_LCTRL, KC_MS_ACCEL2,
- XXXXXXX, XXXXXXX, XXXXXXX, GUI_T(KC_NO), KC_LALT, KC_RALT, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
-
- // right thumb
- XXXXXXX, XXXXXXX,
- XXXXXXX,
- XXXXXXX, XXXXXXX, KC_MS_ACCEL0
- ),
-
- [NUMPAD_US] = LAYOUT_ergodox(
- // left hand
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, GUI_T(KC_NO), XXXXXXX, ALL_T(KC_NO), XXXXXXX, XXXXXXX,
- _______, KC_LCTRL, KC_LSHIFT, _______, MEH_T(KC_NO), XXXXXXX,
- XXXXXXX, KC_RALT, KC_LALT, XXXXXXX, SCMD_T(KC_NO), XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
-
- // left thumb
- XXXXXXX, XXXXXXX,
- KC_HOME,
- KC_SPACE, KC_BSPACE, KC_END,
-
- // right hand
- KC_X, KC_A, KC_B, KC_C, KC_D, KC_E, KC_F,
- KC_O, KC_I, KC_1, KC_2, KC_3, KC_SLSH, KC_PERC,
- KC_M, KC_4, KC_5, KC_6, KC_PLUS, KC_MINS,
- KC_L, KC_J, KC_7, KC_8, KC_9, KC_ASTR, KC_CIRC,
- KC_DOT, KC_0, KC_COMM, KC_UNDS, KC_BSLS,
-
- // right thumb
- XXXXXXX, XXXXXXX,
- KC_PGUP,
- KC_PGDOWN, KC_DELETE, KC_ENTER
- ),
-
- [LAYERS_US] = LAYOUT_ergodox(
- // left hand
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX,
-
- // left thumb
- XXXXXXX, XXXXXXX,
- XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX,
-
- // right hand
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, TO(DVORAK_US), TO(PLOVER_US), TO(GAMING_US), XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
-
- // right thumb
- XXXXXXX, XXXXXXX,
- XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX
- ),
-
- [DVORAK_DV] = LAYOUT_ergodox(
- // left hand
- KC_ESC, DV_LABK, DV_LCBR, DV_LBRC, DV_LPRN, DV_EXLM, DV_AMPR,
- KC_TAB, DV_QUOT, SCMD_T(DV_COMM), MEH_T(DV_DOT), ALL_T(DV_P), DV_Y, DV_AT,
- DV_EQL, CTL_T(DV_A), SFT_T(DV_O), LT(NUMPAD_DV, DV_E), LT(ARROWS_DV, DV_U), DV_I,
- DV_BSLS, ALGR_T(DV_SCLN), ALT_T(DV_Q), LT(MEDIA_FN, DV_J), GUI_T(DV_K), DV_X, DV_PERC,
- MO(MEH_FN), TG(LAYERS_DV), DV_CIRC, DV_PLUS, DV_COLN,
-
- // left thumb
- KC_LEFT, KC_RGHT,
- KC_HOME,
- KC_SPC, KC_BSPC, KC_END,
-
- // right hand
- DV_PIPE, DV_QUES, DV_RPRN, DV_RBRC, DV_RCBR, DV_RABK, DV_ASTR,
- DV_HASH, DV_F, ALL_T(DV_G), MEH_T(DV_C), SCMD_T(DV_R), DV_L, DV_SLSH,
- DV_D, LT(MOUSE_DV, DV_H), LT(HYPER_FN, DV_T), SFT_T(DV_N), CTL_T(DV_S), DV_MINS,
- DV_DLR, DV_B, GUI_T(DV_M), LT(MEDIA_FN, DV_W), ALT_T(DV_V), ALGR_T(DV_Z), DV_GRV,
- DV_DQUO, DV_UNDS, DV_TILD, _______, MO(MEH_FN_PLUS),
-
- // right thumb
- KC_UP, KC_DOWN,
- KC_PGUP,
- KC_PGDN, KC_DEL, KC_ENT
- ),
-
- [PLOVER_DV] = LAYOUT_ergodox(
- // left hand
- XXXXXXX, XXXXXXX, KC_MS_BTN2, KC_MS_UP, KC_MS_BTN1, KC_MS_BTN3, GUI_T(KC_NO),
- KC_ESC, KC_MS_BTN4, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_MS_BTN5, PD_NUM,
- KC_TAB, PD_LS, PD_LT, PD_LP, PD_LH, PD_STAR,
- KC_CLCK, PD_LS, PD_LK, PD_LW, PD_LR, PD_STAR, PD_STAR,
- MO(MEH_FN), TG(LAYERS_DV), PD_NUM, PD_NUM, PD_NUM,
-
- // left thumb
- KC_SPACE, KC_BSPACE,
- KC_HOME,
- PD_A, PD_O, KC_END,
-
- // right hand
- KC_MS_ACCEL2, KC_MS_ACCEL1, KC_MS_ACCEL0, KC_UP, KC_APPLICATION, XXXXXXX, KC_MS_WH_UP,
- PD_NUM, KC_MS_WH_LEFT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_MS_WH_RIGHT, KC_MS_WH_DOWN,
- PD_STAR, PD_RF, PD_RP, PD_RL, PD_RT, PD_RD,
- PD_STAR, PD_STAR, PD_RR, PD_RB, PD_RG, PD_RS, PD_RZ,
- PD_NUM, PD_NUM, PD_NUM, PD_NUM, MO(MEH_FN_PLUS),
-
- // right thumb
- KC_DELETE, KC_ENTER,
- KC_PGUP,
- KC_PGDOWN, PD_E, PD_U
- ),
-
- [GAMING_DV] = LAYOUT_ergodox(
- // left hand
- KC_ESCAPE, GUI_T(DV_MINS), DV_I, DV_O, DV_P, ALGR_T(DV_EQL), DV_T,
- KC_TAB, KC_LALT, DV_Q, DV_W, DV_E, ALL_T(DV_R), DV_G,
- LT(MOUSE_DV, DV_GRV), KC_LCTRL, DV_A, DV_S, DV_D, MEH_T(DV_F),
- DV_BSLS, KC_LSHIFT, DV_Z, DV_X, DV_C, SCMD_T(DV_V), DV_M,
- MO(MEH_FN), TG(LAYERS_DV), DV_COMM, DV_DOT, DV_LBRC,
-
- // left thumb
- MO(MEDIA_FN), KC_NLCK,
- DV_SCLN,
- KC_SPACE, KC_ENTER, KC_BSPACE,
-
- // right hand
- DV_QUOT, DV_Y, DV_K, DV_U, KC_KP_7, KC_KP_8, KC_KP_9,
- KC_MS_WH_UP, DV_H, DV_J, DV_L, KC_KP_4, KC_KP_2, KC_KP_6,
- DV_B, KC_MS_UP, DV_N, KC_KP_1, KC_KP_5, KC_KP_3,
- KC_MS_WH_DOWN, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_UP, KC_KP_0, DV_SLSH,
- DV_RBRC, KC_LEFT, KC_DOWN, KC_RIGHT, MO(MEH_FN_PLUS),
-
- // right thumb
- KC_MS_BTN5, MO(HYPER_FN),
- KC_MS_BTN4,
- KC_MS_BTN3, KC_MS_BTN2, KC_MS_BTN1
- ),
-
- [ARROWS_DV] = LAYOUT_ergodox(
- // left hand
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, SCMD_T(KC_NO), MEH_T(KC_NO), ALL_T(KC_NO), XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, KC_LCTRL, KC_LSHIFT, XXXXXXX, _______, XXXXXXX,
- XXXXXXX, KC_RALT, KC_LALT, GUI_T(KC_NO), XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
-
- // left thumb
- XXXXXXX, XXXXXXX,
- KC_HOME,
- KC_SPACE, KC_BSPACE, KC_END,
-
- // right hand
- LGUI(DV_X), XXXXXXX, LCTL(DV_X), KC_MS_WH_UP, XXXXXXX, XXXXXXX, XXXXXXX,
- LGUI(DV_C), XXXXXXX, LCTL(DV_C), KC_UP, SCTL(DV_C), LCTL(DV_Z), LGUI(DV_Z),
- KC_MS_WH_LEFT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_MS_WH_RIGHT, KC_APPLICATION,
- LGUI(DV_V), XXXXXXX, LCTL(DV_V), KC_MS_WH_DOWN, SCTL(DV_V), LCTL(DV_Y), SGUI(DV_Z),
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SLCK,
-
- // right thumb
- XXXXXXX, XXXXXXX,
- KC_PGUP,
- KC_PGDOWN, KC_DELETE, KC_ENTER
- ),
-
- [MOUSE_DV] = LAYOUT_ergodox(
- // left hand
- XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_WH_UP, LCTL(DV_X), XXXXXXX, LGUI(DV_X),
- LGUI(DV_Z), LCTL(DV_Z), SCTL(DV_C), KC_MS_UP, LCTL(DV_C), KC_MS_BTN4, LGUI(DV_C),
- KC_MS_BTN3, KC_MS_WH_LEFT, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_MS_WH_RIGHT,
- LGUI(DV_Z), LCTL(DV_Y), SCTL(DV_V), KC_MS_WH_DOWN, LCTL(DV_V), KC_MS_BTN5, LGUI(DV_V),
- KC_SLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
-
- // left thumb
- XXXXXXX, XXXXXXX,
- XXXXXXX,
- KC_MS_BTN1, KC_MS_BTN2, XXXXXXX,
-
- // right hand
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, ALL_T(KC_NO), MEH_T(KC_NO), SCMD_T(KC_NO), XXXXXXX,
- XXXXXXX, _______, KC_MS_ACCEL1, KC_LSHIFT, KC_LCTRL, KC_MS_ACCEL2,
- XXXXXXX, XXXXXXX, XXXXXXX, GUI_T(KC_NO), KC_LALT, KC_RALT, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
-
- // right thumb
- XXXXXXX, XXXXXXX,
- XXXXXXX,
- XXXXXXX, XXXXXXX, KC_MS_ACCEL0
- ),
-
- [NUMPAD_DV] = LAYOUT_ergodox(
- // left hand
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, GUI_T(KC_NO), XXXXXXX, ALL_T(KC_NO), XXXXXXX, XXXXXXX,
- _______, KC_LCTRL, KC_LSHIFT, _______, MEH_T(KC_NO), XXXXXXX,
- XXXXXXX, KC_RALT, KC_LALT, XXXXXXX, SCMD_T(KC_NO), XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
-
- // left thumb
- XXXXXXX, XXXXXXX,
- KC_HOME,
- KC_SPACE, KC_BSPACE, KC_END,
-
- // right hand
- DV_X, DV_A, DV_B, DV_C, DV_D, DV_E, DV_F,
- DV_O, DV_I, DV_1, DV_2, DV_3, DV_SLSH, DV_PERC,
- DV_M, DV_4, DV_5, DV_6, DV_PLUS, DV_MINS,
- DV_L, DV_J, DV_7, DV_8, DV_9, DV_ASTR, DV_CIRC,
- DV_DOT, DV_0, DV_COMM, DV_UNDS, DV_BSLS,
-
- // right thumb
- XXXXXXX, XXXXXXX,
- KC_PGUP,
- KC_PGDOWN, KC_DELETE, KC_ENTER
- ),
-
- [LAYERS_DV] = LAYOUT_ergodox(
- // left hand
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX,
-
- // left thumb
- XXXXXXX, XXXXXXX,
- XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX,
-
- // right hand
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, TO(DVORAK_DV), TO(PLOVER_DV), TO(GAMING_DV), XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
-
- // right thumb
- XXXXXXX, XXXXXXX,
- XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX
- ),
-
- [MEDIA_FN] = LAYOUT_ergodox(
- // left hand
- KC_AUDIO_VOL_DOWN, KC_AUDIO_MUTE, RGB_TOG, XXXXXXX, KC_MAIL, KC_FIND, KC_WWW_REFRESH,
- KC_MEDIA_PREV_TRACK, KC_F9, KC_F7, KC_F5, KC_F3, KC_F1, KC_WWW_HOME,
- KC_PAUSE, KC_F19, KC_F17, KC_F15, KC_F13, KC_F11,
- RGB_HUD, XXXXXXX, XXXXXXX, _______, KC_F23, KC_F21, KC_WWW_BACK,
- RGB_VAD, KC_CLCK, KC_PSCREEN, XXXXXXX, MO(FIRMWARE),
-
- // left thumb
- _______, XXXXXXX,
- XXXXXXX,
- XXXXXXX, XXXXXXX, KC_MEDIA_EJECT,
-
- // right hand
- KC_WWW_FAVORITES, KC_MY_COMPUTER, KC_CALCULATOR, XXXXXXX, RGB_MOD, RGB_M_P, KC_AUDIO_VOL_UP,
- KC_WWW_SEARCH, KC_F2, KC_F4, KC_F6, KC_F8, KC_F10, KC_MEDIA_NEXT_TRACK,
- KC_F12, KC_F14, KC_F16, KC_F18, KC_F20, KC_MEDIA_PLAY_PAUSE,
- KC_WWW_FORWARD, KC_F22, KC_F24, _______, XXXXXXX, XXXXXXX, RGB_HUI,
- KC_SYSTEM_POWER, XXXXXXX, KC_SYSTEM_SLEEP, KC_SYSTEM_WAKE, RGB_VAI,
-
- // right thumb
- XXXXXXX, XXXXXXX,
- XXXXXXX,
- RGB_GREEN, XXXXXXX, XXXXXXX
- ),
-
- [HYPER_FN] = LAYOUT_ergodox(
- // left hand
- XXXXXXX, HYPR(KC_F1), HYPR(KC_F2), HYPR(KC_F3), HYPR(KC_F4), HYPR(KC_F5), XXXXXXX,
- XXXXXXX, HYPR(KC_F6), HYPR(KC_F7), HYPR(KC_F8), HYPR(KC_F9), HYPR(KC_F10), XXXXXXX,
- XXXXXXX, HYPR(KC_F11), HYPR(KC_F12), HYPR(KC_F13), HYPR(KC_F14), HYPR(KC_F15),
- XXXXXXX, HYPR(KC_F16), HYPR(KC_F17), HYPR(KC_F18), HYPR(KC_F19), HYPR(KC_F20), XXXXXXX,
- XXXXXXX, HYPR(KC_F21), HYPR(KC_F22), HYPR(KC_F23), HYPR(KC_F24),
-
- // left thumb
- XXXXXXX, XXXXXXX,
- XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX,
-
- // right hand
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
-
- // right thumb
- XXXXXXX, _______,
- XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX
- ),
-
- [MEH_FN] = LAYOUT_ergodox(
- // left hand
- LCA(KC_F11), LCA(KC_F9), LCA(KC_F7), LCA(KC_F5), LCA(KC_F3), LCA(KC_F1), XXXXXXX,
- LCAG(KC_F11), LCAG(KC_F9), LCAG(KC_F7), LCAG(KC_F5), LCAG(KC_F3), LCAG(KC_F1), XXXXXXX,
- MEH(KC_F11), MEH(KC_F9), MEH(KC_F7), MEH(KC_F5), MEH(KC_F3), MEH(KC_F1),
- SGUI(KC_F11), SGUI(KC_F9), SGUI(KC_F7), SGUI(KC_F5), SGUI(KC_F3), SGUI(KC_F1), XXXXXXX,
- _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
-
- // left thumb
- XXXXXXX, XXXXXXX,
- XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX,
-
- // right hand
- XXXXXXX, LCA(KC_F2), LCA(KC_F4), LCA(KC_F6), LCA(KC_F8), LCA(KC_F10), LCA(KC_F12),
- XXXXXXX, LCAG(KC_F2), LCAG(KC_F4), LCAG(KC_F6), LCAG(KC_F8), LCAG(KC_F10), LCAG(KC_F12),
- MEH(KC_F2), MEH(KC_F4), MEH(KC_F6), MEH(KC_F8), MEH(KC_F10), MEH(KC_F12),
- XXXXXXX, SGUI(KC_F2), SGUI(KC_F4), SGUI(KC_F6), SGUI(KC_F8), SGUI(KC_F10), SGUI(KC_F12),
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
-
- // right thumb
- XXXXXXX, XXXXXXX,
- XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX
- ),
-
- [MEH_FN_PLUS] = LAYOUT_ergodox(
- // left hand
- LCA(KC_F23), LCA(KC_F21), LCA(KC_F19), LCA(KC_F17), LCA(KC_F15), LCA(KC_F13), XXXXXXX,
- LCAG(KC_F23), LCAG(KC_F21), LCAG(KC_F19), LCAG(KC_F17), LCAG(KC_F15), LCAG(KC_F13), XXXXXXX,
- MEH(KC_F23), MEH(KC_F21), MEH(KC_F19), MEH(KC_F17), MEH(KC_F15), MEH(KC_F13),
- SGUI(KC_F23), SGUI(KC_F21), SGUI(KC_F19), SGUI(KC_F17), SGUI(KC_F15), SGUI(KC_F13), XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
-
- // left thumb
- XXXXXXX, XXXXXXX,
- XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX,
-
- // right hand
- XXXXXXX, LCA(KC_F14), LCA(KC_F16), LCA(KC_F18), LCA(KC_F20), LCA(KC_F22), LCA(KC_F24),
- XXXXXXX, LCAG(KC_F14), LCAG(KC_F16), LCAG(KC_F18), LCAG(KC_F20), LCAG(KC_F22), LCAG(KC_F24),
- MEH(KC_F14), MEH(KC_F16), MEH(KC_F18), MEH(KC_F20), MEH(KC_F22), MEH(KC_F24),
- XXXXXXX, SGUI(KC_F14), SGUI(KC_F16), SGUI(KC_F18), SGUI(KC_F20), SGUI(KC_F22), SGUI(KC_F24),
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
-
- // right thumb
- XXXXXXX, XXXXXXX,
- XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX
- ),
-
- [FIRMWARE] = LAYOUT_ergodox(
- // left hand
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
-
- // left thumb
- XXXXXXX, XXXXXXX,
- XXXXXXX,
- RESET, XXXXXXX, XXXXXXX,
-
- // right hand
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
-
- // right thumb
- XXXXXXX, XXXXXXX,
- XXXXXXX,
- XXXXXXX, XXXXXXX, EEP_RST
- )
-};
-
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case RGB_GREEN:
- if (record->event.pressed) {
- #ifdef RGBLIGHT_ENABLE
- rgblight_enable();
- rgblight_mode(1);
- rgblight_sethsv_red();
- #endif
- }
-
- return false;
-
- case KC_CLCK:
- if (record->event.pressed) {
- if (!(CAPS_LOCK)) {
- ergodox_right_led_1_on();
- CAPS_LOCK = 1;
- } else {
- ergodox_right_led_1_off();
- CAPS_LOCK = 0;
- }
- }
-
- return true;
-
- case KC_NLCK:
- if (record->event.pressed) {
- if (!(NUM_LOCK)) {
- ergodox_right_led_2_on();
- NUM_LOCK = 1;
- } else {
- ergodox_right_led_2_off();
- NUM_LOCK = 0;
- }
- }
-
- return true;
-
- case KC_SLCK:
- if (record->event.pressed) {
- if (!(SCROLL_LOCK)) {
- ergodox_right_led_3_on();
- SCROLL_LOCK = 1;
- } else {
- ergodox_right_led_3_off();
- SCROLL_LOCK = 0;
- }
- }
-
- case KC_MS_WH_LEFT:
- if (record->event.pressed) {
- if (SCROLL_LOCK) {
- return false;
- } else {
- return true;
- }
- }
-
- case KC_MS_WH_UP:
- if (record->event.pressed) {
- if (SCROLL_LOCK) {
- return false;
- } else {
- return true;
- }
- }
-
- case KC_MS_WH_DOWN:
- if (record->event.pressed) {
- if (SCROLL_LOCK) {
- return false;
- } else {
- return true;
- }
- }
-
- case KC_MS_WH_RIGHT:
- if (record->event.pressed) {
- if (SCROLL_LOCK) {
- return false;
- } else {
- return true;
- }
- }
-
- default:
- return true;
- }
-}
-
-uint32_t layer_state_set_user(uint32_t state) {
- uint8_t layer = biton32(state);
-
- switch (layer) {
- case DVORAK_US:
- rgblight_sethsv_noeeprom_red();
- rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
-
- break;
-
- case PLOVER_US:
- rgblight_sethsv_noeeprom_red();
- rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3);
-
- break;
-
- case GAMING_US:
- rgblight_sethsv_noeeprom_red();
- rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3);
-
- break;
-
- case ARROWS_US:
- rgblight_sethsv_noeeprom_blue();
- rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
-
- break;
-
- case MOUSE_US:
- rgblight_sethsv_noeeprom_blue();
- rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
-
- break;
-
- case NUMPAD_US:
- rgblight_sethsv_noeeprom_blue();
- rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
-
- break;
-
- case LAYERS_US:
- rgblight_sethsv_noeeprom_cyan();
- rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
-
- break;
-
- case DVORAK_DV:
- rgblight_sethsv_noeeprom_green();
- rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
- break;
-
- case PLOVER_DV:
- rgblight_sethsv_noeeprom_green();
- rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3);
-
- break;
-
- case GAMING_DV:
- rgblight_sethsv_noeeprom_green();
- rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3);
-
- break;
-
- case ARROWS_DV:
- rgblight_sethsv_noeeprom_blue();
- rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
-
- break;
-
- case MOUSE_DV:
- rgblight_sethsv_noeeprom_blue();
- rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
-
- break;
-
- case NUMPAD_DV:
- rgblight_sethsv_noeeprom_blue();
- rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
-
- break;
-
- case LAYERS_DV:
- rgblight_sethsv_noeeprom_cyan();
- rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
-
- break;
-
- case MEDIA_FN:
- rgblight_sethsv_noeeprom_yellow();
- rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
-
- break;
-
- case HYPER_FN:
- rgblight_sethsv_noeeprom_magenta();
- rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
-
- break;
-
- case MEH_FN:
- rgblight_sethsv_noeeprom_magenta();
- rgblight_mode_noeeprom(RGBLIGHT_MODE_SNAKE + 4);
-
- break;
-
- case MEH_FN_PLUS:
- rgblight_sethsv_noeeprom_magenta();
- rgblight_mode_noeeprom(RGBLIGHT_MODE_SNAKE + 5);
-
- break;
-
- case FIRMWARE:
- rgblight_sethsv_noeeprom_pink();
- rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
-
- break;
-
- default:
- break;
- }
-
- return state;
-};
+#include QMK_KEYBOARD_H // Includes the QMK-verse.
+#include "keymap_plover.h" // Includes the Plover keymap for easier readability.
+
+
+// TODO: No eeprom changes unless needed, custom rgb settings for animations.
+#include "keycodes/aliases_definitions.c"
+#include "layers/layers_definitions.c"
+#include "tap_dance/tap_dance_setup.c"
+#include "tap_dance/tap_dances.c"
+#include "user/matrix_scan_user.c"
+#include "tap_dance/mod_tap_layer_dances/none_lead.c"
+#include "tap_dance/tap_dance_actions.c"
+#include "keycodes/custom_keycodes.c"
+#include "dynamic_macro.h" // Includes dynamic macro definitions, needed *after* the custom keycodes.
+#include "hacker_dvorak.c"
+#include "user/eeconfig_init_user.c"
+#include "user/process_record_user.c"
+#include "plover/plover_mode.c"
+#include "user/layer_set_state_user.c"
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/layers/layers_definitions.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/layers/layers_definitions.c
new file mode 100644
index 0000000000..f190e4f6f9
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/layers/layers_definitions.c
@@ -0,0 +1,12 @@
+enum layers { // Hacker Dvorak keyboard layers:
+ DVORAK = 0, // * Dvorak base layer.
+ PLOVER = 1, // * Steno layer for use with Plover.
+ GAMING = 2, // * Gaming layer intended for general purpose playing.
+ ARROWS = 3, // * Arrows movement keys and edition shortcuts.
+ MOUSE = 4, // * Mouse movement keys and edition shortcuts.
+ NUMPAD = 5, // * ATM style numpad with symbols and letters that should suffice to input any numeric literal.
+ LAYERS = 6, // * Layer switcher used to change between DVORAK, PLOVER and GAMING layers.
+ MEDIA_FN = 7, // * Media, RGB and function keys from F1 to F24 in symmetric fashion.
+ HYPER = 8, // * Hot keys layer (uses hyper + F1 .. F24) suitable for global shortcut tasks.
+ FIRMWARE = 9 // * Layer with firmware related functionality, like the reset and EEPROM keys.
+};
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/leader/leader_dictionary.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/leader/leader_dictionary.c
new file mode 100644
index 0000000000..8d5fa00a7d
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/leader/leader_dictionary.c
@@ -0,0 +1,14 @@
+LEADER_DICTIONARY() {
+ leading = false;
+ leader_end();
+
+ SEQ_ONE_KEY(TD(APMR_PIPE)) {
+ register_code(KC_LCTL);
+ register_code(KC_LSFT);
+ register_code(KC_U);
+
+ unregister_code(KC_U);
+ unregister_code(KC_LSFT);
+ unregister_code(KC_LCTL);
+ }
+}
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/leader/leader_setup.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/leader/leader_setup.c
new file mode 100644
index 0000000000..1e89c4bfca
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/leader/leader_setup.c
@@ -0,0 +1,14 @@
+LEADER_EXTERNS();
+
+void qk_leader_start(void) {
+ if (!leading) {
+ leading = true;
+ leader_time = timer_read();
+ leader_sequence_size = 0;
+ leader_sequence[0] = 0;
+ leader_sequence[1] = 0;
+ leader_sequence[2] = 0;
+ leader_sequence[3] = 0;
+ leader_sequence[4] = 0;
+ }
+}
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/plover/plover_mode.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/plover/plover_mode.c
new file mode 100644
index 0000000000..b388264907
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/plover/plover_mode.c
@@ -0,0 +1,20 @@
+// TODO: improve feedback
+void plover_toggle(void) {
+ // Press "PHROLG"
+ register_code(PV_LP);
+ register_code(PV_LH);
+ register_code(PV_LR);
+ register_code(PV_O);
+ register_code(PV_RL);
+ register_code(PV_RG);
+
+ // Release "PHROLG"
+ unregister_code(PV_LP);
+ unregister_code(PV_LH);
+ unregister_code(PV_LR);
+ unregister_code(PV_O);
+ unregister_code(PV_RL);
+ unregister_code(PV_RG);
+}
+
+bool PLOVER_MODE = false;
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/readme.md b/keyboards/ergodox_ez/keymaps/hacker_dvorak/readme.md
index c7df0d7483..8089a6d55a 100644
--- a/keyboards/ergodox_ez/keymaps/hacker_dvorak/readme.md
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/readme.md
@@ -17,8 +17,8 @@ I plan to use [QMK](https://docs.qmk.fm) in the future, in order to overcome som
* All symbols (including shifted symbols).
* All modifier are dual keys positioned near the home row.
2. Querty
- * Used to overcome the limitation pointed above, when your OS layout is set to Dvorak instead of US, this way you can use
- Standard Dvorak (available by default on all the main operating systems) on other normal keybdoards and Hacker Dvorak on
+ * Used to overcome the limitation pointed above, when your OS layout is set to Dvorak instead of US, this way you can use
+ Standard Dvorak (available by default on all the main operating systems) on other normal keybdoards and Hacker Dvorak on
the Ergodox EZ Shine at the same time, without changing back and forth tho OS layout.
3. Gaming
* Still in development.
@@ -35,7 +35,7 @@ I plan to use [QMK](https://docs.qmk.fm) in the future, in order to overcome som
6. Numpad
* ATM style numpad.
* All modifier keys.
- * Letters from `A` to `F` for hexadecimal numbers (`B` is also used for binary numeric literals in most programming
+ * Letters from `A` to `F` for hexadecimal numbers (`B` is also used for binary numeric literals in most programming
languages, ie. `0b11001`).
* `X` for hexadecimal numeric literals in most programming languages, ie. `0xbeef`.
* `O` for octal numeric literals in most programming languages, ie `0o123`.
@@ -52,11 +52,11 @@ I plan to use [QMK](https://docs.qmk.fm) in the future, in order to overcome som
* Useful for custom application shortcuts.
10. Meh Fn +
* Useful for custom standard shortcuts.
-
+
## To Do
Add images.
***
-Please comment below if you have any ideas or suggestions. If you have used this layout or used it as a base, I'd love to hear about your experience! \ No newline at end of file
+Please comment below if you have any ideas or suggestions. If you have used this layout or used it as a base, I'd love to hear about your experience!
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/rules.mk b/keyboards/ergodox_ez/keymaps/hacker_dvorak/rules.mk
index 4aa2f262b7..51a9ff0d49 100644
--- a/keyboards/ergodox_ez/keymaps/hacker_dvorak/rules.mk
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/rules.mk
@@ -1,35 +1,40 @@
# Set any rules.mk overrides for your specific keymap here.
# See rules at https://docs.qmk.fm/#/config_options?id=the-rulesmk-file
-NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-TAP_DANCE_ENABLE = yes
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700b).
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450b).
-SLEEP_LED_ENABLE = yes # Turn off leds when computer is sleeping.
-KEY_LOCK_ENABLE = yes # (+1730b)
-RGBLIGHT_ENABLE = yes
-LEADER_ENABLE = yes
+NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+TAP_DANCE_ENABLE = yes
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700b).
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450b).
+RGBLIGHT_ENABLE = yes
+LEADER_ENABLE = yes
-UNICODE_ENABLE = no # For Unicode.
+UNICODE_ENABLE = no
COMMAND_ENABLE = no # Commands for debug and configuration
SWAP_HANDS_ENABLE = no # Allow swapping hands of keyboard.
# This are by default off:
-# CONSOLE_ENABLE = no # Console for debug(+400)
-# BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+# COMBO_ENABLE = no
+# UCIS_ENABLE = no # For Unicode.
+# UNICODEMAP_ENABLE = no
+# SLEEP_LED_ENABLE = no # Turn off leds when computer is sleeping.
+# KEY_LOCK_ENABLE = no # (+1730b)
+# CONSOLE_ENABLE = no # Console for debug(+400b)
+# BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000b)
# API_SYSEX_ENABLE = no
# MIDI_ENABLE = no
-# UNICODEMAP_ENABLE = no
# BLUETOOTH_ENABLE = no
# AUDIO_ENABLE = no
# FAUXCLICKY_ENABLE = no
# VARIABLE_TRACE = no
# BACKLIGHT_ENABLE = no
# RGB_MATRIX_ENABLE = no
-# COMBO_ENABLE = no
+# POINTING_DEVICE_ENABLE = no
+
+# AUTO_SHIFT_ENABLE = no
+# AUTO_SHIFT_MODIFIERS = no
-# This don't need argument:
+# This don't need argument?
# CUSTOM_MATRIX # Custom matrix file for the ErgoDox EZ
# SPLIT_KEYBOARD
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/none_lead.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/none_lead.c
new file mode 100644
index 0000000000..6debc1ce45
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/none_lead.c
@@ -0,0 +1,40 @@
+//instanalize an instance of 'tap' for the None - Lead tap dance.
+static tap none_lead_state = {
+ .is_press_action = true,
+ .state = 0
+};
+
+void none_lead_finished(qk_tap_dance_state_t *state, void *user_data) {
+ none_lead_state.state = current_dance(state);
+ switch (none_lead_state.state) {
+ case SINGLE_TAP:
+ register_code(KC_NO);
+ break;
+
+ case SINGLE_HOLD:
+ register_code(KC_LALT);
+ register_code(KC_LSFT);
+ break;
+
+ case DOUBLE_TAP:
+ qk_leader_start();
+ break;
+ }
+}
+
+void none_lead_reset(qk_tap_dance_state_t *state, void *user_data) {
+ switch (none_lead_state.state) {
+ case SINGLE_TAP:
+ unregister_code(KC_NO);
+ break;
+
+ case SINGLE_HOLD:
+ unregister_code(KC_LALT);
+ unregister_code(KC_LSFT);
+ break;
+
+ case DOUBLE_TAP:
+ break;
+ }
+ none_lead_state.state = 0;
+}
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/tap_dance_actions.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/tap_dance_actions.c
new file mode 100644
index 0000000000..550e1f7c84
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/tap_dance_actions.c
@@ -0,0 +1,20 @@
+// Register the double tap dances:
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [EQL_PLUS] = ACTION_TAP_DANCE_DOUBLE(KC_EQL, KC_PLUS),
+ [MINS_UNDS] = ACTION_TAP_DANCE_DOUBLE(KC_MINS, KC_UNDS),
+ [SLSH_BSLS] = ACTION_TAP_DANCE_DOUBLE(KC_SLSH, KC_BSLS),
+ [GRV_TILD] = ACTION_TAP_DANCE_DOUBLE(KC_GRV, KC_TILD),
+ [QUOT_DQUO] = ACTION_TAP_DANCE_DOUBLE(KC_QUOT, KC_DQUO),
+ [SCLN_COLN] = ACTION_TAP_DANCE_DOUBLE(KC_SCLN, KC_COLN),
+ [ASTR_CIRC] = ACTION_TAP_DANCE_DOUBLE(KC_ASTR, KC_CIRC),
+ [APMR_PIPE] = ACTION_TAP_DANCE_DOUBLE(KC_AMPR, KC_PIPE),
+ [EXLM_QUES] = ACTION_TAP_DANCE_DOUBLE(KC_EXLM, KC_QUES),
+ [HASH_PERC] = ACTION_TAP_DANCE_DOUBLE(KC_HASH, KC_PERC),
+ [AT_DLR] = ACTION_TAP_DANCE_DOUBLE(KC_AT, KC_DLR),
+ [LPRN_LBRC] = ACTION_TAP_DANCE_DOUBLE(KC_LPRN, KC_LBRC),
+ [RPRN_RBRC] = ACTION_TAP_DANCE_DOUBLE(KC_RPRN, KC_RBRC),
+ [LCBR_LABK] = ACTION_TAP_DANCE_DOUBLE(KC_LCBR, KC_LABK),
+ [RCBR_RABK] = ACTION_TAP_DANCE_DOUBLE(KC_RCBR, KC_RABK),
+ [DOT_COMM] = ACTION_TAP_DANCE_DOUBLE(KC_DOT, KC_COMM),
+ [NONE_LEAD] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(NULL, none_lead_finished, none_lead_reset, DANCING_TERM)
+};
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/tap_dance_setup.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/tap_dance_setup.c
new file mode 100644
index 0000000000..340ccca133
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/tap_dance_setup.c
@@ -0,0 +1,75 @@
+typedef struct {
+ bool is_press_action;
+ int state;
+} tap;
+
+enum {
+ SINGLE_TAP = 1,
+ SINGLE_HOLD = 2,
+ DOUBLE_TAP = 3,
+ DOUBLE_HOLD = 4,
+ DOUBLE_SINGLE_TAP = 5, // Send two single taps.
+ TRIPLE_TAP = 6,
+ TRIPLE_HOLD = 7,
+ TRIPLE_SINGLE_TAP = 8 // Send three single taps.
+};
+
+/* Return an integer that corresponds to what kind of tap dance should be executed.
+ *
+ * How to figure out tap dance state: interrupted and pressed.
+ *
+ * Interrupted: If the state of a dance dance is "interrupted", that means that another key has been hit
+ * under the tapping term. This is typically indicitive that you are trying to "tap" the key.
+ *
+ * Pressed: Whether or not the key is still being pressed. If this value is true, that means the tapping term
+ * has ended, but the key is still being pressed down. This generally means the key is being "held".
+ *
+ * One thing that is currenlty not possible with qmk software in regards to tap dance is to mimic the "permissive hold"
+ * feature. In general, advanced tap dances do not work well if they are used with commonly typed letters.
+ * For example "A". Tap dances are best used on non-letter keys that are not hit while typing letters.
+ *
+ * Good places to put an advanced tap dance:
+ * z,q,x,j,k,v,b, any function key, home/end, comma, semi-colon
+ *
+ * Criteria for "good placement" of a tap dance key:
+ * Not a key that is hit frequently in a sentence
+ * Not a key that is used frequently to double tap, for example 'tab' is often double tapped in a terminal, or
+ * in a web form. So 'tab' would be a poor choice for a tap dance.
+ * Letters used in common words as a double. For example 'p' in 'pepper'. If a tap dance function existed on the
+ * letter 'p', the word 'pepper' would be quite frustating to type.
+ *
+ * For the third point, there does exist the 'DOUBLE_SINGLE_TAP', however this is not fully tested
+ *
+ */
+int current_dance(qk_tap_dance_state_t *state) {
+ int current_state = 0;
+ if (state->count == 1) {
+ if (state->interrupted || !state->pressed) {
+ current_state = SINGLE_TAP;
+ } else {
+ current_state = SINGLE_HOLD; //key has not been interrupted, but they key is still held. Means you want to send a 'HOLD'.
+ }
+ } else if (state->count == 2) {
+ /*
+ * DOUBLE_SINGLE_TAP is to distinguish between typing "pepper", and actually wanting a double tap
+ * action when hitting 'pp'. Suggested use case for this return value is when you want to send two
+ * keystrokes of the key, and not the 'double tap' action/macro.
+ */
+ if (state->interrupted) {
+ current_state = DOUBLE_SINGLE_TAP;
+ } else if (state->pressed) {
+ current_state = DOUBLE_HOLD;
+ } else {
+ current_state = DOUBLE_TAP;
+ }
+ } else if (state->count == 3) {
+ if (state->interrupted) {
+ current_state = TRIPLE_SINGLE_TAP;
+ } else if (state->pressed) {
+ current_state = TRIPLE_HOLD;
+ } else {
+ current_state = TRIPLE_TAP;
+ }
+ }
+ return current_state;
+}
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/tap_dances.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/tap_dances.c
new file mode 100644
index 0000000000..3d44698729
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/tap_dances.c
@@ -0,0 +1,74 @@
+ //--------------------------------------------------------------------------------------------//
+ // | | | | | //
+ // Single tap | Single hold | Double tap | Double hold | Triple tap | Triple hold //
+// Mod tap dances: // | | | | | //
+enum tap_dances { //--------------------------------------------------------------------------------------------//
+ // | | | | | //
+ EQL_PLUS = 0, // = | + | | | | //
+ // | | | | | //
+ //--------------------------------------------------------------------------------------------//
+ // | | | | | //
+ MINS_UNDS = 1, // - | _ | | | | //
+ // | | | | | //
+ //--------------------------------------------------------------------------------------------//
+ // | | | | | //
+ SLSH_BSLS = 2, // / | \ | | | | //
+ // | | | | | //
+ //--------------------------------------------------------------------------------------------//
+ // | | | | | //
+ GRV_TILD = 3, // ` | ~ | | | | //
+ // | | | | | //
+ //--------------------------------------------------------------------------------------------//
+ // | | | | | //
+ QUOT_DQUO = 4, // ' | " | | | | //
+ // | | | | | //
+ //--------------------------------------------------------------------------------------------//
+ // | | | | | //
+ SCLN_COLN = 5, // ; | : | | | | //
+ // | | | | | //
+ //--------------------------------------------------------------------------------------------//
+ // | | | | | //
+ ASTR_CIRC = 6, // * | ^ | | | | //
+ // | | | | | //
+ //--------------------------------------------------------------------------------------------//
+ // | | | | | //
+ APMR_PIPE = 7, // & | | | | | | //
+ // | | | | | //
+ //--------------------------------------------------------------------------------------------//
+ // | | | | | //
+ EXLM_QUES = 8, // ! | ? | | | | //
+ // | | | | | //
+ //--------------------------------------------------------------------------------------------//
+ // | | | | | //
+ HASH_PERC = 9, // # | % | | | | //
+ // | | | | | //
+ //--------------------------------------------------------------------------------------------//
+ // | | | | | //
+ AT_DLR = 10, // @ | $ | | | | //
+ // | | | | | //
+ //--------------------------------------------------------------------------------------------//
+ // | | | | | //
+ LPRN_LBRC = 11, // ( | [ | | | | //
+ // | | | | | //
+ //--------------------------------------------------------------------------------------------//
+ // | | | | | //
+ RPRN_RBRC = 12, // ) | ] | | | | //
+ // | | | | | //
+ //--------------------------------------------------------------------------------------------//
+ // | | | | | //
+ LCBR_LABK = 13, // { | < | | | | //
+ // | | | | | //
+ //--------------------------------------------------------------------------------------------//
+ // | | | | | //
+ RCBR_RABK = 14, // } | > | | | | //
+ // | | | | | //
+ //--------------------------------------------------------------------------------------------//
+ // | | | | | //
+ DOT_COMM = 15, // . | , | | | | //
+ // | | | | | //
+ //--------------------------------------------------------------------------------------------//
+ // | | | | | //
+ NONE_LEAD = 16, // NONE | ALT+SHIFT | LEAD | | | //
+ // | | | | | //
+ //--------------------------------------------------------------------------------------------//
+};
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/user/eeconfig_init_user.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/user/eeconfig_init_user.c
new file mode 100644
index 0000000000..41b7b66941
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/user/eeconfig_init_user.c
@@ -0,0 +1,3 @@
+// void eeconfig_init_user(void) {
+//
+// };
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/user/layer_set_state_user.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/user/layer_set_state_user.c
new file mode 100644
index 0000000000..e2eeed6fa9
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/user/layer_set_state_user.c
@@ -0,0 +1,121 @@
+
+uint32_t layer_state_set_user(uint32_t state) {
+ uint8_t layer = biton32(state);
+
+ switch (layer) {
+ case DVORAK:
+ rgblight_sethsv_noeeprom_green();
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
+
+ if (PLOVER_MODE) {
+ plover_toggle();
+ PLOVER_MODE = false;
+ }
+
+ break;
+
+ case PLOVER:
+ rgblight_sethsv_noeeprom_red();
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3);
+
+ if (!(PLOVER_MODE)) {
+ plover_toggle();
+ PLOVER_MODE = true;
+ }
+
+ break;
+
+ case GAMING:
+ rgblight_sethsv_noeeprom_red();
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
+
+ if (PLOVER_MODE) {
+ plover_toggle();
+ PLOVER_MODE = false;
+ }
+
+ break;
+
+ case ARROWS:
+ rgblight_sethsv_noeeprom_blue();
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
+
+ if (PLOVER_MODE) {
+ plover_toggle();
+ PLOVER_MODE = false;
+ }
+
+ break;
+
+ case MOUSE:
+ rgblight_sethsv_noeeprom_blue();
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
+
+ if (PLOVER_MODE) {
+ plover_toggle();
+ PLOVER_MODE = false;
+ }
+
+ break;
+
+ case NUMPAD:
+ rgblight_sethsv_noeeprom_blue();
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
+
+ if (PLOVER_MODE) {
+ plover_toggle();
+ PLOVER_MODE = false;
+ }
+
+ break;
+
+ case LAYERS:
+ rgblight_sethsv_noeeprom_cyan();
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
+
+ if (PLOVER_MODE) {
+ plover_toggle();
+ PLOVER_MODE = false;
+ }
+
+ break;
+
+ case MEDIA_FN:
+ rgblight_sethsv_noeeprom_yellow();
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
+
+ if (PLOVER_MODE) {
+ plover_toggle();
+ PLOVER_MODE = false;
+ }
+
+ break;
+
+ case HYPER:
+ rgblight_sethsv_noeeprom_magenta();
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
+
+ if (PLOVER_MODE) {
+ plover_toggle();
+ PLOVER_MODE = false;
+ }
+
+ break;
+
+ case FIRMWARE:
+ rgblight_sethsv_noeeprom_magenta();
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
+
+ if (PLOVER_MODE) {
+ plover_toggle();
+ PLOVER_MODE = false;
+ }
+
+ break;
+
+ default:
+ break;
+ }
+
+ return state;
+}
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/user/matrix_scan_user.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/user/matrix_scan_user.c
new file mode 100644
index 0000000000..3b78079cca
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/user/matrix_scan_user.c
@@ -0,0 +1,12 @@
+#include "../leader/leader_setup.c"
+
+bool MATRIX_SCANNED = false;
+
+void matrix_scan_user(void) {
+ if (!(MATRIX_SCANNED)) {
+ rgblight_sethsv_noeeprom_green();
+ MATRIX_SCANNED = true;
+ }
+
+ #include "../leader/leader_dictionary.c"
+};
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/user/process_record_user.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/user/process_record_user.c
new file mode 100644
index 0000000000..7644635824
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/user/process_record_user.c
@@ -0,0 +1,75 @@
+// TODO: Improve this currently there is no feedback if activated by other means.
+bool CAPS_LOCK = false;
+bool NUM_LOCK = false;
+bool SCROLL_LOCK = false;
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (!process_record_dynamic_macro(keycode, record)) {
+ return false;
+ }
+
+ switch (keycode) {
+ case KC_CLCK:
+ if (record->event.pressed) {
+ if (!(CAPS_LOCK)) {
+ ergodox_right_led_1_on();
+ CAPS_LOCK = true;
+ } else {
+ ergodox_right_led_1_off();
+ CAPS_LOCK = false;
+ }
+ }
+
+ return true;
+
+ case KC_NLCK:
+ if (record->event.pressed) {
+ if (!(NUM_LOCK)) {
+ ergodox_right_led_2_on();
+ NUM_LOCK = true;
+ } else {
+ ergodox_right_led_2_off();
+ NUM_LOCK = false;
+ }
+ }
+
+ return true;
+
+ case KC_SLCK:
+ if (record->event.pressed) {
+ if (!(SCROLL_LOCK)) {
+ ergodox_right_led_3_on();
+ SCROLL_LOCK = true;
+ } else {
+ ergodox_right_led_3_off();
+ SCROLL_LOCK = false;
+ }
+ }
+
+ return true;
+
+ case KC_MS_WH_UP ... KC_MS_WH_RIGHT:
+ if (record->event.pressed) {
+ if (SCROLL_LOCK) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ case MY_CUSTOM_MACRO:
+ if (record->event.pressed) {
+ SEND_STRING("QMK is the best thing ever!"); // this is our macro!
+ return false;
+ }
+
+ case MY_OTHER_MACRO:
+ if (record->event.pressed) {
+ SEND_STRING(SS_LCTRL("ac")); // selects all and copies
+ return false;
+ }
+
+ default:
+ return true;
+ }
+}