Use Stow for configuration management of multiple machines

Learn how to use Stow to manage configurations across machines in the second article in our series on 20 ways to be more productive with open source in 2020.
Register or Login to like
Jump-start your career with open source skills

Last year, I brought you 19 days of new (to you) productivity tools for 2019. This year, I'm taking a different approach: building an environment that will allow you to be more productive in the new year, using tools you may or may not already be using.

Manage symlinks with Stow

Yesterday, I explained how I keep my files in sync across multiple machines with Syncthing. But that's only one of the tools I use to keep my configurations consistent. The other is a seemingly simple tool called Stow.

Stow help screen

Stow manages symlinks. By default, it makes symlinks from the directory it is in to the directory below it. There are also options to set a source and target directory, but I don't usually use them.

As I mentioned in the Syncthing article, I use Syncthing to keep a directory called myconfigs consistent across all of my machines. The myconfigs directory has several subdirectories underneath it. Each subdirectory contains the configuration files for one of the applications I use regularly.

myconfigs directory

On each machine, I change to the myconfigs directory and run stow -S <directory name> to symlink the files inside the directory to my home directory. For example, under the vim directory, I have my .vimrc and .vim directories. On each machine, I run stow -S vim to create the symlinks ~/.vimrc and ~/.vim. When I make a change to my Vim configuration on one machine, it applies to ALL of my machines.

Sometimes, though, I need something machine-specific, which is why I have directories like msmtp-personal and msmtp-elastic (my employer). Since my msmtp SMTP client needs to know what email server to relay through, and each one has different setups and credentials, I can use Stow to swap between the two by "unstowing" one with the -D flag and then putting the other in place.

Unstow one, stow the other

Sometimes I find myself adding files to a configuration. For that, there is the "restow" option with -R. For example, I like to use a specific font when I use Vim as a graphical application and not a console. The .gvimrc file lets me set options that apply only to the graphical version, in addition to the standard .vimrc file. When I first set this up, I moved ~/.gvimrc to ~/myconfigs/vim and then ran stow -R vim, which unlinks and relinks everything in that directory.

Stow lets me switch between several configurations with a simple command line and, in combination with Syncthing, I can be sure that I have the setup I like for the tools I use ready to go, no matter where I am or where I make changes.

What to read next
Kevin Sonney is a technology professional, media producer, and podcaster. A Linux Sysadmin and Open Source advocate, Kevin has over 25 years in the IT industry, with over 15 years in Open Source. He currently works as an SRE at elastic.

Comments are closed.

Creative Commons LicenseThis work is licensed under a Creative Commons Attribution-Share Alike 4.0 International License.