A little, dead simple dotfiles linker,
inspired by bashdot.
It, well, links your dotfiles to your HOME directory.
Just put the
dfl scrpt in your
PATH, and put your dotfiles in a
~/.dfl/dotfiles/default directory, without the dot.
dfl link or
It also works with files in dotdirectories:
dotfiles/default/.config/rofi/config.rasi will be linked to
If the path does not exits it will mkdir it for you.
If something that is not a link exists it will ask nicely what to do.
You can put your secret dotfiles in the
they will be linked after the
default ones and the eventual override.
It's a handy directory to gitignore, if your
dotfiles is a git repo.
Or 'profiles' if it suits you better.
If you need some 'overrides', put them in a new directory,
dotfiles/fluxbox, and pass it to the script as an argument,
dfl l fluxbox
It will link
default, then the
fluxbox and then
secrets, overriding existing links.
This way of handle things is inspired by bashdot profiles.
A use case is when you have another pc/server and you need a slightly different configuration, that translates in you need some dotfiles to have different content than the usual.
You can make dfl choose a profile automatically so that you don't have
to remember to type it if you set the env var
dfl does not find that var, it checks if there is a profile dir named
as the output of the hostname command and take that as the profile.
dfl tracks the links it creates,
so it deletes them if they are not presents in your
dotfiles directory anymore.
It's clean, does not leave broken symlinks all around.
Spotted a file that you shold move to your dotfiles?
dfl take .config/gopass/config.yml
it moves that file into your
default profile, recreating the relative directory structure.
It works with dotdirectories and you can specify an
dfl t .fluxbox fluxbox
It moves the
.fluxbox directory into
After that you only need to link them up with
If you have your dotfiles on some git repo you can do a
dfl clone <your repo>.
It will clone you repo in the
dotfiles dir, backupping the existing one.
So, if your dotfiles dir is a git repo you can commit and push your dotfiles
dfl git <whatever git command and arguments>
cds in your
dotfiles directory and executes the
For example, you can hack your
~/.vimrc and do:
dfl g commit -am 'Add awesomeness' && dfl g push
dfl sync, or just
from wherever you are. Handy, isn't it? : )
If you have to hack your
overrides directories, check something, or just dumb around,
you can jump directly in your
dotfiles directory with
. dfl cd or
. dfl j.
Note the dot. I know, dot-this, dot-that, dot-net (eheheh, I'm too funny :-| ). That dot is there because I cannot change the directory of a parent shell from its child shell.
Another way of doing this is:
cd `dfl d`
dfl d prints your dotfiles directory absolute path.
Ok, it's not that awesome, but, hey, ¯\(ツ)/¯.