]> git.donarmstrong.com Git - qmk_firmware.git/commitdiff
Keymap: Hacker Dvorak (#4514)
authorIsmael Venegas Castelló <ismael.vc1337@gmail.com>
Wed, 5 Dec 2018 16:12:35 +0000 (10:12 -0600)
committerDrashna Jaelre <drashna@live.com>
Wed, 5 Dec 2018 16:12:35 +0000 (08:12 -0800)
* 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.

keyboards/ergodox_ez/keymaps/hacker_dvorak/.gitignore [new file with mode: 0644]
keyboards/ergodox_ez/keymaps/hacker_dvorak/config.h [new file with mode: 0644]
keyboards/ergodox_ez/keymaps/hacker_dvorak/default.png.md [new file with mode: 0644]
keyboards/ergodox_ez/keymaps/hacker_dvorak/default_highres.png.md [new file with mode: 0644]
keyboards/ergodox_ez/keymaps/hacker_dvorak/gulpfile.js [new file with mode: 0644]
keyboards/ergodox_ez/keymaps/hacker_dvorak/keymap.c [new file with mode: 0644]
keyboards/ergodox_ez/keymaps/hacker_dvorak/package.json [new file with mode: 0644]
keyboards/ergodox_ez/keymaps/hacker_dvorak/readme.md [new file with mode: 0644]
keyboards/ergodox_ez/keymaps/hacker_dvorak/rules.mk [new file with mode: 0644]
quantum/keymap_extras/keymap_plover_dvorak.h [new file with mode: 0644]

diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/.gitignore b/keyboards/ergodox_ez/keymaps/hacker_dvorak/.gitignore
new file mode 100644 (file)
index 0000000..504afef
--- /dev/null
@@ -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 (file)
index 0000000..c6b8600
--- /dev/null
@@ -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 (file)
index 0000000..744e7d1
--- /dev/null
@@ -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 (file)
index 0000000..074e063
--- /dev/null
@@ -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 (file)
index 0000000..338b0c6
--- /dev/null
@@ -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 (file)
index 0000000..c42b551
--- /dev/null
@@ -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 (file)
index 0000000..116911e
--- /dev/null
@@ -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 (file)
index 0000000..c7df0d7
--- /dev/null
@@ -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 (file)
index 0000000..4aa2f26
--- /dev/null
@@ -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 (file)
index 0000000..83bb1e8
--- /dev/null
@@ -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