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
新增話題