TL;DR
rebuild <ユーザー名>/dotfiles
と打つと、コマンドラインツールを自動でインストールしてdotfilesをcloneしてインストールスクリプトを走らせてくれるrebuild gemを作りました
k0kubun/rebuild
はじめに
エディタやシェルなどのツールは~/.*
に設定ファイルが配置されることが多いです。
そこで、多くの人がそれらの.
で始まるファイル群をGitHubでdotfilesというリポジトリ名で管理しています。 ★
ですが、せっかく設定ファイルをちゃんと管理していても、Yosemiteをアップグレードインストールすると環境が壊れ、無限に余計な作業が発生したりします。★
なら、クリーンインストールした状態から一発で元の環境を再現できたら、/usr/local
を退避させる必要もなく、すごく便利ではないでしょうか?
Command Line Tools
まず、まっさらな状態ではgit
が使えません。
なので、「GitHubからリポジトリのアーカイブをダウンロードして解凍し、セットアップスクリプトを走らせることで解決している人もいます。★ ★
ですが、curl -LSfs https://raw.githubusercontent.com/***/dotfiles/master/install.sh | bash
とか cd; curl -#L https://github.com/***/dotfiles/tarball/master | tar -xzv --strip-components 1 --exclude={README.md,bootstrap.sh,LICENSE-MIT.txt}
とかって、ブラウザを開いてコピペするのも自分で打ち込むのも面倒ではないでしょうか?
rebuild
を叩くだけ
ターミナルを開いたらsudo gem install rebuild && rebuild
と打ち込んでください。
AppleScriptによるGUIスクリプティングにより、マウスに触らずにgitやgccが使えるようになります。 (一度は利用規約読んでる人向けです)
そして、rebuild
ではなくrebuild <ユーザー名>/dotfiles
と打てば、リポジトリルートにある*.sh
を自動で走らせるところまでやってくれます。
これにより、gitの有無や自身のcloneを気にせずセットアップスクリプトを書くことができます。
セットアップ全自動化
あとはあなたの環境セットアップスクリプトに足りない自動化スクリプトを追加するだけです。
そのために便利なスニペットを紹介します。
なお、rebuild
の実行は冪等性が保証されており、実行するスクリプトも何度叩いても同じ状況が保てるように工夫しておくと、普段の環境の更新にも便利です。
~/.*
へのsymlink
そもそもdotfilesは.
で始まるファイルを管理するものなので、これがなければ始まりません。
たとえばあなたのdotfilesルートディレクトリにある.*
をすべて~/.*
にsymlinkを貼るスクリプトは以下のようになります。
repository_root=`cd $(dirname $0); pwd`
for dotfile in `ls -A ${repository_root} | grep "^\."`; do
from="${repository_root}/${dotfile}"
to="${HOME}/${dotfile}"
if [ ! -e $to ]; then
ln -s $from $to
fi
done
.*
なファイルを追加するだけでよく、スクリプトの保守に手間がかかりません。
Homebrew
brew bundle
は死にました。Brewfileはなくても、以下のようにすれば管理に手間はかからないはずです。
if ! which -s brew; then
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
fi
BREW_PACKAGES="
go
openssl
rbenv
readline
reattach-to-user-namespace
ruby-build
tmux
peco/peco/peco
motemen/ghq/ghq
caskroom/cask/brew-cask
"
for package in $BREW_PACKAGES; do
if brew list -1 | grep -q "^$(basename $package)"; then
echo "Skip: brew install ${package}"
else
brew install $package
fi
done
brew tap peco/peco; brew install peco
とかやめてbrew install peco/peco/peco
にしましょう
Homebrew Cask
手でdmgを落としてきてインストールする時代は終わりました
CASK_PACKAGES="
alfred
google-chrome
google-japanese-ime
iterm2
karabiner
yorufukurou
dropbox
"
for package in $CASK_PACKAGES; do
if brew cask list -1 | grep -q "^${package}"; then
echo "Skip: brew cask install ${package}"
else
brew cask install $package
fi
done
キーバインド
Karabiner(元KeyRemap4MacBook)は非常に便利で、キーバインドで困ったらこれでほぼ解決することができます。
これをシェルからセットアップする方法も共有します。
if ! pgrep -q Karabiner; then
sql="
INSERT OR REPLACE INTO access
VALUES('kTCCServiceAccessibility','org.pqrs.Karabiner-AXNotifier',0,1,0,NULL);
"
sudo sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db "${sql}"
open -a Karabiner.app
fi
# /Applications/Karabiner.app/Contents/Library/bin/karabiner export > karabiner.sh
# を事前にしておく
source karabiner.sh
Macは セキュリティ>プライバシー>アクセシビリティ にあたるデータはsqliteで管理していて、そこに上記のSQLを流すことによってKarabiner_AXNotifierの設定を省略できます。
また、Karabinerは一度起動すると自分でlaunchdに登録してくれるので、一度起動してしまうだけでセットアップはオッケーです。
肝心の設定は、/Applications/Karabiner.app/Contents/Library/bin/karabiner export
が現在の設定を再現するシェルスクリプトを吐き出すので、これを利用します。
その他
他にも自動化したら逐次追記します
感想
自動化楽しい!!!!!!!!!!!!