dotfilesのすゝめ
dotfilesを最近かなり整理しているので、記録
イチオシは、コピペしなくても思い出せそうなくらいの立ち上げ手順にできたところ。
僕のdotfilesは→kmdkuk/MyDotFiles
2017年の8月から管理しているらしい。
かれこれ5年で250コミット(かなり適当にmasterプッシュしているのでコミット数の割に意外と中身はない)。
5年前はちょうど大学でプロジェクト学習やってた時期かな。
機能
僕のdotfilesの機能はこんな感じ。
- setup script
- linux(Ubuntu以外では動作確認していない)とMacで同じsetup scriptが利用できるように
- 一応CIでscriptが失敗しないかどうかだけ見てる。(テストと言えるか怪しいけど)
- curlでワンライン
- gh_pagesブランチにsetup.shをindex.htmlにしてpush
- デフォルトのGitHub Pagesのドメインは長いのでカスタムドメインの設定
setup script
管理しているconfigは、
asdf, fish, git, tmux, vim, bash, zsh, brew, chocolatery, staship
です。あと少し便利スクリプトをいくつか作ってあるくらい。
基本的に.config/
下になるべくものを置くようにしてます。
.gitignore_global
ではなくて、.config/git/ignore
に置くみたいな感じ。
いい感じに自動でシンボリックリンク貼ればいいのかもしれないけど、あんまり設定ファイルが増える機会もないので、
ひたすら手書きで設定ファイルのシンボリックリンクを書いてます。
OSごとの対応
setup script内でuname
でOS判別してOS特有のみたいな{osx|linux}.config
をlocal.config
でlinkしてあげて、
共通の設定ファイル内でlocal.config
をimportしてあげるようにしてOSごとの設定を切り替えています。
これやっているのgitとtmuxぐらいだけど。(tmuxは最近そもそも使っていなかったり。。。)
例:
setup.sh
# each OS. support macOSOS or Linux
if [ "$(uname)" == 'Darwin' ]; then
: "macOS"
add-link .Brewfile .Brewfile
add-link tmux/.tmux/osx.tmux.conf .tmux/local.tmux.conf
add-link git/.config/git/osx.config .config/git/local.config
# set defaults
defaults write com.apple.finder CreateDesktop -boolean false
killAll Finder
elif [ "$(expr substr $(uname -s) 1 5)" == 'Linux' ]; then
: "Linux"
add-link tmux/.tmux/linux.tmux.conf .tmux/local.tmux.conf
add-link git/.config/git/linux.config .config/git/local.config
fi
[include]
path = ~/.config/git/local.config
CI
dotfilesでも一応CIを、GitHub ActionsはPublicリポジトリだったら無料だし。
.github/workflows/ci.yaml
と言っても、テストっぽいことは全くやっていなくて、setupスクリプトが各環境(ubuntu/osx/win)で成功するかどうかだけ見ている感じです。
あと、流石にCIで各種ツールのインストールまで試しているとアホくさいので、NO_INSTALL環境変数でSkipできるようにしてます。
毎日1回だけ実行するワークフローでNO_INSTALLをつけずに、installまでできているかのチェックを流してます。
curl でワンライナーセットアップ!
これが最近やった改変の中で一押しの機能になってます。
README.mdに書いてあるとおり
Linux or Mac
$ curl -L setup.kmdk.uk | bash
# or
$ curl setup.kmdk.uk/setup.sh | bash
Windows
$ curl -sSLf setup.kmdk.uk/setup.ps1 | pwsh
リポジトリにgh-pagesブランチを生やして、
そこにsetup.shとsetup.ps1とsetup.shをindex.htmlにコピーしたものを配置してこれを実現しています。
setup.kmdk.ukにアクセスしたときに、setup.shが欲しかったのでsetup.shをindex.htmlにコピーしてますが、
setup.kmdk.ukにアクセスしたときにリダイレクトが走るようになっていて
curlにLオプションが必要なのが少し残念ポイント。
GitHub pagesのカスタムドメイン機能を使ってsetup.kmdk.ukに設定しています。
これで、コピペセッティングもいいですが、思い出してぱぱっとタイピングできる長さでいつもの環境を作り出せるのでとてもおすすめです。
何もない環境からcurlでsetup.sh拾ってきて実行することになるので、setup.sh内にcloneしてくる処理が必要になります。
(すでに存在するときには、pullしてなるべく冪等になるように。)
あとは細かいですが、手元の環境のdotfilesに変更があったときはコミットを促すようなメッセージを入れていたり。
気になることがあったり、もっといい方法があれば @kmdkuk やissueとかで教えてください!みなさんも良いdotfiles生活を。