sync-dotfiles or sdf
is a package manager for your dotfiles that takes care of
your own configuration files as well as all of your plugins/dependencies and
helps you automatically reload configs.
- Manage your dotfiles repo with all files exactly where they should be in your home directory
- Automatically detect changes in these files and be prompted to install them to the corresponding location in your home directory
- Configure actions to run when installing files such as automatically sourcing
your
.zshrc
so all your configs are always loaded and up to date - Treat git submodules as single dotfiles so they are synced/installed as a whole - this is useful for dependencies such as vim or zsh plugins
- Run
sdf
with--upgrade
or-u
to pull your dotfiles repo and all submodules before syncing
sdf
uses git
, fd
and ripgrep
(rg
), so make sure you have these
tools installed!
Then, simply source sdf.zsh
in your .zshrc
. This works best if you keep this
repository as a submodule in your dotfiles repo so sdf
can manage itself! You
can see how I do this myself in my
dotfiles.
The minimal configuration is to set the environment variable DOTFILES_DIR
to
let sdf
know where to find your dotfiles repo.
For all additional configuration or if you don't want this environment variable,
you can create an sdfrc
file. This file should be located at ~/.sdfrc
, but
you can set SDFRC_PATH
if you prefer to keep it somewhere else.
Using the sdfrc
, you can set dotfiles_dir
instead to set your repository's
location.
See my sdfrc
for
an example of what this file can look like.
In your sdfrc
you can set the zsh array ignore_patterns
to ignore any
matching paths when looking for what to sync. To ignore any paths with foo
or
bar
, add the following to your sdfrc
ignore_patterns=('*foo*' '*bar*')
To always keep your tools up to date with the most recent changes to their
config, sdf
allows you to define commands to run whenever it syncs a file
matching a pattern. This is configured with the associative zsh array
dotfiles_actions
in your sdfrc
. This array's keys are regex patterns and its
values are commands to run whenever a file matching the pattern key is synced.
To source your zshrc
whenever anything from the .zsh
directory in your
dotfiles is synced, you can add the following to your sdfrc
.
dotfiles_actions=( \
['^\.zsh/']="source $HOME/.zsh/.zshrc" \
)
You can find more examples for actions in my
sdfrc
.
sdf
has the following options.
-y
,--yes
: install all changed dotfiles without prompting-A
,--no-actions
: don't run configured install actions-u
,--upgrade
: pull dotfiles repo and all submodules before syncing-h
,--help
: show the help message and exit