Ergodox

Ergodox EZのGateron赤軸を使用しています。

初期設定

Using The Teensy Loader on Ubuntu LinuxからTeensyをダウンロードする

キーマップの編集に必要なファームウェアをダウンロードする

$ git clone https://github.com/PaulStoffregen/teensy_loader_cli.git

偉人が作ったキーマップを流用できるようにする。

$ git clone https://github.com/qmk/qmk_firmware/

$ cd qmk_firmware/

$ sudo util/linux_install.sh

$ git submodule init

$ git submodule update

$ mkdir keyboards/ergodox_ez/keymaps/mykeymap/

$ cd keyboards/ergodox_ez/keymaps/mykeymap/

$ cp ../default/keymap.c .

$ cp ../default/readme.md .

$ emacs keymap.c

linux_install.shは環境に応じてwsl_install.sh等に変更してください。

keymap.cとreadme.mdを doc/keycode.txtを参照しながら自分の好きなように編集する。(下記の設定ファイル参照)

上で作ったキーマップをビルドする

$ cd ../../../../

$ pwd

nantokakantoka/qmk_firmware

$ make ergodox_ez:mykeymap

するとqmk_firmware/の下にergodox_ez_mykeymap.hexが作られる。

(注) ある時にmakeの方法に変更があった。

Teensyを起動し、このファイルをロードする。

keyboard-layout-editor.com でpresetからergodoxを選択し、自分の作ったレイアウトを保存しておくと便利。

参考

https://github.com/qmk/qmk_firmware/tree/master/keyboards/ergodox

http://qiita.com/shuh/items/b94215d3b946d3ded0fe

http://qiita.com/ReSTARTR/items/f84f8f3c4c51c876cb2f

http://foolish-oknct.hatenablog.com/entry/2017/01/30/002329

https://qiita.com/marksard/items/f381caf3ca981f307f64#qmk_firmware%E3%82%92dl-clone%E3%81%97%E3%81%BE%E3%81%99

キーマップ

設定ファイル

#include QMK_KEYBOARD_H

#include "version.h"

#define BASE 0 // default layer

#define SYMB 1 // symbols

#define EMCS 2 // Emacs

// http://qiita.com/shuh/items/b94215d3b946d3ded0fe

#define JA_CLN KC_QUOT // : and +

#define JA_AT KC_LBRC // @ and `

#define JA_HAT KC_EQL // ^ and ~

#define JA_BSLSH KC_RO // \ and _ (EN mark and UNder score)

#define JA_ENVL KC_JYEN // \ and | (EN mark and Vertical Line)

#define JA_LBRC KC_RBRC // [ and {

#define JA_RBRC KC_BSLS // ] and }

enum custom_keycodes {

#ifdef ORYX_CONFIGURATOR

EPRM = EZ_SAFE_RANGE,

#else

EPRM = SAFE_RANGE,

#endif

VRSN,

RGB_SLD

};

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

/* Keymap 0: Basic layer

*

* ,-------------------------------------------. ,-------------------------------------------.

* | Esc | 1 | 2 | 3 | 4 | 5 | Del | | BS | 6 | 7 | 8 | 9 | 0 | - |

* |-------+-----+-----+-----+-----+-----+-----| |-----+-----+-----+-----+-----+-----+-------|

* | Tab | Q | W | E | R | T | Ent | | Ent | Y | U | I | O | P | @ |

* |-------+-----+-----+-----+-----+-----| | | |-----+-----+-----+-----+-----+-------|

* | Ctrl | A | S | D | F | G |-----| |-----| H | J | K | L | ; | : |

* |-------+-----+-----+-----+-----+-----|Zenka| |Zenka|-----+-----+-----+-----+-----+-------|

* | Shift | Z | X | C | V | B |Hanka| |Hanka| N | M | , | . | / | \ |

* `-------+-----+-----+-----+-----+-----------' `-----------+-----+-----+-----+-----+-------'

* |LGui | [ | ] | ^ | MO2 | | MO1 |left |down | up |right|

* `-----------------------------' `-----------------------------'

* ,-----------. ,-----------.

* | MhR | MhL | | App | PSc |

* ,-----|-----|-----| |-----+-----+-----.

* | | | MhU | |WBack| | |

* | Alt |Shift|-----| |-----|Space|Ctrl |

* | | | MhD | |WFWD | | |

* `-----------------' `-----------------'

*/

[BASE] = LAYOUT_ergodox(

// left hand

KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_DEL,

KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_ENTER,

KC_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G,

KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_ZKHK,

KC_LGUI, JA_LBRC, JA_RBRC, JA_HAT, MO(2),

KC_WH_L, KC_WH_R,

KC_WH_U,

KC_LALT, KC_LSHIFT, KC_WH_D,

// right hand

KC_BSPACE, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,

KC_ENTER, KC_Y, KC_U, KC_I, KC_O, KC_P, JA_AT,

KC_H, KC_J, KC_K, KC_L, KC_SCLN, JA_CLN,

KC_ZKHK, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, JA_BSLSH,

MO(1), KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT,

KC_APP, KC_PSCREEN,

KC_WWW_BACK,

KC_WWW_FORWARD, KC_SPACE, KC_RCTRL

),

