diff --git a/ErgoDox-EZ-Shine.svg b/ErgoDox-EZ-Shine.svg new file mode 100644 index 0000000..72d9dd7 --- /dev/null +++ b/ErgoDox-EZ-Shine.svg @@ -0,0 +1 @@ +v4ai \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..9dfd235 --- /dev/null +++ b/README.md @@ -0,0 +1,85 @@ +# ergodox-ez-shine-dvorak + +Dvorak keyboard layout for ErgoDox EZ Shine, heavily +inspired by the key placement of the TypeMatrix 2030 USB. + +
+ErgoDox EZ Shine +
+ ErgoDox EZ Shine. Illustration from ErgoDox EZ website. + Copyright © 2019 ZSA Technology Labs, Inc. +
+
+ +## The what now? + +I've been using the [Dvorak keyboard layout](https://en.wikipedia.org/wiki/Dvorak_keyboard_layout) since 2009/2010. +Back then I had a TypeMatrix 2030 USB. I stuck with +TypeMatrix most of the time between then and... +December 2017! + +In December 2017, I bought an [ErgoDox EZ Shine](https://ergodox-ez.com) +(see [details below](#ergodox-ez-keyboard-model)). + +Using the [Oryx configurator](https://ergodox-ez.com/pages/oryx), +I immediatelly created a custom layout for my ErgoDox EZ Shine. +A layout that was *heavily* inspired by the key placement on +my previous keyboard, the TypeMatrix 2030 USB. + +Over time I've made small adjustments to my custom layout +in Oryx but the layout remains true to the TypeMatrix still. +Only, it's like, *a million times better*. + +So anyway, time to put this configuration somewhere +rather than just relying on the ErgoDox EZ website +to stay up forever, eh? Hence this repo. + +## Have a look at the layout + +Look at [the PDF](configuration.pdf) included in this repo, +or [look at the layout in Oryx](https://configure.ergodox-ez.com/ergodox-ez/layouts/PBKjJ/ZqWv6/0). + +## ErgoDox EZ keyboard model + + + + + + + + + + + + + + + + + + +
ColorTilt kitWing restShineKeycapsSwitches
BlackYesNoYesBlank, sculpted keycapsKailh Thick Gold
+ +## Building from source + +See [ergodox_ez_instructions.md](ergodox_ez_instructions.md). + +## Using pre-built firmware image + +Download firmware image using link at +https://configure.ergodox-ez.com/ergodox-ez/layouts/PBKjJ/ZqWv6/0 +or download a copy of the same firmware image from +https://github.com/ctsrc/ergodox-ez-shine-dvorak/releases/download/2019-11-10-ZqWv6/ergodox_ez_dvorak_PBKjJ_ZqWv6.hex + +SHA256 (ergodox_ez_dvorak_PBKjJ_ZqWv6.hex) = b20e3e0d19c9018d214e04258da14ffe7d324058377616aecb119d1c4b257c5d + +## Flashing the firmware image + +Use for example the flashing tool provided by ZSA Technology Labs: + + * https://ergodox-ez.com/pages/wally + * https://github.com/zsa/wally + +## Copyright + +Portions copyright © 2019 ZSA Technology Labs, Inc. diff --git a/configuration.pdf b/configuration.pdf new file mode 100644 index 0000000..df591e7 Binary files /dev/null and b/configuration.pdf differ diff --git a/ergodox_ez_instructions.md b/ergodox_ez_instructions.md new file mode 100644 index 0000000..6f95a5d --- /dev/null +++ b/ergodox_ez_instructions.md @@ -0,0 +1,14 @@ +# Building your layout from source + +Congratulations on taking the next step, and making use of your keyboard's open-source nature! There's so much power to unlock — this is going to be fun. :) + +Here are some initial pointers to get you started: + +- Use the documentation at [https://docs.qmk.fm/](https://docs.qmk.fm/) to set up your environment for building your firmware. +- Build your layout against [https://github.com/zsa/qmk_firmware/](https://github.com/zsa/qmk_firmware/) which is our QMK fork (instead of qmk/qmk_firmware). This is what Oryx (the graphical configurator) uses, so it's guaranteed to work. +- Create a folder with a simple name (no spaces!) for your layout inside the qmk_firmware/keyboards/ergodox_ez/keymaps/ folder. +- Copy the contents of the \*\_source folder (in the .zip you downloaded from Oryx) into this folder. +- Make sure you've set up your environment per the [QMK docs](https://docs.qmk.fm/#/newbs_getting_started?id=set-up-your-environment) so compilation would actually work. +- From your shell, make sure your working directory is qmk*firmware, then enter the command `make ergodox_ez:_layout_`, substituting the name of the folder you created for "_layout_". + +Good luck on your journey! And remember, if you get stuck, you can always get back to your [original layout](https://configure.ergodox-ez.com/ergodox-ez/layouts/PBKjJ/ZqWv6/0) from Oryx. diff --git a/src/config.h b/src/config.h new file mode 100644 index 0000000..c468f26 --- /dev/null +++ b/src/config.h @@ -0,0 +1,5 @@ +/* + 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 +*/ +#define ORYX_CONFIGURATOR diff --git a/src/keymap.c b/src/keymap.c new file mode 100644 index 0000000..222a85e --- /dev/null +++ b/src/keymap.c @@ -0,0 +1,159 @@ +#include QMK_KEYBOARD_H +#include "version.h" +#include "keymap_german.h" +#include "keymap_nordic.h" +#include "keymap_french.h" +#include "keymap_spanish.h" +#include "keymap_hungarian.h" +#include "keymap_swedish.h" +#include "keymap_br_abnt2.h" +#include "keymap_canadian_multilingual.h" +#include "keymap_german_ch.h" +#include "keymap_jp.h" + +#define KC_MAC_UNDO LGUI(KC_Z) +#define KC_MAC_CUT LGUI(KC_X) +#define KC_MAC_COPY LGUI(KC_C) +#define KC_MAC_PASTE LGUI(KC_V) +#define KC_PC_UNDO LCTL(KC_Z) +#define KC_PC_CUT LCTL(KC_X) +#define KC_PC_COPY LCTL(KC_C) +#define KC_PC_PASTE LCTL(KC_V) +#define ES_LESS_MAC KC_GRAVE +#define ES_GRTR_MAC LSFT(KC_GRAVE) +#define ES_BSLS_MAC ALGR(KC_6) +#define NO_PIPE_ALT KC_GRAVE +#define NO_BSLS_ALT KC_EQUAL + +enum custom_keycodes { + RGB_SLD = EZ_SAFE_RANGE, + HSV_172_255_255, + HSV_86_255_128, + HSV_27_255_255, + HSV_215_255_128, + HSV_0_255_255, +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_ergodox_pretty( + KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_DELETE, KC_DELETE, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQUAL, + KC_TAB, KC_QUOTE, KC_COMMA, KC_DOT, KC_P, KC_Y, KC_BSPACE, KC_BSPACE, KC_F, KC_G, KC_C, KC_R, KC_L, KC_QUES, + LCTL_T(KC_ESCAPE),KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_TRANSPARENT, + KC_LSHIFT, KC_SCOLON, KC_Q, KC_J, KC_K, KC_X, KC_ENTER, KC_ENTER, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_BSLASH, + MO(1), KC_TRANSPARENT, KC_TRANSPARENT, KC_LALT, KC_TRANSPARENT, KC_TRANSPARENT, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, + KC_KP_SLASH, KC_MINUS, KC_PLUS, KC_KP_ASTERISK, + KC_TRANSPARENT, KC_TRANSPARENT, + KC_SPACE, KC_LGUI, MO(1), KC_TRANSPARENT, KC_RGUI, KC_SPACE + ), + [1] = LAYOUT_ergodox_pretty( + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_TRANSPARENT, KC_TRANSPARENT, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, + KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_LBRACKET, KC_RBRACKET, KC_TRANSPARENT, KC_TRANSPARENT, + KC_TRANSPARENT, HSV_172_255_255,HSV_86_255_128, HSV_27_255_255, HSV_215_255_128,HSV_0_255_255, KC_TRANSPARENT, KC_LPRN, KC_LCBR, KC_RCBR, KC_RPRN, KC_TRANSPARENT, + KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, + KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, + RGB_HUD, RGB_HUI, RGB_VAI, RGB_VAD, + KC_TRANSPARENT, KC_TRANSPARENT, + KC_TRANSPARENT, RGB_SLD, KC_TRANSPARENT, KC_TRANSPARENT, RGB_MOD, KC_TRANSPARENT + ), +}; + + +bool suspended = false; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case RGB_SLD: + if (record->event.pressed) { + rgblight_mode(1); + } + return false; + case HSV_172_255_255: + if (record->event.pressed) { + #ifdef RGBLIGHT_ENABLE + rgblight_enable(); + rgblight_mode(1); + rgblight_sethsv(172,255,255); + #endif + } + return false; + case HSV_86_255_128: + if (record->event.pressed) { + #ifdef RGBLIGHT_ENABLE + rgblight_enable(); + rgblight_mode(1); + rgblight_sethsv(86,255,128); + #endif + } + return false; + case HSV_27_255_255: + if (record->event.pressed) { + #ifdef RGBLIGHT_ENABLE + rgblight_enable(); + rgblight_mode(1); + rgblight_sethsv(27,255,255); + #endif + } + return false; + case HSV_215_255_128: + if (record->event.pressed) { + #ifdef RGBLIGHT_ENABLE + rgblight_enable(); + rgblight_mode(1); + rgblight_sethsv(215,255,128); + #endif + } + return false; + case HSV_0_255_255: + if (record->event.pressed) { + #ifdef RGBLIGHT_ENABLE + rgblight_enable(); + rgblight_mode(1); + rgblight_sethsv(0,255,255); + #endif + } + return false; + } + return true; +} + +uint32_t layer_state_set_user(uint32_t state) { + + uint8_t layer = biton32(state); + + ergodox_board_led_off(); + ergodox_right_led_1_off(); + ergodox_right_led_2_off(); + ergodox_right_led_3_off(); + switch (layer) { + case 1: + ergodox_right_led_1_on(); + break; + case 2: + ergodox_right_led_2_on(); + break; + case 3: + ergodox_right_led_3_on(); + break; + case 4: + ergodox_right_led_1_on(); + ergodox_right_led_2_on(); + break; + case 5: + ergodox_right_led_1_on(); + ergodox_right_led_3_on(); + break; + case 6: + ergodox_right_led_2_on(); + ergodox_right_led_3_on(); + break; + case 7: + ergodox_right_led_1_on(); + ergodox_right_led_2_on(); + ergodox_right_led_3_on(); + break; + default: + break; + } + return state; + +}; diff --git a/src/rules.mk b/src/rules.mk new file mode 100644 index 0000000..4ceccd6 --- /dev/null +++ b/src/rules.mk @@ -0,0 +1,5 @@ +# Set any rules.mk overrides for your specific keymap here. +# See rules at https://docs.qmk.fm/#/config_options?id=the-rulesmk-file +LINK_TIME_OPTIMIZATION_ENABLE = yes +COMMAND_ENABLE = no +MOUSEKEY_ENABLE = no