Oh My Poshを利用してPowerShellプロンプトをいい感じにする（バイナリインストール・Windows Terminal）

`Oh My Posh`について、当初はPowerShellモジュールにて実装され提供されていましたが、今現在はPowerShellモジュールでの提供は終了し、バイナリでの提供（oh-my-posh.exe)に切り替わりました。

過去、下記リンクのようなPowerShellモジュール版のインストール記事と、PowerShellモジュールからバイナリ提供版への移行について投稿しましたが、本記事ではバイナリ提供版を一からインストールする場合について説明します。

[Oh My Poshを利用してPowerShellプロンプトをいい感じにする](https://qiita.com/SAITO_Keita/items/472016123b79aebb2548)

[Oh My PoshをPowerShellモジュール版からバイナリインストール版に移行してみる（Windows）](https://qiita.com/SAITO_Keita/items/622f32bbdd2602917e26)

## 今回やること

Windows端末の`Winodws Terminal`上で`PowerShellプロンプト`を`Oh My Post`をつかってをいい感じにする。

## ドキュメント

[Fonts | Oh My Posh](https://ohmyposh.dev/docs/installation/fonts)
[Windows | Oh My Posh](https://ohmyposh.dev/docs/installation/windows)


## Nerdフォントのインストール と Windows Terminalの設定

[Nerd Fonts - Iconic font aggregator, glyphs/icons collection, & fonts patcher](https://www.nerdfonts.com/)

`Oh My Posh`でプロンプトをいい感じにするのには、`Nerd`フォントと呼ばれるフォントを利用しています。
（プロンプトにいい感じのアイコンだったりを表示するのに利用されています）

ドキュメントでは　[Meslo LGM NF](https://github.com/ryanoasis/nerd-fonts/releases) がおすすめされているようですが、他のNerdフォントでも互換性があり問題はなさそうです。

お好みのNerdフォントをインストールした上で、`Windows Terminal`のフォント設定を行います。
※本記事では、[HackGenNerd](https://github.com/yuru7/HackGen)というNerdフォントをインストールしています。

フォントインストール後、最近の`Windows Terminal`ではjsonファイルを直接いじらなくてもGUI上からフォント設定ができるので、`Windows Terminal`の設定からフォントを設定します。

下記画像では、既定値　ー＞　外観　から　インストールした[HackGenNerd](https://github.com/yuru7/HackGen)を選択しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/d064ec75-c299-d9ba-e5d0-c7c9d1e4d0ad.png)

## Oh My Posh をインストールする。

[Windows Set up your terminal](https://ohmyposh.dev/docs/installation/windows)

Windows環境へのインストールでは、`winget`、`scoop`、`manual`。
3種類のインストール方法が提供されています。

本記事では`winget`を利用してインストールします。

```powershell
winget install JanDeDobbeleer.OhMyPosh -s winget
```

上記コマンドでインストール後は、環境変数PATHを読み込むために`Windows Terminal`を一旦終了して起動しなおしてください。

## PowerShell起動時にOh My Poshを利用するように設定する

PowerShellの起動プロファイルに`Oh My Posh`を利用するよう設定を行います。

```powershell
# notepadでPowershellの起動プロファイルを開く
notepad $PROFILE

# 上記コマンドでエラーとなる場合は、起動プロファイルを作成してからnotepadで開く
New-Item -Path $PROFILE -Type File -Force

notepad $PROFILE
```

notepadで開いた起動プロファイルに下記の一文を追加します
```powerhsell
oh-my-posh init pwsh | Invoke-Expression
```

上記の一文を追加後に下記コマンドで起動プロファイルを読み込み直します。

```powershell
. $PROFILE
```

プロンプトがなんかいい感じになったかと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/2878aef1-57f3-71ed-1099-0f328eedc65d.png)

## インストールされているテーマを確認する

```powerhsell
oh-my-posh init pwsh | Invoke-Expression
```

上記コマンドで、デフォルトのテーマを読み込む利用するようにしましたが。
`Oh My Posh`ではjson設定ファイルをカスタマイズすることでプロンプトを様々な表示方法にカスタマズする事ができます。

テーマについても、インストールした時点で何種類も端末にはインストールされており。
テーマは下記環境変数にインストールされています。

```powershell
# テーマがインストールされているパスの表示
$env:POSH_THEMES_PATH

# テーマがインストールされているディレクトリを開く
ii $env:POSH_THEMES_PATH
```

多種多様なテーマがインストールされている事を確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/76498720-a974-2766-373f-b64daca8fb80.png)

提供されるデフォルトテーマがどのようなGUI表示となるか確認したい場合は、下記のコマンドを実行するとプロンプト上でインストールされているテーマが確認できます。

```powershell
Get-PoshThemes
```

コマンドを実行するといい感じのテーマがずらずらと表示されます。
なお下記ページにもプロンプト表示のサンプルが用意されているので、こちらから確認する事もできます。

[Temes | Oh My Posh](https://ohmyposh.dev/docs/themes)

現在設定されているテーマ以外に気に入ったテーマがあった場合は、切り替えるためにテーマ名が必要となるので控えておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/f62d217d-b816-2804-1c5e-b6cc4f0279e2.png)

## テーマを指定する

テーマを指定して`Oh My Posh`を起動するためには、起動プロファイルに指定した一文を変更します。

今回は`1_shell`という名前のテーマを設定してみます。

テーマ名は`1_shell`という名前で、先程テーマが格納されていたファイルを確認すると
`1_shell_omp.json`というファイルが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/91a755a6-9247-6386-e2fc-62297be981a9.png)

```powershell
# 起動プロファイルの一文を下記に変更する
oh-my-posh init pwsh --config $env:POSH_THEMES_PATH/1_shell.omp.json | Invoke-Expression
```

変更後は下記コマンドで起動プロファイルを読み込み直します。

```powershell
. $PROFILE
```

`1_shell`テーマでプロンプト表示がいい感じになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/4f39864d-c9d6-e1e5-c3ab-e1e98dcdb44e.png)

以上で、`Oh My Posh`のテーマを切り替えるようになりました。

## テーマをカスタマイズする。

`Oh My Posh`のテーマを用意されているテーマだけではなく自分好みにカスタマイズする事もできます。

イチからjson設定ファイルを書くのは厳しいので、何かしらのテーマを元ネタに自分の理想系に書き換えるのがいいかと思います。

[configuration | Oh My Posh](https://ohmyposh.dev/docs/configuration/general)

上記、ドキュメント Configurationに用意されている要素が記載されており、この記載とjsonファイルを見比べて、どのような部分を設定しているか確認していくのがいいでしょう。

`Oh My Posh`では各種情報を表示するセグメントが用意されており。

`AWS`セグメントでは現在読み込まれているプロファイル設定等をプロンプトに表示するようにできたり、他にも`git`セグメントや`python`セグメントなど色々と便利なセグメントが用意されています。

## 総評

`OH My Posh`は`Posh`という`PowerShell`の短縮形がソフトウェア名にある通り、元々は`PowerShell`プロンプトをいい感じにしてくれるソフトウェアでしたが。

今現在は`PowerShell`以外にも`cmd（Clink）`、`zsh`、`bash`、`fish`、`nu`といたシェルプロンプトもいい感じにもできるようになっており。

名前以上に幅広く対応しているようなソフトになります。（名が体を表してない気が多分にありますが）