自作キーボード用の QMK を HTTP Proxy 環境で build する

# 目的
Iris keyboard (rev.4)の key map を変更するためのの software の準備をする。特に HTTP Proxy環境下での環境に対応する。動作環境は Window 10 向けだが他の Windows の version でも大丈夫なはず。Mac の場合は最後に追記している。

## 環境構築の流れ
1. MSYS2 をインストールし、shell 環境の土台を作る
2. Git をインストールし、QMK software 入手のための準備をする
3. QMK firmware を入手する

この後、利用したい keyboard の firmware を書き込む流れとなる。Iris rev.4はPCBにマイコンが搭載されている。またUSB Type-Cコネクタとなっており、以前より耐久性が上がっている。

## 設定の流れ
4. Iris keyboard の keymap を好きなように変更する
5. Iris keyboard の firmware を build する　
6. firmware を書き込む


## MSYS2 Installation
https://www.msys2.org/

### Set proxy
```shell-session:自分の環境に合わせる
$ export http_proxy=http://proxyserver:portnumber
```

ここではshellで入力しているが、.bashrc などに書いておけば次回から設定される。


### Update Core system and others
```shell_session:最新にしておく
$ pacman -Syu
```

## Install Git
```shell_session:software入手のためインストールする
$ pacman -S git
```


### Set proxy
```shell_session:自分の環境に合わせる
$ git config --global http.proxy http://proxyserver:portnumber        
$ git config --global https.proxy http://proxyserver:portnumber
```

#### 設定を確認する
```console:check

$ cat .gitconfig
[http]
        proxy = http://proxyserver:portnumber
[https]
        proxy = http://proxyserver:portnumber
```

ここまできたら、QMKのsource codeを入手する

## Install QMK source code
```shell_session:結構時間かかる
$ git clone --recurse-submodules https://github.com/qmk/qmk_firmware.git
```

ここでsubmodulesをちゃんと入れておかないとうまくいかない。単にcloneでは後で失敗するので注意。


### QMKファームウェアビルド環境の構築
```shell_session
$ cd qmk_firmware
$ ./util/qmk_install.sh
```

---

