fishのプロンプトをOSで良い感じに切り替える


はじめに

ここ数年、fishを好んで使っています。zshのように色々設定しなくても、デフォルトで良い感じに設定されているところが良いです。

fishを使うOSは、各種Linux、macOS、最近だとWSL1/2など、色々な環境があると思いますが、シェルを使っていると、自分がどの環境にいるのかふと見失うことがあります(私だけ?)。sshなどリモートログインしていると尚更。

自分の場所を示すuser@hostnameのようなプロンプトもよく使われますが、文字列だと認識に時間がかかるので、できるだけ無意識に自分の環境を認識できるように各種OS風にプロンプトを切り替えるプラグインを作りました。

使い方

パッケージ管理ツールのfisherを使います。

$ fisher install eholic/osflavor

インストール後は、(__osflavor)fish_prompt.fishに書くだけです。

function fish_prompt
    # エラーステータスをプロンプト に反映させたい場合
    set -g __osflavor_last_status $status  # 関数の先頭に書くこと
    # いろんな設定
    echo -n -s (__osflavor) (__fish_git_prompt " %s") ' '
end

高度な設定

osflavorの各OSごとのプロンプトは、fishのグローバル変数__osflavor_dist_<name>で定義されており、<name>uname -aに含まれているかどうかで、プロンプト切り替えています。デフォルト定義を変更したい場合や、osflavor未定義のOSのプロンプトを設定したい場合は、config.fish__osflavor_dist_<name>を定義することで自由に設定できます。
詳細は、eholic/osflavorを見てください。

おわりに

初めてfishのプラグインを作りましたが、fishの関数やパッケージ管理ツールが良くできていて、思ったより気軽にコーディングできました。もっとfishユーザやプラグインが増えてきて、開発が活発になると良いなと思います。