dotfilesを最近かなり整理しているので、記録
イチオシは、コピペしなくても思い出せそうなくらいの立ち上げ手順にできたところ。

僕のdotfilesは→kmdkuk/MyDotFiles

2017年の8月から管理しているらしい。 かれこれ5年で250コミット(かなり適当にmasterプッシュしているのでコミット数の割に意外と中身はない)。
5年前はちょうど大学でプロジェクト学習やってた時期かな。

機能

僕のdotfilesの機能はこんな感じ。

  1. setup script
    1. linux(Ubuntu以外では動作確認していない)とMacで同じsetup scriptが利用できるように
    2. 一応CIでscriptが失敗しないかどうかだけ見てる。(テストと言えるか怪しいけど)
  2. curlでワンライン
    1. gh_pagesブランチにsetup.shをindex.htmlにしてpush
    2. デフォルトの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}.configlocal.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

.config/git/config

[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生活を。