dotはシェルスクリプトで書かれたdotfiles管理フレームワークです。
このスクリプトを使うとdotfilesの管理が簡単になります。
日常的に複数マシンを使う人,新しいPCのセットアップするとき,毎日dotfilesでcontributionに草を生やし続けている人におすすめです。
- bash (or zsh)
- git
このリポジトリを自分のPCにforkかcloneし,bashrcやzshrcからsourceコマンドでファイルを読み込んでください。
COMMAND LINE
git clone https://github.com/ssh0/dot $HOME/.zsh/dot
in {bash,zsh}rc
export DOT_REPO="https://github.com/your_username/dotfiles.git"
export DOT_DIR="$HOME/.dotfiles"
fpath=($HOME/.zsh/dot $fpath) # <- for completion
source $HOME/.zsh/dot/dot.sh
これでインストールは完了です。
shellrcを読み込みなおして、
dot --help-all
と打ち込んでみてください。manページが表示されます。
zshを利用していて,プラグインマネージャを利用している場合(ex. zplug, zgen, etc.)には,zshrcでプラグインとして読み込んでください。
zplug "ssh0/dot", use:"*.sh"
zgen load ssh0/dot
{bash,zsh}rcに以下を書きます。
export DOT_REPO="https://github.com/your_username/dotfiles.git"
export DOT_DIR="$HOME/.dotfiles"
ユーザーの設定ファイルは'dotrc'。 シンボリックリンクの対応表は'dotlink'に書きます。
サブコマンド
| サブコマンド名 | 説明 | オプション or 引数 |
|---|---|---|
| pull | dotfiesをpullしてくる(by git). | [--self] |
| list | dotで管理するファイルを一覧を表示 |
|
| check | ファイルにリンクが張られているかどうかチェックする | |
| cd | ディレクトリdotdirに移動 |
|
| set | dotlinkに書かれたシンボリックリンクを貼る |
[-i|--ignore][-f|--force][-b|--backup][-v|--verbose] |
| update | 'pull'コマンドと'set'コマンドの組み合わせ | [-i|--ignore][-f|--force][-b|--backup][-v|--verbose] |
| add | 新たなファイルをdotfilesに追加,シンボリックリンクを貼り,対応関係をdotlinkに追記 |
some_file [$DOT_DIR/path/to/the/file] or link1 [link2 link3 ... ] |
| edit | dotlinkを手動で編集 |
|
| config | 設定ファイルdotrcを編集 |
|
| unlink | 選択したシンボリックリンクをunlinkし,dotfilesから元ファイルをコピー | link1 [link2 link3 ... ] |
| clear | dotlinkファイルに記載されたすべてのシンボリックリンクをunlink |
|
| clone | gitコマンドを使ってdotfilesを自分のPCにクローン | [-f|--force] [/directory/to/clone/] |
オプション
| オプション | 説明 | 引数 |
|---|---|---|
| -h, --help | ヘルプを表示 | |
| -c, --config | 読み込む設定ファイルを指定 | dotrc |
dotfiesをpullしてくる(by git)。
--selfオプションをつけると,dot自身を最新の状態に更新します。
dot pull --self
dotで管理するファイルを一覧表示する。
ファイルにリンクが張られているかどうかチェックする。
- "✘" は現在dotで管理されていないが
dotlinkに対応が書かれているものを表す。 - "✔" はdotで管理されているものを表す。
ディレクトリdotdirに移動します。
このコマンドは,dotlinkに書かれたシンボリックリンクを貼っていきます。
もし既にファイルが存在する場合には,
- 差分表示
- 2ファイルを編集
- 既存ファイルに上書き
- バックアップを作成して上書き
- 何もしない
の操作を選ぶことができます。
オプション-iまたは--ignoreをつけると、競合するファイルが存在する場合に対話メニューを開かず、何も操作しません。
オプション-fまたは--forceをつけた場合は、競合するファイルがある場合に対話メニューを開くことなく、すべて新たなシンボリックリンクに置き換えます。
オプション-bまたは--backupをつけると、競合するファイルが存在する場合に対話メニューを開かず、新たなシンボリックを張りますが、オリジナルのファイルはfile.bakのようにしてバックアップファイルとして残されます。
-vまたは--verboseオプションをつけると、すでにリンクが張られているものについて等、より冗長なメッセージを表示します。
'pull'コマンドと'set'コマンドを組み合わせた機能を提供します。
オプションはsetコマンドと同じものを受け取ることができます。
新たなファイルをdotfilesに追加,シンボリックリンクを貼り,対応関係をdotlinkに追記
dotlinkを手動で編集する。
dot edit
設定ファイルdotrcを編集する。
dot config
選択したシンボリックリンクをunlinkし,dotfilesから元ファイルのコピーを持ってくる。
dotlinkファイルに記載されたすべてのシンボリックリンクをunlinkする
dot clear
gitコマンドを使ってdotfilesを自分のPCにクローンする
-fまたは--forceオプションをつけると確認プロンプトを表示しません。
dot clone [-f|--force] [<dir_to_clone>]
dotrc.localやdotlink.localをそれぞれのPCに作成し,そこに固有のリンクを記載すれば,マシンそれぞれについてdotfilesをつくる必要はなくなります。
共有したい設定はいつでも共有でき,共有したくない設定も,gitで管理しながら独立に扱えます。
PCを立ち上げてdot pullコマンドを実行すれば,すぐに最新の設定環境になります。
dotfilesをGitHubなどで管理していて, dotを既に使っていれば,以下のように簡単にセットアップが行えます。
- gitとdotを新PCにインストール
- ターミナルで以下の環境変数を自分のリポジトリにあわせて変更:
DOT_REPO="https://github.com/username/dotfiles.git"
DOT_DIR="$HOME/.dotfiles"
- 以下のコマンドを実行:
dot clone && dot set -v
これでdotfilesからクローンしてきて、シンボリックリンクを作成します。
新しい設定ファイルをdotfilesに追加したいときは,
dot add newfile
とすれば良いです。
こうすると,スクリプト側から:
[suggestion]
dot add -m '' newfile /home/username/.dotfiles/newfile
Continue? [y/N]>
のように訊かれるのでyを押してEnterキーを押すと,newfileが/home/username/.dotfiles/newfileに移動され,newfileのあった場所にシンボリックリンクが貼られ,この対応関係がdotlinkに追記されます。
あとはgit commitしてgit pushするだけです。
(もしDropboxなどを使っていれば,この操作もいりません。)
既にdotfilesからリンクが貼られているものをリンク対応表に追記するには,
dot add <link1> <link2> <link2> <link3> ...
とするだけで良いです。
まず,dotで管理するdotfilesのリポジトリと,ローカルにおけるディレクトリ名を設定します。
~/.zshrcに以下のように書いてください:
export DOT_REPO="https://github.com/username/dotfiles.git"
export DOT_DIR="$HOME/.dotfiles"
"dot"という名前はあまりに一般的すぎて,他のスクリプトやアプリケーションで既に使われているかもしれません。
もしくは,さらに短いタイプ数で呼び出したいと考えるかもしれません。
dotコマンドに対してaliasを登録することはもちろんできますが,
dotという名前を無効にして,他の名前をつけることも可能です。
bashrcやzshrcに,以下のように記述してください。
export DOT_COMMAND=DOOOOOOOOOOOOT
このようにすると,このコマンドはdotという名前をもちません。
(当然本体の関数名であるdot_mainでもスクリプトを実行することができます。)
設定ファイルは
dot config
で編集することができ,また設定ファイルが存在しなければ,デフォルトの設定ファイルが$HOME/.config/dot/dotrcにコピーされます。
オプション-c, --configを使えば,指定したファイルを設定ファイルとして読み込んでコマンドを実行できます。
使用例
- 各アプリケーション毎の設定ファイルを違うリポジトリで管理している場合
- 他の人のdotfilesの一部を引用してくる場合
- など ...
具体的に他の人のdotfilesを使用する場合,以下のようなファイルを作成しておきます(このファイル自体を自分のdotfilesリポジトリ内で管理しておくと便利かもしれません)。
ファイル名: ~/.config/dot/dotrc-someone
clone_repository=https://github.com/someone/dotfiles.git
dotdir=$HOME/.dotfiles-someone
dotlink=$HOME/.config/dot/dotlink-someone
linkfiles=("$HOME/.config/dot/dotlink-someone")bashrcやzshrcなどに以下のように書いておき,dot-someoneコマンドを実行すると上に書いた設定ファイルが読み込まれるようにしておくと便利です。
alias dot-someone="dot -c $HOME/.config/dot/dotrc-someone"あとは通常のdotコマンドと同じように使うことができます。
dot-someone editを実行してシンボリックリンクの対応を書き,dot-someone setを実行して実際にシンボリックリンクを張ってください。
setコマンドやpullコマンドなど,すべての設定ファイルをそれぞれ読み込んで実行したい場合もあると思うので,以下のような関数を用意すると便利かもしれません。
dotconfigs=("file1" "file2" "file3")
dotall() {
for dotconfig in ${dotconfigs[@]}; do
dot -c "${dotconfig}" "$@"
done
}
zshで補完を有効にするには
compdef dotall=dot_mainの行を追加することを忘れないようにしてください。
dotlinkファイルは
dot edit
で編集することができます。
設定例
dotlink
# コメントアウトされた行は無視されます。
# 空行も同様です。
# フォーマット:
# <dotfile>,<linkto>
#
# スクリプトによってホームの位置やdotfilesのパスが補完されるので,
# すべてのパスを記述する必要はありません。
# したがって,以下のように書けます:
myvimrc,.vimrc
# このようにすると,`$DOT_DIR/myvimrc`から`$HOME/.vimrc`にシンボリックリンクが
# 張られることになります。
# "/"で始まる場合には,それはパスとして正しく認識されます。
# また、環境変数も正しく解釈されます。
# これはプライベートな情報を含んだファイルを管理したいときに役立ちます。
# 例えばファイルをdotfilesにアップロードすることなく,以下のようにできます。
$HOME/Dropbox/briefcase/netrc,.netrc
私のdotlinkはここにあるので,ご参考にどうぞ。
マシン固有の設定をする場合には,dotrc.local,dotlink.localなども必要に応じてコピーします。
cp ~/.zsh/dot/examples/dotrc ~/.config/dot/dotrc.local
dotrc内で忘れずにsourceしてください。
- 他OSでのテスト (いくつかのUbuntu 14.04搭載マシンでテストしただけなので...)
このプロジェクトはMITライセンスで公開します。
もっと改善できるよとかバグ見つけたとか質問などあればお気軽にご連絡ください。






