/macos/set-defaults.sh
Shell | 339 lines | 276 code | 46 blank | 17 comment | 10 complexity | 0796da7d4f009a6c9a032295aed1ea58 MD5 | raw file
- #!/bin/sh
- # Sets reasonable macOS defaults.
- #
- # Or, in other words, set shit how I like in macOS.
- #
- # The original idea (and a couple settings) were grabbed from:
- # https://github.com/mathiasbynens/dotfiles/blob/master/.osx
- # More from:
- # https://gist.github.com/brandonb927/3195465
- #
- # Run ./set-defaults.sh and you'll be good to go.
- if [ "$(uname -s)" != "Darwin" ]; then
- exit 0
- fi
- set +e
- disable_agent() {
- mv "$1" "$1_DISABLED" >/dev/null 2>&1 \
- || sudo mv "$1" "$1_DISABLED" >/dev/null 2>&1
- }
- unload_agent() {
- launchctl unload -w "$1" >/dev/null 2>&1
- }
- test -z "$TRAVIS_JOB_ID" && sudo -v
- echo ""
- echo "› System:"
- echo " › Disable press-and-hold for keys in favor of key repeat"
- defaults write -g ApplePressAndHoldEnabled -bool false
- echo " › Use AirDrop over every interface"
- defaults write com.apple.NetworkBrowser BrowseAllInterfaces 1
- echo " › Show the ~/Library folder"
- chflags nohidden ~/Library
- echo " › Show the /Volumes folder"
- sudo chflags nohidden /Volumes
- echo " › Set a really fast key repeat"
- defaults write NSGlobalDomain KeyRepeat -int 2
- defaults write NSGlobalDomain InitialKeyRepeat -int 15
- echo " › Disable transparency"
- defaults write com.apple.universalaccess reduceTransparency -bool true
- echo " › Enable text replacement almost everywhere"
- defaults write -g WebAutomaticTextReplacementEnabled -bool true
- echo " › Turn off keyboard illumination when computer is not used for 5 minutes"
- defaults write com.apple.BezelServices kDimTime -int 300
- echo " › 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
- echo " › Always show scrollbars"
- defaults write NSGlobalDomain AppleShowScrollBars -string "Always"
- # Possible values: `WhenScrolling`, `Automatic` and `Always`
- echo " › Disable Dashboard"
- defaults write com.apple.dashboard mcx-disabled -bool true
- echo " › Don't automatically rearrange Spaces based on most recent use"
- defaults write com.apple.dock mru-spaces -bool false
- echo " › Increase the window resize speed for Cocoa applications"
- defaults write NSGlobalDomain NSWindowResizeTime -float 0.001
- echo " › Disable smart quotes and smart dashes as they're annoying when typing code"
- defaults write NSGlobalDomain NSAutomaticQuoteSubstitutionEnabled -bool false
- defaults write NSGlobalDomain NSAutomaticDashSubstitutionEnabled -bool false
- echo " › Disable auto-correct"
- defaults write NSGlobalDomain NSAutomaticSpellingCorrectionEnabled -bool false
- echo " › Set up trackpad & mouse speed to a reasonable number"
- defaults write -g com.apple.trackpad.scaling 2
- defaults write -g com.apple.mouse.scaling 2.5
- echo " › Avoid the creation of .DS_Store files on network volumes"
- defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool true
- echo " › Disable the 'Are you sure you want to open this application?' dialog"
- defaults write com.apple.LaunchServices LSQuarantine -bool false
- echo " › Set dark interface style"
- defaults write NSGlobalDomain AppleInterfaceStyle -string "Dark"
- echo " › Set graphite appearance"
- defaults write NSGlobalDomain AppleAquaColorVariant -int 6
- echo " › Set graphite highlight color"
- defaults write NSGlobalDomain AppleHighlightColor -string "0.847059 0.847059 0.862745"
- echo " › Show battery percent"
- defaults write com.apple.menuextra.battery ShowPercent -bool true
- if [ ! -z "$TRAVIS_JOB_ID" ]; then
- echo " › Speed up wake from sleep to 24 hours from an hour"
- # http://www.cultofmac.com/221392/quick-hack-speeds-up-retina-macbooks-wake-from-sleep-os-x-tips/
- sudo pmset -a standbydelay 86400
- fi
- echo " › Removing duplicates in the 'Open With' menu"
- /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister \
- -kill -r -domain local -domain system -domain user
- #############################
- echo ""
- echo "› Finder:"
- echo " › Always open everything in Finder's list view"
- defaults write com.apple.Finder FXPreferredViewStyle Nlsv
- echo " › Set the Finder prefs for showing a few different volumes on the Desktop"
- defaults write com.apple.finder ShowExternalHardDrivesOnDesktop -bool true
- defaults write com.apple.finder ShowRemovableMediaOnDesktop -bool true
- echo " › Expand save panel by default"
- defaults write NSGlobalDomain NSNavPanelExpandedStateForSaveMode -bool true
- echo " › Set sidebar icon size to small"
- defaults write NSGlobalDomain NSTableViewDefaultSizeMode -int 1
- echo " › Show status bar"
- defaults write com.apple.finder ShowStatusBar -bool true
- echo " › Show path bar"
- defaults write com.apple.finder ShowPathbar -bool true
- echo " › Disable the warning before emptying the Trash"
- defaults write com.apple.finder WarnOnEmptyTrash -bool false
- echo " › Save to disk by default, instead of iCloud"
- defaults write NSGlobalDomain NSDocumentSaveNewDocumentsToCloud -bool false
- echo " › Display full POSIX path as Finder window title"
- defaults write com.apple.finder _FXShowPosixPathInTitle -bool true
- echo " › Disable the warning when changing a file extension"
- defaults write com.apple.finder FXEnableExtensionChangeWarning -bool false
- #############################
- echo ""
- echo "› Photos:"
- echo " › Disable it from starting everytime a device is plugged in"
- defaults -currentHost write com.apple.ImageCapture disableHotPlug -bool true
- #############################
- echo ""
- echo "› Browsers:"
- echo " › Hide Safari's bookmark bar"
- defaults write com.apple.Safari ShowFavoritesBar -bool false
- echo " › Set up Safari for development"
- defaults write com.apple.Safari IncludeInternalDebugMenu -bool true
- defaults write com.apple.Safari IncludeDevelopMenu -bool true
- defaults write com.apple.Safari WebKitDeveloperExtrasEnabledPreferenceKey -bool true
- defaults write com.apple.Safari "com.apple.Safari.ContentPageGroupIdentifier.WebKit2DeveloperExtrasEnabled" -bool true
- defaults write NSGlobalDomain WebKitDeveloperExtras -bool true
- echo " › Disable the annoying backswipe in Chrome"
- defaults write com.google.Chrome AppleEnableSwipeNavigateWithScrolls -bool false
- #############################
- echo ""
- echo "› Dock"
- echo " › Setting the icon size of Dock items to 36 pixels for optimal size/screen-realestate"
- defaults write com.apple.dock tilesize -int 36
- echo " › Speeding up Mission Control animations and grouping windows by application"
- defaults write com.apple.dock expose-animation-duration -float 0.1
- defaults write com.apple.dock "expose-group-by-app" -bool true
- echo " › Remove the auto-hiding Dock delay"
- defaults write com.apple.dock autohide-delay -float 0
- echo " › Remove the animation when hiding/showing the Dock"
- defaults write com.apple.dock autohide-time-modifier -float 0
- echo " › Automatically hide and show the Dock"
- defaults write com.apple.dock autohide -bool true
- echo " › Don't animate opening applications from the Dock"
- defaults write com.apple.dock launchanim -bool false
- #############################
- echo ""
- echo "› Transmission:"
- echo " › Use ~/Downloads/Incomplete to store incomplete downloads"
- defaults write org.m0k.transmission UseIncompleteDownloadFolder -bool true
- defaults write org.m0k.transmission IncompleteDownloadFolder -string "$HOME/Downloads/Incomplete"
- echo " › Don't prompt for confirmation before downloading"
- defaults write org.m0k.transmission DownloadAsk -bool false
- echo " › Trash original torrent files"
- defaults write org.m0k.transmission DeleteOriginalTorrent -bool true
- echo " › Hide the donate message"
- defaults write org.m0k.transmission WarningDonate -bool false
- echo " › Hide the legal disclaimer"
- defaults write org.m0k.transmission WarningLegal -bool false
- echo " › Auto-add .torrent files in ~/Downloads"
- defaults write org.m0k.transmission AutoImportDirectory -string "$HOME/Downloads"
- echo " › Auto-resize the window to fit transfers"
- defaults write org.m0k.transmission AutoSize -bool true
- echo " › Auto update to betas"
- defaults write org.m0k.transmission AutoUpdateBeta -bool true
- echo " › Set up the best block list"
- defaults write org.m0k.transmission EncryptionRequire -bool true
- defaults write org.m0k.transmission BlocklistAutoUpdate -bool true
- defaults write org.m0k.transmission BlocklistNew -bool true
- defaults write org.m0k.transmission BlocklistURL -string "http://john.bitsurge.net/public/biglist.p2p.gz"
- #############################
- echo ""
- echo "› Mail:"
- echo " › Add the keyboard shortcut CMD + Enter to send an email"
- defaults write com.apple.mail NSUserKeyEquivalents -dict-add "Send" "@\U21a9"
- # shellcheck disable=SC2016
- defaults write com.apple.mail NSUserKeyEquivalents -dict-add "Archive" '@$e'
- echo " › Disable smart quotes as it's annoying for messages that contain code"
- defaults write com.apple.messageshelper.MessageController SOInputLineSettings -dict-add "automaticQuoteSubstitutionEnabled" -bool false
- echo " › Set email addresses to copy as 'foo@example.com' instead of 'Foo Bar <foo@example.com>'"
- defaults write com.apple.mail AddressesIncludeNameOnPasteboard -bool false
- echo " › Display emails in threaded mode, sorted by date (oldest at the top)"
- defaults write com.apple.mail DraftsViewerAttributes -dict-add "DisplayInThreadedMode" -string "yes"
- defaults write com.apple.mail DraftsViewerAttributes -dict-add "SortedDescending" -string "yes"
- defaults write com.apple.mail DraftsViewerAttributes -dict-add "SortOrder" -string "received-date"
- echo " › Disable inline attachments (just show the icons)"
- defaults write com.apple.mail DisableInlineAttachmentViewing -bool true
- echo " › Disable automatic spell checking"
- defaults write com.apple.mail SpellCheckingBehavior -string "NoSpellCheckingEnabled"
- echo " › Disable send and reply animations in Mail.app"
- defaults write com.apple.mail DisableReplyAnimations -bool true
- defaults write com.apple.mail DisableSendAnimations -bool true
- #############################
- echo ""
- echo "› Time Machine:"
- echo " › Prevent Time Machine from prompting to use new hard drives as backup volume"
- defaults write com.apple.TimeMachine DoNotOfferNewDisksForBackup -bool true
- ###############################################################################
- # SSD-specific tweaks #
- ###############################################################################
- if [ ! -z "$TRAVIS_JOB_ID" ] && diskutil info disk0 | grep SSD >/dev/null 2>&1; then
- echo " › Disable local backups"
- # https://classicyuppie.com/what-crap-is-this-os-xs-mobilebackups/
- sudo tmutil disablelocal
- echo " › Disable hibernation (speeds up entering sleep mode)"
- sudo pmset -a hibernatemode 0
- echo " › Remove the sleep image file to save disk space"
- sudo rm /private/var/vm/sleepimage
- echo " › Create a zero-byte file instead..."
- sudo touch /private/var/vm/sleepimage
- echo " › ...and make sure it can’t be rewritten"
- sudo chflags uchg /private/var/vm/sleepimage
- echo " › Disable the sudden motion sensor as it’s not useful for SSDs"
- sudo pmset -a sms 0
- fi
- #############################
- echo ""
- echo "› Media:"
- if [ -z "$KEEP_ITUNES" ]; then
- echo " › Disable iTunes helper"
- disable_agent /Applications/iTunes.app/Contents/MacOS/iTunesHelper.app
- echo " › Prevent play button from launching iTunes"
- unload_agent /System/Library/LaunchAgents/com.apple.rcd.plist
- fi
- echo " › Disable Spotify web helper"
- disable_agent ~/Applications/Spotify.app/Contents/MacOS/SpotifyWebHelper
- echo " › Prevent Android-File-Transfer to open when a device connects"
- disable_agent "/Applications/Android File Transfer.app/Contents/Resources/Android File Transfer Agent.app"
- disable_agent "$HOME/Library/Application Support/Google/Android File Transfer/Android File Transfer Agent.app"
- #############################
- echo ""
- echo "› Twitter.app:"
- echo " › Disable smart quotes as it’s annoying for code tweets"
- defaults write com.twitter.twitter-mac AutomaticQuoteSubstitutionEnabled -bool false
- echo " › Show the app window when clicking the menu bar icon"
- defaults write com.twitter.twitter-mac MenuItemBehavior -int 1
- echo " › Enable the hidden ‘Develop’ menu"
- defaults write com.twitter.twitter-mac ShowDevelopMenu -bool true
- echo " › Open links in the background"
- defaults write com.twitter.twitter-mac openLinksInBackground -bool true
- echo " › Allow closing the new tweet window by pressing Esc"
- defaults write com.twitter.twitter-mac ESCClosesComposeWindow -bool true
- echo " › Show full names rather than Twitter handles"
- defaults write com.twitter.twitter-mac ShowFullNames -bool true
- echo " › Hide the app in the background if it’s not the front-most window"
- defaults write com.twitter.twitter-mac HideInBackground -bool true
- #############################
- echo ""
- echo "› Kill related apps"
- for app in "Activity Monitor" "Address Book" "Calendar" "Contacts" "cfprefsd" \
- "Dock" "Finder" "Mail" "Messages" "Safari" "SystemUIServer" \
- "Terminal" "Transmission" "Photos"; do
- killall "$app" >/dev/null 2>&1
- done
- set -e