春というのと MacBook Pro を置き換えたということもあって、この機会にシェルを zsh で引き継ぎ付け足しし続けていた環境から fish を 0 から設定して生きることにした。bash や zsh で読み込んでから fish で、という話もあったけどそれなら bash や zsh でいいじゃないかと思うので、無から fish で環境を作るというのを目的に進める。まずは homebrew で fish をインストール。
$ brew install fish
そもそも fish をわかってないので、ゆるく調べてみると以下のような感じらしい。
~/.foorc
などではなく ~/.config/fish/config.fish
にかく~/.config/fish/functions
に入れる~/.local/share/fish/fish_history
にあるなるほどふむふむという感じで、まずは anyenv を入れようと思ったところ、 *env 系は fish に対応していないものも結構ある、ということなので anyenv を使うのをやめて rbenv のみにして、それ以外は別の手段で versioning management をするなり、そもそもやらないということにした。今のところ php だけ phpbrew で制御するようにした。他は全て homebrew でインストール。
あとはプラグインマネジメントをできるようにすると楽というのを見かけたので fisherman を使うことにした。oh-my-fish じゃないのはネーミングが fisherman の方がかっこいいから、程度の理由です。fisherman では以下のプラグインを入れた。
$ fisher install z fzf decors/fish-ghq
この機会に peco ではなく fzf というのを試してみることにしたのでこれは、homebrew でインストール。
$ brew install fzf
あとは、golang やら rust などの環境変数とパスだけ最小の設定をしてだいたい動くようになった。fish, alias は推奨しないみたいな記述があったけど、さすがに git や atom-beta みたいのを補完で頑張るのは無理だったので git は g, atom-beta は e などだけ alias にした。完成した config.fish はこちらになります。
set -x PATH (brew --prefix coreutils)/libexec/gnubin $PATH
set -x PATH $HOME/.rbenv/bin $PATH
rbenv init - fish | source
set -x PATH $HOME/.cargo/bin $PATH
set -x GOPATH $HOME/.go
set -x PATH $GOPATH/bin $PATH
source $HOME/.phpbrew/phpbrew.fish
source /usr/local/google-cloud-sdk/path.fish.inc
set -x Z_CMD 'j'
set -x Z_DATA $HOME/.z
set -x GIT_MERGE_AUTOEDIT no
set -x EDITOR vim
set -x RUBY_CODESIGN hsbt
set -x HOMEBREW_GITHUB_API_TOKEN xxx
alias git hub
alias g git
alias e atom-beta
alias mk make
cd
最後に cd してるのは google-cloud-sdk の fish 設定を読み込んだらなぜか google-cloud-sdk のディレクトリに移動してしまうので $HOME に戻しています。続いて、プロンプトに git のブランチが出てないと死ぬので下のような内容を fish_prompt.fish として functions の下に置いた。
function fish_prompt
set_color $fish_color_cwd
echo -n (prompt_pwd)
set_color normal
printf '%s ' (__fish_git_prompt)
echo -n '> '
end
あと rbenv のバージョンは表示させた方がいいかなという気もするけどあとで。
fish の紹介エントリを眺めていると chsh すると書いてあって、正気かと疑うんだけど、サーバーないし UNIX ライクなシステムで、何かトラブルシューティングしようとしたり、homebrew を purge せざるを得ないみたいな時に確実に死ぬのでやらない方がいいと思う。Terminal.app ならセッションの起動時に使うシェルを chsh とは別に設定できるので、そこで fish を指定するだけで十分なのでそうした。iTerm2 にも似たような設定があったと思う。
最後に extended_history を有効にした状態で作成していた zsh 履歴ファイルを https://gist.github.com/hsbt/b10b3e856d5ca6ef6737504030f47557 みたいなスクリプトで変換して fish_history に mv して終わり。
fish 補完とか、ディレクトリ移動が今っぽくて使ってて面白い感じですね。特に不満もないのでもうしばらく使ってみようと思う。
参考にしたサイト