Dotfiles: Difference between revisions
(→Tools: separate #Tools wrapping Git) |
(→Tools: copy & paste User:Larivact/old-drafts/Dotfiles#Tools) |
||
Line 50: | Line 50: | ||
== Tools == | == Tools == | ||
;File grouping | |||
:How configuration files can be grouped to configuration groups (also called profiles or packages). | |||
;Processing | |||
:Some tools process configuration files to allow them to be customized depending on the host. | |||
{| class="wikitable sortable" style="text-align:center;" | |||
! Name !! Package !! Written in !! File grouping !! Processing | |||
|- | |||
! [https://deadc0de.re/dotdrop/ dotdrop] | |||
| {{AUR|dotdrop}} || Python || configuration file || Jinja2 | |||
|- | |||
! [https://github.com/jbernard/dotfiles dotfiles] | |||
| {{AUR|dotfiles}} || Python || {{Grey|[https://github.com/jbernard/dotfiles/pull/24 No]}} || {{Grey|No}} | |||
|- | |||
! [https://github.com/EvanPurkhiser/dots Dots] | |||
| {{AUR|dots-manager}} || Python || directory-based || custom append points | |||
|- | |||
! [https://www.gnu.org/software/stow/ GNU Stow] | |||
| {{Pkg|stow}} || Perl || directory-based[http://brandon.invergo.net/news/2012-05-26-using-gnu-stow-to-manage-your-dotfiles.html] || {{Grey|No}} | |||
|- | |||
! [https://github.com/lra/mackup Mackup] | |||
| {{AUR|mackup}} || Python || automatic per application || {{Grey|No}} | |||
|- | |||
! [https://github.com/darkfeline/mir.qualia mir.qualia] | |||
| {{AUR|mir.qualia}} || Python || {{Grey|No}} || custom blocks | |||
|- | |||
! [https://github.com/thoughtbot/rcm rcm] | |||
| {{AUR|rcm}} || Perl || directory-based (by host or tag) || {{Grey|No}} | |||
|} | |||
=== Tools wrapping Git === | === Tools wrapping Git === | ||
If you are uncomfortable with [[Git]], you may want to use one of these tools, which abstract the version control system away (more or less). | |||
{| class="wikitable sortable" style="text-align:center;" | |||
! Name !! Package !! Written in !! File grouping !! Processing | |||
|- | |||
! [https://github.com/kobus-v-schoor/dotgit dotgit] | |||
| {{AUR|dotgit}} || Bash || filename-based || {{Grey|No}} | |||
|- | |||
! [https://github.com/andsens/homeshick homeshick] | |||
| {{AUR|homeshick-git}} || Bash || repository-wise || {{Grey|No}} | |||
|- | |||
! [https://github.com/technicalpickles/homesick homesick] | |||
| {{AUR|homesick}} || Ruby || repository-wise || {{Grey|No}} | |||
|- | |||
! [https://github.com/pearl-core/pearl Pearl] | |||
| {{AUR|pearl-git}} || Bash || repository-wise || {{Grey|No}} | |||
|- | |||
! [https://github.com/RichiH/vcsh vcsh] | |||
| {{AUR|vcsh}} || Shell || repository-wise || {{Grey|No}} | |||
|- | |||
! [https://thelocehiliosan.github.io/yadm/ yadm]<sup>1)</sup> | |||
| {{AUR|yadm-git}} || Shell || filename-based<br>(by class, OS, hostname & user) [https://thelocehiliosan.github.io/yadm/docs/alternates] || Jinja2<br>(optional)[https://thelocehiliosan.github.io/yadm/docs/alternates#jinja-templates] | |||
|} | |||
# Supports encryption of confidential files with [[GPG]].[https://thelocehiliosan.github.io/yadm/docs/encryption] | |||
== Repositories == | == Repositories == |
Revision as of 15:34, 27 January 2019
This article collects user repositories with custom configuration files, commonly known as dotfiles.
Version control
Managing dotfiles with version control systems 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
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.
The drawback on having some of the configuration files in multiple branches is that you have to remember to maintain and synchronize changes. Use conditional logic to minimize the number of machine specific files. For example, bash scripts (i.e. .bashrc
) can apply different configuration depending on the machine name (or type, custom variable, etc.):
if [[ "$(uname -n)" == "archlaptop" ]]; then # laptop specific commands here else # desktop or server machine commands fi
Another approach is to manage machine-specific configuration with tools based on template engines, e.g. qualia or Dotdrop. This approach requires less manual work and doesn't cause merge conflicts.
Tools
- File grouping
- How configuration files can be grouped to configuration groups (also called profiles or packages).
- Processing
- Some tools process configuration files to allow them to be customized depending on the host.
Name | Package | Written in | File grouping | Processing |
---|---|---|---|---|
dotdrop | dotdropAUR | Python | configuration file | Jinja2 |
dotfiles | dotfilesAUR | Python | No | No |
Dots | dots-managerAUR | Python | directory-based | custom append points |
GNU Stow | stow | Perl | directory-based[1] | No |
Mackup | mackupAUR | Python | automatic per application | No |
mir.qualia | mir.qualiaAUR | Python | No | custom blocks |
rcm | rcmAUR | Perl | directory-based (by host or tag) | No |
Tools wrapping Git
If you are uncomfortable with Git, you may want to use one of these tools, which abstract the version control system away (more or less).
Name | Package | Written in | File grouping | Processing |
---|---|---|---|---|
dotgit | dotgitAUR | Bash | filename-based | No |
homeshick | homeshick-gitAUR | Bash | repository-wise | No |
homesick | homesickAUR | Ruby | repository-wise | No |
Pearl | pearl-gitAUR | Bash | repository-wise | No |
vcsh | vcshAUR | Shell | repository-wise | No |
yadm1) | yadm-gitAUR | Shell | filename-based (by class, OS, hostname & user) [2] |
Jinja2 (optional)[3] |
Repositories
Author | Shell (Shell framework) | WM / DE | Editor | Terminal | Multiplexer | Audio | Monitor | IRC | |
---|---|---|---|---|---|---|---|---|---|
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 |
awal | fish | i3 | vim | st | tmux | i3status | The Lounge | ||
ayekat | zsh | karuiwm | vim | rxvt-unicode | tmux | ncmpcpp/mpd | karuibar | 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 | |
BVollmerhaus | bash | i3-gaps | kakoune | rxvt-unicode | polybar | thunderbird | |||
cinelli | zsh | dwm | vim | termite-git | pianobar | htop | mutt-kz | weechat | |
dikiaap | zsh | i3-gaps | neovim | alacritty | tmux | i3blocks | |||
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 | ||
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 | |
maximbaz | zsh | i3-gaps | neovim | kitty | 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 | |
pablox-cl | zsh (zplug) | gnome3 | neovim | kitty | |||||
reisub0 | bash | awesome | neovim | termite | mpd | conky | |||
sistematico | zsh/fish/bash | i3-gaps | vim/nano | termite | tmux | ncmpcpp | polybar | mutt | weechat |
sitilge | zsh | awesome | neovim | termite | thunderbird | ||||
swalladge | zsh/bash | i3 | neovim/vim | termite | tmux | cmus | i3pystatus | mutt | |
SyfiMalik | zsh | i3 | vim | rxvt-unicode | tmux | ncmpcpp/mpd | polybar | mutt | weechat |
thiagowfx | bash/zsh | i3 | vim/emacs | rxvt-unicode | ncmpcpp | i3blocks | |||
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 | ||||
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 |
See also
- gregswiki:DotFiles
- XMonad Config Archive
- dotshare.it
- dotfiles.github.io
- terminal.sexy - Terminal color scheme designer