dotfiles

This article collects links to many user repositories containing custom configuration files, often referred to as dotfiles.

Keeping dotfiles under version control

Using version-control software to manage one’s dotfiles helps with:

  • keeping track of changes
  • sharing with others, e. g. by hosting one’s dotfiles on github
  • synchronising dotfiles across various hosts

Tools

Some tools exist which can facilitate managing version-controlled dotfiles in various ways. A problem addressed by most of these tools concerns keeping the dedicated path containing one’s dotfiles in sync with the file-system tree under $HOME. Scripts often do this by symlinking global config locations to the repository path (a notable exception is vcsh, which can track dotfiles in-place).

Symlinks files kept at a central path into the $HOME tree.
Allows separating differents modules (e.g., Emacs config vs. zsh config) into individual repositories which can be maintained separately, as opposed to keeping all dotfiles in a single repository. Works with git only.
Intended to version-control system-wide configuration in /etc. Works by keeping track of permissions and modes which version-control software often ignores. Can use various SCM systems as a backend. Hooks can auto-commit changes to the repository before a system-upgrade; for pacman, these hooks currently have to be triggered manually.

Maintaining dotfiles across multiple machines

One way of maintaining dotfiles across various machines across various hosts while still allowing for per-host customizations, is 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; as shared configuration is added to the master-branch, the per-machine branches are then rebased on top of the updated master.

Confidential information

Occasionally, software may keep plain-text passwords in configuration files, as opposed to hooking into a keyring. In these cases, git clean-filters may be handy to avoid accidentally commiting confidential information. E. g., the following .gitattributes file assigns a filter to the file “some-dotfile”:

# .gitattributes
some-dotfile filter=remove-pass

Whenever the file “some-dotfile” is checked into git, git will invoke the filter “remove-pass” on the file before checking it in. The filter must be defined in .git/config, e. g.:

[filter "remove-pass"]
clean = "sed -e 's/^password=.*/#password=TODO/'"

Automatically generating screenshots with an X virtual framebuffer

screenshots/generate.sh in bamos/dotfiles shows how to use an X virtual framebuffer to generate screenshots of programs and colorschemes. Example results are stored in the screenshots directory.

Repositories

Author Shell WM / DE Editor Terminal Multiplexer Audio Monitor Mail IRC
Alad zsh i3 emacs xterm deadbeef htop thunderbird weechat
Ambrevar zsh awesome emacs rxvt-unicode cmus htop/vicious mutt
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
cinelli zsh dwm vim termite-git pianobar htop mutt-kz weechat
falconindy bash i3 vim rxvt-unicode ncmpcpp conky mutt
graysky zsh xfce4 vim terminal ncmpcpp custom thunderbird
gtmanfred zsh dwm vim termite-git tmux mpd conky mutt weechat
insanum bash herbstluftwm vim evilvte tmux dzen mutt-kz
izmntuk zsh i3 vim/geany rxvt-unicode tmux cmus htop/i3bar thunderbird irssi
jasonwryan bash/zsh dwm vim rxvt-unicode tmux ncmpcpp custom mutt irrsi
meskarune bash herbstluftwm vim rxvt-unicode screen conky weechat
neersighted zsh i3 vim rxvt-unicode tmux ncmpcpp htop mutt irssi
OK100 bash dwm vim rxvt-unicode cmus conky, dzen mutt weechat
unexist zsh subtle vim rxvt-unicode ncmpcpp mutt irssi
vodik zsh xmonad vim termite-git tmux ncmpcpp custom mutt weechat
w0ng zsh dwm vim rxvt-unicode tmux ncmpcpp custom mutt irssi
Wintervenom bash herbstluftwm vim rxvt-unicode screen mpd (mpc-utils) hlwm-dzen2 mutt weechat
wolfcore bash dwm vim rxvt-unicode tmux cmus custom weechat
xfausto zsh dwm vim st ncmpcpp conky
thiagowfx bash/zsh i3 vim/emacs rxvt-unicode ncmpcpp i3blocks
zendeavor zsh i3 vim rxvt-unicode tmux ncmpcpp i3status weechat
bstaletic zsh dwm vim terminator screen ncmpcpp conky

See also