/* Keymap 1: Symbol Layer

*

* ,---------------------------------------------------. ,--------------------------------------------------.

* |Version | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |

* |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|

* | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |

* |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|

* | | # | $ | ( | ) | ¥ |------| |------| Down | 4 | 5 | 6 | + | |

* |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|

* | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |

* `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'

* | EPRM | | | | | | | . | 0 | = |RESET |

* `-----------------------------------' `----------------------------------'

* ,-------------. ,-------------.

* |Animat| | |Toggle|Solid |

* ,------|------|------| |------+------+------.

* |Bright|Bright| | | |Hue- |Hue+ |

* |ness- |ness+ |------| |------| | |

* | | | | | | | |

* `--------------------' `--------------------'

*/

[SYMB] = LAYOUT_ergodox(

// left hand

VRSN, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,

KC_TRNS, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_JYEN, KC_TRNS,

KC_TRNS, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV,

KC_TRNS, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_TRNS,

EPRM, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,

RGB_MOD,KC_TRNS,

KC_TRNS,

RGB_VAD,RGB_VAI,KC_TRNS,

// right hand

KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,

KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,

KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,

KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,

KC_TRNS, KC_DOT, KC_0, KC_EQL, RESET,

RGB_TOG, RGB_SLD,

KC_TRNS,

KC_TRNS, RGB_HUD, RGB_HUI

),

/* Keymap 2: Emacs

*

* ,--------------------------------------------------. ,--------------------------------------------------.

* | | | | | | | | | | | | | | | |

* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|

* | | | | End | | | | | | | | Tab | | up | |

* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|

* | | Home | | Del |right | Esc |------| |------| | | | | | |

* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|

* | | | | | PgDn | left | | | | down | Ent | | | | |

* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'

* | | | | | | | | | | | |

* `----------------------------------' `----------------------------------'

* ,-------------. ,-------------.

* | | | | | |

* ,------|------|------| |------+------+------.

* | | | | | | | |

* | | |------| |------| | |

* | | | | | | | |

* `--------------------' `--------------------'

*/

[EMCS] = LAYOUT_ergodox(

// left hand

KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,

KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_TRNS, KC_TRNS, KC_TRNS,

KC_TRNS, KC_HOME, KC_TRNS, KC_DEL, KC_RGHT, KC_ESC,

KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_LEFT, KC_TRNS,

KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,

KC_TRNS, KC_TRNS,

KC_TRNS,

KC_TRNS, KC_TRNS, KC_TRNS,

// right hand

KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,

KC_TRNS, KC_TRNS, KC_TRNS, KC_TAB, KC_TRNS, KC_UP, KC_TRNS,

KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,

KC_TRNS, KC_DOWN, KC_ENT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,

KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,

KC_TRNS, KC_TRNS,

KC_TRNS,

KC_TRNS, KC_TRNS, KC_TRNS

),

};

bool process_record_user(uint16_t keycode, keyrecord_t *record) {

if (record->event.pressed) {

switch (keycode) {

case EPRM:

eeconfig_init();

return false;

case VRSN:

SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);

return false;

#ifdef RGBLIGHT_ENABLE

case RGB_SLD:

rgblight_mode(1);

return false;

#endif

}

}

return true;

}

// Runs just one time when the keyboard initializes.

void matrix_init_user(void) {

#ifdef RGBLIGHT_COLOR_LAYER_0

rgblight_setrgb(RGBLIGHT_COLOR_LAYER_0);

#endif

};

// Runs whenever there is a layer state change.

layer_state_t layer_state_set_user(layer_state_t state) {

ergodox_board_led_off();

ergodox_right_led_1_off();

ergodox_right_led_2_off();

ergodox_right_led_3_off();

uint8_t layer = get_highest_layer(state);

switch (layer) {

case 0:

#ifdef RGBLIGHT_COLOR_LAYER_0

rgblight_setrgb(RGBLIGHT_COLOR_LAYER_0);

#else

#ifdef RGBLIGHT_ENABLE

rgblight_init();

#endif

#endif

break;

case 1:

ergodox_right_led_1_on();

#ifdef RGBLIGHT_COLOR_LAYER_1

rgblight_setrgb(RGBLIGHT_COLOR_LAYER_1);

#endif

break;

case 2:

ergodox_right_led_2_on();

#ifdef RGBLIGHT_COLOR_LAYER_2

rgblight_setrgb(RGBLIGHT_COLOR_LAYER_2);

#endif

break;

case 3:

ergodox_right_led_3_on();

#ifdef RGBLIGHT_COLOR_LAYER_3

rgblight_setrgb(RGBLIGHT_COLOR_LAYER_3);

#endif

break;

case 4:

ergodox_right_led_1_on();

ergodox_right_led_2_on();

#ifdef RGBLIGHT_COLOR_LAYER_4

rgblight_setrgb(RGBLIGHT_COLOR_LAYER_4);

#endif

break;

case 5:

ergodox_right_led_1_on();

ergodox_right_led_3_on();

#ifdef RGBLIGHT_COLOR_LAYER_5

rgblight_setrgb(RGBLIGHT_COLOR_LAYER_5);

#endif

break;

case 6:

ergodox_right_led_2_on();

ergodox_right_led_3_on();

#ifdef RGBLIGHT_COLOR_LAYER_6

rgblight_setrgb(RGBLIGHT_COLOR_LAYER_6);

#endif

break;

case 7:

ergodox_right_led_1_on();

ergodox_right_led_2_on();

ergodox_right_led_3_on();

#ifdef RGBLIGHT_COLOR_LAYER_7

rgblight_setrgb(RGBLIGHT_COLOR_LAYER_7);

#endif

break;

default:

break;

}

return state;

};