これまで/経緯
これまでは、WindowsではPowerShellとoh-my-poshを使って、WSL(あとraspiとかtermuxでも)bashを使っていた。 oh-my-poshはPowerShellをいい感じの見た目にしてくれるやつで、去年の12月ぐらいに入れた。 そのあと、PSReadLineの設定をして、PowerShellで補完予測が使えるようになり、その快適さに感動し、Linuxでも補完予測や見た目のカスタマイズをしたくなった。
調べてみるとzshがメジャーらしいがどうもかなりのカスタマイズが必要らしい。 勉強するのが面倒だったが、fishというのを使えば勝手にいい感じにしてくれることが分かり、実際に入れてみるとデフォルトで補完が出てきて感動した。 fishで見た目を頑張るのもいいが、POSIX非準拠で情報も少なく、またPowerShellというbash等とは全然違うのもあるので、どうせならクロスシェルなStarshipを使おうということになった (Starshipについてはoh my poshよりいいのを探しているときに見つけた)。
そして、複数の環境に同様の物を設定するなら以前勧められたdotfilesによる管理を導入してみようと思った。
dotfilesについて調べてみるとshellスクリプトをかかないといけないらしく、全然知識のない自分に一朝一夕で使えないことは自明で、さらにPowerShellでも共通の物を作るとなると、異常に難しくなりそうなことは明らかだったので、いい感じのツールを探したところchezmoi /ʃeɪ mwa/(shay-moi)1というのを見つけた2。
簡単そうだったのでchezmoiを使って試しにstarship.toml
をdotfilesに入れてみた。
というのでその作業の記録をしておく
WSLでのfishへの移行
移行の程度
程度というのは分かりずらいが、要はlogin shellにするか否かということで、今回はlogin shellにすることは見送った。
単純にfishを起動しただけでは$\rm S\kern{-0.1em}A\kern{-0.1em}T\raisebox{-0.33em}{\kern{-0.2em}Y}\kern{-0.1em}S\kern{-0.03em}F\raisebox{-0.33em}{\kern{-0.15em}I}$3やbrewのパスが通ってなかった。
なんとなく不安だったのでbashをlogin shellのままにしておいた4。
それに授業の関係でssh forwardありのsshをwslからする必要があり、windowsではwsl含めssh-agentが動いてないためssh-addが使えない問題があった。
そのための設定(具体的にはeval '$(ssh-agent)'
)を.bashrc
に入れていたが、調べてる途中で5PIDがふえていくのが気持ち悪いのでkeychainを使う方法が紹介されていて6それをfishに移植するのをあきらめた(それほど考えてない)のもあって、login shellはbashのまま。
実際の運用
login shell自体は変わってないのにどうやってfishを使うのかというと、さすがに毎度fishと打つのは面倒であり、また.bashrc
の最後らへんに条件分岐込み7でexec bash
を入れるというのもあったが、失敗が多かった。
結局、ターミナルにはWindows Terminalを使っているので、fishとbash用のプロファイルを別に用意することにした。
wsl関連のコマンドwsl.exe
には後ろに実行するコマンドを付け加えられるので、プロファイルのコマンドラインに
wsl.exe -d Ubuntu-18.04 --cd ~ tmux
と書き、その上でtmuxにfishで起動するように書いてfishで起動するようにした8。
VS Codeのほうは既定のプロファイルをfishにした。
PATH関係の移行
前に$\rm S\kern{-0.1em}A\kern{-0.1em}T\raisebox{-0.33em}{\kern{-0.2em}Y}\kern{-0.1em}S\kern{-0.03em}F\raisebox{-0.33em}{\kern{-0.15em}I}$のPATHが通ってないと書いたが、これはopam init
で解決した。
brewのほうはbrewのインストールスクリプトがfishでは動かず、oh-my-fish用のpathを通すパッケージも動かなかったので9、パスを直接通した10。bashでは通ってるので、bashでwhereis brew
をした後、.config/fish/config.fish
に設定を書くのではなく、$fish_user_paths
に追加する11。
その他
zを入れた。 勝手にジャンプできるのすごい。 バナーの画像にもあるがfishも普通にすごい。
Starshipの導入
Starshipとは
Starshipとは色々なshellで使える(cmdでも!?)prompt。
簡単にカスタマイズできるらしい。
~/.config/starship.toml
に設定を書く。
インストール/shellでのセットアップ
これを参照。 Windowsに関しては、以前やっていたが、wingetが使えないのでscoopで入れた。 Ubuntuはbrewで入れた。
セットアップはWindowsでは$PROFILE
に、Fishでは~/.config/fish/config.fish
に書く。
ちなみに、PowerShellをデフォルトの5.1から7.2に変えた12(powershellスクリプトでのインストール)13。
Starshipのconfigを書く。
公式のドキュメントを見ながら使いそうな項目を設定した。 このとき、Nerd fonts系のアイコンも使いたかったので、フォントFirge35Nerdを使用した。 アイコン系はNerd Fontsのcheat sheetで検索して、コピペしてきた。 しかし、VS Codeの統合ターミナルではmonospaceのフォントしか使えないので、アイコンはtofuになる。
Windowのタイトルを変更する
oh my poshでは出来ていたので変えたくなった。
Advanced COnfigurationにあるChange Window Titleに従って、PowerShellの場合$PROFILE
に追加する。
現在いるとこの親ディレクトリを表示させたかったのでPowerShellを調べて
# change window name
function Invoke-Starship-PreCommand {
$ParentFolder = Split-Path $PWD -Leaf
$host.ui.Write("`e]0; $env:USERNAME` ~ 📂 $ParentFolder `a")
}
Invoke-Expression (&starship init powershell)
$ENV:STARSHIP_CONFIG = "$HOME\.config\starship.toml"
と書いた。 そして、これを書いてる途中でFishの方の設定を忘れてたので後で書く。
ただこれらの機能は将来変更されるらしい。
ちょっと残念
右寄せの部分を書けない(ウィンドウサイズを変えると表示が崩れがちだったのでそうならないのはいいかもしれない)
dotfilesの管理
chezmoiを使う。
chezmoiのいいところ
個人的にメリットに感じたこと。
- chezmoiは
.bashrc
を移動させてシンボリックリンクを使うとかが必要ない。 - shellスクリプトをかかなくていい。
インストール
PowerShellならscoopで
scoop install chezmoi
または
(irm -useb https://chezmoi.io/get.ps1) | powershell -c -
fishではcurl, wgetのが使えなかったのでLinuxbrewで
brew install chezmoi
使い方
まず1台目ではchezmoi init
をして、chezmoi add
をすると、~/.local/share/chezmoi
に(ちょっと変化させて)コピーされてくる。
この中でchezmoi edit ~/.bashrc
とかで編集できる(Windowsだとデフォルトのエディタがnotepadになっていたので変更したいがまだできてない)。
この状態では反映されてないので、chezmoi -v apply
で変更を実際の環境に適用できる。
バージョン管理はgitを使うので、chezmoiが管理するディレクトリにchezmoi cd
で移動して、git commit
をする。
remote repositoryにプッシュすることもできる。
2台目ではchezmoiをインストールした後、chezmoi init remoterepo.git
でchezmoiの管理するディレクトリにpullされてくる。
chezmoi -v apply
をすると、それらが実際の環境に反映される。
このように実際の環境とchezmoiの管理するディレクトリが分かれており、gitでchezmoiの管理するディレクトリ同士、chezmoiで各マシン上でそれらのディレクトリと本来のdotfilesへの反映や追加などをできる。 このあたりの関係はQuick startにある図がわかりやすい。
今回はstarship.toml
しか追加していないが、問題なくubuntuとwindowsで同じconfigが使えていた。
おわりに
見た目がよくなった。 本当はtexのコンパイルに4分かかって発狂してたのでWSLを使って少しでも早く使用と思った14のが始まりだったのに、放置していたWSLの設定を始めてしまい、結局まだWSLのtexの設定が終わってない。 ストレージの容量に余裕がないので、texlive-fullを入れるのは厳しそうなので、こんなに面倒なことになってる。
ほかに
windows terminalとvscodeの設定もやった。 windows terminalのプロファイル設定についてはあとでまとめたい
あとFileHistory.exeでこけまくってるので、その他のバックアップを含めいままでの対処とかをまとめたい。
読み方が分かれるもの(例えば$\mathrm{Ti}k\mathrm{Z}$とか$\TeX$)について話してた時、ソフトの紹介で発音記号が載っているものの話をしたことがあるが、これもその一例だ ↩︎
dotfilesの例を調べるつもりでGitHubでdotfiles、PowerShellで調べてたら出てきた。 ↩︎
結局
\\wsl$\
からexplorer.exeで開くやつが壊れてた。 ↩︎つまり脱線した ↩︎
ssh時とかfishからbashを起動したいときの為 ↩︎
tmux全然使えてないので、外すかもしれないが、特にSSHのセッションを保存できるのは魅力的なので後で学んでみる。 ↩︎
メモ:oh-my-fishのパッケージはfisherを使って
fisher oh-my-fish/repo_name
で入れられる。 ↩︎homebrewを使った理由は、もともとhugoをインストールするのに使っており(ただ、今回調べたときはaptで管理できるようになっていたのでbrewのインストールは諦めたときもあった)、また、starshipを入れるのに必要だったから ↩︎
参考: https://qiita.com/kiwatchi1991/items/6962dfa645bf6e66f85e, https://zenn.dev/estra/articles/zenn-fish-add-path-final-answer, https://qiita.com/ledsun/items/8ca1a450b21c8ebc9670 等 ↩︎
違いは実感できていない。
$PROFILE
は5.1の物をコピーしてきた($PROFILE
や.exe
の場所も違っていた) ↩︎MS Storeにもあるが、それぞれ別にインストールされた。MS Storeから入れたほうは削除している。アップデートはWindows Updateでやってくれるらしい。 ↩︎
数倍早くなるらしい。 ↩︎
Comments
Reply to this post (mastodon) to leave a comment.
Reply