Difference between revisions of "Dotfiles"
(→See also: rm dead links) |
Sistematico (talk | contribs) (→i3 gaps link...) |
||
(25 intermediate revisions by 14 users not shown) | |||
Line 1: | Line 1: | ||
{{Lowercase title}} | {{Lowercase title}} | ||
[[Category:Dotfiles]] | [[Category:Dotfiles]] | ||
+ | [[ja:ドットファイル]] | ||
{{Related articles start}} | {{Related articles start}} | ||
{{Related|XDG Base Directory support}} | {{Related|XDG Base Directory support}} | ||
Line 12: | Line 13: | ||
=== Using gitignore === | === Using gitignore === | ||
− | Keeping a [https://git-scm.com/blog/2010/04/11/environment.html 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 | + | Keeping a [https://git-scm.com/blog/2010/04/11/environment.html 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 {{man|1|git-add}}. |
− | To prevent untracked files (appearing in commits and removed by | + | To prevent untracked files (appearing in commits and removed by {{man|1|git-clean}}), first exclude all files with {{man|5|gitignore}}: |
{{hc|~/.git/info/exclude| | {{hc|~/.git/info/exclude| | ||
Line 23: | Line 24: | ||
$ git add -f ~/.config/* | $ git add -f ~/.config/* | ||
− | And | + | And commit the changes with {{man|1|git-commit}}: |
$ git commit -a | $ git commit -a | ||
=== Other tools === | === Other tools === | ||
− | * {{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 | + | |
+ | * {{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|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|[[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|homesick|Your home directory is your castle. Don't leave your dotfiles behind.|https://github.com/technicalpickles/homesick|{{AUR|homesick}}}} | ||
+ | * {{App|mackup|a small Python utitlity to keep your application settings in sync.|https://github.com/lra/mackup|{{AUR|mackup}}}} | ||
* {{App|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|{{AUR|pearl-git}}}} | * {{App|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|{{AUR|pearl-git}}}} | ||
+ | * {{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 | + | * {{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 48: | Line 57: | ||
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”: | ||
− | + | # .gitattributes | |
− | # .gitattributes | + | some-dotfile filter=remove-pass |
− | 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.: | + | 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.: |
− | + | [filter "remove-pass"] | |
− | [filter "remove-pass"] | + | clean = "sed -e 's/^password=.*/#password=TODO/'" |
− | clean = "sed -e 's/^password=.*/#password=TODO/'" | ||
− | |||
== Repositories == | == Repositories == | ||
Line 64: | Line 69: | ||
{| class="wikitable sortable" | {| class="wikitable sortable" | ||
! scope="col" | Author | ! scope="col" | Author | ||
− | ! scope="col" | Shell | + | ! scope="col" | Shell (shell framework) |
! scope="col" | WM / DE | ! scope="col" | WM / DE | ||
! scope="col" | Editor | ! scope="col" | Editor | ||
Line 79: | Line 84: | ||
! [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 87: | Line 95: | ||
|- | |- | ||
! [https://github.com/bstaletic bstaletic] | ! [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] || terminator || screen || [https://github.com/bstaletic/blob/master/.ncmpcpp/config ncmpcpp] || [https://github.com/bstaletic/dotfiles/blob/master/.conkyrc conky] || || | + | | [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] | + | ! [https://github.com/drkh5h/dotfiles drkhsh]{{Dead link|2017|06|18}} |
| zsh || dwm || vim || st || screen || cmus || conky || mutt || weechat | | zsh || dwm || vim || st || screen || cmus || conky || mutt || weechat | ||
|- | |- | ||
Line 107: | Line 115: | ||
| 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] | + | ! [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 | | zsh || dwm || vim || termite-git || tmux || mpd || conky || mutt || weechat | ||
|- | |- | ||
Line 138: | Line 146: | ||
|- | |- | ||
! [https://github.com/pid1/dotfiles pid1] | ! [https://github.com/pid1/dotfiles pid1] | ||
− | | zsh || dwm || neovim || | + | | zsh || dwm || neovim || st || tmux || || custom || mutt || weechat |
|- | |- | ||
! [https://github.com/polyzen/dotfiles polyzen] | ! [https://github.com/polyzen/dotfiles polyzen] | ||
| zsh || i3 || vim || termite || tmux || || i3status || || weechat | | zsh || i3 || vim || termite || tmux || || i3status || || weechat | ||
|- | |- | ||
− | ! [https:// | + | ! [https://github.com/sistematico/majestic sistematico] |
− | | zsh/bash || i3 || neovim/vim || termite || tmux || | + | | 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 || | ||
|- | |- | ||
! [https://github.com/thiagowfx/dotfiles thiagowfx] | ! [https://github.com/thiagowfx/dotfiles thiagowfx] | ||
Line 159: | Line 170: | ||
|- | |- | ||
! [https://github.com/Wintervenom/Configuration Wintervenom] | ! [https://github.com/Wintervenom/Configuration Wintervenom] | ||
− | | bash || herbstluftwm ||vim || rxvt-unicode || screen ||mpd ([https://github.com/Wintervenom/Scripts/tree/master/audio/mpd mpc-utils]) || [https://github.com/Wintervenom/Scripts/blob/master/wm/herbstluftwm/hlwm- | + | | bash || herbstluftwm ||vim || rxvt-unicode || screen ||mpd ([https://github.com/Wintervenom/Scripts/tree/master/audio/mpd mpc-utils]) || [https://github.com/Wintervenom/Scripts/blob/master/wm/herbstluftwm/hlwm-dzen2 hlwm-dzen2] || mutt || weechat |
|- | |- | ||
! [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] | + | ! [https://github.com/xfausto/dotfiles xfausto]{{Dead link|2016|11|19}} |
| zsh || dwm || vim || st || || ncmpcpp || conky || || | | zsh || dwm || vim || st || || ncmpcpp || conky || || | ||
|- | |- | ||
! [https://github.com/zendeavor zendeavor] | ! [https://github.com/zendeavor zendeavor] | ||
| [https://github.com/zendeavor/config-stuff/tree/sandbag/zsh zsh] || [https://github.com/zendeavor/config-stuff/blob/sandbag/i3/config i3] || [https://github.com/zendeavor/dotvim/tree/sandbag vim] || [https://github.com/zendeavor/config-stuff/blob/sandbag/X11/Xresources#L14 rxvt-unicode] || [https://github.com/zendeavor/config-stuff/tree/sandbag/tmux tmux] || [https://github.com/zendeavor/config-stuff/blob/sandbag/ncmpcpp/config ncmpcpp] || [https://github.com/zendeavor/config-stuff/blob/sandbag/i3/i3status.conf i3status] || || [https://github.com/zendeavor/config-stuff/tree/kiwi/weechat weechat] | | [https://github.com/zendeavor/config-stuff/tree/sandbag/zsh zsh] || [https://github.com/zendeavor/config-stuff/blob/sandbag/i3/config i3] || [https://github.com/zendeavor/dotvim/tree/sandbag vim] || [https://github.com/zendeavor/config-stuff/blob/sandbag/X11/Xresources#L14 rxvt-unicode] || [https://github.com/zendeavor/config-stuff/tree/sandbag/tmux tmux] || [https://github.com/zendeavor/config-stuff/blob/sandbag/ncmpcpp/config ncmpcpp] || [https://github.com/zendeavor/config-stuff/blob/sandbag/i3/i3status.conf i3status] || || [https://github.com/zendeavor/config-stuff/tree/kiwi/weechat weechat] | ||
+ | |- | ||
+ | ! [https://github.com/0n-s/dotfiles dillebidum] | ||
+ | | zsh/mksh || dwm/i3 || vim/vis || st || tmux/dvtm || ncmpcpp/mpv || htop/i3blocks || mutt || ii/irssi | ||
+ | |- | ||
|} | |} |
Revision as of 03:17, 18 September 2017
This article collects user repositories with custom configuration files, commonly known as dotfiles.
Contents
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.
- dotgit — A comprehensive solution to managing your dotfiles.
- dots — A portable tool for managing a single set of dotfiles in an organized fashion.
- 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.
- GNU Stow — Can be used to symlink dotfiles from a repository into the $HOME tree. See [1] for more information.
- homeshick — git dotfiles synchronizer written in bash.
- homesick — Your home directory is your castle. Don't leave your dotfiles behind.
- mackup — a small Python utitlity to keep your application settings in sync.
- 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.
- rcm — Can be used to symlink dotfiles from a repository into the $HOME tree.
- 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.
- 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.
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.
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 | 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 | |
bstaletic | zsh | dwm | vim[dead link 2016-11-19] | terminator | screen | ncmpcpp[dead link 2016-11-19] | conky | ||
cinelli | zsh | dwm | vim | termite-git | pianobar | htop | mutt-kz | weechat | |
drkhsh[dead link 2017-06-18] | zsh | dwm | vim | st | screen | cmus | conky | mutt | 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 | ||
gtmanfred[dead link 2016-11-19] | zsh | dwm | vim | termite-git | tmux | mpd | conky | mutt | weechat |
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 | |
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 | |
xfausto[dead link 2016-11-19] | zsh | dwm | vim | st | ncmpcpp | conky | |||
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 |