oh-my-posh でPythonのvenv promptが正しく表示されない

2024/03/01に公開

環境

  • WSL2 Ubuntu22.04.03
  • GNU bash, version 5.1.16(1)-release (x86_64-pc-linux-gnu)
  • oh-my-posh 12.29.0

背景

  • pythonでvenvやuvを使って.venvフォルダに仮想環境を作成する
  • . .venv/bin/activateして仮想環境を有効化するとoh-my-poshがプロンプトに仮想環境名とPythonのバージョンを表示してくれる

https://ohmyposh.dev/docs/segments/python

設定どおりに書くと以下のような感じ

theme.omp.json
{
  "type": "python",
  "style": "powerline",
  "powerline_symbol": "",
  "foreground": "#100e23",
  "background": "#906cff",
  "template": "{{ if .Error }}{{ .Error }}{{ else }}{{ if .Venv }}{{ .venv }}{{ end }} {{ .Full }}{{ end }} ",
  "properties": {
    "fetch_virtual_env": true,
    "display_mode": "environment"
  }
}

この状態で仮想環境を有効化すると以下のように表示される

仮想環境名が.venvになっている

仮想環境名が.venvになっているが、prompt名はsampleになっているはずなので、sampleと表示してほしい。
このままだと別の作業フォルダに移動してもactivateした.venvを表示され続けるので、いったいどこの.venvなのかわからない。

やりたいこと

.venvではなくsampleとprompt名を表示してほしい

解決方法

https://ohmyposh.dev/docs/configuration/templates#environment-variables

.Venv.<環境変数名>とするとtemplate内で任意の環境変数名を表示できる。

.venv/bin/activateの中身を見るとVIRTUAL_ENV_PROMPTという環境変数にpromptの値が格納されている模様。
したがってomp.jsonファイルのテンプレート部分を以下のように書き換える

theme.omp.json
{
  {
  # 一部省略
  "template": "{{ if .Error }}{{ .Error }}{{ else }}{{ if .Venv }}{{ .Env.VIRTUAL_ENV_PROMPT }}{{ end }} {{ .Full }}{{ end }} ",
  }
}

正しく表示される

はい。

まとめ

ほんとにこれしか対策がないのか?oh-my-posh側の実装ミスなのか?がわからなくてモヤるけど動いたからヨシ。

ちなみにChatGPTに質問すると存在しない設定を教えられたり、任意の環境変数は表示できないからコマンド実行するSegmentを追加しろとか嘘言われた。かなしい。

Discussion