I used /usr/local/scripts
to maintain my shell scripts for several years. On each working box I created a /usr/local/scripts
and a /var/log/scripts
directory. On each Linux box, on each Mac I own. But the problem is to keep all this scripts on each box up-to-date. Ok, you don’t need them all on all PCs/servers. But the common scripts needed to be updated on each box.
I decided to move /usr/local/scripts
to ~/Dropbox/bin
. On the Mac boxes it’s easy. You remove /usr/local/scripts
from your PATH
environment variable and replace it with ~/Dropbox/bin
. But you still have the problem that your /etc/profile
doesn’t update itself. So you can write a script that does this work for you. Or you create a symbolic link from ~/Dropbox/bin/.profile
to ~/.profile
. And you also still have the problem that ~/Dropbox/bin
isn’t common on the whole system. The root user and each other user can’t access your ~/Dropbox/bin
directory because ~
is the home directory of your user. Not a common directory.
So how do we solve this problem? There are several ways but I decided to create an own project: dotfiles
The idea behind this project is to maintain ALL files I need over several computers in a Git repository and overwrite the local files. Even the files for Sublime Text. So I removed the shell scripts from /usr/local/scripts
and ~/Dropbox/bin
to ~/bin
. The real .files like .bashrc
, .bash_profile
, etc. are at their default paths. /etc/profile
and /etc/bashrc
are also unchanged defaults. When I want to change something I edit it in the repository. Once cloned/pulled I can run ./import.sh
to overwrite the local files. So on every other machines I only need to pull the changes and run the import script. If I also want to use this files for the root user I clone the project into a separated directory and execute the import script as root.
But I would like to prefer this solution only on my personal computers. On servers (for instance for clients) I would like to use an automation software system like Puppet to maintain software and scripts because dotfiles are very personal. Every programmer and system administrator has its own preferences.