How I setup Mac OS (for development)
1 August 26
12 minute read
Mac OS
First things first, I would adjust some of the Mac OS settings to what I am used to as the current defaults seem to have changed over time.
- Desktop & Dock
- Turn off Show suggested and recent apps in Dock
- Trackpad
- Enable Tap to click
- App Exposé - Swipe Down with Three Fingers
- Sound
- Play feedback when volume is changed
Finder -> View
- Show Path Bar
- Show Status Bar
Then I like to keep the dock as clean as possible and basically remove every app from it except a few important ones like Finder and a browser. I also keep the the Downloads folder and pin the Applications folder in the dock.
Browsers
Next I use Safari to do what it’s designed for, to download another browser. These days there’s so many browsers but I still keep it simple and just use Brave and Firefox as I don’t really need any fancy features and AI addons.
However, I do have a few essential extensions that I will always install. Bitwarden for password management; uBlock Origin as the web is pretty much unusable without it these days.
Shell
Before doing anything on the command line, you should definitely install Homebrew first, which will simplify installing any future CLI tools.
Then I use Homebrew to install the Fish shell, as it comes out of the box with great features like autosuggestions and syntax highlighting. I also use the Fisher plugin manager to install the git plugin which adds super helpful aliases for quicker git operations.
Next, instead of using the default Mac OS Terminal app, I chose to use iTerm2 which is much more fully-featured terminal emulator. The killer feature to me is the drop-down window mode, which allows you to assign a hotkey to open a terminal window. Also another key adjustment is the option key mode which I set to Esc+, which allows terminal meta key shortcuts like Option+B to work. See my full config here.
I used to like to customise the prompts with things like Powerlevel, oh-my-zsh or Starship but recently I prefer to keep it simple. I find that the fish shell is already great out of the box and already comes with useful information e.g. git or virtual env information so I don’t really anything else special.
Next, some must have terminal utilities are asdf which manages multiple installations of runtimes from from NodeJS to Python to Go. If you have come across projects with a .tool-versions file, that is where asdf comes in as it will automatically work to use the correct version of the runtime, which is super useful for development workflows.
Another super useful tool is zoxide which is a smarter cd replacement which helps with navigating across your most used directories.
Editor
For editors, I kinda keep it basic by just using VS Code. Yeah it might be a little bloated with Electron, and they might be leaning to much into agents and copilots but for the most part its still a good editor that’s easy to use. The things that are keeping me on it is really just that I am used to the shortcuts and workflows, as well as the sheer number of extensisons that is supported. Some of my essentials are the Vim plugin, GitLens and all the langugae servers of the languages that you work in.
For Mac specifically, one of the settings that should be tweaked is to disable Press and hold keys to allow key repeating when holding down a key. This can be done using defaults write com.microsoft.VSCode ApplePressAndHoldEnabled -bool false. Another key related config is "terminal.integrated.macOptionIsMeta": true, which disables special characters from being output when Option key is held down and allows for them to be used for terminal shortcuts. Then, it’s also nice to use the built-in “Install code command in PATH” feature to access VS code from the CLI. I also set "window.confirmBeforeClose": "always" as one of the first things.
In the future, I am looking to try to explore setting up things like Neovim, but for now, continuing with the Mac setup.
Utilties
Though I talk about utilities only now, it’s actually one of the first things I set up as it affects everyday usage.
The first is Karabiner-Elements, which is a super powerful keyboard customiser for Mac. You can basically set it up to do anything you desire, but for me I use it to enable Vim-like arrows keys when using Caps-lock as a modifier. I also have some custom shortcuts with Command+[number] to call function keys as I am used to keyboards without a function row. You can also check out the config here.
The next is also Maccy which is a clipboard manager that keeps your clipboard history. This should honestly be a native Mac OS feature as there’s so many times when you need a few things in the clipboard and this app is pretty much necessary.
This is what I can think of so far and should be good enough to get started with development. The key takeaway should be that your setup is personal and this should only serve as a guide. Regarding automating setup with scripts, I am also not a fan of that as things are always changing and scripts can become flaky. Futuremore, like to know exactly what I am installing and changing, and everytime I setup a new Mac there’s always small tweaks and changes like choosing a different colour scheme etc.
Hope you had a good read and have fun setting up your environment to just the way you like it!