Oh My Posh インストール方法 (PowerShell, MobaXterm, Visual Studio Code)

# Oh My Posh インストール方法 (PowerShell, MobaXterm, Visual Studio Code)

このドキュメントは [^1] の内容を翻訳し, 一部修正しています.

## 概要

Windows PowerShell の見た目をリッチにし, より高機能にするユーティリティ [Oh My Posh](https://ohmyposh.dev/) を,
* PowerShell
* [MobaXterm](https://mobaxterm.mobatek.net/) PowerShell
* [Visual Studio Code](https://azure.microsoft.com/ja-jp/products/visual-studio-code/) Terminal

それぞれにインストールしたときの手順のメモ.

* ついでに conda コマンドも使用できるようにする. (python 開発者向け)

## インストール

0. powerline に対応したフォント (HackGen[^3] など) をあらかじめインストールしておく.
1. powershell で以下を実行. (管理者権限は不要)
    ```powershell
    winget install JanDeDobbeleer.OhMyPosh -s winget
    ```
    ![capture01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191898/35cf6865-2d5d-ba57-ba7a-6d308a1e9669.png)

2. トラブルが発生した場合は, 以下を確認.
    1. `~\AppData\Local\Programs\oh-my-posh` 以下
        インストールされたファイルが配置されている.
    2. 環境変数 `Path` (ユーザー) 
        実行可能ファイル ディレクトリへのパス (`~\AppData\Local\Programs\oh-my-posh\bin`) が追加されている.
    3. 環境変数 `POSH_THEMES_PATH` (ユーザー) 
        テーマファイル ディレクトリへのパス (`~\AppData\Local\Programs\oh-my-posh\themes`) が定義されている.

## Oh My Posh の有効化

### PowerShell

1. ターミナルに以下を貼り付けて実行. (:warning: Oh My Posh インストール直後のターミナルでは, 環境変数が反映されていないため, 一度ターミナルを再起動する必要あり)
    ```powershell
    oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH\***.omp.json" | Invoke-Expression
    ```
    * `***.omp.json` の部分は使用したいテーマを入力.
        * テーマの一覧は[^2]で確認できる.
3. 成功すると, Oh My Posh が有効化される.
    ![capture02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191898/20bc2eb1-6f50-e221-2c67-667fde5b2780.png)

    * スクリーンショットの例は, fish テーマを適用した場合.
* 上のコマンドは, ターミナルを起動するたびに実行する必要がある. 自動で実行させるには, PowerShell Profile [^4] を利用するとよい.

### MobaXterm

1. New Session > Shell > PowerShell を選択. (:warning: **"Windows PowerShell" ではなく "PowerShell" を選択すること**)
2. Advanced Shell settings > Execute the following commands at startup: に次の文字列を入力.
    ```powershell
    powershell -NoExit -Command "oh-my-posh init pwsh --config '$env:POSH_THEMES_PATH\***.omp.json' | Invoke-Expression"
    ```
    * Shell > Windows PowerShell を選択した場合は, `pwsh` の部分を `powershell` に変更する必要がある.
        ```powershell
        powershell -NoExit -Command "oh-my-posh init powershell --config '$env:POSH_THEMES_PATH\***.omp.json' | Invoke-Expression"
        ```
3. 成功すると, Oh My Posh が有効化される.
    ![capture03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191898/6ffbbe44-3cab-4641-d299-2b1b076efbac.png)


4. Anaconda も有効化する場合は, Oh My Posh よりも先に有効化する必要がある.

    ```powershell
    powershell -NoExit -Command "&'C:\Users\$env:USERNAME\Miniconda3\shell\condabin\conda-hook.ps1'; conda activate 'C:\Users\$env:USERNAME\Miniconda3'; oh-my-posh init pwsh --config '$env:POSH_THEMES_PATH\***.omp.json' | Invoke-Expression;"
    ```
    ![capture04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191898/0788e36a-0f4b-7993-6206-d89f28de672e.png)


### Visual Studio Code

1. `settings.json` に以下を追加.
    ```json
    "terminal.integrated.profiles.windows": {
        "Powershell Prompt": {
            "args": [
                "-NoExit",
                "-Command",
                "oh-my-posh init pwsh --config \"$env:POSH_THEMES_PATH\\***.omp.json\" | Invoke-Expression;"
            ],
            "path": "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe"
        }
    }
    ```

    * Anaconda も有効化する場合はこちら:
    ```json
    "terminal.integrated.profiles.windows": {
        "Anaconda PowerShell Prompt": {
            "args": [
                "-NoExit",
                "-Command",
                "&\"C:\\Users\\$env:USERNAME\\miniconda3\\shell\\condabin\\conda-hook.ps1\"; conda activate \"C:\\Users\\$env:USERNAME\\miniconda3\"; oh-my-posh init pwsh --config \"$env:POSH_THEMES_PATH\\***.omp.json\" | Invoke-Expression;"
            ],
            "path": "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe"
        }
    }
    ```
    
    ![capture05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191898/b7fb8fe1-2285-97df-dbdd-a7f5b8226730.png)


## アンインストール

1. powershell で以下コマンドを実行. (管理者権限は不要)
    ```powershell
    winget uninstall "Oh My Posh"
    ```

[^1]: https://ohmyposh.dev/docs/installation/windows
[^2]: https://ohmyposh.dev/docs/themes
[^3]: https://github.com/yuru7/HackGen
[^4]: https://docs.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles