.dotfiles で管理したい
新生活に浮かれてこういう私用ノートPCを買って しまった。 ので、色々と設定していかないといけない。
ここ最近はバ先に貸与された Mac Book Pro だったので何も考えていなかったが、いざwin11に触れると進化がすごい。 そしてそれはそれとしてコマンドプロンプトがクソ、PowerShellは我が道を行きすぎィ! という経緯もあり、早々に諦めてWSL2(Ubuntu)に手を出すこととする。 もちろんまっさらはじめから、ということで、作業記録を残しつつ「どうすればPCの式年遷宮を乗り越えていくか」という視点で考えたい。
必要なものを考える
Windows Terminal も使えて楽し~~という気分はさておき、WSL2 (Ubuntu 24.04 LTS1) までは導入済みという前提で進める。
まず、shell をどうするかについて、これは特にこだわりなければ zsh を導入するのがいいと考えている。 面倒なら bash のままでもいいのだが、カスタマイズせにゃあな~~という気持ちもあり、どうせやるなら zsh の波に乗ったほうがいいと考えた。
他には、当然 git
, python
, node
あたりが必要になるが、git
は Ubuntu 備え付けだし、ほか2つは管理ツールを使い たい……
という事情もあり、話題の rye
と volta
(奇しくも両方が Rust 製)を扱ってみることとする。
あと現時点で考えうるのは Rust や Docker の実行環境とか、GCP, AWS, Azure あたりの CLI とか、CUI Editor とか、そのへんだろうか。
(書きつつ思い出したが、大学時代の Google Workspace を GW 中に引っ越しせねばならないのであった…… 容量制限をあとから課す措置を下す行為になんらかの罰則を制定してほしい……)
Zsh
(with Oh my Zsh)2
Ubuntu の場合、 apt
ないし apt-get
でどうにかするのがいいようだ。
前者はインタラクティヴ、後者はスクリプト向けということで、ワンライナーで書くと以下の通り:
sudo apt-get -y update && \
sudo apt-get -y upgrade && \
sudo apt-get -y install zsh && \
zsh --version && chsh -s $(which zsh) && \
echo $SHELL && $SHELL --version
再度シェルを起動し直すと、 bash
ではなく zsh
に切り替わっている。
初回起動時には色々設定をする必要があるが、内容をよく見て選択すること。
追記: 2024-05-01
後日に再検討したところ、「いまから新しく始める」のなら sheldon
がよいという結論に至った。
見た目の方は Starship で調整する。
いずれも Rust 製であり、速度や信頼も申し分ないしサイコーな予感が溢れて いる。
GW 中にこれらのカスタマイズができると嬉しいが……?
当時は若く、oh-my-zsh
しか知りませんでした(ぇ
zsh をカスタマイズしやすくするフレームワークとして Oh my Zsh がある。 これもついでに入れてみる。
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
だいぶ見栄えと雰囲気が良くなった気がする。 これをいい感じにカスタマイズしていくのだが、今は取り敢えず放置。 一旦区切りにして次へ行こう。
rye
Rye is a comprehensive project and package management solution for Python. Born from its creator's desire to establish a one-stop-shop for all Python users, Rye provides a unified experience to install and manages Python installations, pyproject.toml based projects, dependencies and virtualenvs seamlessly. It's designed to accommodate complex projects, monorepos and to facilitate global tool installations.
cf. https://rye-up.com/guide/installation/
pyenv
, virtualenv
, venv
, conda
, pipenv
, poetry
等々、Python の仮想環境を管理しようとする試みは多々あったが、現状の最新&最速3のツールは rye
であるらしい4。
これも簡単にインスコできるし、"zsh completion" (自動補完)もついてくるようなのでサクッと入れてしまおう。
curl -sSf https://rye-up.com/get | bash && \
echo 'source "$HOME/.rye/env"' >> ~/.zprofile && \
source ~/.zprofile && \
echo $ZSH_CUSTOM && \
mkdir $ZSH_CUSTOM/plugins/rye && \
rye self completion -s zsh > $ZSH_CUSTOM/plugins/rye/_rye
取り敢えず使えるようにはなったはずだが、いかんせん使い方がまだまだよくわからない。 設定方法等も踏まえて再度備忘録的な記事を書いておく必要がありそうだ(GW中に書くかな?)。
volta
⚡ Fast
Install and run any JS tool quickly and seamlessly! Volta is built in Rust and ships as a snappy static binary.⚡ Reliable
Ensure everyone in your project has the same tools—without interfering with their workflow.⚡ Universal
No matter the package manager, Node runtime, or OS, one command is all you need: volta install.
nvm
, nodenv
, nodebrew
, n
, fem
等々、 node.js
を管理しようとする試みはたくさんある。
この中だと nvm
が昨今だと強いかもしれない。
だが、volta
はそんな状況に一石を投じる管理ツールだ。
Rust 製なのでかなり速いし、OS の差異を意識しなくていいし、何より package.json
一つで npm
/ yarn
等も含めて管理できてしまう。
curl https://get.volta.sh | bash && \
source ~/.zshrc && \
echo $ZSH_CUSTOM && \
mkdir $ZSH_CUSTOM/plugins/volta && \
volta completions zsh -o $ZSH_CUSTOM/plugins/volta/_volta
……まぁまだ触れる機会が少ないので他人の受け売りなのだが。
.dotfiles
という概念
そもそもとして、「実は理解が甘いのでは?」と考えたので、一応拙速に調べ直してみた。
- ようこそdotfilesの世界へ #Vim - Qiita
- 検索結果の一番上に出てくるし、Qiita でもかなりの評価を得ている記事(概要がつかみやすい)
- GitHubでスター数の多いdotfilesを使ってみた
- 実際に調べてみた系の記事 → '20年時点でのよさげな dotfiles の先人たちの例を挙げている
- 調査方針はこれを読みつつ固めることにする
- dotfilesの育て方 #Linux - Qiita
- dotfiles をリポジトリとして捉えたときに、どうやって継続的に運用するかという視点で書かれた記事
- 実際に自分のを作ったら、これを参考にして続けられるようにしよう
- dotfiles のこだわりを晒す - エムスリーテックブログ
- つよつよエンジニアのこだわりレシピ、zsh 等のカスタマイズ面でも参考にできそう
- Rust製ツールまみれのdotfilesを始めた
- 他の開発についても言えることだが、1. Auto Sync 2. Continuous Integration 3. Installer を用意するのはとても大切
- なぜなら我々は「いつだって怠惰」なので……
まとめると、以下の3点が .dotfiles
を作成する上で重要な要素となる:
- リポジトリとして管理する
- 育てる! = 継続的に運用する
- 再利用しやすくしておく
これらの観点を意識して、自分だけのカスタマイズをやってみよう。 作業の記録を次の章から残しておくこととする。
やってみよう
色々と探してみたが、上記3点をもっとも満たしやすそうなのは一つだけだった。
すなわち、dotfiles の管理ツールとして Go-lang 製の chezmoi
を採用する。
いちいちシンボリックリンクを貼るとかインストールスクリプトを書くとかやってられないからだ。
そのへんを全部サポートしてくれることを期待して、次のようにインストールする:
sh -c "$(curl -fsLS get.chezmoi.io)" -- -b $HOME/bin && \
echo '# chezmoi\npath+=("$HOME/bin")\n' >> ~/.zshrc && \
source ~/.zshrc && which chezmoi && chezmoi --version && \
echo $ZSH_CUSTOM && mkdir $ZSH_CUSTOM/plugins/chezmoi && \
chezmoi completion zsh --output=$ZSH_CUSTOM/plugins/chezmoi/_chezmoi
こうして chezmoi をダウンロードし、ついでに PATH も通した(~/.zshrc
に追記した)。
次に、chezmoi init
することで ~/.local/share/chezmoi
直下に dotfiles を管理するためのリポジトリが作られる。
ここで注意したいのは、既に dotfiles
リポジ トリが存在している場合、それを引き継げるということだ。
例えば、俺はすでに5年前に自分用の dotfiles を作成していた。
(全く記憶にないが……)
今回はこれを引き継ぐ形で(ほぼぶっ壊しだろうが)進めていくこととする。
export GITHUB_USERNAME="Ningensei848" && \
chezmoi init $GITHUB_USERNAME --ssh
Quick Start にもある通り、おおよその流れは以下の通り:
chezmoi add $FILE_NAME
... ファイルをコピーして管理下に置くchezmoi edit $FILE_NAME
... リポジトリ下にあるファイルを開くchezmoi -v apply
... 変更 を元のファイルに反映する
chezmoi add
したファイルは、Prefix として dot_
が付与される。
vscode 等のエディタで開いたときは、この名前のファイルを編集すればいい。
いくつかファイルを編集したら、その変更をリポジトリにコミットせねばならない。
このとき、chezmoi cd
とすることで ~/.local/share/chezmoi
に移動できる。
そのまま chezmoi diff
等で変更点を確認したら、chezmoi git --add
して chezmoi git --commit
した後に、chezmoi git --push
してやればよい。
(これは「もしコマンドでやるなら」という話であって、ファイルの編集や Git の操作等は VSCode から GUI 経由でやっても構わない。
最終的に、変更履歴を元ファイル、つまり dot_file
ではなく .file
に反映するために、
chezmoi -v apply
というコマンドを実行せねばならないというだけの話である)
また、困ったときは chezmoi help
とか、 chezmoi doctor
あるいは chezmoi status
とやればよい。
自ずと何をどうすればいいかわかるだろう。