I just bought my first ever personal Mac, and I thought it was a good opportunity to document my process of setting it up, and all the things I install!
I expected to focus on the things that were difficult to install and that gave me issues throughout the process, but I can happily say that I didn't run into any issues while getting everything set up! So, here's what I did and why!
Chrome
I use Chrome pretty exclusively, and I have for a while. It's developer tools are great. I struggle on Safari, so this is the first thing I got set up! I just downloaded it through Safari. I synced my settings and favorites by signing into my G-Mail account.
Spectacle
Spectacle is a window management tool so that you can use keyboard shortcuts to move around windows on your monitor. I have been using this for awhile, and I'm completely dependent on it -- I really struggle to navigate computers without it to be honest! This one was important! I also downloaded this one through the browser, I wanted it set up before I did anything else.
Homebrew
Homebrew is a package manager you to install stuff really easily on MacOS. I honestly couldn't imagine getting anything installed without it at this point.
Here's the command to install it:
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Languages
The three languages I normally write code with on my personal computer are Python, Ruby, and JavaScript.
Ruby
I use rbenv
for setting up Ruby environments. It allows you to easily switch between versions, and set them for different projects. I set my global Ruby version to 2.5.1
which is the version dev.to
uses!
$ brew install rbenv
I then added eval "$(rbenv init -)"
to my .zshrc (which would be your Bash Profile if you don't use Zsh). This just loads rbenv automatically whenever I open up my terminal.
$ rbenv install 2.5.1
$ rbenv global 2.5.1
Python
Python was my first programming language, and it is still the one I have the most professional experience with. There are a lot of ways to get Python installed, but I personally prefer installing it without Anaconda. I find that I have fewer installation issues down the road. It also automatically installs pip (the Python package manager) so I don't have to worry about setting that up down the road.
I also installed IPython right away since I use that pretty much every day for testing pieces of code.
$ brew install python3
$ pip3 install ipython
Node
The third language to set up is Node. This one is usually not too bad, I haven't had too many Node installation issues in the past.
$ brew install node
Developer Tools
Visual Studio Code
I've been using Visual Studio Code as my text editor for a while, and I obsessed with it. I have a full post on my setup.
I use brew
to install it, though for applications you want a desktop icon for, you add cask
on, and it will do that for you!
$ brew cask install visual-studio-code
Git
Git is pretty important; it's definitely a must install! I again installed it through HomeBrew.
$ brew install git
I also set up a global .gitignore so that certain files are always excluded from version control.
Then, I set it up so that I use Visual Studio Code instead of Vim for Git.
$ git config --global core.editor 'code --wait'
I also set up my GitHub SSH keys so that I don't have to type in my password all the time.
Fira Code
I use the Fira Code font for both my terminal and VS Code. I love the ligatures and how it looks!
$ brew tap caskroom/fonts
$ brew cask install font-fira-code
Sketch
I use Sketch for all of my design work -- here's a little bit more about my work flow.
$ brew cask install sketch
Zsh + ITerm2
I use Zsh with ITerm2 for my terminal setup. You can read all about that here! I installed ITerm2 with Homebrew. Zsh comes installed on Macs, though I used oh-my-zsh to finish the setup process.
$ brew cask install iterm2
$ sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
Other Stuff
Fantastical
I also installed Fantastical2. It is an improved Google Calendar that allows you to sign in with multiple accounts and view all of your calendars as once. For me, this is critical since I have work, blog, and personal calendars. I accidentally double booked myself once by looking at the wrong calendar, so I'm very careful about checking all of them now!
Slack
Even though Slack is mostly for work, I also have a couple organizations that are social, so I have those on my personal computer as well. They are mostly the ones for meetups in my area. I again used Homebrew to install it.
$ brew cask install slack
Desktop Background
I use Design Love Fest for all of my desktop backgrounds. They are so pretty, and they post a set of them each week, so there's always a new one for me to use. I'm using this one for my new computer.
Conclusion
This whole set up took very little time and went super smoothly. I've had a lot of installation issues in the past, so I was super surprised, to be honest! Feel free to tweet me your favorite apps that I should install!
Discussion (74)
Nice article.
I strongly suggest not using
brew
for Node. I used to usenvm
and thenn
but both had major load time issues with terminal opening up time. Happy with asdf so far.Oh cool -- will look into that. Thanks!
Thank you for your post! As elementary as it seems, where do you access the terminal to install things on a Mac? I also just ordered one myself after only using PC's my whole life. I've read a few of your posts since recently joining Dev.to and they are delightful : )
Hi Brittany, as all the best mensplainers forged by millennia of patriarchy, I insert myself to... give you an explanation Ali could have perfectly given herself:
you can open the default Terminal by going to Applications -> Utilities and in there you'll find the Terminal app.
My preference though is towards iTerm2 which is a better terminal.
This is a rundown that might help to install iTerm or other apps that are not packaged with brew: howtogeek.com/177619/how-to-instal...
Welcome to the Mac world. I'm sure you'll get used to it!
Literal LOL and well played, sir 😁
:-D
haha thanks for answering faster than me! Great explanation!
Haha thank you rhymes! Awesome explanation. I also use spotlight search which you can get to with cmd + space. Then you can type in terminal in order to get to it.
cmd + space is how I launch everything pretty much. And I only started using it this year, though I've used OS X since launch. Love it.
We seem to have pretty similar preferences/a similar setup. :-) Some notes and comments:
I have a Brewfile for Homebrew in my dot files repository. Makes it easier to get all the packages I want back. It also works with Casks, so you can make Homebrew the first thing to install and then take it from there :-)
I use SizeUp instead of Spectacle because old habits die hard (been using it since 2010 or so). I really should look at some of the newer alternatives.
Version managers: Anaconda as Python distribution (I'm gonna install those ML packages anyway, so might as well have them from the beginning) and n for Node version management. rbenv is my Ruby favorite too. Lately I've been considering unifying everything with asdf, but haven't taken the plunge yet.
The ZSH that comes with macOS isn't always the newest, so I generally install that via Homebrew too.
Wasn't aware of Brewfile. Thanks for sharing Michael! I have a script that sets up my Mac and had an array of brew apps that I install, gist.github.com/nickytonline/729fc.... When I get a chance, I'll update it.
You ain't missing anything by using SizeUp instead of Spectacle. Spectacle is just a free version of Sizeup with less customization options. Also, Spectacle hasn't been updated for almost 2 years and those Mojave issues are starting to pile up.
I tried to replace Spectacle with Veeer it's newer, shinier, and also free; but lacks features like moving windows between screens.
Spectacle it's awesome and Free. That's why I think it's most installed than SizeUp.
I also use SizeUp, and honestly I have no reason to change. It works for what I need it for, and I bought it (kind of a long time ago) so I don't get the license pop-up that the free version has.
Same here, I must have bought it in 2010 or 2011. But the one piece of software I really wouldn't wanna miss on my Mac is Alfred. I think I bought it 3 times by now (they offer a lifetime license, but I just buy the power pack for every new major release to support them).
Great post. This week was my first time actually using the terminal to install things on my mac
Have you ever looked into automating this?
I've built a .NET Core global tool which allows me to install all of the software that I need on a new computer. Once I've installed the .NET Core runtime, I can issue a single command and everything will be installed and set up for me.
The same thing can be done using shell scripts, obviously, but I'm a bit of a .NET Core maniac.
The whole set up took around 20 minutes, so I think it might not be time efficient. I did think about writing a shell script, and I may do that. My one issue is that I have switched between Windows/Mac/Linux relatively frequently in my career so I'm not sure if it would be worth writing one.
Definitely a cool idea!
I can't argue with automation but is it worth it in this case though?
I have had 3 Macs in 12 years (the last one is at 5/6 years and counting) and I just had to plugin the Time Machine backup disk to have everything ready in a couple of hours from scratch.
That's a good point for Macs (which also extends to Linux boxes), but for those of us who have to support Windows boxes it's useful to be able to nuke and restore a machine as quickly as possible (without having to use a custom system image).
I like .Net Core a lot. Can I see this script?
It's currently closed source. But essentially it:
I'll see whether I can produce a limited, open source version over the weekend.
You can use homebrew to install Chrome and even MS Office if u ever need it...
The charm comes
brew tap homebrew/bundle
thenbrew bundle dump --global
which will store your configuration to easily repurpose a new machine in case of a wipe
Credit from twitter.com/zbeekman/status/104943...
Intersting to see that most of the things were installed via brew. I didn’t know we could use brew for slack or VS Code
github.com/Homebrew/homebrew-cask
"A CLI workflow for the administration of macOS applications distributed as binaries"
Okay. I had seen the word ‘cask’ but didn’t know it was for GUI programs. Thank you!
Here are my 2 cents:
Happy coding!
Let me reiterate that. When I said
Terminal
I said the shell environment that gets loaded via your Terminal app.I use Zsh, so if you do as well then you can put this at the top of your
.zshrc
fileand this at the very bottom of the same file.
Now when you reload your shell — Zsh will profile it's startup time.
And you'll end up on issues with hundreds of other developers talking about how slow
nvm
is and all the suggested solutions are just super hacky.github.com/creationix/nvm/issues/1277
github.com/creationix/nvm/issues/782
So, it's not about the OS, it's
nvm
.Peace! ✌️
I experimented with this a couple months back while I was doing a fresh install.
nvm will slow down zsh if you're using the nvm plugin, this is unfortunately true. . So will many other plugins if you let them run; you can bog down your shell real fast with plugins. You can also choose to still use nvm and drop zsh plugin support by modifying your
.zshrc
. Disabling the plugin will require you to manually set your node version upon changing directories though. So you will have to choose which convince you prefer. I still recommend using nvm though.Great set up. Looks like am definitely going to be taking home with me your exact setup because I develop with python, JavaScript and currently planning to add Ruby to my stack as a hobbyist. Thanks for sharing
for sure! Awesome!
I am recommending against using
nvm
as your terminal startup time becomes 4sec slower with that.Two (and a half?) of my favorites:
BetterSnapTool from the Mac App store lets you drag a window to the {top,sides,corners} of the screen and makes the window resize into {full, half, quarter} size at that position.
CMD- opens the Spotlight tool so you can find anything (or do quick calculations or conversions) without having to mouse to the upper right corner (and in my case risk triggering the Hot Corners action of sleeping the display and locking the computer).
Enjoy your Mac!
I didn't know about
code --wait
(orcode-insiders --wait
). Thanks for that! I thought it's not possible to edit git messages in VSCode at all.Awesome post! This is a really under-served part of the process.
Have your dotfiles in a repository, use homebrew-bundle, restore other stuff from time machine/cloud. My APFS partition died a few weeks back and it probably took me longer to acknowledge that there's no way around a re-install than the actual process took ;-)
Thanks for alerting to the existence of Fantastical.
I just installed it via HomeBrew
Fantastical
I don't have any experience with a Mac, so forgive me if I say something stupid.
You forgot virtualenv and virtualenvwrapper for python to isolate package management for different projects. Installing everything in the global site packages will be annoying when you have two projects with the same dependencies differing in the versions they use.
Virtualenvwrapper allows you to setup a folder containing all your virtual environments including making it easy to manage them.
That's built into Python3 now!
Then I have installed those packages for no reason for way too long! XD
Depending on how much you use Git, you may want to incorporate one of the many available git-prompts to make your shell's prompt git savvy.
Also, if you like using a git GUI front-end, I've been liking Cycligent Git Tool (currently at v0.5.2).
I don't use VSCode. Perhaps it already has a pleasant Git front-end either built in, or as an extension / addon.
On Mac, I do use Visual Studio (formerly known as Xamarin). Works great for F# development.
JetBrains PyCharm Community Edition IDE for Python is super sweet. I highly recommend.
Node isn't a language.
I don't think it is useful to be pedantic. I think you know what Ali meant.
I think if you're going to write a technical post with the intent of educating people, precision and specificity are important.
I know exactly what Ali means in the article, but people who this content is new to will not, and that's what's important.
Fair point.
Okay, runtime then. Just a little easier to group it that way.
gfycat.com/gifs/detail/UnnaturalYe...
Nice article. Welcome! Once you go Mac, you never go back. :)
Hehe the question is, you never go back because it's awesome... Or because they designed the ecosystem to make it as painful to leave as possible? Just being cheeky..
Spectacle it's amazing. But I reconfigured some keyboard combinations to avoid conflicts with VS Code.
I highly recommend install this apps through brew: Keka, AppCleaner, Cryptomator, CheatSheet and Karabiner.
Take a look into my post about, maybe you can find something helpful:
Setup MacOS for Development
Camilo Martinez
Thanks for the post!
I would highly recommend you using NVM and RVM to manage different versions of Node and Ruby. Postman (getpostman.com/) is always on the top of my list as well.
Hi.
You should:
Apart from that, great article.
I do! It's just built into python3 now, so no need to install it separately. I should use time machine though, thanks
Use this too a clipboard history manager
pasteapp.me/
Since you are familiar with
rbenv
I can recommend alsopyenv
which is a fork of it. Doesn't really need more introduction. 🔥Simple Python version management
Simple Python Version Management: pyenv
pyenv lets you easily switch between multiple versions of Python. It's simple, unobtrusive, and follows the UNIX tradition of single-purpose tools that do one thing well.
This project was forked from rbenv and ruby-build, and modified for Python.
pyenv does...
In contrast with pythonbrew and pythonz, pyenv does not...
$PATH
.Oh interesting! I always use virtual environments for my projects, which kind of takes care of this for me. Thank you for sharing!
Wow, you write a lot. We have many tools in common hackernoon.com/20-recommended-util...
Really like these post to see what other people are using.
I recently set up a new macbook for work, pretty much did exactly as you! Great article.
Hey, Ali. Nice write up. Thanks for putting it together.
You have a typo/missing word on the first sentence for Homebrew :)
Media player
iina.io
Emails
sparkmailapp.com
Code notes and snippets
boostnote.io
Break time reminder app
hovancik.net/stretchly
we have the exactly the same setup... but recently i switch from fira code to monaco..