summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIsmael Venegas Castelló <ismael.vc1337@gmail.com>2018-12-05 17:12:35 +0100
committerDrashna Jaelre <drashna@live.com>2018-12-05 17:12:35 +0100
commit538874f90f5ae69b241f80baa639fb6dbc4cfa80 (patch)
treec0e055534d0702cee30922d8f675987130279f78
parent8a330b33ff41ffc1ec3f8fa39722e93115ea3f0f (diff)
downloadqmk_firmware-538874f90f5ae69b241f80baa639fb6dbc4cfa80.tar.gz
qmk_firmware-538874f90f5ae69b241f80baa639fb6dbc4cfa80.tar.xz
Keymap: Hacker Dvorak (#4514)
* Hacker Dvorak Programmer Dvorak based layout for the Ergodox EZ. * Address drashna comments. * Fix RGB and drop OSL for MO. * Add gulp file to automate development. * Fix gulpfile. * Caps, num and scroll lock indicators. * Fix scroll lock.
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/.gitignore2
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/config.h82
-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.js13
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/keymap.c781
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/package.json15
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/readme.md62
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/rules.mk35
-rw-r--r--quantum/keymap_extras/keymap_plover_dvorak.h47
10 files changed, 1039 insertions, 0 deletions
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/.gitignore b/keyboards/ergodox_ez/keymaps/hacker_dvorak/.gitignore
new file mode 100644
index 000000000..504afef81
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/.gitignore
@@ -0,0 +1,2 @@
+node_modules/
+package-lock.json
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/config.h b/keyboards/ergodox_ez/keymaps/hacker_dvorak/config.h
new file mode 100644
index 000000000..c6b86004c
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/config.h
@@ -0,0 +1,82 @@
+/*
+ Set any config.h overrides for your specific keymap here.
+ See config.h options at https://docs.qmk.fm/#/config_options?id=the-configh-file
+*/
+#pragma once
+
+
+/* Keyboard Settings */
+#undef TAPPING_TERM
+#define TAPPING_TERM 150
+
+#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
+#define PERMISSIVE_HOLD
+#define QMK_KEYS_PER_SCAN 4
+
+
+// RGB Lights
+#undef RGBLIGHT_HUE_STEP
+#define RGBLIGHT_HUE_STEP 24
+
+#undef RGBLIGHT_SAT_STEP
+#define RGBLIGHT_SAT_STEP 24
+
+#undef RGBLIGHT_VAL_STEP
+#define RGBLIGHT_VAL_STEP 24
+
+#undef RGBLIGHT_BRI_STEP
+#define RGBLIGHT_BRI_STEP 24
+
+#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
+
+#undef MOUSEKEY_DELAY
+#define MOUSEKEY_DELAY 15
+
+#undef MOUSEKEY_MAX_SPEED
+#define MOUSEKEY_MAX_SPEED 15
+
+#undef MOUSEKEY_TIME_TO_MAX
+#define MOUSEKEY_TIME_TO_MAX 150
+
+#undef MOUSEKEY_WHEEL_MAX_SPEED
+#define MOUSEKEY_WHEEL_MAX_SPEED 15
+
+#undef MOUSEKEY_WHEEL_TIME_TO_MAX
+#define MOUSEKEY_WHEEL_TIME_TO_MAX 150
+
+
+/* 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
+
+/* For tap toggle */
+// #define TAPPING_TOGGLE 2
+// #define ONESHOT_TAP_TOGGLE 2
+// #define ONESHOT_TIMEOUT 300
+
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/default.png.md b/keyboards/ergodox_ez/keymaps/hacker_dvorak/default.png.md
new file mode 100644
index 000000000..744e7d172
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/default.png.md
@@ -0,0 +1 @@
+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
new file mode 100644
index 000000000..074e0634d
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/default_highres.png.md
@@ -0,0 +1 @@
+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
new file mode 100644
index 000000000..338b0c6ba
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/gulpfile.js
@@ -0,0 +1,13 @@
+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', {
+ ignoreErrors: true
+}));
+
+gulp.task('watch', ['build'], () => {
+ gulp.watch(['keymap.c', 'config.h', 'rules.mk'], ['build']);
+});
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/keymap.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/keymap.c
new file mode 100644
index 000000000..c42b55108
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/keymap.c
@@ -0,0 +1,781 @@
+#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;
+};
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/package.json b/keyboards/ergodox_ez/keymaps/hacker_dvorak/package.json
new file mode 100644
index 000000000..116911e46
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/package.json
@@ -0,0 +1,15 @@
+{
+ "name": "hacker_dvorak",
+ "version": "1.0.0",
+ "description": "Inspired by the [*Programmer Dvorak*](https://www.kaufmann.no/roland/dvorak) keyboard layout, cherry picked ideas from other layouts in the [EZ Repository](https://configure.ergodox-ez.com/search?q=dvorak&legacy=true), a character distribution [heatmap vizualizer](https://run.plnkr.co/plunks/5EEO8nJ2wRzYAfT3), my own subjective use cases and lots of trial and error.",
+ "main": "gulpfile.js",
+ "scripts": {
+ "test": "test"
+ },
+ "author": "SalchiPapa",
+ "license": "GPL-2.0",
+ "dependencies": {
+ "gulp": "^3.9.1",
+ "gulp-run-command": "0.0.9"
+ }
+}
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/readme.md b/keyboards/ergodox_ez/keymaps/hacker_dvorak/readme.md
new file mode 100644
index 000000000..c7df0d748
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/readme.md
@@ -0,0 +1,62 @@
+# [Ergodox EZ Hacker Dvorak Layout](https://configure.ergodox-ez.com/layouts/Wadz/latest/0)
+
+Inspired by the [*Programmer Dvorak*](https://www.kaufmann.no/roland/dvorak) keyboard layout, cherry picked ideas from other layouts in the [EZ Repository](https://configure.ergodox-ez.com/search?q=dvorak&legacy=true), a character distribution [heatmap vizualizer](https://run.plnkr.co/plunks/5EEO8nJ2wRzYAfT3), my own subjective use cases and lots of trial and error.
+
+## Setup
+
+Configure your OS keyboard layout to US, or the keymap will be incorrect.
+
+## Limitations
+
+I plan to use [QMK](https://docs.qmk.fm) in the future, in order to overcome some limitations of the Ergodox EZ [graphical configurator](https://configure.ergodox-ez.com/layouts/default/latest/0)), however I will defer that, until more progress is made to the new [configurator](https://medium.com/the-ergo/the-configurator-is-out-of-beta-e107aec80cae).
+
+## Layers
+
+1. Dvorak
+ * US Dvorak layout.
+ * 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
+ the Ergodox EZ Shine at the same time, without changing back and forth tho OS layout.
+3. Gaming
+ * Still in development.
+ * Left side is mainly "normal" Qwerty.
+ * Right side is mainly for movement, either using the mouse, the arrow keys, the number pad or the `H`, `J`, `K`, `L` as direction keys.
+4. Arrows
+ * Arrow keys navigation.
+ * All modifier keys.
+ * Common text edititng shortcuts (doesn't work for MacOS).
+5. Mouse
+ * Mouse navigation.
+ * All modifier keys.
+ * Common text edititng shortcuts (doesn't work for MacOS).
+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
+ 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`.
+ * `J` for complex numeric literals in Python, ie. `3j`.
+ * `I` and `M` for complex Julia numeric literals, ie. `3im`.
+ * Common symbols for mathematical operations.
+7. Hyper Fn
+ * Useful for custom global shortcuts.
+8. Media Fn
+ * Media keys.
+ * Function keys.
+ * EZ Shine keys.
+9. Meh Fn
+ * 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
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/rules.mk b/keyboards/ergodox_ez/keymaps/hacker_dvorak/rules.mk
new file mode 100644
index 000000000..4aa2f262b
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/rules.mk
@@ -0,0 +1,35 @@
+# 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
+
+
+UNICODE_ENABLE = no # For Unicode.
+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)
+# 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
+
+
+# This don't need argument:
+# CUSTOM_MATRIX # Custom matrix file for the ErgoDox EZ
+# SPLIT_KEYBOARD
diff --git a/quantum/keymap_extras/keymap_plover_dvorak.h b/quantum/keymap_extras/keymap_plover_dvorak.h
new file mode 100644
index 000000000..83bb1e8b8
--- /dev/null
+++ b/quantum/keymap_extras/keymap_plover_dvorak.h
@@ -0,0 +1,47 @@
+/* Copyright 2016 James Kay
+ *
+ * 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/>.
+ */
+#ifndef KEYMAP_PLOVER_DVORAK_H
+#define KEYMAP_PLOVER_DVORAK_H
+
+#include "keymap_dvorak.h"
+
+#define PD_NUM DV_1
+#define PD_LS DV_Q
+#define PD_LT DV_W
+#define PD_LP DV_E
+#define PD_LH DV_R
+#define PD_LK DV_S
+#define PD_LW DV_D
+#define PD_LR DV_F
+
+#define PD_STAR DV_Y
+#define PD_RF DV_U
+#define PD_RP DV_I
+#define PD_RL DV_O
+#define PD_RT DV_P
+#define PD_RD DV_LBRC
+#define PD_RR DV_J
+#define PD_RB DV_K
+#define PD_RG DV_L
+#define PD_RS DV_SCLN
+#define PD_RZ DV_QUOT
+
+#define PD_A DV_C
+#define PD_O DV_V
+#define PD_E DV_N
+#define PD_U DV_M
+
+#endif