WSL2上でRust開発環境を整える（1日目）

Windowsはずっとゲーム機として使ってきたが、ちょっと思い立って開発環境を整えることにした。
とりあえずターミナルを快適に使えるところまで設定できればと思う。

## Windowsでの作業
### Windows Terminalをインストール

なにやら便利そうなので、[Windows Terminal](https://www.microsoft.com/store/productId/9N0DX20HK701?ocid=pdpshare) を入れる。


見た目は大事。
[ここ](https://windowsterminalthemes.dev/)から好みのテーマを探す。
個人的には Monokai Cmder が好き。

参考にした記事はこちら

https://qiita.com/pitao/items/75995665294715f00847


### フォントのインストール

フォントは詳しくないが、個人的に見やすくNerd Fontもある白源フォントを使う。

https://github.com/yuru7/HackGen

インストールしたらWindows Terminalでフォントの設定をする。
「規定値 > 外観」のフォントフェイスを「HackGenNerd Console」に設定する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90538/23df1919-e4a7-6365-b792-a3b75ca60100.png)

Nerd Fontはアイコンが含まれたフォントで、基本的に文字を表示するターミナルを、リッチな見た目にするために必要なもの。


### win32yankのインストール

ダウンロードして適当なフォルダに放り込む。
Windowsではパスは通さなくてOK。
https://github.com/equalsraf/win32yank/releases


### WSL2を使用してUbuntuをインストール

昔いろいろ設定した気がするが、既にWSL2は有効になっていたのでUbuntuをインストールするだけで動いた。
```powershellz
wsl --install -d Ubuntu
```

最初から設定する場合は以下の記事が参考になるのではなかろうか。

https://qiita.com/ryome/items/240f36923f5cb989da27


## Ubuntuでの作業

とりあえず、Debian系は何も考えず最初にaptの更新をする。

```bash
sudo apt update && sudo apt upgrade -y
```

### zshのインストール

仕事用のmacOSのターミナルのログインシェルがzshなので、プライベートでもzshを使う。

```bash
sudo apt install -y zsh
chsh -s $(which zsh)
```

ターミナル再起動すればzshが起動する。
初回起動時に.zshrcを生成するための質問が表示されるが、今回はZimを使うので(0)を選ぶ。

### ビープを消す

とにかくうるさいのでビープ音を消していく

```zsh:/etc/inputrc
# 21行目付近
# 元々コメントアウトされているので有効化する
set bell-style none
```

```zsh:~/.zshrc
# 最終行に追加
setopt no_beep
export LESS="$LESS -R -Q"
```

```vim:/etc/vim/vimrc
# 最終行に追加
set visualbell t_vb=
```


### Zimをインストール

```zsh
curl -fsSL https://raw.githubusercontent.com/zimfw/install/master/install.zsh | zsh
```

Zimは初めて使うのでよくわからないが、なんとなくerinerが見た目キレイなので使ってみる。
Zimプラグイン？は.zshrcではなく.zimrcに設定を書くようだが、どこに追加したら良いかよくわからない。
とりあえず最終行に追加してみる。
prompt-pwdはerinerのみを追加したときにエラー出たので追加。

```zsh:~/.zimrc
# 最終行に追加
zmodule eriner
zmodule prompt-pwd
```

設定を追加したら以下のコマンドでインストールして、シェルを再起動する
```zsh
zimfw install
exec $SHELL -l
```

参考にした記事はこちら

https://qiita.com/takuya0301/items/7da7410030f100850a64

少しだけ使ってみたけど、コマンドの終了コードが0以外の場合にインデントがずれてしまうのが気に食わない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90538/8fe911c5-67eb-5d12-526b-e1a4e3f6e7be.png)

取り急ぎ、×の表示だけコメントアウトしちゃう。
```zsh:~/.zim/modules/eriner/eriner.zsh-theme
...

_prompt_eriner_status() {
  local segment=
  # このコードのせいでインデントがずれるのでコメントアウト
  # if (( RETVAL )) segment+=' %F{red}✘'
  if (( EUID == 0 )) segment+=' %F{yellow}⚡'
  if (( $(jobs -l | wc -l) )) segment+=' %F{cyan}⚙'
  if (( RANGER_LEVEL )) segment+=' %F{cyan}r'
  if [[ -n ${VIRTUAL_ENV} ]] segment+=" %F{cyan}${VIRTUAL_ENV:t}"
  if [[ -n ${SSH_TTY} ]] segment+=" %F{%(!.yellow.default)}%n@%m"
  if [[ -n ${segment} ]]; then
    _prompt_eriner_segment ${STATUS_COLOR} "${segment} "
  fi
}

...
```

ファイル修正後はシェルの再起動が必要
```zsh
exec $SHELL -l
```

### fzfのインストール

https://github.com/junegunn/fzf

findと組み合わせたり、コマンド履歴検索が楽になったり。
ファジー検索なので脱字しても問題なく検索できるのがとても良い。
aptでもインストールできるが、キーバインドの取り込みがアレだったのでgit cloneして使う。

```zsh
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install
```

### fd-findのインストール

今回の自分の目的はRustの開発環境を整えることなので、fd-findはCargoでインストールするが、一応aptでインストールする方法も記載しておく。
ただ、Cargoでインストールした場合と異なり、fdコマンドではなくfdfindコマンドになってしまいfzfで参照できなさそうなのでシンボリックリンクを作る必要がある。


```zsh
sudo apt install fd-find
sudo ln -s $(which fdfind) /usr/local/bin/fd
```

### Rustのインストール

開発セットをインストール
```zsh
sudo apt install -y build-essential
```

コマンド一発。とても楽。
```zsh
curl https://sh.rustup.rs -sSf | sh

# .zshrcに設定を追加
echo 'source $HOME/.cargo/env' >> ~/.zshrc
source ~/.zshrc

# 以下が実行できれば大丈夫そう
cargo --version
rustc --version
```

個人開発なら問題なさそうだけど、チーム開発するならバージョン指定やバージョン切り替えが必要なのでasdfとかで入れた方が良いのかもしれない。

ついでにfd-findも追加
```zsh
cargo install fd-find
```

---

とりあえず今日はここまで。
明日はwin32yank.exeを使えるようにする予定。