The Mac setup guide I wish I’d had when I switched from Windows.
Windows converts, new Mac owners, and developers who suspect the defaults could be better.

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 just a guide to how I like to set up a MacBook, including a few choices that make switching between the two a bit less annoying.
I’ve split it into four parts:
- Part 1 covers the things I’d change on pretty much any MacBook.
- Part 2 covers the bits that feel strange if you’ve spent years on Windows.
- Part 3 is the stuff worth learning once you’re using the machine every day.
- Part 4 is the developer-specific setup.
The basics
These are settings/options I think everyone will find useful, but it is a matter of opinion, so decide as you want! 😄
Strip Spotlight back to apps only
Spotlight is OSX’s system-wide search and launcher, you access it by pressing +Space and you can just start typing. It’s the first shortcut worth learning.
By default, Spotlight searches across a lot of different sources, which can make the results a little noisy. Thankfully, you can customise exactly what it includes by doing the following:
- OpenSystem Settings
- Type“Spotlight” into settings search box
- ReviewResults from Apps & Results from System
What you want enabled is a matter of personal preference, but I’d suggest starting with as little as possible enabled, I only leave the following enabled:
- 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 here, I’d also turn off Show suggested and recent apps in Dock, otherwise it slowly fills up with things you opened once and probably don’t need there.
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 actually 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 also 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 all of them from:
- OpenFinder
- Click“Finder” in the menu bar
- ClickSettings
Start in Home folder
By default launching finder starts in the Recents folder, which I’ve never got any use out of. I find Home to be a better place to start from, to switch this do the following:
- ClickGeneral
- Set“New Finder windows show” to your home folder
Show filename extensions
This is more a matter of personal preference, but I prefer being able to see the file extension of files, lets you rename it easier.
- ClickAdvanced
- TickShow all filename extensions
Don’t mix folders/files in sorting
This stops folders being scattered in amongst your files. The “On Desktop” option underneath only affects desktop icons, take it or leave it.
- ClickAdvanced
- TickBoth options under “Keep folders on top”
Search current folder
It defaults to searching the entire Mac, which is almost never what you meant. If you’ve navigated to 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 options you don’t use here, including the iCloud entries if you don’t use them. Mine is basically Documents, Downloads, Pictures and Applications.
A four-item sidebar you can hit without reading is a nice time saver.
- ClickSidebar
- DisableAnything you never click
Show path & status bar
You get a breadcrumb trail along the bottom telling you where you actually are, and a count of what’s in the folder.
- 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:
++delete empties the Bin, it will ask first unless you tell it not to.
renames a file. It doesn’t open it. This one gets everybody.+opens the thing you’ve selected.+Delsends it to the Bin. There’s no Delete key that does it. 3++.shows and hides hidden files. 4
Taking a screenshot
There’s no Print Screen key, so you can either remember these shortcuts, or (like me) just use +space, type “screenshot” and press Enter.
++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 becomes an unreadable mess, and Thaw hides the ones you don’t need and brings them back on a hover or a keypress. Free and open source, which a lot of Mac utilities aren’t. This is the one to get.
The Unarchiver handles the archive formats macOS won’t. The built-in tool really only does zip properly, so the first time someone sends you a .rar or a .7z and nothing happens when you double-click it, this is the answer. Free, install it once, forget it exists.
If you’re coming from Windows
The Cmd key, and how to have Ctrl back if you’d rather
On a Mac, does what used to. Copy, paste, save, undo, all exactly the same, just one key further in. Ctrl still exists and does other things, so pressing it out of habit doesn’t break anything, it just quietly does nothing.
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 thumb and you resent being made to relearn it, you don’t have to. You can 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.
One thing to know before you do it. macOS stores this per keyboard, so if you later plug in a USB keyboard you’ll need to set it again for that one. Same panel, but use the dropdown at the top to pick which keyboard you’re configuring first.
Windows habit, not the Mac way. I do this because I’m on a Windows machine regularly and I’d rather not relearn the same shortcuts twice. If you’re only ever on a Mac, don’t bother, just learn
and it’ll be second nature in a week.
Getting more out of macOS
This is what I’d do 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 its own 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. No Alt+, no hunting the Dock, no resizing anything to fit next to anything else.
On the laptop I mostly use full-screen apps and rarely create extra desktops by hand. Plugged into monitors, I do the opposite because one app swallowing a whole display is usually a waste. This is where the MacBook is particularly good. My 14-inch screen effectively becomes three screens, and the setup still works when I unplug the monitors.
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. For windows within the same app, use +` (the backtick above Tab), so those three documents are one + entry and three presses of +`.
| 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, as does the F3 key 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 +. And 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 actually is.
This is what I use instead of Alt+, and it’s the thing I miss most when I’m back on Windows. You’re looking at the actual windows rather than a row of near-identical app icons, so three windows of the same application are three separate things you can pick between, instead of one entry you cycle through and hope.
The catch is that it only stays useful if you’re a bit disciplined about what’s open. Thirty windows and every one of them is a tiny unreadable rectangle. So I minimise anything I’m not actively working in and pull it back off the Dock when I want it again. That keeps the Mission Control view down to a handful of windows I can identify at a glance, which is the whole point of it.
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
This is the set I’d actually learn, because you use it constantly and Home and End don’t do what you 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 just moving. That’s the bit that makes it click. ++ selects the next word, ++ 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. Tools built for servers install and run locally, without a compatibility layer, a VM or a translation shim.
You’re not picking 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. There’s a shell, things you install turn up in it, and it works.
That’s a low bar. Windows still hasn’t cleared it, 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. 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 how you install software on a Mac. Not the App Store. One command instead of finding a website, downloading a .dmg, dragging an icon and then dealing with the update prompt six weeks later.
Two forms:
brew install htop # command line tools
brew install --cask slack # actual GUI applications
Casks are the part people miss. You can install real desktop apps this way, including everything in this post:
brew install thaw
brew install --cask ghostty
brew install --cask rectangle
brew install --cask the-unarchiver
And the bit I keep meaning to actually use:
brew bundle dump # writes a Brewfile listing everything you have
brew bundle install # installs all of it on a new machine
Full 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 answer. 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’d not want to 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.
I mainly want the prompt to show my current Git branch and whether the working tree is dirty. Then I know the state of a repo as soon as I cd into it.
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'
Put them 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.