The definitive guide to setting up a new mac for development

Whether you bought a new mac, got one at your new job, or just doing a fresh set-up with the newly released OSX version, it can be a pain!

The last time I had to do it, I’ve decided to write down the links, steps and tricks, so I can easily set up the next one. And I’ve decided to share those.

I hope these will come useful to any mac user that comes across and wants to setup his new mac with ease.

Developer tools:

Prepare

In OSX mavericks, you need to accept Xcode’s terms and conditions in order to use some stuff in the terminal. Open terminal and run¬†
xcode-select--install¬†

Previously this required downloading xcode, which took forever, but now you can only install the needed GCC components super fast. This little thing makes setting up a new development mac a breeze.

Dropbox ¬†

Dropbox is the first app I install on a new mac for a couple of reasons. Firstly, because I use dropbox to sync preferences between all my machines,¬†for instance, iTerm2, AlfredApp, BetterTouchTool and others. Secondly¬†because it syncs in the background, so when I’m done setting up I have a synced dropbox.

Installing dropbox is super simple, just run this line in terminal app¬†

Alfred is amazing as a productivity tool (as seen here) and can be also used to speed up setting up a new mac.After setting up a couple of macs manually, I’ve created an Alfred workflow to let you browse and install apps super easy (download link) , just type¬†
install chrome¬†to install google chrome

You can judge a man by his friends, and you can judge a developer by his terminal setup. Whether you use tmux or zsh, you need a good terminal program. and iTerm is the best of them.

iTerm lets you sync your preferences via any folder, and like previously mentioned, I do this in Dropbox, so synced settings FTW.

In addition to iTerms settings which cover the transparency, size and other great features, there are of course the settings of your terminal as well. Those are covered by .dotfiles (see below)

Dotfiles

Dotfiles collections include a LOT of default settings, shortcuts, configurations and otherwise that will make you a pro shell user.There’s a great writeup on then here¬†and github has even a special page for dotfiles¬†While those are great, I suggest you fork the repo of Mathias Byens, and tweak it to make it your own. As an added bonus, his repo includes the .osx scripts, which have TONS of sensible defaults for your mac, like speeding up animations, show file extensions by default and a LOT more.¬†

* word of advice, go over the settings in .osx before you run it, and comment out whatever settings you don’t want there. For instance he turns the name of his mac to “mathbook pro”

Install Homebrew

Homebrew is a MUST for every developer with a mac. Homebrew is a package manager that makes installing and compiling stuff super easy.¬†

Installing homebrew in OSX mavericks is easy, using the built in ruby

1

ruby-e"$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"

Afterwards it’s important to run brew doctor, as this will let you know if there are any more steps you need to take in order to fully support homebrew

1

brew doctor

¬†After installing homebrew you need to add it’s location to $PATH. There’s a good explanation on this here

If you don’t know what $PATH means, it’s the folders in which mac searches for binaries of stuff like git, ruby, python etc’¬†

Programming packages

This is a list of programming languages I set up with a new mac. You can edit to the ones you need to use.¬†

brew install python¬†

brew install ruby¬†

brew install node¬†

brew install mongo¬†

brew install git¬†¬†– git should be already installed with GCC in Mavericks, but in case it doesn’t work, it can be installed with homebrew as well.

IDE – PyCharm/WebStorm/Etc’

Obviously if you are a developer, you have your preferred IDE and you will fight to prove that it’s best. I would expect nothing less from you!

I’ve been working with JetBrains software for a while now, and currently am working with PyCharm [link]¬†

The most important setup step after downloading any JetBrains IDE is the IntelliJ Configuration Server Plugin. This plugin servers the purpose of saving and syncing ALL your IDE settings, including themes, key bindings, snippets and everything else.

This can be a HUGE pain to setup from scratch and you will thank this plugin the next time you setup a new machine with a fresh IDE. Worth noting that this plugin works across most of JetBrains IDEs as well. So you can migrate from say Pycharm to Webstorm with ease.

There are a lot of folks who will curse me for this, but I use both PyCharm and Sublime text. While PyCharm is super feature rich, and is a full blown IDE, SublimeText is super quick and easy to use.It has a LOT of plugins and packages! ¬†

First thing to install is the package manager¬†and afterwards you can install anything from new syntax highlights, to git support to everything else SublimeText has to offer

I still haven’t found a better tool to manage my virtual hosts like MAMP pro. Yeah it costs money, but creating a quick local domain like http://mysite.dev is super easy. And it can even work with django sites using mod_wsgi

