dotfiles - Arch Linux 中文维基

跳转到内容

# dotfiles

来自 Arch Linux 中文维基

翻译状态：

- 本文（或部分内容）译自 Dotfiles，最近一次同步于 2025-1-29，若英文版本有所更改，则您可以帮助同步与翻译更改的内容。
- 您可以在 ArchWiki 的对应页面找到本文翻译的原始修订历史。
- 本文可能与英文原文存在出入。

相关文章

- XDG 基本目录
- X 资源

用户对于程序的配置通常存储在所谓的点文件（以 `.` 开头的文件）中。通常的做法是用版本控制系统（如 Git ）来管理点文件，以跟踪其变化，并在不同的主机上同步。有许多管理点文件的方法。例如，直接跟踪主目录中的点文件；或者将其放在子文件夹中，用 shell 脚本或专用工具进行管理。除了说明如何管理你的点文件之外，本文章还包含了一个来自 Arch Linux 用户的点文件配置库列表。

## 使用 Git 跟踪点文件

直接使用 Git 跟踪点文件的好处是它只涉及Git而不涉及符号链接。坏处则是对于特定主机的配置通常需要多个分支来合并。

实现这一需求最简单的方式是直接在 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

注意：通常情况下， 点文件都是默认权限，但如果某些配置一定要配置特定权限，请另寻他法。（git 不支持存储权限信息）(Discussion)

你可以采用下面的命令在新系统中复制点文件：

    $ git clone --bare <git-repo-url> $HOME/.dotfiles
    $ alias dotfiles='/usr/bin/git --git-dir="$HOME/.dotfiles/" --work-tree="$HOME"'
    $ dotfiles checkout
    $ dotfiles config --local status.showUntrackedFiles no

- 如果这时有一些点文件已经被覆盖了，你可能会遇到类似下面这样的错误：

      $ dotfiles 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

  你应该使用 `$ dotfiles checkout -f`重写已经存在的文件，或是用下面更安全的脚本方法备份所有文件，记得使用`checkout`：

      mkdir -p .dotfiles-backup && \
      dotfiles checkout 2>&1 | egrep "\s+\." | awk {'print $1'} | \
      xargs -I{} mv {} .dotfiles-backup/{}

在这之后你可以用 alias命令 去管理点文件。如果你使用的是 Bash，只需要安装 bash-complete-aliasAUR 后就可以使用补全功能，最后将别名和下面的一行命令放在你的`~/.bashrc`中。

    $ complete -F _complete_alias dotfiles

另一种在bash中使用补全功能的方法，在你的`~/.bashrc`中加入下面的命令（擅自[1]）：

    source /usr/share/bash-completion/completions/git
    __git_complete config __git_main

提示：关于避免以外提交敏感信息的方式，请看 Git#Filtering confidential information.

## 特定设备相关的配置

你可能有很多台设备, 在这些设备之间同步点文件是一个很常见的问题，我们将其称之为特定设备相关的配置。

有了 Git 工具的帮助，我们可以通过以下方式解决这个问题：我们可以维护一个包含通用配置文件的主分支，同时为设备间不同的特定配置文件创建单独的分支。维护时将通用配置文件的变动提交到前者，而将与设备相关的配置文件提交到后者。也就是说，每个设备的专用分支都是在保持通用分支更新的基础上单独建立的。

某些配置文件中，比如在 shell configuration files 中，可以使用条件逻辑判断不同的设备。比如，Bash 脚本 (即`.bashrc`) 中可以根据不同的主机名（或者其他特征如类型、自定义变量等等）应用不同的配置。

    if [[ "$(hostname)" == "archlaptop" ]]; then
        # laptop specific commands here
    else
        # desktop or server machine commands
    fi

同样也可以用 .Xresources.[2] 实现类似功能。

如果你觉得设置 Git 分支太麻烦，也可以使用支持文件分组的工具，或者使用处理工具使管理更加灵活。

## 工具

文件分组
  也就是将配置文件归纳成组的方法。
处理
  一些工具对配置文件进行处理，使其能够根据主机情况进行定制。

名称 | 包 | 语言 | 文件分组 | 处理
--- | --- | --- | --- | ---
dotbot | dotbotAUR | Python | 配置文件 | 无
chezmoi | chezmoi包 | Go | 基于目录 | Go 模板
dot-templater | dot-templater-gitAUR | Rust | 基于目录 | 特定语法
toml-bombadil | toml-bombadil | Rust | 基于目录 | tera
dotdrop | dotdropAUR | Python | 配置文件 | Jinja2
dotfiles | dotfilesAUR | Python | 无 | 无
dotter | dotter-rsAUR | Rust | 配置文件 | Handlebars
dt-cli | dt-cliAUR | Rust | 配置文件 | Handlebars
GNU Stow | stow包 | Perl | 基于目录[3] | 无
Mackup | mackupAUR | Python | 自动按应用 | 无
mir.qualia | mir.qualiaAUR | Python | 无 | 自定义块
rcm | rcmAUR | Shell | 基于目录（按主机或标签） | 无
yas-bdsm | - | Shell | 基于目录 | 无

### Git 的替代品

如果你不喜欢 Git ，可以尝试下列工具，它们或多或少可以看作是版本控制系统。

名称 | 包 | 语言 | 文件分组 | 处理
--- | --- | --- | --- | ---
dotbare | dotbareAUR | Shell (fzf包) | repository-wise | 无
dotgit | dotgitAUR | Python | 基于文件名称 | 无
homeshick | homeshick-gitAUR | Bash | repository-wise | 无
homesick | – | Ruby | repository-wise | 无
Pearl | pearl-gitAUR | Python | repository-wise | 无
vcsh | vcsh包 | Shell | repository-wise | 无
yadm(1) | yadm包 | Python | 基于文件名称 (按类/操作系统/发行版/主机名称/用户)[4] | 内置模板/Jinja2/ESH[5] （可选）
dfm | dfmAUR | Perl | repository-wise | 无

1. 支持以 GPG 或 OpenSSL 对文件加密。 [6]

## 用户仓库

提示：中文社区有人整理了来自中文社区用户的 dotfiles 集锦：archlinuxcn-dotfiles-collection。
注意：这个表格用于提供点文件的参考和例子，如果你想将自己的点文件提交到此，请确保它们整洁、注释完善且不过时。
警告：这些点文件未经Arch Linux维护团队验证，请自行承担使用风险。

作者 | Shell | WM / DE | 编辑器 | 终端 | 终端复用 | 音频 | 资源监视 | 邮件 | IRC | 文件管理 | RSS 阅读
--- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | ---
adamperkowski | Zsh | dwm | Neovim | Kitty | tmux | mpv | 自定义 |  | 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 | neovim | st |  | ncmpcpp | bottom | neomutt | weechat | lf |
bamos | zsh | i3/xmonad | vim/emacs | rxvt-unicode | tmux | mpv/cmus | conky/xmobar | mutt | ERC |  |
brisbin33 | zsh | xmonad | vim | rxvt-unicode | 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 / rangern |
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

分类：​

- 配置文件
- Configuration management (简体中文)
- 包含失效链接的页面

dotfiles
添加话题