dotfiles
用户对于程序的配置通常存储在所谓的点文件(以 .
开头的文件)中。通常的做法是用版本控制系统(如 Git )来管理点文件,以跟踪其变化,并在不同的主机上同步。有许多管理点文件的方法。例如,直接跟踪主目录中的点文件;或者将其放在子文件夹中,用 shell 脚本或专用工具进行管理。除了说明如何管理你的点文件之外,本文章还包含了一个来自 Arch Linux 用户的点文件配置库列表。
使用 Git 跟踪点文件[编辑 | 编辑源代码]
直接使用 Git 跟踪点文件的好处是它只涉及Git而不涉及 symlinks。坏处则是对于特定主机的配置通常需要多个分支来合并。
实现这一需求最简单的方式是直接在 home 目录初始化一个 Git 仓库,并在gitignore(5)文件中使用*
匹配所有文件来忽视它们。
但是两个弊端也随之而来:一是当你的 home 目录下有其他 Git 仓库时,就会难以应对(比如说你如果你忘记初始化而直接对点文件仓库进行操作的时候)。二是你很难确定当前目录下的那些文件是没有被跟踪的(因为他们已经被忽略了)。
为避免上述两个弊端,一个很受欢迎的替代方法是“裸仓库别名法”,它的原文链接在此:Ask Hacker News: What do you use to manage your dotfiles?。它只要3个命令就可轻松完成设置:
$ git init --bare ~/.dotfiles $ alias dotfiles='/usr/bin/git --git-dir="$HOME/.dotfiles/" --work-tree="$HOME"' $ dotfiles config status.showUntrackedFiles no
You can then manage your dotfiles with the created alias. If you are using Bash and would like bash completion for this alias, simply install bash-complete-aliasAUR, then add the alias and the following line to your ~/.bashrc
.
$ complete -F _complete_alias config
Another way to get completion in bash is adding the following to your ~/.bashrc
(taken from [1]):
source /usr/share/bash-completion/completions/git __git_complete config __git_main
特定配置[编辑 | 编辑源代码]
A common problem with synchronizing dotfiles across various machines is host-specific configuration.
With Git this can be solved by maintaining a master branch for all shared configuration, while each individual machine has a machine-specific branch checked out. Host-specific configuration can be committed to the machine-specific branch; when shared configuration is modified in the master branch, the per-machine branches need to be rebased on top of the updated master.
In configuration scripts like shell configuration files conditional logic can be used. For example, Bash scripts (i.e. .bashrc
) can apply different configuration depending on the machine name (or type, custom variable, etc.):
if [[ "$(hostname)" == "archlaptop" ]]; then # laptop specific commands here else # desktop or server machine commands fi
Similar can also be achieved with .Xresources.[2]
If you find rebasing Git branches too cumbersome, you may want to use a tool that supports file grouping, or if even greater flexibility is desired, a tool that does processing.
工具[编辑 | 编辑源代码]
- 文件分组
- 如何分组配置文件。
- 处理
- 一些工具对配置文件进行处理,使其能够根据主机情况进行定制。
名称 | 包 | 语言 | 文件分组 | 处理 |
---|---|---|---|---|
chezmoi | chezmoi包 | Go | directory-based | Go templates |
dot-templater | dot-templater-gitAUR | Rust | directory-based | custom syntax |
dotdrop | dotdropAUR | Python | configuration file | Jinja2 |
dotfiles | dotfilesAUR | Python | No | No |
Dots | dots-managerAUR | Python | directory-based | custom append points |
dotter | dotter-rsAUR | Rust | configuration file | Handlebars |
dt-cli | dt-cliAUR | Rust | configuration file | Handlebars |
GNU Stow | stow包 | Perl | directory-based[3] | No |
Mackup | mackupAUR | Python | automatic per application | No |
mir.qualia | mir.qualiaAUR | Python | No | custom blocks |
rcm | rcmAUR | Perl | directory-based (by host or tag) | No |
Git 的替代品[编辑 | 编辑源代码]
如果你不喜欢 Git ,可以尝试下列工具,它们包含一个单独的版本控制系统(或多或少)。
名称 | 包 | 语言 | 文件分组 | 处理 |
---|---|---|---|---|
dotbare | dotbareAUR | Shell (fzf包) | repository-wise | No |
dotgit | dotgitAUR | Python | filename-based | No |
homeshick | homeshick-gitAUR | Bash | repository-wise | No |
homesick | – | Ruby | repository-wise | No |
Pearl | pearl-gitAUR | Python | repository-wise | No |
vcsh | vcsh包 | Shell | repository-wise | No |
yadm(1) | yadm包 | Python | filename-based (by class/OS/distro/hostname/user)[4] |
Built-in templates/Jinja2/ESH[5] (optional) |
用户仓库[编辑 | 编辑源代码]
作者 | Shell | WM / DE | 编辑器 | 终端 | 终端复用 | 音频 | 资源监视 | 邮件 | IRC | 文件管理 | RSS 阅读 |
---|---|---|---|---|---|---|---|---|---|---|---|
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 | neovim | st | ncmpcpp | bottom | neomutt | weechat | lf | ||
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 | screen | dzen | mutt | irssi | |||
BVollmerhaus | fish | i3-gaps | kakoune | kitty | polybar | ranger | |||||
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 | ||||
falconindy | bash | i3 | vim | rxvt-unicode | ncmpcpp | conky | mutt | ||||
filiparag | fish | bspwm | vim | alacritty | tmux | mpv, playerctl | htop, polybar | mail-notification | pcmanfm[失效链接 2022-09-17 ⓘ] | ||
gardenapple | zsh | sway | neovim | kitty | htop | aerc | |||||
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 | |||
JonasDe[失效链接 2022-09-17 ⓘ] | zsh | i3 | vim | rxvt-unicode | tmux | ||||||
Jorengarenar | sh/Bash | i3 | Vim | xterm | tmux[失效链接 2022-09-17 ⓘ] | mpv | htop | aerc | WeeChat | ranger | QuiteRSS |
MarkusZoppelt | zsh | gnome | vim | terminal | 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 | 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 | vsc | alacritty | i3status | weechat | tere | ||||
pablox-cl | zsh (zplug) | gnome3 | neovim | kitty | |||||||
peterzuger | zsh | i3-gaps | emacs | rxvt-unicode | screen | moc | htop | ||||
potamides | bash | awesome | neovim | termite | tmux | ncmpcpp | conky,htop | mutt | weechat | ranger | |
reisub0 | fish | qtile | neovim | kitty | mpd | conky | |||||
Scrumplex | fish | sway | neovim | kitty | ncmpcpp / pipewire | waybar | aerc | ranger | |||
sistematico | zsh/fish/bash | i3-gaps | vim/nano | termite | tmux | ncmpcpp | polybar | mutt | weechat | ||
sitilge | zsh | sway | neovim | alacritty | htop | thunderbird | |||||
thecashewtrader | Eshell | EXWM | Emacs | Emacs (VTerm) | Emacs | Bongo | htop | mu4e | ERC | Dired | Elfeed |
thiagowfx | bash/zsh | i3 | vim | alacritty | tmux | playerctl | i3status | ranger | |||
tuurep | bash | openbox | neovim | alacritty | tmux | polybar | |||||
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 - Terminal color scheme designer