⛵
Starship のリポジトリ表記を ghq get の引数の形式にする
TL;DR
starship.toml
format = """
${custom.git_repo}\
$directory\
# ...
"""
[custom.git_repo]
when = true
require_repo = true
command = 'git rev-parse --show-toplevel | sed -e "s,$(ghq root)/\(github\.com/\)\?,,"'
style = 'bold blue' # style はお好み
[directory]
repo_root_format = '[($path )]($style)'
repo_root_style = 'blue' # style はお好み
# ...
モチベーション
筆者は git リポジトリ上で生活している時間が長いため、正確なフルパスよりも「どの git リポジトリにいるか」のほうを知りたいケースが多い。
なので、それを Shell の prompt に出しておきたい。
Starship の Directory module を使えば「git リポジトリのルートディレクトリ名」は取り出すことができる。
しかし、リポジトリ名はユニークとは限らない。
せめて「どの user(organization) のリポジトリか」がひと目でわかるようにしたい。
筆者はローカルでは ghq で git リポジトリを管理している。
ghq で GitHub のリポジトリを取得するとき、 URL の代わりに <user>/<repo>
という形式まで短縮できる。これをプロンプトを出したい。
# こうしたい
# $(ghq root)/github.com/izumin5210/dotfiles にいるとき
izumin5210/dotfiles >
# $(ghq root)/gitlab.com/gitlab-org/gitlab にいるとき
gitlab.com/gitlab-org/gitlab >
# ~/Downloads にいるとき
~/Downloads >
Starship での設定
前述した通り、Starship の Directory module では「git リポジトリのルートディレクトリ名」しか取り出せず、親を取得することもできない。
なので代わりに Custom commands を利用する。
[custom.git_repo]
when = true
require_repo = true # git リポジトリでは常に有効化
command = 'git rev-parse --show-toplevel | sed -e "s,$(ghq root)/\(github\.com/\)\?,,"'
style = 'bold blue' # style はお好み
git rev-parse --show-toplevel
でリポジトリのルートディレクトリのフルパスが取れる。ここから ghq root
とそれに続く /github.com
を sed
で落としている。
あとは git リポジトリ内のどこにいるかも知りたいところだけど、それは Directory module で取得することができる。
[directory]
repo_root_format = '[($path )]($style)' # $path がリポジトリ内でのパス
repo_root_style = 'blue' # style はお好み
# ...
最後はこの2つのモジュールをつなげて出せばいい
format = """
${custom.git_repo}\
$directory\
# ...
"""
できたもの
Discussion