NushellでGitを便利に使う

# 目的

Nushell で Git 補完と現在のブランチが表示されたらうれしい。
こんな感じで
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1814940/d329fc2b-d3bd-7241-615b-2985262157b7.png)

# 環境
WSL 上の Ubuntu 22.04

# 手順

## Nushell インストール

https://github.com/nushell/nushell/releases から自分の環境にあったバイナリーをダウンロードできます。
私は nu-0.98.0-x86_64-unknown-linux-gnu.tar.gz をダウンロードします。

自分でビルドする方法や cargo でインストールする方法もあります。詳しくは公式で。
https://www.nushell.sh/ja/book/installation.html

ダウンロードしたファイルを展開し、nu ファイルをパスの通っているディレクトリにコピーします。

```sh
wget https://github.com/nushell/nushell/releases/download/0.98.0/nu-0.98.0-x86_64-unknown-linux-gnu.tar.gz
tar zxvf nu-0.98.0-x86_64-unknown-linux-gnu.tar.gz
sudo cp nu-0.98.0-x86_64-unknown-linux-gnu/nu /usr/local/bin/
```

ここで nu と実行すると Nushell が起動します。初回は `env.nu` を作るか聞かれるので Y と答えておきます。
```sh
$ nu
No environment config file found at /home/user/.config/nushell/env.nu
Would you like to create one with defaults (Y/n):
```

## Git Completions の追加

https://github.com/nushell/nu_scripts を clone します。
```sh
git clone https://github.com/nushell/nu_scripts.git
```

この中にある custom-completions/git/git-completions.nu が目的のファイルです。
これを適当な場所にコピーします。
私は ~/.config/nushell/ にコピーしました。

```sh
cp nu_scripts/custom-completions/git/git-completions.nu ~/.config/nushell/
```

最後に ~/.config/nushell/env.nu の最終行に設定を追加します。最後の `*` は消さないでください。
```~/.config/nushell/env.nu
use ~/.config/nushell/git-completions.nu *
```

再度ターミナルを立ち上げれば Git コマンドの補完が効くようになっています。

## プロンプトの装飾

プロンプトに現在のブランチ名などを表示するには先ほど clone した nu_scripts の中の modules/prompt にあるスクリプトを使います。
私は oh-my.nu というのを使いました。

### Nerd Font のインストール

https://www.nerdfonts.com/ から好きなフォントを選んでインストールしてください。
インストールしなくても動作するのですが、表示が微妙なことになってしまうので、インストールした方がよいです。

### gstat のインストール

Git のステータスを取得するのに使う gstat プラグインをインストールします。

https://github.com/nushell/nushell/releases からダウンロードし展開したファイルの中にプラグインが入っています。
必要なプラグインだけ ~/.config/nushell/ にコピーしておきます。
plugin add コマンドでインストールします。

```sh
cp nu-0.98.0-x86_64-unknown-linux-gnu/nu_plugin_gstat ~/.config/nushell/
plugin add ~/.config/nushell/nu_plugin_gstat
plugin use gstat
```

plugin list コマンドを入力して gstat と表示されれば大丈夫です。

```sh
 ~> plugin list
╭───┬───────┬─────────┬────────────┬─────┬────────────────────────────────────────────┬───────┬───────────────╮
│ # │ name  │ version │ is_running │ pid │                  filename                  │ shell │   commands    │
├───┼───────┼─────────┼────────────┼─────┼────────────────────────────────────────────┼───────┼───────────────┤
│ 0 │ gstat │ 0.98.0  │ false      │     │ /home/user/.config/nushell/nu_plugin_gstat │       │ ╭───┬───────╮ │
│   │       │         │            │     │                                            │       │ │ 0 │ gstat │ │
│   │       │         │            │     │                                            │       │ ╰───┴───────╯ │
╰───┴───────┴─────────┴────────────┴─────┴────────────────────────────────────────────┴───────┴───────────────╯
```


### oh-my.nu の設定

on-my.nu を適当な場所にコピー。
私は先ほどと同様 ~/.config/nushell/ にコピーしました。
```sh
cp nu_scripts/modules/prompt/oh-my.nu ~/.config/nushell/
```

~/.config/nushell/env.nu の最終行に以下を追加します。

```~/.config/nushell/env.nu
use ~/.config/nushell/oh-my.nu git_prompt
$env.PROMPT_COMMAND = { (git_prompt).left_prompt }
$env.PROMPT_COMMAND_RIGHT = { (git_prompt).right_prompt }
$env.PROMPT_INDICATOR = " "
```

再度ターミナルを立ち上げればプロンプトが派手な表示に変わっています。