My development setup
For the purposes of archiving how I like to develop, I’ll chronicle a few things here.
First things first. You’ll want to ensure that your login/non-login terminal sessions have the same environment. On OS X, non-login sessions use the ~/.bashrc
, while login sessions use ~/.bash_profile
. Most terminal emulators follow this rule, but lets ensure this is always the case by modifying our non-existent ~/.bash_profile
as follows:
if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi
Whenever something asks you to modify your ~/.bash_profile
, ensure that the modification is in your ~/.bashrc
instead. This will help debugging down the road.
Install XCode. For Lion/Mountain Lion, it is important that you also install the Command Line Tools
, as the version of gcc
that is included with XCode 4.3 is incompatible with certain build tools.
XCode 4.2 users - that means anyone on Snow Leopard - should install the osx gcc installer, as installing a proper gcc is pretty much impossible otherwise.
Once that is complete, install homebrew - the proper way, to /usr/local/
, with no sudo enabled:
/usr/bin/ruby -e "$(/usr/bin/curl -fksSL https://raw.github.com/mxcl/homebrew/master/Library/Contributions/install_homebrew.rb)"
brew update
brew install bash-completion
Then you’ll want to have RVM installed:
bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)
The following will ensure rvm
is always loaded. And add the following to the bottom of your .bashrc
:
[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # This loads RVM
Then source your ~/.bash_profile
source ~/.bash_profile
Be sure to run the following and follow any instructions:
rvm requirements
If you are running a version of rvm
less than 1.12
on Lion/Mountain Lion, you will need to install the osx gcc installer due to a bug in rvm
itself. It should be fixed in 1.12
.
Then install the desired rubies. I leave 1.9.2
as default, which is usually safe now:
rvm install 1.8.7
rvm install 1.9.2
rvm install 1.9.3
rvm install ree
rvm use --default 1.9.2
You can now install any gems you typically use. I would recommend leaving this to bundler
, and using a proper Gemfile
in all your projects, however small they may be. You can use rvm to manage gemsets if necessary. Please read the documentation on that.
I usually install the following brews - follow all their individual installation instructions! - at this point:
brew install bash-completion git subversion bazaar mercurial mysql mongodb redis elasticsearch ack python nodejs imagemagick
Sometimes subversion
installation freezes - haven’t investigated this yet - so you can either install it separately, skip it, or just rerun the command. I generally kill it if it’s been running for what seems to be 45 minutes.
I personally install gsl
, so I can use LSI
to generate related posts within Jekyll in conjunction with Ruby-GSL. Homebrew comes in handy.
brew install gsl
If you get issues doing gem install rb-gsl
, you probably want to install an older version of gsl
, version 1.14:
brew remove gsl
brew install https://raw.github.com/mxcl/homebrew/83ed49411f076e30ced04c2cbebb054b2645a431/Library/Formula/gsl.rb
If you are using nodejs, you’ll also want to install npm
:
curl http://npmjs.org/install.sh | sh
If you’ve installed python
using homebrew, I suggest doing the following so that installing python packages uses the right python:
# install pip
/usr/local/share/python/easy_install pip
# modify PATH in ~/.bashrc to have the following
export PATH="$(brew --prefix python)/bin:$PATH"
export PATH="/usr/local/share/python:$PATH"
Next comes the customization of PHP. I use PHP for most of my development - well, anything that has nothing to do with systems administration at least - so it’s very useful to have an up to date version with a few different extensions. I’ve recently begun managing Homebrew-PHP, so I have the process down pat - again, follow any instructions for each brew, like enabling the homebrew php
in Apache:
brew tap josegonzalez/homebrew-php
brew install php --with-mysql
brew install apc-php
brew install mongo-php
brew install redis-php
brew install xdebug-php
Configure IPv6
to be Link-local only
in Network -> Advanced
on all interfaces you use on a regular basis. This will prevent Apache from being confused about your IP address and potentially borking any Geolocation code. You can leave this enabled if your Geolocation code takes IPv6
into account.
Now I need to ensure I have all my ducks in a row, and I sync in my home directory scripts. My gitconfig, my ssh keys, all sorts of yummy stuff.
For the record, my ~/.bashrc
ends up looking a bit like this. Feel free to modify that at will. Note that it currently does not show branches/tags/bookmarks for bazaar
or mercurial
. Patches welcome :)
I no longer use Textmate religiously. I recommend using Sublime Text 2 with whatever your favorite setup is. Someday I shall post mine. I did run the following command to make it easier to call Sublime Text
from the terminal:
ln -s "/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl" $(brew --prefix)/bin/subl
For those still using Textmate, I recommend installing the Git-Bundle, and customizing the hotkeys. The CakePHP bundle is up next, as is the GitHub bundle. I use PeepOpen to find files in my projects - supports regular expression lookups - which is developed by the awesome guys at PeepCode.
I’ll then make sure all my projects are installed in their proper directories (under ~/Sites). Once that is through, I’ll install VirtualHostX, which I use to configure Apache VirtualHosts. At this point, once the default Apache setup is enabled in the Sharing
panel of System Preferences
, I have all my sites ready and rearing to go (assuming I’ve imported a backup of my virtualhosts).
Now I need all the browsers ever. Install the latest versions of Chrome, Firefox, Safari, Opera. Get iPhoney, which lets you test mobile sites on an iPhone-like browser. My Parallels vms get rsync’ed over, and I go through a very painful install of Parallels (gotta download their app from their panel). Test to ensure that all my vhosts are getting passed into my VMs, and then onto the next step.
Skype and Adium are a must for chatting. Everyone has a different Adium setup - just copy your old profile for that ;) - but for Skype I use version 2.8. Tweetie also deserves a mention here. The new Twitter for Mac is lame in that it follows me on every single workspace, but they may have fixed that since I last checked.
I also install TotalFinder and Visor. TotalFinder is like Finder but more boss, with tabs and everything. If you’ve ever played Quake, you’ll know what Visor is. Drop-down terminal. Makes life easy.
I’ll also install Dropbox for the 5 times I use it ever, as well as CloudApp. CloudApp makes file-sharing easy, and I use it on a regular database to share screenshots with other developers.
I install Pixelmator for quick and dirty image-editing, and Photoshop for things that my boss needs to be pixel-perfect. If Pixelmator could fully support Photoshop images, that would be sweet, but I guess we can’t have everything. iShowU HD is good for screencasting, and I’ll also install Silverback for recording user interaction with a site/screencasting.
For Git tooling, I’ll install Git Tower, which is sort of like Versions is for SVN. I’ll also install GitX - use Brotherbard’s branch from github - and GitNub, which provide some of the Git Tower features, but with a less-polished UI. Definitely an alternative for those not wishing to spend money. Kaleidoscope also works well for file diffing. I haven’t checked out alternatives in that space, but there should be something roughly equivalent for free.
I typically need access to productivity software, so I grab my copies of iWorks and Office for Mac.
As far as utilities, I use Transmit for FTP, Speed Download for downloading many files at once, UnRarX for rar files, Split&Concat for concatenating large files I’ve downloaded off the internet (typically zips of large binary image files spanning several hundred megabytes), uTorrent so I can quickly get ISOs of Linux distributions - Vagrant is a nice tool I’m playing around with - and Sequel Pro for interacting with MySQL databases. Omnigraffle Professional deserves a mention, simply for the 7 or 8 times a month I use it when creating a schema for something I’d like feedback on.
What are you using?