【WSL2】WSL2環境でOh my zshを入れてAgnosterのテーマを適用する

## 本記事で取り扱うこと
- WSL2環境のUbuntu20.04環境へのZsh・Oh my zsh導入方法。
- zshのthemeとしてAgnosterを適用する方法（文字化け回避含め）
- その他細かいTips(Windowsターミナルの既定値変更、ホストネームの非表示)

## ゴール
こんな感じのターミナルを目指します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/289995/b6f8e90d-de1e-3911-d7c6-1fd38f798862.png)

## 本記事であまり取り扱わないこと
- 他環境での設定
- WSL2の導入（ひと昔前に比べたら楽に適用できると思いますのでMicrosoft公式Docを参照ください）

## 環境
- WSL2導入済み環境（Windows10、ビルドバージョン19043.1706）
- Ubuntu20.04LTS
- Windowsターミナルを利用  

元々他作業でセットアップ済みのソフトウェア等あるかもしれませんので、詰まるようであればコメントまでお願いします。

## はじめに
久しぶりにQiita記事を書くので軽いネタにしておきます。
私用のMacbookでzshを利用しているのですが、WSL2の環境でも合わせてみたくなったので  
導入してみました。
※zshがbashの上位互換というわけではありませんので、自己責任でお願いします。

## 前提
WSL2が導入されており、Microsft StoreからUbuntu20.04LTSがインストールされていること。
※Microsoftの[WSL のインストール](https://docs.microsoft.com/ja-jp/windows/wsl/install)や[Windows10でWSL2を使う](https://qiita.com/ryotaro76/items/cec9cbd24ca404bdf9da)といった記事を参照ください。

## 1. zshのインストール
基本的にはUbuntuのセットアップ後は以下の通りbashが適用されていると思います。
↓`echo $SHELL`で確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/289995/b237e3d8-7d86-6341-8ae4-8c54a33ece0d.png)

### zshインストール
```sh
# インストール
$ sudo apt install zsh
# バージョン確認
$ zsh --version
zsh 5.8 (x86_64-ubuntu-linux-gnu)
# デフォルトのシェルをzshに変更
$ chsh -s $(which zsh)
```
上記まで実行し、Ubuntuを再起動すると以下のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/289995/3eee3765-9cde-ae6d-cebc-520e1ac1c4d9.png)
デフォルトのシェルがzshに変更されていますね。
ただしデフォルトだとシンプルすぎるようです。

## 2. Oh my zshのインストール
[Oh my zsh](https://ohmyz.sh/)はzsh用のフレームワークで良い感じのターミナルを実現するのに役立ちます。

### Oh my zshのインストール
```sh
# curlでのインストール(curlが入っているかはcurl --versionなどで確認)
$ sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
```
完了すると、こんな感じでお出迎えされます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/289995/46838e58-c53f-ce4b-c987-1714b1b2ba7e.png)

## 3. テーマの変更(Agnoster)
Oh my zshインストールの際にも記載されていますが、`~/.zshrc`が設定ファイルとなります。
ここでは設定ファイル中のテーマに[agnoster](https://github.com/agnoster/agnoster-zsh-theme)を適用します。
### テーマの変更
デフォルトは`robbyrussell`が適用されているため変更します。
```sh
$ vi ~/.zshrc

~~~中略~~~
# Set name of the theme to load --- if set to "random", it will
# load a random theme each time oh-my-zsh is loaded, in which case,
# to know which specific one was loaded, run: echo $RANDOM_THEME
# See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes
ZSH_THEME="robbyrussell"
# ↑を"agnoster"に変更し、保存
~~~~~~~~

# 設定ファイルの再読み込み
$ source ~/.zshrc
```
上記まで行って再読み込みをすると、何やら文字化けしています、、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/289995/09099769-0414-8569-02f6-7d170e8246a6.png)

### 文字化けの解消(フォントのインストール)
agnosterテーマのGitHubにも記載がありますが、利用するためには[Powerline-patched font](https://github.com/powerline/fonts)がインストールされている必要があります。
ニッチですが今回ここで詰まったので[参考記事](https://dev.to/nickymeuleman/wsl2-zsh-and-docker-linux-through-windows-4e4m)を元にやります。
Windows側に関連ファイルがあるとWSLの処理が遅くなる可能性があるためWSL側で作業します。(未検証)
#### powerlineをインストール
```sh
# 作業用のフォルダに移動
$ cd /var/tmp
# インストール
$ git clone https://github.com/powerline/fonts.git
```

#### PowerShellでのpsファイル実行
インストールしたfontsフォルダ中にある`install.ps1`を管理者実行したPowerShellで叩きます。
- 管理者として実行したPowerShellで以下を実行
```posh
# WSL側の上記でインストールしたフォルダに移動
cd \\wsl$\Ubuntu-20.04\var\tmp\fonts
# 実行ポリシーを変更
Set-ExecutionPolicy Bypass
# フォントをインストール
.\install.ps1
# 実行ポリシーをデフォルトに戻す
Set-ExecutionPolicy Default
```
インストール出来たら`/var/tmp/fonts`は削除しても構いません。
#### フォントの変更
- Windowsターミナル上でCtrlと「,」のキーを同時押しし、設定画面を立ち上げます
サイドメニューの「Ubuntu-20.04」→外観→フォントフェイスで「XXXXX for Powerline」というPowerline系のフォントを選択します。
複数あるため好きなもので。添付では「Cousin for Powerline」を選択しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/289995/935fddef-97bb-c6a3-8161-f1ef3ce4a0c9.png)
ここではWindowsターミナルを利用していますが、
Ubuntu20.04アプリでは上のバーを右クリック→既定値→フォント で変更したり、
VSCodeのターミナルなどでもフォントを追加・変更すれば大丈夫かと思います。

### 完成
ターミナルを再起動などすれば文字化けなども無くなり、意図したテーマが利用できます。
良きターミナルライフを！
次回はpeco入れようと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/289995/b6f8e90d-de1e-3911-d7c6-1fd38f798862.png)


## その他関連Tips
### Windowsターミナルの規定値をUbuntuにする
最初はWindows PowerShellが立ち上がるかと思いますが、この規定値は変更することができます。(settings.jsonで管理されているっぽい)
1. Ctrlと「,」のキーを同時押しし、設定画面を立ち上げます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/289995/fd6bb89a-cd12-4e74-dbfe-378bd21ba156.png)

1. 既定のプロファイルで「Ubuntu-20.04」などを選択し、保存します

### ホストネーム(@以降)を非表示にする
`~/.zshrc`の最後に以下を付け加える。
```sh
prompt_context() {
  if [[ "$USER" != "$DEFAULT_USER" || -n "$SSH_CLIENT" ]]; then
    prompt_segment black default "%(!.%{%F{yellow}%}.)$USER"
  fi
}
```
アフターはこんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/289995/7e73d3f0-0d08-e0f8-96ea-72bcc6b2809e.png)