Dash is a newcomer in this list, it just recently became awesome. It’s a collection of documentations for pretty much every programming language out there. And with the Alfred plugin, searching documentation was never faster. Additional bonus, it’s all offline, so you are speeding up the search for documentation.

Password manager – [no link]

If you don’t use a password manager, you should. Especially if you’re a developer. All those SASS sites you are using, should all have different, preferably super secure passwords that you can’t even remember!

I making a slow transition to PasswordBox [link] after 1Password, and quite happy about it.

Graphics software

I’m a web developer so for me graphic software is a must. Since we switched from Photoshop to SketchApp [link] my life became so much easier! I recommend every designer at least gives this little app a go.

Misc :

This will cover apps that aren’t necessarily¬†for development, but are important as well on any new mac.

This is a mega important app, as it lets you define different settings for your man.

My recommended settings are :

“FN+letter to Ctrl+letter” – this maps the FN button to be CTRL when you use it with a number. This is super handy when you use the laptop keyboard a lot and are used to the bottom most right key to be CTRL!

“Use PC style Home/End #2″ – This simple setting brings back Home and End buttons on external keyboards and brings back your sanity as a developer on a mac!

Maybe the best and most feature rich App to control and customize your trackpad, magic mouse, regular mouse, leapmotion and keyboard.¬†You can define gestures, custom keys, and a lot more! There is a nice writeup on it here

To sum up, while setting up a new mac is fun, it’s sometimes is a time consuming process. I hope this little write up will come in handy to every mac developer that comes across this blog post.

P.S. – If you have comments, want more Mac Dev tips and tricks, be sure to join my Facebook group – Devs with Macs¬†

Thanks for the write up. Glad to see that the huge XCode download is no longer strictly required. I will note that I use a lot of the same tools (Alfred, Dropbox, updated python from homebrew), but I use Boxen to install all of that stuff. I’d recommend it as it is a true no (well, one, you have to accept the xcode license like you mention), touch install. Check it out at http://boxen.github.com/

Home and End has a system wide MacOS shortcuts as Ctrl-A and Ctrl-E. Emacs ftw.

http://thibaultcha.me/ Thibault Charbonnier

Nice trick about the GCC Components! However I would add a FTP client to this list, such as FileZilla or Transmit http://panic.com/transmit/, always useful someday. About the passwords thing, I use Dashlane since it can also contain secured notes (https://www.dashlane.com/fr if someone wants to have a look).

Thom

Shout out to oh-my-zsh!

whycantibeanon

I prefer the “texteditor + terminal + Makefile” way of developing, too, but XCode does come with useful tools. Also keep in mind that OS X’ XCode package actually contains not just Git but also CVS, SVN, Ruby, Python, PHP and Perl – not the latest versions, but you’re not entirely forced to set up homebrew in order to get these components.

altryne

Agree, but as you get into more development, homebrew saves you a LOT of time when you need to update those pre-installed packages

Damon Hill

I would add cyberduck for sftp and visualDiffer for source code comparison

Yes. You can actually just write the port number for which the server will be binding on (like 4000 for localhost:4000) into an empty file inside the .pow folder where the name of the file will be used for the hostname, then you can access the server with a customized hostname like http://name.dev assuming name is the name of the file you created.

Shay

If you love using the terminal, take a look at http://zx2c4.com/projects/password-store/ for creating/storing/retrieving all your passwords. Very powerful, integrates with git so you can sync across machines, built in password generator, copy to clipboard, etc.

Interesting VisualDiffer, I was using Changes, but it’s not updated since looong time ago.

http://leandroardissone.com/ Leandro A.

Do you people use a git client other than cli? I use cli and sometimes Gitbox, which is simple. But it’s not updated long time ago, and on Mavericks it’s not works pretty well.

Stephane

For GIT and Mercurial users, SourceTree provides an excellent GUI for these

altryne

So I can do this with hosts file and virtual-hosts in apache as well.
This is not straightforward.
MAMP-PRO is the only tool I know which has GUI for that, you just click + and add a domain and point it to a folder, and done

altryne

Hah! While this is cool for a LOT of ssh users, and dev ops guys. This being outside of the browser seems to miss the point for everyone else. It doesn’t have auto-fill, which is the single most used feature of any password manager i know

altryne

I actually barely use git as CLI, the embedded git UI inside the JetBrains IDE was for long their best feature. It’s MUCH more robust than gitbox, tower, or github.
Think about the use case that you can select a line of text and right click it, and see in which commits this specific line was changed!

pencilcheck

It’s as simple as it is for me, because you just need to create a file with the name you want the domain to be, then type the port it should listen to, then you are done.