dotfiles for Mac
Background
これまでプライベートでは Mac Mini を仕事で MacBook Pro を使っていたものの
追加で iMac も使うこととなりました
流石に 3台目となると環境構築をスムーズにする必要性を感じたので
今後のために dotfiles
にチャレンジしてみました
Target
- dotfile (
.*
) を cloud (github) 上で保管しておくこと - 自動化して最小の手順で環境が構築できること
要らなさそうなものは断捨離してみたところ残ったのは vim
と bash
と git
関連のものだけでした
.vim/colors/molokai.vim (*) .vimrc .bash_profile .bashrc
molokai.vim
については git submodule にして他の git から持ってきます
git submodule add https://github.com/tomasr/molokai .vim
Deploy
基本は git clone
で持ってきた dotfiles
内に配置した各 dotfile に対して
$HOME
への symbolic link を作るだけです
利用するコマンド
ln -snfv ${HOME}/dotfiles/${f} ${HOME}/${f}
各 option の意味は以下の通り
-s Create a symbolic link. -n Same as -h, for compatibility with other ln implementations. -h If the target_file or target_dir is a symbolic link, do not follow it. This is most useful with the -f option, to replace a symlink which may point to a directory -f If the target file already exists, then unlink it so that the link may occur. (The -f option overrides any previous -i options.) -v Cause ln to be verbose, showing files as they are processed.
すでに link が存在している場合は上書きするということかと思います
git については .gitconfig
だけが対象でこれも link で対処もできましたが
特に意味はなさそうですがなんとなく git コマンドで生成することにしました
git config --global user.name <username> git config --global user.email <email> git config --global color.ui true
Install packages
Mac だと Home Brew を使っていろんな program をインストールできるので その部分も自動化しました
homebrew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
homebrew cask
homebrew の拡張版らしく
Web から dmg をダウンロードしてインストール実行
という手作業
が必要なパッケージも手軽にインストールが可能になるという
すごく便利な機能
大概のパッケージはサポートされておりありがたい限りです
brew bundle
homebrew 経由でインストールしたパッケージ情報を
brew bundle dump
コマンドで Brewfile 書き出すことができます
そのBrewfile
がある場所で brew bundle
を実行することで
必要なpackageが一発でインストールされます
ちなみに自分の Brewfile
に含まれているものは以下の通り
Clean
実環境ではまず使わないとは思いますが
テストのために元に戻す手順も一応用意しておきました
と言っても単に 作成した link file を削除することと
homebrew のアンインストールだけで済みました
(homebrew でインストールしたパッケージは一緒に消える)
setup script
以上を踏まえて、出来上がった shell script は以下のようになります
Automation
1手順で環境構築ができるよう、setup script をダウンロードとinstall / install の実行を試行錯誤した結果
次の1行にたどり着きました
bash -c "$(curl -fSL https://raw.githubusercontent.com/<username>/dotfiles/master/setup.sh)"
github の private repository を使っている場合は github の repo アクセストークンを使用してアクセス可能なので
こちら
bash -c "$(curl -H "Authorization: token <token>" -fSL https://raw.githubusercontent.com/<username>/dotfiles/master/setup.sh)"
ToDo
わりとやっつけで作ったので以下の改善ができそうな気がしてます - error ハンドリングの検討 - 要らない処理の除去