Tool to set up my Ubuntu workstations.
Shell ApacheConf Other
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


This is the tool I use to set up my Ubuntu workstations at home.


  • Enter wireless password.
  • sudo apt-get update && sudo apt-get -y install xclip git byobu
  • byobu
  • ssh-keygen -q -b 4096 -t rsa -N [passphrase] -f /home/matt/id_rsa
  • cat ~/.ssh/ | xclip -selection clipboard
  • Add the SSH key to GitHub.
  • git clone
  • git clone
  • git clone
  • cd setup
  • sudo su
  • Change the password in
  • time ./ 2>&1 | tee /home/matt/output
  • Change power & screen saver settings.
  • git config --global github.token <token>
  • Restart.
  • Open Firefox, download and install Dropbox.
  • Set chromium-browser settings: sync, download location, fonts.
  • Configure gnome-terminal & Nautilus.
  • Configure the rest of the system settings.
  • Remove the first entries (GitHub) from ~/.ssh/known_hosts since they were added before HashKnownHosts was turned off.
  • Hit 'Install Drivers' to get the restricted drivers tray icon to go away on your laptop (boo Broadcom).
  • Install this

  • ssh-copy-id shortname for all of my servers.

  • Build thumbnails.
  • Install Virtualbox Extension Pack, guest OSs & Guest Additions.
  • Configure Rhythmbox (may no longer be necessary).
  • Configure Deluge (download location, ports, bandwidth) (may no longer be necessary)


  • Set up an APT mirror at home, like this, so apt-get dist-upgrade doesn't take so long.
  • Try building deluge yourself, since the version in the deluge-team ppa doesn't have a launcher.
  • Create a Debian archive for git/python/vim/pidgin/etc, like Debra, using these two resources, so you only have to build packages once per release.
  • Easy updates based on (upgrade/downgrade/outdated). Upgrade uninstalls the old packages, grab the new source, compile, build, install. Downgrade does the same, needs an explicit version. Outdated compares installed versions with Upgrade without a package upgrades all.

  • Automate the screen bootstrapping, possibly with techniques from here.

  • An automatic installer, like oh-my-zsh and RVM. Have it bootstrap Git via a Gist or a standalone script in this repo, then clone this repo (via https, since you can't add your public key without your API key being available somehow) and get going.
  • Figure out restart functionality, like so.
  • Figure out why installing Python from source is breaking Rhythmbox.
  • Possibly switch to Clementine.
  • Put GnuPG instructions in here.

No longer important:

  • Refactor so you can run arbitrary setup scripts and still use the main So 'movein' (all of what setup currently performs) would become a recipe of sorts, demoted to the same level as 'gitweb' or 'nginx'.
  • Make the name of the added user configurable.
  • Nicer directory structure (packages go in a separate folder)
  • Use Roundup. This looks awesome.
  • Organize stuff into functions, not just files. Then you can source everything, and run func || die so your error handler knows where shit hit the fan.
  • Man pages using ronn once you've got some useful flags that require explanation.
  • Makefile like this or a Rakefile like this. Probably a Makefile, since you won't have to jump through hoops just to get it to run.
  • Source documentation with Shocco. Expand flags in the source so you have less documentation to write (just explain short ones that don't have a long form).
  • Bash completion, based on Homebrew's.
  • Nested READMEs. I didn't realize this was possible.
  • Check out Aruba for testing. Here's another example. And here is a video. And a blog post.
  • Test changes with vagrant before committing.
  • Set up a Jenkins instance to test changes locally via Vagrant before you push to GitHub, as well as any pull requests before merging them.
  • Have mention time taken and attach a log of the output. Remove the time from the invocation.
  • Nicer error handling (see, have mention what section failed.
  • Fix these: grep -Pinr "^[\t]*if[^=]*=[^=]" *, making them all use double equals. Bash accepts singles but they look scary.
  • Easy way to upgrade/uninstall setup itself (like RVM's get head and implode, or brew update)
  • Make the timezone configurable.
  • File where you can declare what's installed, not just 'movein' or 'nginx'; how about both?
  • See what gstreamer packages are installed by the Ubuntu desktop installer's non-free option, and see if removing the others from will affect totem-video-thumbnailer, since you use VLC anyway.
  • Make sure you mention that this needs to be run as root, and that it updates your system (and therefore should be run on a fresh box).
  • Better SSH security like so
  • Nice installation messages like railsready and RVM.
  • Figure out a Vim version string that doesn't cause apt to want to update it. Probably 2:blah.
  • Versions with a VERSION file.
  • Changelog, or something like git commit -v that shows you a diff since the last tag and lets you write a changelog. I'm not sure commit messages make the most sense for a changelog.
  • A HACKING file that talks about internals, once they're ready to be talked about.
  • Add a progress bar.
  • Create a Yum repository, possibly. Here's a tutorial, I think.
  • Make this work with Arch, but only customization (dotfiles, whatever else) since Arch stays current and is source-based. Plus FPM doesn't do Arch.
  • Gentoo support. Maybe.
  • Figure out how to profile this, possibly like so.


MIT. See LICENSE for details.