Synchronize your settings with Dropbox and Mackup

Synchronize your settings with Dropbox and Mackup

Most of the developers are creatures of habit. Once they get comfortable with an editor, a set of shortcuts or a terminal setup they tend to stick to it for a long time. In this post I will show how to share and keep application configs and so called dotfiles in sync across machines. It's very useful when you have a desktop at the office and a laptop at home.

To accomplish that we are going to use a simple tool called mackup and Dropbox. Mackup keeps your application settings in sync using Dropbox as a storage. It can be installed using homebrew or downloaded as a script, we will do the latter because we want to modify this script later on.

Before you start make sure Dropbox is configured on all machines.

Setting up mackup on the current machine

Install mackup script on Dropbox

mkdir -p ~/Dropbox/Mackup/bin
curl -o ~/Dropbox/Mackup/bin/mackup https://raw2.github.com/lra/mackup/036575af6cf41ac0ad85f853107c93ab3ada7509/mackup.py
chmod +x ~/Dropbox/Mackup/bin/mackup

Add mackup to your $PATH. Most likely you want to put that in the ~/.bashrc or ~/.zshrc (then reload your environment with source ~/.zshor source ~/.bashrc)

export PATH=~/Dropbox/Mackup/bin/mackup:$PATH

Create ~/.mackup.cfg and specify which applications you want to keep in sync, or which you don't want to. I don't recommend leaving it blank which will sync all supported applications because it forces some unsecure defaults, like storing private SSH keys on Dropbox. Below is an example, the full list of supported applications can be found on project's site.

[Allowed Applications]
Adium
TextMate
Zsh
Spotify
Screen
Ruby
Pow
Oh My Zsh
Git
Colloquy
Ack
Curl
Mackup
Chef

Run mackup backup to move all your configs to ~/Dropbox/Mackup and then symlink them back to the right places on your system.

mackup backup

Setting mackup on the remaining machines

Now it's time to use configs from Dropbox on other machine(s). The steps below need to be performed on all remaining computers.

  1. Add mackup to your $PATH as in step 2 of the "Setting up mackup on the current machine" part.

Run mackup restore to link all configs from Dropbox to your system.

mackup restore

Custom file list

What if you want to keep a custom directory in sync? I for example keep some of my pet projects on Dropbox, despite the fact that I use Git for them. This allows me to quickly change machines without having to git commit & push. Also it keeps development configs/sqlite databases/binaries/logs in sync across machines which usually shouldn't be in a git repo.

For now there is no easy way to specify the list of custom files that we want to sync with mackup. There is a a pull requestadding this functionality, which hopefully will be merged soon.

Nothing is lost! We can edit the script to handle custom files and adjust existing formulas.

First we will prevent from syncing SSH private keys. It's just as simple as editing a hash.

Open ~/Dropbox/Mackup/bin/mackup in your favorite editor and replace

'SSH': ['.ssh'],

with

'SSH': ['.ssh/config', '.ssh/known_hosts'],

Now you can add SSH to ~/.mackup.cfg and run mackup backup on your current machine and mackup restore on the rest of them.

If you want to add a custom directory just create a new key in the hash and add it's name to ~/.mackup.cfg and run mackup backup/restore again.

'My Projects': ['projects/my', 'projects/go']

Last but not least, as a side effect of using Dropbox your configs will be backed up and versioned (meaning you can restore old configs).

How do you manage your configs? I would love to hear about your setups in comments.