
I started out developing on Windows, spent a while messing around with Linux, and eventually ended up on macOS. These days I do most of my development on a MacBook, although I still use Windows regularly for gaming.
This is how I like to set up a MacBook, including a few choices that make switching between the two a bit less annoying. It’s in four parts:
- The basics - things I’d change on pretty much any MacBook.
- If you’re coming from Windows - the bits that feel strange after years on Windows.
- Getting more out of macOS - worth learning once you’re using the machine every day.
- Development - the developer-specific setup.
The basics
These are the settings I think everyone will find useful. It’s all a matter of opinion though, so take what suits you. 😄
Strip Spotlight back to apps only
Spotlight is macOS’s system-wide search and app launcher. Press +Space and start typing. It’s the first shortcut worth learning.
By default, Spotlight searches a lot of different sources, which makes the results noisy. You can choose exactly what it includes:
- OpenSystem Settings
- Type“Spotlight” into settings search box
- ReviewResults from Apps & Results from System
What you leave on is up to you, but I’d start with as little as possible. I only leave these two on:
- Results from Apps: Calculator
- Results from System: Apps
You can switch a category back on if you find you miss it. I never have.
Hide the Dock
This is one of the things I always end up changing when I use someone else’s MacBook. 😆 It feels a bit strange for the first day, but you quickly get used to it and get a little more screen space back.
I rarely use the Dock to launch apps anyway, since +Space is much quicker.
- OpenSystem Settings
- ClickDesktop & Dock
- TickAutomatically hide and show the Dock
While you’re there, turn off “Show suggested and recent apps in Dock”, otherwise it slowly fills up with things you opened once. I’d also remove anything else from the Dock that you don’t use regularly.
Turn the scrollbars back on
macOS hides scrollbars until you start scrolling, so you often can’t tell whether there’s more content below without flicking the trackpad to find out. I find it properly irritating, and it’s one of the first things I change on a new machine.
- OpenSystem Settings
- ClickAppearance
- SetShow scroll bars to Always
The default is “Automatically based on mouse or trackpad”, which is why they seem to behave inconsistently: plug a mouse in and they turn up, unplug it and they don’t. Set it to Always and you can see how far down a page you are at a glance, and drag them about like a normal person.
Improvements to Finder
Finder is perfectly usable out of the box, but a few of its defaults make little sense. You can fix most of them from Finder’s settings:
- OpenFinder
- Click“Finder” in the menu bar
- ClickSettings
Start in your Home folder
A new Finder window opens on Recents by default, which I’ve never got any use out of. Home is a better place to start:
- ClickGeneral
- Set“New Finder windows show” to your home folder
Show filename extensions
This one’s more personal preference, but I like seeing every file’s extension, and it makes renaming files easier.
- ClickAdvanced
- TickShow all filename extensions
Keep folders on top
This stops folders being scattered in amongst your files. The “On Desktop” option underneath only affects desktop icons, so take it or leave it.
- ClickAdvanced
- TickBoth options under “Keep folders on top”
Search the current folder
Finder’s search box defaults to searching the entire Mac, which is almost never what you meant. If you’ve gone into a folder and then typed in the search box, that folder is what you’re looking in.
- ClickAdvanced
- Set“When performing a search” to “Search the Current Folder”
Customise the sidebar
Get rid of anything you don’t use, including the iCloud entries. Mine is basically Documents, Downloads, Pictures and Applications, and a four-item sidebar you can hit without reading saves a surprising amount of time.
- ClickSidebar
- DisableAnything you never click
Show the path and status bars
These add a breadcrumb trail along the bottom showing where you are, and a count of what’s in the folder. They live in a different menu to the rest:
- OpenFinder
- Click“View” in the menu bar
- ClickShow Path Bar & Show Status Bar
Working with files in Finder
A few things behave differently enough to catch you out on day one:
Taking a screenshot
There’s no Print Screen key, so you can either remember these shortcuts or (like me) press +Space, type “screenshot” and press .
++4gives you crosshairs to drag a box around whatever you want. The screenshot lands on your desktop.++5opens a small toolbar with all the options: whole screen, one window, a region, and screen recording if you need to capture a video.
If you only learn one, learn ++4.
Apps worth installing
Thaw cleans up your menu bar. Once you’ve got a few apps running, the row of icons along the top turns into an unreadable mess. Thaw hides the ones you don’t need and brings them back on a hover or a keypress. It’s free and open source, which a lot of Mac utilities aren’t, and it’s the one to get.
The Unarchiver handles the archive formats macOS won’t. The built-in tool only really does zip properly, so when someone sends you a .rar or a .7z and nothing happens on double-click, this is the fix. It’s free, and once it’s installed you can forget it exists.
If you’re coming from Windows
The Cmd key, and how to get Ctrl back
On a Mac, does what does on Windows. Copy, paste, save and undo all use the same letters, just with a different modifier key. Ctrl still exists and does other things, so pressing it out of habit won’t break anything. Usually nothing happens at all.
Most people adapt within a week and never think about it again. But if you’ve got twenty years of +C living in your left hand and you resent being made to relearn it, you don’t have to. Just swap the two keys over:
- OpenSystem Settings
- ClickKeyboard
- ClickKeyboard Shortcuts… > Modifier Keys
- Set
to, andto
Now +C copies exactly like it always did, and the whole machine feels a good deal more like a PC.
macOS stores the swap per keyboard, so if you later plug in a USB keyboard you’ll need to set it again for that one. It’s the same panel; pick the keyboard from the dropdown at the top first.
I only do this because I’m on a Windows machine regularly and I’d rather not learn the same shortcuts twice. If you’re only ever on a Mac, don’t bother: learn
and it’ll be second nature in a week.
Getting more out of macOS
This is what I’d learn next if you’re on the machine most of the day. Most of the useful bits are hidden until somebody tells you they exist.
Spaces: making one screen feel like three
Any app can go full screen with the green button top left, or ++F. When it does, it gets its own space, which behaves like a separate monitor. You slide between spaces by swiping left and right on the trackpad with three or four fingers depending on how yours is set (System Settings > Trackpad > More Gestures), or +/ from the keyboard.
On the laptop with nothing plugged in, I’ll typically have:
- a terminal full screen off to the left
- my main desktop in the middle, with Notion in an ordinary window
- Slack and email full screen off to the right
I move between them with a flick of the trackpad instead of Alt+ or hunting through the Dock, and nothing needs resizing to fit next to anything else.
On the laptop I mostly use full-screen apps and rarely create extra desktops by hand. It’s one of the things the MacBook does particularly well: my 14-inch screen effectively becomes three. Plugged into monitors I do the opposite, because one app swallowing a whole display is usually a waste. When I unplug them, I’m straight back to the laptop setup.
Apps, windows and Mission Control
+ cycles through open apps, much like Alt+ on Windows. The important difference is that it switches between apps, not windows. If you’ve got three Word documents open, that’s one entry in the list, not three. To move between windows of the same app, use +` (the backtick above Tab).
| Shortcut | What it does |
|---|---|
+ |
Cycle through open apps |
+` |
Cycle windows within the current app |
+W |
Close the window |
+Q |
Quit the app |
++T |
Reopen a closed tab or window in Chrome or Firefox |
+ |
Mission Control (so does F3 on most MacBooks, or a three- or four-finger swipe up) |
An app with no windows open is still running, which is why its Dock icon keeps a dot under it and why it’s still sat there in +. Shutting a browser window by accident is almost never the disaster it feels like, because ++T keeps stepping back if you press it again.
Mission Control shows every window across all your displays, laid out so you can see what each one is. It’s what I use instead of Alt+, and it’s the thing I miss most when I’m back on Windows. You see the windows themselves, so three windows of the same application are three separate things to pick from, where + gives you one icon to cycle through and hope.
The catch is that it only stays useful if you’re a bit disciplined about what’s open. With thirty windows open, every one of them is a tiny unreadable rectangle. So I minimise anything I’m not working in and pull it back off the Dock when I want it again, which keeps Mission Control down to a handful of windows I can identify at a glance.
You can also trigger Mission Control with a hot corner. I don’t. Once you move between the laptop and external monitors, the corners stop being where your hands expect them.
+works from anywhere.
Moving around text
Learn these early. You use them constantly, and Home and End don’t do what you’d expect.
| Shortcut | What it does |
|---|---|
+/ |
Start and end of the line |
+/ |
Top and bottom of the document |
+/ |
Jump a word at a time |
+Del |
Delete the previous whole word |
+Del |
Delete back to the start of the line |
Fn+Del |
Forward delete, the key Mac keyboards don’t have |
Hold with any of those and you select instead of moving: ++ selects the next word, and ++ selects back to the start of the line.
Apps worth installing
Rectangle snaps windows to halves, thirds and quarters with keyboard shortcuts. Recent macOS versions have some tiling built in, but Rectangle is faster and behaves more sensibly across multiple monitors. I use full screen for the apps I swipe between and Rectangle when I want an editor and terminal side by side.
Development
This is the part where the Mac stops being a nice laptop and starts being the reason people put up with the price.
It’s Unix underneath
macOS is a certified Unix, which means the gap between your laptop and the Linux box you deploy to is small. Most tools built for servers install and run natively. Docker is the exception: containers need Linux, so Docker on a Mac runs a small Linux VM in the background.
On Windows you pick between cmd, PowerShell, WSL, Git Bash and MSYS2, each with its own idea of what a path is and none of them quite agreeing with your editor. On a Mac there’s one shell, and what you install turns up in it. That’s a low bar that Windows still hasn’t cleared, and I don’t miss the hours I used to lose to working out which terminal I was in and why the path had backslashes in it.
It is Unix rather than Linux, so every so often you’ll hit a command that takes slightly different flags to the one on your server. sed -i is the classic: on Linux it’s sed -i 's/a/b/' file, but macOS expects a backup file extension after -i, so you need sed -i '' 's/a/b/' file, and each version fails on the other system. It’s a minor irritation and easily worked around, but worth knowing it’s a thing so you don’t lose an hour wondering why a script that works fine in CI doesn’t work here.
Homebrew
Homebrew is a package manager, like winget or Chocolatey on Windows, and it’s how I install pretty much everything on a Mac. I’d use it over the App Store. It’s one command, instead of finding a website, downloading a .dmg, dragging an icon and then dealing with the update prompt six weeks later.
There are two forms:
brew install htop # command line tools
brew install --cask slack # actual GUI applicationsCasks are the part people miss. You can install real desktop apps this way, including everything in this post:
brew install --cask thaw
brew install --cask ghostty
brew install --cask rectangle
brew install --cask the-unarchiverAnd the bit I keep meaning to use:
brew bundle dump # writes a Brewfile listing everything you have
brew bundle install # installs all of it on a new machineFull disclosure, I don’t commit a Brewfile, and I only worked out fairly recently that I should. A new laptop, or one you’ve broken badly enough to wipe, becomes one command and a cup of tea instead of a lost afternoon. Do as I say and not as I do on that one.
The terminal itself
Terminal.app is fine. If you drop in a few times a day to run something and get out again, don’t bother changing it.
If you’re in there most of the day, this is the one part of the Mac where I’d switch without thinking about it. I used
iTerm2 for years and it’s still a perfectly good choice. These days I use
Ghostty and I prefer it. It’s quick, the defaults are sensible, and I get proper split panes without configuring anything.
The feature I wouldn’t give up now is desktop notifications. A long build finishes, or Claude Code gets to the end of a job and wants an answer, and I’m told about it while I’m reading something else, instead of tabbing back every couple of minutes to check whether it’s still going.
The main thing I want from the prompt (the text before your cursor) is my current Git branch and whether there are uncommitted changes, so I know the state of a repo as soon as I cd into it. I use
Starship for that. It shows the branch, uncommitted and staged changes, and whether I’m ahead of or behind the remote, which saves typing git status all day.
brew install starship
# then add this line to ~/.zshrc
eval "$(starship init zsh)"Its icons need a Nerd Font, a font patched with extra symbols. Ghostty already ships with one, so there was nothing else to set up.
Aliases
If I type something several times a day, it gets an alias:
alias gs='git status'
alias gp='git pull'
alias ll='eza -la --git'll uses
eza, a modern ls that shows each file’s Git status (brew install eza). Put the aliases in ~/.zshrc and they’re there in every shell you open. I’ve got a few dozen now and I’d be slower without them. Keep .zshrc in your dotfiles and the aliases will follow you to the next machine.


