Files
provision/scripts/macos-defaults.sh

261 lines
10 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/../lib/common.sh"
# Only run on macOS
if ! is_macos; then
log_info "Skipping macOS defaults (not running on macOS)"
exit 0
fi
log_info "Configuring macOS defaults"
###############################################################################
# General UI/UX
###############################################################################
log_info "Configuring general UI/UX"
# Enable full keyboard access for all controls
defaults write NSGlobalDomain AppleKeyboardUIMode -int 3
# Expand save panel by default
defaults write NSGlobalDomain NSNavPanelExpandedStateForSaveMode -bool true
defaults write NSGlobalDomain NSNavPanelExpandedStateForSaveMode2 -bool true
# Disable the "Are you sure you want to open this application?" dialog
defaults write com.apple.LaunchServices LSQuarantine -bool false
###############################################################################
# Keyboard & Input
###############################################################################
log_info "Configuring keyboard and input"
# Set fast key repeat rate
defaults write NSGlobalDomain KeyRepeat -int 2
defaults write NSGlobalDomain InitialKeyRepeat -int 15
# Disable smart dashes (annoying when typing code)
defaults write NSGlobalDomain NSAutomaticDashSubstitutionEnabled -bool false
###############################################################################
# Trackpad
###############################################################################
log_info "Configuring trackpad"
# Enable tap to click
defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad Clicking -bool true
defaults write NSGlobalDomain com.apple.mouse.tapBehavior -int 1
# Disable Launchpad gesture
defaults write com.apple.dock showLaunchpadGestureEnabled -int 0
###############################################################################
# Screen & Security
###############################################################################
log_info "Configuring screen and security"
# Require password immediately after sleep or screen saver begins
defaults write com.apple.screensaver askForPassword -int 1
defaults write com.apple.screensaver askForPasswordDelay -int 0
# Screenshot settings
defaults write com.apple.screencapture location -string "$HOME/Desktop"
defaults write com.apple.screencapture type -string "png"
defaults write com.apple.screencapture disable-shadow -bool true
###############################################################################
# Dock
###############################################################################
log_info "Configuring Dock"
# Auto-hide Dock with no delay
defaults write com.apple.dock autohide -bool true
defaults write com.apple.dock autohide-delay -float 0
# Set Dock icon size
defaults write com.apple.dock tilesize -int 48
# Minimize windows into application icon
defaults write com.apple.dock minimize-to-application -bool true
# Don't show recent applications
defaults write com.apple.dock show-recents -bool false
# Set bottom right hot corner to start screen saver
defaults write com.apple.dock wvous-br-corner -int 5
defaults write com.apple.dock wvous-br-modifier -int 0
# Remove all default apps from Dock
defaults delete com.apple.dock persistent-apps 2>/dev/null || true
###############################################################################
# Finder
###############################################################################
log_info "Configuring Finder"
# Show hidden files
defaults write com.apple.finder AppleShowAllFiles -bool true
# Show path bar and status bar
defaults write com.apple.finder ShowPathbar -bool true
defaults write com.apple.finder ShowStatusBar -bool true
# Show all file extensions
defaults write NSGlobalDomain AppleShowAllExtensions -bool true
# Disable file extension change warning
defaults write com.apple.finder FXEnableExtensionChangeWarning -bool false
# Use column view by default
defaults write com.apple.finder FXPreferredViewStyle -string "clmv"
# Search current folder by default
defaults write com.apple.finder FXDefaultSearchScope -string "SCcf"
# Avoid creating .DS_Store files on network volumes
defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool true
# Automatically open new Finder window when a volume is mounted
defaults write com.apple.frameworks.diskimages auto-open-ro-root -bool true
defaults write com.apple.frameworks.diskimages auto-open-rw-root -bool true
defaults write com.apple.finder OpenWindowForNewRemovableDisk -bool true
# Expand File Info panes: General, Open with, Sharing & Permissions
defaults write com.apple.finder FXInfoPanesExpanded -dict \
General -bool true \
OpenWith -bool true \
Privileges -bool true
###############################################################################
# Menu Bar
###############################################################################
log_info "Configuring menu bar"
# Set clock format to 24-hour time
defaults write com.apple.menuextra.clock DateFormat -string "HH:mm"
###############################################################################
# Safari
###############################################################################
log_info "Configuring Safari"
# Privacy: don't send search queries to Apple
defaults write com.apple.Safari UniversalSearchEnabled -bool false
defaults write com.apple.Safari SuppressSearchSuggestions -bool true
# Show full URL in address bar
defaults write com.apple.Safari ShowFullURLInSmartSearchField -bool true
# Set home page to about:blank
defaults write com.apple.Safari HomePage -string "about:blank"
# Don't open safe files automatically after downloading
defaults write com.apple.Safari AutoOpenSafeDownloads -bool false
# Enable Developer and Debug menus
defaults write com.apple.Safari IncludeDevelopMenu -bool true
defaults write com.apple.Safari IncludeInternalDebugMenu -bool true
defaults write com.apple.Safari WebKitDeveloperExtrasEnabledPreferenceKey -bool true
defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2DeveloperExtrasEnabled -bool true
# Enable Web Inspector context menu item
defaults write NSGlobalDomain WebKitDeveloperExtras -bool true
###############################################################################
# Messages
###############################################################################
log_info "Configuring Messages"
# Disable smart quotes (annoying for code snippets)
defaults write com.apple.messageshelper.MessageController SOInputLineSettings -dict-add "automaticQuoteSubstitutionEnabled" -bool false
###############################################################################
# Photos
###############################################################################
log_info "Configuring Photos"
# Prevent Photos from opening automatically when devices are plugged in
defaults -currentHost write com.apple.ImageCapture disableHotPlug -bool true
###############################################################################
# Preview
###############################################################################
log_info "Configuring Preview"
# Don't restore windows on relaunch
defaults write com.apple.Preview NSQuitAlwaysKeepsWindows -bool false
###############################################################################
# TextEdit
###############################################################################
log_info "Configuring TextEdit"
# Use plain text mode for new documents
defaults write com.apple.TextEdit RichText -int 0
# Open and save files as UTF-8
defaults write com.apple.TextEdit PlainTextEncoding -int 4
defaults write com.apple.TextEdit PlainTextEncodingForWrite -int 4
###############################################################################
# Terminal
###############################################################################
log_info "Configuring Terminal"
# Only use UTF-8
defaults write com.apple.terminal StringEncodings -array 4
# Import and set Dracula theme
DRACULA_THEME="$SCRIPT_DIR/../config/Dracula.terminal"
if [ -f "$DRACULA_THEME" ]; then
open "$DRACULA_THEME"
sleep 1
defaults write com.apple.terminal "Default Window Settings" -string "Dracula"
defaults write com.apple.terminal "Startup Window Settings" -string "Dracula"
else
log_warn "Dracula theme not found, using default Pro theme"
defaults write com.apple.terminal "Default Window Settings" -string "Pro"
defaults write com.apple.terminal "Startup Window Settings" -string "Pro"
fi
###############################################################################
# Time Machine
###############################################################################
log_info "Configuring Time Machine"
# Don't prompt to use new hard drives as backup volume
defaults write com.apple.TimeMachine DoNotOfferNewDisksForBackup -bool true
###############################################################################
# Activity Monitor
###############################################################################
log_info "Configuring Activity Monitor"
# Show CPU usage in Dock icon
defaults write com.apple.ActivityMonitor IconType -int 5
# Sort by CPU usage
defaults write com.apple.ActivityMonitor SortColumn -string "CPUUsage"
defaults write com.apple.ActivityMonitor SortDirection -int 0
###############################################################################
# Printer
###############################################################################
log_info "Configuring printer preferences"
# Automatically quit printer app once print jobs complete
defaults write com.apple.print.PrintingPrefs "Quit When Finished" -bool true
###############################################################################
# Apply Changes
###############################################################################
log_info "Restarting affected applications"
killall Dock 2>/dev/null || true
killall Finder 2>/dev/null || true
killall SystemUIServer 2>/dev/null || true
log_success "macOS defaults configured"
log_info "Some changes may require logging out and back in to take full effect"