MainspringGuides › Developer setup
macOS Guide

Mac Setup for Developers: Settings Worth Changing

Updated August 2026 · 3 min read

A Mac out of the box is set up for someone who does not spend all day in a text editor and a terminal. Six settings change that, and none of them involve installing anything. Here is the list I would apply to a new machine before installing a single tool.

Key repeat and press-and-hold

These two together are the biggest single change for anyone who edits text with the keyboard. Holding a key on a stock Mac either shows an accent picker or repeats slowly.

# fast repeat, short initial delay
defaults write NSGlobalDomain KeyRepeat -int 2
defaults write NSGlobalDomain InitialKeyRepeat -int 15

# held keys repeat instead of offering accented characters
defaults write NSGlobalDomain ApplePressAndHoldEnabled -bool false

# undo all three
defaults delete NSGlobalDomain KeyRepeat
defaults delete NSGlobalDomain InitialKeyRepeat
defaults delete NSGlobalDomain ApplePressAndHoldEnabled

Log out and back in. If you use Vim keybindings anywhere, press-and-hold is the setting that has been quietly fighting you.

Stop Finder hiding what you work with

# dotfiles visible in Finder
defaults write com.apple.finder AppleShowAllFiles -bool true

# real extensions on every file
defaults write NSGlobalDomain AppleShowAllExtensions -bool true

# full path in the Finder window title
defaults write com.apple.finder _FXShowPosixPathInTitle -bool true

killall Finder

Command-Shift-Period toggles hidden files without any of this, which is handy when you only need them for a moment. The ~/Library folder is separately hidden: reach it with Go → Go to Folder (Command-Shift-G) and type ~/Library, or unhide it permanently with chflags nohidden ~/Library.

Stop macOS littering other people's drives

Every folder your Mac browses gets a .DS_Store file. On a network share or a USB stick handed to a colleague, that is noise in their repository and their file listings.

# no .DS_Store on network volumes or USB drives
defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool true
defaults write com.apple.desktopservices DSDontWriteUSBStores -bool true

# undo
defaults delete com.apple.desktopservices DSDontWriteNetworkStores
defaults delete com.apple.desktopservices DSDontWriteUSBStores

Log out and back in for these to take effect. Add .DS_Store to your global gitignore while you are at it: git config --global core.excludesfile ~/.gitignore_global.

Dialogs that do not waste your time

# save and print panels open expanded
defaults write NSGlobalDomain NSNavPanelExpandedStateForSaveMode -bool true
defaults write NSGlobalDomain PMPrintingExpandedStateForPrint -bool true

# near-instant window resizing
defaults write NSGlobalDomain NSWindowResizeTime -float 0.001

# no warning when changing a file extension
defaults write com.apple.finder FXEnableExtensionChangeWarning -bool false && killall Finder

The collapsed save panel is a small thing that costs one extra click several times a day. The extension warning is the same, and it exists to protect people who do not know what an extension is.

Terminal, and the two things worth doing there

  1. Add a "New Terminal at Folder" service. It exists already: System Settings → Keyboard → Keyboard Shortcuts → Services → Files and Folders, tick New Terminal at Folder. Right-click any folder in Finder and open a shell there.
  2. Check your shell. macOS uses zsh. Run echo $SHELL. If you carried a bash .bash_profile across from an older Mac, that is why your aliases vanished.

Two more that repay themselves: Command-Shift-. works in open and save dialogs as well as Finder, and Command-Shift-G takes a typed path anywhere a file dialog appears, so you never have to click through to /usr/local again.

Homebrew, and installing the rest

Most development setups start with the command line tools and a package manager. The Xcode command line tools come first, and they carry git, clang and the headers most things build against:

# installs git, clang and the standard toolchain
xcode-select --install

# confirm what you have
git --version
xcode-select -p

On Apple silicon, Homebrew installs to /opt/homebrew rather than /usr/local, which is the reason a PATH copied from an Intel Mac silently fails. Check with echo $PATH and make sure /opt/homebrew/bin is in it before you start debugging anything more exotic.

What not to bother with

Disabling Spotlight indexing to "speed things up" costs you the fastest launcher on the machine and saves nothing measurable on modern hardware. Excluding specific folders — build directories, node_modules, VM images — is the version worth doing, in System Settings → Spotlight → Search Privacy.

The developer set in one click

Mainspring ships a Developer Setup recipe covering hidden files, extensions, key repeat, press-and-hold, expanded save panels and .DS_Store behaviour, all reversible individually.

Try Mainspring free →

Signed & notarized by Apple · 1-day free trial · $29 once