ドットファイル
ユーザー固有のアプリケーション設定は、伝統的に ドットファイル(ファイル名がドットで始まるファイル) に保存されています。変更を追跡し、さまざまなホスト間でドットファイルを同期するために、Git などの バージョン管理システム でドットファイルを管理することは一般的な方法です。ドットファイルを管理するには、さまざまな方法があります(例えば、ホームディレクトリでドットファイルを直接追跡する、サブディレクトリに保存する、シェルスクリプト や専用ツール でファイルをシンボリックリンク/コピー/生成するなど)。ドットファイルの管理方法とは別に、この記事には、ドットファイルのリボジトリのリスト も含まれています。
Git を使ってドットファイルを直接管理する
ドットファイルを直接 Git で追跡することの利点は、Git だけで済み、シンボリックリンクを必要としないことです。デメリットは、ホスト固有の設定 では一般的に複数の branches に変更をマージする必要があるということです。
このアプローチを実現する最も簡単な方法は、Git リポジトリをホームディレクトリで直接初期化し、デフォルトで gitignore(5) パターンの *
を使用してすべてのファイルを無視することです。ただし、この方法には 2 つの欠点があります。ホームディレクトリに他の Git リポジトリがある場合は混乱する可能性があります (たとえば、リポジトリの初期化を忘れた場合、突然 dotfile リポジトリを操作することになります) また、ディレクトリ内のどのファイルが簡単に確認できなくなります。現在のディレクトリは追跡されません (無視されるため)
これらの欠点を避けるための代替方法として、"bare repository and alias method" があります。この方法は、Ask Hacker News: What do you use to manage your dotfiles? で広く知られるようになったもので、たった3つのコマンドでセットアップが可能です:
$ git init --bare ~/.dotfiles $ alias config='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME' $ config config status.showUntrackedFiles no
このドットファイルを使って新しいシステムに複製できます:
$ git clone --bare <git-repo-url> $HOME/.dotfiles $ alias config='/usr/bin/git --git-dir="$HOME/.dotfiles/" --work-tree="$HOME"' $ config checkout $ config config --local status.showUntrackedFiles no
- 上書きされる可能性のあるいくつかのストック設定がすでにある場合は、次のようなエラーが発生します:
$ config checkout error: The following untracked working tree files would be overwritten by checkout: .bashrc .gitignore Please move or remove them before you can switch branches. Aborting
- 既存のファイルを書き換える
$ config checkout -f
を使用することもできます。または、より安全な方法として、次のスクリプトを使用してすべてのファイルのバックアップを取得し、checkout
を使用することもできます: mkdir -p .config-backup && \ config checkout 2>&1 | egrep "\s+\." | awk {'print $1'} | \ xargs -I{} mv {} .config-backup/{}
その後、作成した エイリアス でドットファイルを管理することができます。もし Bash を使っていてこのエイリアスを bash 補完したい場合は、bash-complete-aliasAUR をインストールして、エイリアスと次の行を ~/.bashrc
に追加してください。
$ complete -F _complete_alias config
bash で補完させるもう一つの方法は、~/.bashrc
に以下を追加することです。([1] から引用)
source /usr/share/bash-completion/completions/git __git_complete config __git_main
ホスト固有の設定
様々なマシンで dotfiles を同期させる際によくある問題が、ホスト固有の設定です。
Git では、すべての共有設定を master ブランチで管理し、個々のマシンにはマシン固有のブランチをチェックアウトすることでこれを解決できます。ホスト固有の設定はマシン固有のブランチにコミットすることができます。共有設定が master ブランチで変更された場合、マシンごとのブランチは更新された master の上にリベースされる必要があります。
シェル設定ファイル のような設定スクリプトでは、条件付きロジックを使用することができます。例えば、Bash スクリプト (すなわち .bashrc
) は、マシン名 (またはタイプ、カスタム変数など) に応じて異なる設定を適用することができます。
if [[ "$(hostname)" == "archlaptop" ]]; then # laptop specific commands here else # desktop or server machine commands fi
同様のことは、.Xresources でも実現できます。[2]
Git ブランチのリベースが面倒だと感じる場合は、ファイルのグループ化 をサポートする ツール や、さらに柔軟性を求めるなら 加工処理 を行うツールを使用するとよいでしょう。
ツール
- ファイルのグループ化
- 設定ファイルを設定グループ (プロファイルまたはパッケージとも呼ばれる) にグループ化する方法です。
処理
- ホストによってカスタマイズできるように、設定ファイルを処理するツールもあります。
名前 | パッケージ | 言語 | ファイルのグループ化 | 処理 |
---|---|---|---|---|
dotbot | chezmoi | Python | 設定ファイル | No |
chezmoi | dotbotAUR | Go | ディレクトリベース | Go テンプレート |
dot-templater | dot-templater-gitAUR | Rust | ディレクトリベース | カスタムシンタックス |
toml-bombadil | toml-bombadil | Rust | 設定ファイル | tera |
dotdrop | dotdropAUR | Python | 設定ファイル | Jinja2 |
dotfiles | dotfilesAUR | Python | No | No |
Dots | dots-managerAUR | Python | ディレクトリベース | カスタム追加ポイント |
dotter | dotter-rsAUR | Rust | 設定ファイル | Handlebars |
dt-cli | dt-cliAUR | Rust | 設定ファイル | Handlebars |
GNU Stow | stow | Perl | ディレクトリベース [3] | No |
Mackup | mackupAUR | Python | アプリケーションごとに自動 | No |
mir.qualia | mir.qualiaAUR | Python | No | カスタムブロック |
rcm | rcmAUR | Perl | ディレクトリベース (ホストまたはタグによる) | No |
yas-bdsm | – | Shell | ディレクトリベース | No |
Git を wrapping するツール
Git に不安がある場合は、バージョン管理システムを (多かれ少なかれ) 抽象化するこれらのツールのいずれかを使用することをお勧めします。
名前 | パッケージ | 言語 | ファイルのグループ化 | 処理 |
---|---|---|---|---|
dotbare | dotbareAUR | Shell (fzf) | リポジトリ的 | No |
dotgit | dotgitAUR | Python | ファイル名ベース | No |
homeshick | homeshick-gitAUR | Bash | リポジトリ的 | No |
homesick | – | Ruby | リポジトリ的 | No |
Pearl | pearl-gitAUR | Python | リポジトリ的 | No |
vcsh | vcsh | Shell | リポジトリ的 | No |
yadm(1) | yadm | Bash | ファイル名ベース (by class/OS/distro/hostname/user)[4] |
組み込みのテンプレート /Jinja2/ESH [5] (オプション) |
dfm | dfmAUR | Perl | リポジトリ的 | No |
ユーザーリポジトリ
作者 | シェル | WM / DE | エディタ | ターミナル | マルチプレクサ | オーディオ | モニター | メール | IRC | ファイルマネージャ | RSS リーダー |
---|---|---|---|---|---|---|---|---|---|---|---|
adamperkowski | Zsh | dwm | Neovim | Kitty | tmux | Mpv | custom | WeeChat | |||
alfunx | Zsh | Awesome | Vim | Kitty | tmux | Ncmpcpp/Mpd | Htop/lain | Thunderbird | |||
Ambrevar | Eshell | EXWM | Emacs | Emacs (Eshell) | Emacs TRAMP + dtach | EMMS | Conky/Dzen | mu4e | Circe | ||
ananthu | Zsh | Bspwm | Neovim | Alacritty | Mpv | Htop, Polybar | Neomutt | WeeChat | Ranger | ||
awal | Fish | i3 | Vim | St | tmux | i3status | The Lounge | ||||
ayekat | Zsh | karuiwm | Vim | Rxvt-unicode | tmux | Ncmpcpp/Mpd | karuibar | Mutt | Irssi | ||
bachoseven | Zsh | Dwm source | Neovim | St source | tmux | Ncmpcpp | bottom | Neomutt | WeeChat | Lf | newsboat |
bamos | Zsh | i3/xmonad | vim/emacs | rxvt-unicode | tmux | mpv/cmus | conky/xmobar | mutt | ERC | ||
benmezger | zsh/bash | i3-gaps | emacs | rxvt-unicode/alacritty | tmux | mopidy/ncmpcpp | i3status-rs | mu4e/neomutt/mbsync | weechat | ||
brisbin33 | zsh | xmonad | vim | rxvt-unicode | GNU Screen | dzen | mutt | irssi | |||
BVollmerhaus | fish | i3-gaps | kakoune | kitty | polybar | ranger | |||||
christian-heusel | Zsh | i3 | Neovim | st / terminator | byobu / tmux | Htop | neomutt/thunderbird | WeeChat | nemo / ranger | ||
CuterThanYou | Zsh | i3 / Hyprland | Neovim | Alacritty / Foot | Mpv | Polybar / Yambar | Lf / Thunar | Newsboat | |||
cinelli | Zsh | dwm | Vim | termite-git | pianobar | htop | mutt-kz | weechat | |||
dikiaap | Zsh | i3-gaps | neovim | alacritty | tmux | i3blocks | nnn | ||||
Earnestly | Zsh | i3/orbment | vim/emacs | termite | tmux | mpd | conky | mutt | weechat | ||
ErikBjare | Zsh | xmonad/Xfce4 | Vim | terminator | tmux | xfce4-panel | weechat | ||||
erikw | Zsh/Bash | DWM/macOS | NeoVim | urxvtc | tmux | mpd | mutt | irssi | |||
falconindy | Bash | i3 | Vim | rxvt-unicode | ncmpcpp | conky | mutt | ||||
filiparag | fish | bspwm | Vim | alacritty | tmux | mpv, playerctl | htop, polybar | mail-notification | PCManFM | ||
Freed-Wu | zsh | openbox | neovim | wezterm | tmux | cmus | bottom | neomutt | WeeChat | neovim | newsboat |
gardenapple | Zsh (fish-like) | Hyprland | neovim | kitty | Htop | aerc | vifm | Newsboat | |||
graysky | Zsh | xfce4 | Vim | terminal | ncmpcpp | custom | thunderbird | ||||
hugdru | Zsh | awesome | neovim | rxvt-unicode | tmux | thunderbird | weechat | ||||
insanum | Bash | herbstluftwm | Vim | evilvte | tmux | dzen | mutt-kz | ||||
isti115 | pwsh | sway | neovim | alacritty | tmux | mpv / playerctl | waybar / htop / ytop | ranger | |||
jasonwryan | bash/zsh | dwm | Vim | rxvt-unicode | tmux | ncmpcpp | custom | mutt | irssi | ||
jdevlieghere | Zsh | xmonad | Vim | terminal | tmux | htop | mutt | weechat | |||
jelly | Zsh | i3 | Vim | termite | tmux | ncmpcpp | mutt-kz-git | weechat | |||
jl2 | Zsh | swayfx | geany | foot | missioncenter, eww (bar) | srain | thunar | ||||
MarkusZoppelt | Zsh | gnome | Neovim | Alacritty | tmux | ||||||
maximbaz | Zsh | sway | kakoune | kitty | waybar | neomutt | nnn | ||||
mehalter | Zsh | i3-gaps | neovim | termite | tmux | cmus | gotop | neomutt | weechat | ranger | |
meskarune | Bash | herbstluftwm | Vim | rxvt-unicode | GNU Screen | conky | weechat | ||||
neersighted | fish | i3 | neovim | alacritty | tmux | ncmpcpp | |||||
nimaipatel | fish | awesome | neovim | alacritty | ncmpcpp | ||||||
oibind | fish | awesome | neovim | st | tmux | htop-vim | weechat | lf | |||
OK100 | Bash | dwm | Vim | rxvt-unicode | cmus | conky, dzen | mutt | weechat | |||
orhun | Bash | i3-gaps | neovim | alacritty | i3status | weechat | tere | ||||
pablox-cl | zsh (zplug) | GNOME | neovim | kitty | |||||||
patri9ck | Zsh | bspwm | Vim | kitty | Thunar | ||||||
peterzuger | Zsh | i3-gaps | emacs | rxvt-unicode | GNU Screen | moc | htop | ||||
polyzen | Zsh | i3 | Neovim | Alacritty | tmux | mpv | i3status,htop | himalaya | ranger | Newsboat | |
potamides | Bash | awesome | neovim | termite | tmux | ncmpcpp | conky,htop | mutt | weechat | ranger | |
reisub0 | fish | qtile | neovim | kitty | mpd | conky | |||||
sistematico | zsh/fish/bash | i3-gaps | vim/nano | termite | tmux | ncmpcpp | polybar | mutt | weechat | ||
thecashewtrader | Eshell | EXWM | Emacs | Emacs (VTerm) | Emacs | Bongo | htop | mu4e | ERC | Dired | Elfeed |
thiagowfx | bash/zsh | i3 | Vim | alacritty | tmux | playerctl | i3status | ranger | |||
tplasdio | bash (ble.sh) | awesome | neovim | alacritty | tmux | mpv, mpvs | htop | neomutt | weechat | lf | |
tuurep | Bash | openbox | neovim | alacritty | tmux | polybar | |||||
unrealapex | Zsh | Dwm | Neovim | St | Ncmpcpp | htop | Neomutt | Irssi | fff | Newsboat | |
vodik | Zsh | xmonad | Vim | termite-git | tmux | ncmpcpp | custom | mutt | weechat | ||
w0ng | Zsh | dwm | Vim | rxvt-unicode | tmux | ncmpcpp | custom | mutt | irssi | ||
whitelynx | fish | i3 | neovim | kitty | i3pystatus | ||||||
whynothugo | Zsh | sway | neovim | alacritty | mpv | waybar, top | neomutt | nemo | |||
wryonik | Zsh | i3-gaps-rounded | Vim | terminator | cmus | htop, i3blocks, gotop | ranger, nautilus |
参照
- gregswiki:DotFiles
- XMonad Config Archive
- dotshare.it
- dotfiles.github.io
- terminal.sexy - ターミナルのカラースキームデザイナー