Installing configuration files in an automated way
Recently when I installed Snow Leopard I got smarter about configuring my command line tools. What I mean by this is that I actually went through and configured Zsh and Vim (among other things). However, these days I use a lot of different computers; from my laptop to virtual machines to servers. I didn’t want to have to manually reconfigure my development environment every time I was using a new computer. So, I wrote a script to do it!
First thing I did was create a Git repository with my configuration files. I don’t have any sensitive information in there, so I threw it up on GitHub.
Then, I proceeded to make an install script that is much more complicated than I would like. Basically, I had certain requirements:
- Before overwriting existing files, back them up. I chose to back them up to a ‘trash’ folder (on Mac OS I use the system trash folder. On Linux I create
~/trash). This is outsourced to atrashscript in thebindirectory. - The installer script should only touch/remove files it is replacing. Therefore, I needed to recursively move the files over and didn’t just blindly copy directories over.
- Be able to have specific configurations for Linux or Mac operating systems. I specify this by appending either
[linux]or[mac]to the file name. - The
.gitconfigfile should properly set theexcludesfilesetting for Git. Git won’t expand the path if it has a~in it. So, when actually copying over the configuration files, I run them throughsedand replace all instances of[[HOME]]with whatever my home directory is. This is applied to all my configuration files, just in case any one of them needs this functionallity, but currently.gitconfigis the only file that uses it. - Maintain the permisions of the files. A simple
chmoddid the trick.
The one last thing I did was that I wanted to be able to have different colored prompts for different computers. But since my installer.rb script blindly moves the files over, I had to store the color information elsewhere. The script works like so:
- It looks for
~/.prompt_colors - If that file exists, it loads
~/.zshrcand looks for a line that starts withPROMT= - If it finds the line, it replaces each color declaration in that line with the colors listed in the
.prompt_colorsfile, in order
Now, on each computer/virtual machine/server I use I can checkout my config-files repository and run the install script. And Violà! I have the set up I am used to, instantly!