Difference between revisions of "Dotfiles"

From ArchWiki
Jump to: navigation, search
(update Pkg/AUR templates)
(Tag: wiki-scripts)
(Add maximbaz's dotfiles)
 
(17 intermediate revisions by 11 users not shown)
Line 4: Line 4:
 
{{Related articles start}}
 
{{Related articles start}}
 
{{Related|XDG Base Directory support}}
 
{{Related|XDG Base Directory support}}
 +
{{Related|X resources}}
 
{{Related articles end}}
 
{{Related articles end}}
 
This article collects user repositories with custom configuration files, commonly known as ''dotfiles''.
 
This article collects user repositories with custom configuration files, commonly known as ''dotfiles''.
Line 31: Line 32:
  
 
* {{App|dotbot|A minimalist dotfiles manager that can be installed as a git submodule of your dotfiles repository.|https://github.com/anishathalye/dotbot}}
 
* {{App|dotbot|A minimalist dotfiles manager that can be installed as a git submodule of your dotfiles repository.|https://github.com/anishathalye/dotbot}}
 +
* {{App|dotdrop|A tool to manage different versions of your dotfiles on different hosts.|https://github.com/deadc0de6/dotdrop}}
 
* {{App|dotfiles|A tool to make managing your dotfile symlinks in $HOME easy, allowing you to keep all of them in a single directory.|https://github.com/jbernard/dotfiles|{{AUR|dotfiles}}}}
 
* {{App|dotfiles|A tool to make managing your dotfile symlinks in $HOME easy, allowing you to keep all of them in a single directory.|https://github.com/jbernard/dotfiles|{{AUR|dotfiles}}}}
 
* {{App|dotgit|A comprehensive solution to managing your dotfiles.|http://github.com/Cube777/dotgit|{{AUR|dotgit}}}}
 
* {{App|dotgit|A comprehensive solution to managing your dotfiles.|http://github.com/Cube777/dotgit|{{AUR|dotgit}}}}
 
* {{App|dots|A portable tool for managing a single set of dotfiles in an organized fashion.|https://github.com/EvanPurkhiser/dots|{{AUR|dots-manager}}}}
 
* {{App|dots|A portable tool for managing a single set of dotfiles in an organized fashion.|https://github.com/EvanPurkhiser/dots|{{AUR|dots-manager}}}}
* {{App|[[etckeeper]]|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.|http://joeyh.name/code/etckeeper/|{{Pkg|etckeeper}}}}
+
* {{App|[[etckeeper]]|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.|http://etckeeper.branchable.com/|{{Pkg|etckeeper}}}}
 
* {{App|GNU Stow|Can be used to symlink dotfiles from a repository into the $HOME tree. See [http://brandon.invergo.net/news/2012-05-26-using-gnu-stow-to-manage-your-dotfiles.html] for more information.|http://www.gnu.org/software/stow/|{{Pkg|stow}}}}
 
* {{App|GNU Stow|Can be used to symlink dotfiles from a repository into the $HOME tree. See [http://brandon.invergo.net/news/2012-05-26-using-gnu-stow-to-manage-your-dotfiles.html] for more information.|http://www.gnu.org/software/stow/|{{Pkg|stow}}}}
 
* {{App|homeshick|git dotfiles synchronizer written in bash.|https://github.com/andsens/homeshick|{{AUR|homeshick-git}}}}
 
* {{App|homeshick|git dotfiles synchronizer written in bash.|https://github.com/andsens/homeshick|{{AUR|homeshick-git}}}}
Line 42: Line 44:
 
* {{App|rcm|Can be used to symlink dotfiles from a repository into the $HOME tree.|https://github.com/thoughtbot/rcm|{{AUR|rcm}}}}
 
* {{App|rcm|Can be used to symlink dotfiles from a repository into the $HOME tree.|https://github.com/thoughtbot/rcm|{{AUR|rcm}}}}
 
* {{App|vcsh|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.|https://github.com/RichiH/vcsh|{{AUR|vcsh}}}}
 
* {{App|vcsh|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.|https://github.com/RichiH/vcsh|{{AUR|vcsh}}}}
* {{App|yadm|Manages files across systems using a single Git repository. Provides a way to use alternate files on a specific OS or host. Supplies a method of encrypting confidential data so it can safely be stored in your repository.|https://github.com/TheLocehiliosan/yadm|{{AUR|yadm}}{{Broken package link|package not found}}}}
+
* {{App|yadm|Manages files across systems using a single Git repository. Provides a way to use alternate files on a specific OS or host. Supplies a method of encrypting confidential data so it can safely be stored in your repository.|https://github.com/TheLocehiliosan/yadm|{{AUR|yadm-git}}}}
  
 
=== Maintaining dotfiles across multiple machines ===
 
=== Maintaining dotfiles across multiple machines ===
Line 56: Line 58:
 
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”:
 
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”:
  
<pre>
+
# .gitattributes
# .gitattributes
+
some-dotfile filter=remove-pass
some-dotfile filter=remove-pass
 
</pre>
 
  
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.:
+
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 {{ic|.git/config}}, e. g.:
  
<pre>
+
[filter "remove-pass"]
[filter "remove-pass"]
+
clean = "sed -e 's/^password=.*/#password=TODO/'"
clean = "sed -e 's/^password=.*/#password=TODO/'"
 
</pre>
 
  
 
== Repositories ==
 
== Repositories ==
Line 87: Line 85:
 
! [https://github.com/awalGarg/dotfiles awal]
 
! [https://github.com/awalGarg/dotfiles awal]
 
| fish || i3 || vim || sakura || tmux || || i3status || || The Lounge
 
| fish || i3 || vim || sakura || tmux || || i3status || || The Lounge
 +
|-
 +
! [https://github.com/ayekat/dotfiles ayekat]
 +
| zsh || karuiwm || vim || rxvt-unicode || tmux || ncmpcpp/mpd || karuibar || claws-mail/mutt || irssi
 
|-
 
|-
 
! [https://github.com/bamos/dotfiles bamos]
 
! [https://github.com/bamos/dotfiles bamos]
Line 93: Line 94:
 
! [https://github.com/pbrisbin/dotfiles brisbin33]
 
! [https://github.com/pbrisbin/dotfiles brisbin33]
 
| [https://github.com/pbrisbin/oh-my-zsh zsh] || [https://github.com/pbrisbin/xmonad-config xmonad] || [https://github.com/pbrisbin/vim-config vim] || rxvt-unicode || screen || || dzen || [https://github.com/pbrisbin/mutt-config mutt] || [https://github.com/pbrisbin/irssi-config irssi]
 
| [https://github.com/pbrisbin/oh-my-zsh zsh] || [https://github.com/pbrisbin/xmonad-config xmonad] || [https://github.com/pbrisbin/vim-config vim] || rxvt-unicode || screen || || dzen || [https://github.com/pbrisbin/mutt-config mutt] || [https://github.com/pbrisbin/irssi-config irssi]
|-
 
! [https://github.com/bstaletic bstaletic]
 
| [https://github.com/bstaletic/dotfiles/blob/master/.zshrc zsh] || [https://github.com/bstaletic/dotfiles/blob/master/dwm/config.h dwm] || [https://github.com/bstaletic/dotfiles/blob/master/.vimrc vim]{{Dead link|2016|11|19}} || terminator || screen || [https://github.com/bstaletic/blob/master/.ncmpcpp/config ncmpcpp]{{Dead link|2016|11|19}} || [https://github.com/bstaletic/dotfiles/blob/master/.conkyrc conky] || ||
 
 
|-
 
|-
 
! [https://github.com/cinelli/dotfiles cinelli]
 
! [https://github.com/cinelli/dotfiles cinelli]
 
| zsh || dwm || vim || termite-git || || pianobar || htop || mutt-kz || weechat
 
| zsh || dwm || vim || termite-git || || pianobar || htop || mutt-kz || weechat
|-
 
! [https://github.com/drkh5h/dotfiles drkhsh]
 
| zsh || dwm || vim || st || screen || cmus || conky || mutt || weechat
 
 
|-
 
|-
 
! [https://github.com/Earnestly/dotfiles Earnestly]
 
! [https://github.com/Earnestly/dotfiles Earnestly]
Line 114: Line 109:
 
! [https://github.com/graysky2/configs/tree/master/dotfiles graysky]
 
! [https://github.com/graysky2/configs/tree/master/dotfiles graysky]
 
| zsh || xfce4 || vim || terminal || || ncmpcpp || custom || thunderbird ||
 
| zsh || xfce4 || vim || terminal || || ncmpcpp || custom || thunderbird ||
|-
 
! [http://code.gtmanfred.com/cgit/dotfiles.git/tree/?h=tower gtmanfred]{{Dead link|2016|11|19}}
 
| zsh || dwm || vim || termite-git || tmux || mpd || conky || mutt || weechat
 
 
|-
 
|-
 
! [https://github.com/hugdru/dotfiles hugdru]
 
! [https://github.com/hugdru/dotfiles hugdru]
Line 135: Line 127:
 
! [https://github.com/jelly/Dotfiles jelly]
 
! [https://github.com/jelly/Dotfiles jelly]
 
| zsh || i3 || vim || termite || tmux || ncmpcpp || || mutt-kz-git || weechat
 
| zsh || i3 || vim || termite || tmux || ncmpcpp || || mutt-kz-git || weechat
 +
|-
 +
! [https://github.com/maximbaz/dotfiles maximbaz]
 +
| zsh || i3-gaps || neovim || alacritty || tmux || || py3status || thunderbird ||
 
|-
 
|-
 
! [https://github.com/meskarune/.dotfiles meskarune]
 
! [https://github.com/meskarune/.dotfiles meskarune]
Line 151: Line 146:
 
| zsh || i3 || vim || termite || tmux || || i3status || || weechat
 
| zsh || i3 || vim || termite || tmux || || i3status || || weechat
 
|-
 
|-
! [https://bitbucket.org/swalladge/dotfiles swalladge]{{Dead link|2016|11|19}}
+
! [https://github.com/sistematico/majestic sistematico]
 +
| zsh/fish/bash || [https://github.com/Airblader/i3 i3 Gaps] || vim/nano || termite || tmux || ncmpcpp || i3blocks || mutt || weechat
 +
|-
 +
! [https://github.com/swalladge/dotfiles swalladge]
 
| zsh/bash || i3 || neovim/vim || termite || tmux || cmus || i3pystatus || mutt ||
 
| zsh/bash || i3 || neovim/vim || termite || tmux || cmus || i3pystatus || mutt ||
 
|-
 
|-
Line 171: Line 169:
 
! [https://github.com/wolfcore/dotfiles wolfcore]  
 
! [https://github.com/wolfcore/dotfiles wolfcore]  
 
| bash || dwm || vim || rxvt-unicode || tmux || cmus || custom || || weechat
 
| bash || dwm || vim || rxvt-unicode || tmux || cmus || custom || || weechat
|-
 
! [https://github.com/xfausto/dotfiles xfausto]{{Dead link|2016|11|19}}
 
| zsh || dwm || vim || st || || ncmpcpp || conky || ||
 
 
|-
 
|-
 
! [https://github.com/zendeavor zendeavor]
 
! [https://github.com/zendeavor zendeavor]
Line 190: Line 185:
 
* [http://dotshare.it dotshare.it]
 
* [http://dotshare.it dotshare.it]
 
* [https://dotfiles.github.io/ dotfiles.github.io]
 
* [https://dotfiles.github.io/ dotfiles.github.io]
 +
* [https://terminal.sexy/ terminal.sexy] - Terminal color scheme designer

Latest revision as of 17:37, 2 December 2017

This article collects user repositories with custom configuration files, commonly known as dotfiles.

Version control

Managing dotfiles with version control software such as Git helps to keep track of changes, share with others, and synchronize dotfiles across various hosts.

Using gitignore

Keeping a git directory inside the home folder allows to directly keep track of changes. It is recommended to selectively add file contents to the index with git-add(1).

To prevent untracked files (appearing in commits and removed by git-clean(1)), first exclude all files with gitignore(5):

~/.git/info/exclude
*

Then use git add -f, for example:

$ git add -f ~/.config/*

And commit the changes with git-commit(1):

$ git commit -a

Other tools

  • dotbot — A minimalist dotfiles manager that can be installed as a git submodule of your dotfiles repository.
https://github.com/anishathalye/dotbot || not packaged? search in AUR
  • dotdrop — A tool to manage different versions of your dotfiles on different hosts.
https://github.com/deadc0de6/dotdrop || not packaged? search in AUR
  • dotfiles — A tool to make managing your dotfile symlinks in $HOME easy, allowing you to keep all of them in a single directory.
https://github.com/jbernard/dotfiles || dotfilesAUR
  • dotgit — A comprehensive solution to managing your dotfiles.
http://github.com/Cube777/dotgit || dotgitAUR
  • dots — A portable tool for managing a single set of dotfiles in an organized fashion.
https://github.com/EvanPurkhiser/dots || dots-managerAUR
  • etckeeper — 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.
http://etckeeper.branchable.com/ || etckeeper
  • GNU Stow — Can be used to symlink dotfiles from a repository into the $HOME tree. See [1] for more information.
http://www.gnu.org/software/stow/ || stow
  • homeshick — git dotfiles synchronizer written in bash.
https://github.com/andsens/homeshick || homeshick-gitAUR
  • homesick — Your home directory is your castle. Don't leave your dotfiles behind.
https://github.com/technicalpickles/homesick || homesickAUR
  • mackup — a small Python utitlity to keep your application settings in sync.
https://github.com/lra/mackup || mackupAUR
  • Pearl — Package manager for dotfiles, plugins, programs and any form of code accessible via git. Allow to easily share and sync packages across systems and have them ready to work out of the box.
https://github.com/pearl-core/pearl || pearl-gitAUR
  • rcm — Can be used to symlink dotfiles from a repository into the $HOME tree.
https://github.com/thoughtbot/rcm || rcmAUR
  • vcsh — 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.
https://github.com/RichiH/vcsh || vcshAUR
  • yadm — Manages files across systems using a single Git repository. Provides a way to use alternate files on a specific OS or host. Supplies a method of encrypting confidential data so it can safely be stored in your repository.
https://github.com/TheLocehiliosan/yadm || yadm-gitAUR

Maintaining dotfiles across multiple machines

Tango-edit-clear.pngThis article or section needs language, wiki syntax or style improvements.Tango-edit-clear.png

Reason: This and the section below need a rewrite (Discuss in Talk:Dotfiles#)

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.

Another approach is to put machine-specific configuration into specially commented blocks and to use qualia to automatically uncomment them on each machine. This approach requires less manual work and doesn't cause merge conflicts.

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/'"

Repositories

Author Shell (shell framework) WM / DE Editor Terminal Multiplexer Audio Monitor Mail IRC
Ambrevar zsh awesome emacs rxvt-unicode cmus htop/vicious mutt
awal fish i3 vim sakura tmux i3status The Lounge
ayekat zsh karuiwm vim rxvt-unicode tmux ncmpcpp/mpd karuibar claws-mail/mutt irssi
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
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
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
izmntuk zsh xfce4 vim rxvt-unicode/yaft tmux cmus xfce4-panel irssi
jasonwryan bash/zsh dwm vim rxvt-unicode tmux ncmpcpp custom mutt irrsi
jdevlieghere zsh xmonad vim terminal tmux htop mutt weechat
jelly zsh i3 vim termite tmux ncmpcpp mutt-kz-git weechat
maximbaz zsh i3-gaps neovim alacritty tmux py3status thunderbird
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
pid1 zsh dwm neovim st tmux custom mutt weechat
polyzen zsh i3 vim termite tmux i3status weechat
sistematico zsh/fish/bash i3 Gaps vim/nano termite tmux ncmpcpp i3blocks mutt weechat
swalladge zsh/bash i3 neovim/vim termite tmux cmus i3pystatus mutt
thiagowfx bash/zsh i3 vim/emacs rxvt-unicode ncmpcpp i3blocks
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
zendeavor zsh i3 vim rxvt-unicode tmux ncmpcpp i3status weechat
dillebidum zsh/mksh dwm/i3 vim/vis st tmux/dvtm ncmpcpp/mpv htop/i3blocks mutt ii/irssi

See also