Mac Setup for Developers: Settings Worth Changing
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
- 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.
- Check your shell. macOS uses zsh. Run
echo $SHELL. If you carried a bash.bash_profileacross 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.
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