After I got new work laptop, I needed to transfer some configuration files to it from the old one. This introduced an opportunity to start versioning it, and also providing more flexible backup handle, finally. It surely is not a good idea to set version control above whole
$HOME. When looking for solution to this problemi, I stumbled upon GNU Stow.
Let’s say your
$HOME looks like this:
.bashrc .bash_profile .git .vim .vimrc Desktop Documents Downloads ...
You surely know that
.bash_profile represent Bash configuration. But how to pass this information to back up solution/versioning system when you want to separate configurations for different software?
GNU Stow is basically simple symlink management software. Let’s setup directory containing all configuration we want to keep under git as a child of
configuration. Under this directory we can create dicrectories containing per-software configuration:
configuration/ ├── bash ├── git └── vim
First, let’s move configuration to corresponding directory:
mv .bash* configuration/bash/.
stow command does by default is that it takes the contents of folder which is passed as an argument and creates symlinks to this content in parent directory. When
stow bash is called in
configuration directory, it takes the files in
bash directory and in
$HOME (which is a parent of
configuration) creates symlinks to this files.
$HOME then looks like this:
... .bash_profile -> configuration/bash/.bash_profile .bashrc -> configuration/bash/.bashrc ...
The last thing is using git or your preffered VCS to version this configuration. Just run
git add . and
git commit -m "Initial commit" in
configuration directory and you are all set.