My MacBook Pro Setup
Posted on Saturday December 21, 2024
My home MacBook Pro is an up-specced version from Mid-2017, the one with the absolutely atrocious early butterfly keyboard (thankfully mine has already been replaced under warranty once and is currently behaving itself). It has an Intel Core i7-7920HQ with a core of 3.1 GHz and a boost of 4.1 GHz, 16GB of DDR3 RAM, a 1TB SSD and an ATI Radeon Pro 560 with 4GB of GDDR5 RAM. It was a lot of money back in the day, something I justified with the contracting work I was carrying out at the time, and it's served me pretty well over the years. I'd never formatted the installation and had steadily upgraded it over the years from Mac OS X Sierra (10.12) all the way to MacOS Ventura, the latest version supported by the hardware. Over that time it had started to slow slightly, and despite it not being a Silicon chip I refused to believe it was past it in terms of performance, so during my paternity leave I formatted it and started again.
Use Cases
My laptop isn't used for much - a lot of the time it's the usual browsing the web, watching YouTube/streaming, bits of small photo editing and organising and general family stuff. In terms of project work, I don't have as much time as I used to have to do this (hence the small amount of articles posted to the blog lately) but when I do, obviously it's my go-to for this. Specifically, I tend to write in the following languages/technologies these days:
- Node.js
- Python
- Go
- Java
- PHP (I still like to keep up to date on my first language)
- Terraform
- Bash/Shell scripting
It's a bit of a variety which means I use containers for keeping things easily separated rather than creating a bunch of different difficult to maintain environments on the same machine.
Homebrew
The amount and number of random software installations I had in the past on my machine was completely out of hand - I had no idea what I'd installed or when, and most of them were done with random downloaded DMGs or scripts. I made a conscious choice to use a package manager to keep track of everything, including updates, from day one so that it made things simpler. The easiest choice was to use Homebrew with casks for proprietary software, alongside installing open-source tooling.
So far I've installed the following:
- Firefox (my browser of choice these days)
- Google Chrome (for testing)
- Podman Desktop (I've moved away from Docker Desktop)
- iTerm2
- Signal and WhatsApp for messaging
- Discord
- Obsidian
- Spotify
- Visual Studio Code
I'm trying to keep things as minimalist as possible. To keep everything up to date, once a week when I enter a terminal, I'll be prompted to run brew upgrade --greedy
to keep everything nice and fresh - I have check/automatically update turned off in every app so that I'm forced to maintain good habits.
Terminal
I use iTerm2 with a few customisations to make it slightly prettier and slightly more intuitive for my needs.
Starship and oh-my-zsh - I've been using zsh for a long time now, always with robbyrussell's oh-my-zsh, but have recently added Starship on top of this. I'm loving how it adapts the prompt automatically based on what I'm doing and how it keeps things simple - I've still not changed any configuration from the default.
Colours - I use the Material Dark Palenight theme - it's not too dark and it's something I can easily apply in VS Code and other tools using the same theme. The example I use is my Jonathan Speek and available on GitHub.
Font - I use Hack Nerd Font Mono as this is required for Starship.
Scripts and Aliases - I have a few custom aliases and functions within zsh that I use on a regular basis, specifically around git and docker/podman. I keep an up-to-date zshrc file in my toolbox repo that showcases these.
There are a few other changes made to iTerm2 to keep things nice and productive:
- Set the scrollback buffer to unlimited
- Don't prompt when quitting
I tend to keep the other settings relatively default as I'm not keen on spending ages setting things up if it's not going to make a noticeable difference to my day-to-day usage.
Environments
Since I use a few different languages, and since I don't want to keep spinning up docker containers to link into dev environments when I don't see a nice to over-complicate things, I'm a big fan of the version management tools for each language. Right now I'm using:
These fit in well with Starship and are easy to configure automatically within VS Code for each language in particular. This means I can keep a very thin environment within each checked out project, and only need to launch a terminal from that folder to get up and running.
Coding
The majority of my time is spent within VS Code, and I have this fairly well configured to do what I need to, using some of the following extensions mainly:
- Material Icon Theme
- Better Jinja
- Better PHPUnit
- Coverage Gutters
- Debugger for Java
- EditorConfig for VS Code
- GitHub Actions
- Go Template Support
- Markdown All in One
- Material Theme
- Peacock
- Test Explorer UI
- TODO Highlight
All of my extensions are synced to my account so I can login to my work or home machine and get the same experience.
I could do with thinning out my list slightly, but it's working well for me at the moment so I'm inclined to leave it alone. There's a lot more pushing of Copilot into VS Code these days, so it might be time to see if I can find and acclimate to a new code editor/IDE, but if I can't find a reason to pay for the JetBrains all products pack then I'll probably stay put for now.