## Layout
好きな配列にするが、keymap.cでは見通しが悪いのでこちらでlayoutしておく。
[Keyboard layout Editorによる配列] (http://www.keyboard-layout-editor.com/##@_name=IRIS%20k2map&switchMount=cherry&switchBrand=cherry&switchType=MX3A-L1xx&pcb:true&plate:false%3B&@_x:3.5%3B&=%23%0A3%0A%0A%0AF3&_x:7.75%3B&=*%0A8%0A%0A%0AF8%3B&@_y:-0.87&x:2.5%3B&=%2F@%0A2%0A%0A%0AF2&_x:1%3B&=$%0A4%0A%0A%0AF4&_x:5.75%3B&=%2F&%0A7%0A%0A%0AF7&_x:1%3B&=(%0A9%0A%0A%0AF9%3B&@_y:-0.8799999999999999&x:5.5%3B&=%25%0A5%0A%0A%0AF5&_x:3.75%3B&=%5E%0A6%0A%0A%0AF6%3B&@_y:-0.87&a:7&w:1.5%3B&=ESC&_a:4%3B&=!%0A1%0A%0A%0AF1&_x:11.75%3B&=)%0A0%0A%0A%0AF10&_a:5&w:1.5%3B&=%0A-%0A%0A%0AVol%20-%0A%0A%2F_%3B&@_y:-0.3799999999999999&x:3.5&a:4%3B&=E&_x:7.75%3B&=I%0A%0A%0A%0A%0A%0A%0A%0A%0A%0AUp%3B&@_y:-0.8700000000000001&x:2.5%3B&=W%0A%0A%0A%0A%0A%0A%0A%0A%0A%0AMouse%20Up&_x:1%3B&=R&_x:5.75%3B&=U%0A%0A%0A%0A%0A%0A%0A%0A%0A%0APG%20Up&_x:1%3B&=O%3B&@_y:-0.8799999999999999&x:5.5%3B&=T&_x:3.75%3B&=Y%0A%0A%0A%0A%0A%0A%0A%0A%0A%0AHome%3B&@_y:-0.8700000000000001&a:7&w:1.5%3B&=TAB&_a:4%3B&=Q&_x:11.75%3B&=P&_a:5&w:1.5%3B&=%0A%2F=%0A%0A%0AVol%20+%0A%0A+%3B&@_y:-0.3799999999999999&x:3.5&a:4%3B&=D%0A%0A%0A%0A%0A%0A%0A%0A%0A%0AMouse%20Right%2F@&_x:7.75%3B&=K%0A%0A%0A%0A%0A%0A%0A%0A%0A%0ADown%3B&@_y:-0.8700000000000001&x:2.5%3B&=S%0A%0A%0A%0A%0A%0A%0A%0A%0A%0AMouse%20Down&_x:1%3B&=F%0A%0A%0A%0A%0A%0A%0A%0A%0A%0ARight%20Click&_x:5.75%3B&=J%0A%0A%0A%0A%0A%0A%0A%0A%0A%0ALeft&_x:1%3B&=L%0A%0A%0ARight%3B&@_y:-0.8799999999999999&x:5.5%3B&=G%0A%0A%0A%0A%5B%0A%0A%0A%0A%0A%0ALeft%20Click&_x:3.75%3B&=H%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%5D%3B&@_y:-0.8700000000000001&a:7&w:1.5%3B&=CTRL&_a:4%3B&=A%0A%0A%0A%0A%0A%0A%0A%0A%0A%0AMouse%20Left&_x:11.75%3B&=%2F:%0A%2F%3B&_a:5&w:1.5%3B&=%0A%22%0A%0A%0A%0A%0A'%3B&@_y:-0.3799999999999999&x:3.5&a:4%3B&=C&_x:7.75%3B&=%3C%0A,%3B&@_y:-0.8700000000000001&x:2.5%3B&=X&_x:1%3B&=V&_x:5.75%3B&=M%0A%0A%0A%0A%0A%0A%0A%0A%0A%0APG%20Dn&_x:1%3B&=%3E%0A.%3B&@_y:-0.8799999999999999&x:5.5%3B&=B%0A%0A%0A%0A%0A%0A%0A%0A%0A%0A%7B&_x:3.75%3B&=N%0A%0A%0A%0AEnd%0A%0A%0A%0A%0A%0A%7D%3B&@_y:-0.8700000000000001&a:7&w:1.5%3B&=SHIFT&_a:4%3B&=Z&_x:11.75%3B&=%3F%0A%2F%2F%0A%0A%0A%7C&_a:7&w:1.5%3B&=SHIFT%3B&@_y:-0.8799999999999999&x:7%3B&=Alt&_x:0.75%3B&=Win%3B&@_y:-0.3700000000000001&x:4.5&c=%23d91c1c&t=%23942121%3B&=RAISE&_x:5.75&c=%230d1980&t=%231866db%3B&=LOWER%3B&@_y:0.1200000000000001&x:11.25&c=%23cccccc&t=%23000000&d:true%3B&=Right%20Click%3B&@_y:-0.8700000000000001&x:10.5&t=%23191717%0A%23e83333&a:5&f2:4&d:true%3B&=Track%20Point%0A%3Ci%20class%2F='fa%20fa-circle'%3E%3C%2F%2Fi%3E%3B&@_r:15&y:-3.78&x:6.75&t=%23000000&a:7%3B&=BS%3B&@_rx:6.5&ry:4.25&y:0.20000000000000018&x:0.5%3B&=DEL%3B&@_r:-30&rx:13&y:-0.5&x:-3.75&d:true%3B&=Left%20Click%3B&@_r:-15&rx:0&ry:0&y:7&x:8.5%3B&=Space%3B&@_rx:13&ry:4.25&y:-0.5&x:-4%3B&=Enter)

![a.png](https://qiita-image-store.s3.amazonaws.com/0/162341/dcf952ac-f20a-a6f0-1a1c-d8be944a8ee5.png)


## コンパイル

### Build keyboard firmware
```shell_session:Build
$  make keebio/iris/rev4:default
```

rev4ではkeebioの下に移動してたので一つ深くなっている。


## 書き込み

```shell_session:Burn_keyboard_firmware
$  make keebio/iris/rev4:default:flash
```

# カスタマイズ
ここからキー配列を変更するなどのカスタマイズの詳細を記載する。

## Keymap 変更
動作が確認できたら、自分の好きな keymap に変更するため、keymap.c を編集する。

編集が終わったら、再度コンパイルと書き込みを行う。
keyboard の reset switch を押すように指示が出るのでボタンを押すと、書き込みされる。
左右別々に2回書き込むことになる。これは面倒くさいが、二つマイコンを使っているので仕方ない。

## modifier key の lock を防ぐ

入力中に Shift key がなぜか lock されることがあり、手動で Shift key を再度押すことで lock 解除されるのではるが、時折頻発し、大変なストレスを感じていた。

解決方法としては、config.h に以下を追加すればよい。自分は config.h の最後に追加した。

```c:config.h
#define PREVENT_STUCK_MODIFIERS
```

これを追加してから Shift key が lock されてしまう現象がすっかりなくなった。ずっと shift key が物理的に接触がおかしいのかと思っていたが software の問題であった。現在は、これで解決しており、再発していない。

詳しい説明はこちら。
[QMK - Prevent stuck modifier](https://github.com/qmk/qmk_firmware/blob/f39e1b5dfe7552f01dbc6eab95c268f41a9d98e2/readme.md#prevent-stuck-modifiers)

---
# 補足: Macの場合
HomeBrew　がインストールされているとして、
Windows 同様に git で QMK を download して、setup を実行する。

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

```bash:
$ cd qmk_firmware/
$ ./util/qmk_install.sh
$ sudo make iris/rev2:default
```

ここまではok.

しかし、最新のgcc 8.2では、firmwareの書き込みでerrorになってしまった。調べたところ、gcc 8.1 でないとうまく動かないそう。詳しくは[1] を参照のこと。
そこで、以下を実行し、古いgccをインストールする。

```bash:
$ brew untap osx-cross/avr
$ brew tap leico/avr
$ brew uninstall avr-gcc && brew install avr-gcc@8_1
```

avr-gccのインストールはちょっと時間かかる。

```
$ sudo make iris/rev2:foo:avrdude
```

うまく書き込めた。fooと名前のkeyboardの種類を作り、keymapを自分の好みに修正する。


# 参考: Software
[0] [QMK firmware Guide] (https://docs.qmk.fm/#/newbs_building_firmware)
[1] [Lets Split Sockets/Vitamins failing with default build] (https://www.reddit.com/r/olkb/comments/939tz6/lets_split_socketsvitamins_failing_with_default/)
[2] [Prevent stuck modifiers](https://github.com/qmk/qmk_firmware/blob/f39e1b5dfe7552f01dbc6eab95c268f41a9d98e2/readme.md#prevent-stuck-modifiers)

## 参考：Hardware: IRIS keyboard のカスタマイズ関連
[2] [Iris keyboard tent] (https://www.thingiverse.com/thing:2681357)
[3] [Iris keyboard #3] (https://k2m4.blogspot.com/2018/10/iris-keyboard-3.html)