Skip to content

Commit

Permalink
Initial commit.
Browse files Browse the repository at this point in the history
  • Loading branch information
ctsrc committed Nov 11, 2019
0 parents commit 17bdef1
Show file tree
Hide file tree
Showing 7 changed files with 269 additions and 0 deletions.
1 change: 1 addition & 0 deletions ErgoDox-EZ-Shine.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
85 changes: 85 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -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.

<figure>
<img src=ErgoDox-EZ-Shine.svg alt="ErgoDox EZ Shine">
<figcaption style="font-size: 80%">
ErgoDox EZ Shine. Illustration from ErgoDox EZ website.
Copyright © 2019 ZSA Technology Labs, Inc.
</figcaption>
</figure>

## 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

<table>
<tr>
<th>Color</th>
<th>Tilt kit</th>
<th>Wing rest</th>
<th>Shine</th>
<th>Keycaps</th>
<th>Switches</th>
</tr>
<tr>
<td>Black</td>
<td>Yes</td>
<td>No</td>
<td>Yes</td>
<td>Blank, sculpted keycaps</td>
<td>Kailh Thick Gold</td>
</tr>
</table>

## 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.
Binary file added configuration.pdf
Binary file not shown.
14 changes: 14 additions & 0 deletions ergodox_ez_instructions.md
Original file line number Diff line number Diff line change
@@ -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.
5 changes: 5 additions & 0 deletions src/config.h
Original file line number Diff line number Diff line change
@@ -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
159 changes: 159 additions & 0 deletions src/keymap.c
Original file line number Diff line number Diff line change
@@ -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;

};
5 changes: 5 additions & 0 deletions src/rules.mk
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 17bdef1

Please sign in to comment.