dot v1.2.2

December 12, 2018 · View on GitHub

English

dot v1.2.2

dotはシェルスクリプトで書かれたdotfiles管理フレームワークです。

説明

このスクリプトを使うとdotfilesの管理が簡単になります。

日常的に複数マシンを使う人,新しいPCのセットアップするとき,毎日dotfilesでcontributionに草を生やし続けている人におすすめです。

インストール

必要なもの

  • bash (or zsh)
  • git

手動でインストール

このリポジトリを自分のPCにforkかcloneし,bashrczshrcから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 引数
pulldotfiesをpullしてくる(by git).[--self]
listdotで管理するファイルを一覧を表示
checkファイルにリンクが張られているかどうかチェックする
cdディレクトリdotdirに移動
setdotlinkに書かれたシンボリックリンクを貼る[-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 ... ]
editdotlinkを手動で編集
config設定ファイルdotrcを編集
unlink選択したシンボリックリンクをunlinkし,dotfilesから元ファイルをコピーlink1 [link2 link3 ... ]
cleardotlinkファイルに記載されたすべてのシンボリックリンクをunlink
clonegitコマンドを使ってdotfilesを自分のPCにクローン[-f|--force] [/directory/to/clone/]

オプション

オプション説明引数
-h, --helpヘルプを表示
-c, --config読み込む設定ファイルを指定dotrc

dot pull

dotfiesをpullしてくる(by git)。

dot pull

--selfオプションをつけると,dot自身を最新の状態に更新します。

dot pull --self

dot list

dot list

dotで管理するファイルを一覧表示する。

dot check

ファイルにリンクが張られているかどうかチェックする。

dot check

  • "✘" は現在dotで管理されていないがdotlinkに対応が書かれているものを表す。
  • "✔" はdotで管理されているものを表す。

dot cd

dot cd

ディレクトリdotdirに移動します。

dot set

このコマンドは,dotlinkに書かれたシンボリックリンクを貼っていきます。

もし既にファイルが存在する場合には,

  • 差分表示
  • 2ファイルを編集
  • 既存ファイルに上書き
  • バックアップを作成して上書き
  • 何もしない

の操作を選ぶことができます。

オプション-iまたは--ignoreをつけると、競合するファイルが存在する場合に対話メニューを開かず、何も操作しません。

オプション-fまたは--forceをつけた場合は、競合するファイルがある場合に対話メニューを開くことなく、すべて新たなシンボリックリンクに置き換えます。

オプション-bまたは--backupをつけると、競合するファイルが存在する場合に対話メニューを開かず、新たなシンボリックを張りますが、オリジナルのファイルはfile.bakのようにしてバックアップファイルとして残されます。

-vまたは--verboseオプションをつけると、すでにリンクが張られているものについて等、より冗長なメッセージを表示します。

dot set

dot update

'pull'コマンドと'set'コマンドを組み合わせた機能を提供します。 オプションはsetコマンドと同じものを受け取ることができます。

dot add

新たなファイルをdotfilesに追加,シンボリックリンクを貼り,対応関係をdotlinkに追記

dot add

dot edit

dotlinkを手動で編集する。

dot edit

dot config

設定ファイルdotrcを編集する。

dot config

選択したシンボリックリンクをunlinkし,dotfilesから元ファイルのコピーを持ってくる。

dot unlink

dot clear

dotlinkファイルに記載されたすべてのシンボリックリンクをunlinkする

dot clear

dot clone

gitコマンドを使ってdotfilesを自分のPCにクローンする

-fまたは--forceオプションをつけると確認プロンプトを表示しません。

dot clone [-f|--force] [<dir_to_clone>]

ユースケース

複数マシン間での設定共有,非共有

dotrc.localdotlink.localをそれぞれのPCに作成し,そこに固有のリンクを記載すれば,マシンそれぞれについてdotfilesをつくる必要はなくなります。

共有したい設定はいつでも共有でき,共有したくない設定も,gitで管理しながら独立に扱えます。

PCを立ち上げてdot pullコマンドを実行すれば,すぐに最新の設定環境になります。

新しいPCのセットアップ

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という名前を無効にして,他の名前をつけることも可能です。

bashrczshrcに,以下のように記述してください。

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")

bashrczshrcなどに以下のように書いておき,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.localdotlink.localなども必要に応じてコピーします。

cp ~/.zsh/dot/examples/dotrc ~/.config/dot/dotrc.local

dotrc内で忘れずにsourceしてください。

TODO

  • 他OSでのテスト (いくつかのUbuntu 14.04搭載マシンでテストしただけなので...)

ライセンス

このプロジェクトはMITライセンスで公開します。

連絡先

もっと改善できるよとかバグ見つけたとか質問などあればお気軽にご連絡ください。