Skip to content

Instantly share code, notes, and snippets.

@Tehnix
Forked from brandonb927/osx-for-hackers.sh
Last active October 1, 2020 18:39
Show Gist options
  • Save Tehnix/d0fbb20c89f674b6c0c5 to your computer and use it in GitHub Desktop.
Save Tehnix/d0fbb20c89f674b6c0c5 to your computer and use it in GitHub Desktop.
#!/bin/sh
COMPUTER_NAME="tehnix"
# Some things taken from here
# https://github.com/mathiasbynens/dotfiles/blob/master/.osx
# Set the colours you can use
black='\033[0;30m'
white='\033[0;37m'
red='\033[0;31m'
green='\033[0;32m'
yellow='\033[0;33m'
blue='\033[0;34m'
magenta='\033[0;35m'
cyan='\033[0;36m'
# Reset text attributes to normal + without clearing screen.
alias Reset="tput sgr0"
# Color-echo.
# arg $1 = message
# arg $2 = Color
cecho() {
echo "${2}${1}"
Reset # Reset to normal.
return
}
# Ask for the administrator password upfront
sudo -v
# Keep-alive: update existing `sudo` time stamp until script has finished
while true; do
sudo -n true
sleep 60
kill -0 "$$" || exit
done 2>/dev/null &
echo ""
cecho "##############################################" $white
cecho "# This script will make your Mac awesome." $white
cecho "# Follow the prompts and you'll be fine." $white
cecho "#" $white
cecho "# ~ Happy Hacking ~" $white
cecho "#############################################" $white
echo ""
###############################################################################
# General UI/UX
###############################################################################
echo ""
echo "Setting your computer name (as done via System Preferences Sharing)"
echo "What would you like it to be?"
sudo scutil --set ComputerName $COMPUTER_NAME
sudo scutil --set HostName $COMPUTER_NAME
sudo scutil --set LocalHostName $COMPUTER_NAME
sudo defaults write /Library/Preferences/SystemConfiguration/com.apple.smb.server NetBIOSName -string $COMPUTER_NAME
echo "Disable window resizing when getting to edge of screen"
defaults write -globalDomain AppleEdgeResizing NO
echo ""
echo "Hiding the Time Machine, Volume, User, and Bluetooth icons"
for domain in ~/Library/Preferences/ByHost/com.apple.systemuiserver.*; do
defaults write "${domain}" dontAutoLoad -array \
"/System/Library/CoreServices/Menu Extras/TimeMachine.menu" \
"/System/Library/CoreServices/Menu Extras/User.menu"
done
defaults write com.apple.systemuiserver menuExtras -array \
"/System/Library/CoreServices/Menu Extras/Bluetooth.menu" \
"/System/Library/CoreServices/Menu Extras/AirPort.menu" \
"/System/Library/CoreServices/Menu Extras/Battery.menu" \
"/System/Library/CoreServices/Menu Extras/Clock.menu"
# echo ""
# echo "Hiding the Spotlight icon"
# sudo chmod 600 /System/Library/CoreServices/Search.bundle/Contents/MacOS/Search
#echo ""
#echo "Disabling OS X Gate Keeper"
#echo "(You'll be able to install any app you want from here on, not just Mac App Store apps)"
#sudo spctl --master-disable
#sudo defaults write /var/db/SystemPolicy-prefs.plist enabled -string no
#defaults write com.apple.LaunchServices LSQuarantine -bool false
echo ""
echo "Increasing the window resize speed for Cocoa applications"
defaults write NSGlobalDomain NSWindowResizeTime -float 0.001
#echo ""
#echo "Expanding the save panel by default"
#defaults write NSGlobalDomain NSNavPanelExpandedStateForSaveMode -bool true
#defaults write NSGlobalDomain PMPrintingExpandedStateForPrint -bool true
#defaults write NSGlobalDomain PMPrintingExpandedStateForPrint2 -bool true
echo ""
echo "Automatically quit printer app once the print jobs complete"
defaults write com.apple.print.PrintingPrefs "Quit When Finished" -bool true
# Try e.g. `cd /tmp; unidecode "\x{0000}" > cc.txt; open -e cc.txt`
#echo ""
#echo "Displaying ASCII control characters using caret notation in standard text views"
#defaults write NSGlobalDomain NSTextShowsControlCharacters -bool true
#echo ""
#echo "Disabling system-wide resume"
#defaults write NSGlobalDomain NSQuitAlwaysKeepsWindows -bool false
#echo ""
#echo "Disabling automatic termination of inactive apps"
#defaults write NSGlobalDomain NSDisableAutomaticTermination -bool true
#echo ""
#echo "Saving to disk (not to iCloud) by default"
#defaults write NSGlobalDomain NSDocumentSaveNewDocumentsToCloud -bool false
echo ""
echo "Reveal IP address, hostname, OS version, etc. when clicking the clock in the login window"
sudo defaults write /Library/Preferences/com.apple.loginwindow AdminHostInfo HostName
#echo ""
#echo "Never go into computer sleep mode"
#systemsetup -setcomputersleep Off > /dev/null
echo ""
echo "Check for software updates daily, not just once per week"
defaults write com.apple.SoftwareUpdate ScheduleFrequency -int 1
echo ""
echo "Remove 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 "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
###############################################################################
# Trackpad, mouse, keyboard, Bluetooth accessories, and input
###############################################################################
#echo ""
#echo "Increasing sound quality for Bluetooth headphones/headsets"
#defaults write com.apple.BluetoothAudioAgent "Apple Bitpool Min (editable)" -int 40
echo ""
echo "Enabling full keyboard access for all controls (e.g. enable Tab in modal dialogs)"
defaults write NSGlobalDomain AppleKeyboardUIMode -int 3
echo ""
echo "Disabling press-and-hold for keys in favor of a key repeat"
defaults write NSGlobalDomain ApplePressAndHoldEnabled -bool false
echo ""
echo "Setting a blazingly fast keyboard repeat rate (aint nobody got time fo special chars while coding)"
defaults write NSGlobalDomain KeyRepeat -int 0
echo ""
echo "Disabling auto-correct"
defaults write NSGlobalDomain NSAutomaticSpellingCorrectionEnabled -bool false
#echo ""
#echo "Setting 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 ""
echo "Turn off keyboard illumination when computer is not used for 5 minutes"
defaults write com.apple.BezelServices kDimTime -int 300
###############################################################################
# Screen
###############################################################################
echo ""
echo "Requiring 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 ""
# echo "Setting screenshot location to ~/Pictures/Screenshots"
# mkdir -p $HOME/Pictures/Screenshots
# defaults write com.apple.screencapture location -string "$HOME/Pictures/Screenshots"
echo ""
echo "Saving screenshots in PNG"
defaults write com.apple.screencapture type -string "png"
echo ""
echo "Enabling subpixel font rendering on non-Apple LCDs"
defaults write NSGlobalDomain AppleFontSmoothing -int 2
echo ""
echo "Enabling HiDPI display modes (requires restart)"
sudo defaults write /Library/Preferences/com.apple.windowserver DisplayResolutionEnabled -bool true
###############################################################################
# Finder
###############################################################################
echo ""
echo "Showing icons for hard drives, servers, and removable media on the desktop"
defaults write com.apple.finder ShowExternalHardDrivesOnDesktop -bool true
#echo ""
#echo "Show hidden files in Finder by default?"
#select yn in "Yes" "No"; do
# case $yn in
# Yes ) defaults write com.apple.Finder AppleShowAllFiles -bool true
# break;;
# No ) break;;
# esac
#done
#echo ""
#echo "Show dotfiles in Finder by default?"
#select yn in "Yes" "No"; do
# case $yn in
# Yes ) defaults write com.apple.finder AppleShowAllFiles TRUE
# break;;
# No ) break;;
# esac
#done
echo ""
echo "Showing all filename extensions in Finder by default"
defaults write NSGlobalDomain AppleShowAllExtensions -bool true
echo ""
echo "Showing status bar in Finder by default"
defaults write com.apple.finder ShowStatusBar -bool true
echo ""
echo "Allowing text selection in Quick Look/Preview in Finder by default"
defaults write com.apple.finder QLEnableTextSelection -bool true
#echo ""
#echo "Displaying full POSIX path as Finder window title"
#defaults write com.apple.finder _FXShowPosixPathInTitle -bool true
#echo ""
#echo "Disabling the warning when changing a file extension"
#defaults write com.apple.finder FXEnableExtensionChangeWarning -bool false
echo ""
echo "Use list view in all Finder windows by default"
defaults write com.apple.finder FXPreferredViewStyle Nlsv
echo ""
echo "Avoiding the creation of .DS_Store files on network volumes"
defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool true
echo ""
echo "Disabling disk image verification"
defaults write com.apple.frameworks.diskimages skip-verify -bool true
defaults write com.apple.frameworks.diskimages skip-verify-locked -bool true
defaults write com.apple.frameworks.diskimages skip-verify-remote -bool true
echo ""
echo "Enabling snap-to-grid for icons on the desktop and in other icon views"
/usr/libexec/PlistBuddy -c "Set :DesktopViewSettings:IconViewSettings:arrangeBy grid" ~/Library/Preferences/com.apple.finder.plist
/usr/libexec/PlistBuddy -c "Set :FK_StandardViewSettings:IconViewSettings:arrangeBy grid" ~/Library/Preferences/com.apple.finder.plist
/usr/libexec/PlistBuddy -c "Set :StandardViewSettings:IconViewSettings:arrangeBy grid" ~/Library/Preferences/com.apple.finder.plist
###############################################################################
# Dock & Mission Control
###############################################################################
# Wipe all (default) app icons from the Dock
# This is only really useful when setting up a new Mac, or if you don't use
# the Dock to launch apps.
#defaults write com.apple.dock persistent-apps -array
echo ""
echo "Setting the icon size of Dock items to 30 pixels for optimal size/screen-realestate"
defaults write com.apple.dock tilesize -int 30
echo ""
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 ""
echo "Setting Dock to auto-hide and removing the auto-hiding delay"
defaults write com.apple.dock autohide -bool true
defaults write com.apple.dock autohide-delay -float 0
defaults write com.apple.dock autohide-time-modifier -float 0
###############################################################################
# Safari & WebKit
###############################################################################
#echo ""
#echo "Hiding Safari's bookmarks bar by default"
#defaults write com.apple.Safari ShowFavoritesBar -bool false
#echo ""
#echo "Hiding Safari's sidebar in Top Sites"
#defaults write com.apple.Safari ShowSidebarInTopSites -bool false
# echo ""
# echo "Disabling Safari's thumbnail cache for History and Top Sites"
# defaults write com.apple.Safari DebugSnapshotsUpdatePolicy -int 2
#echo ""
#echo "Enabling Safari's debug menu"
#defaults write com.apple.Safari IncludeInternalDebugMenu -bool true
echo ""
echo "Making Safari's search banners default to Contains instead of Starts With"
defaults write com.apple.Safari FindOnPageMatchesWordStartsOnly -bool false
echo ""
echo "Removing useless icons from Safari's bookmarks bar"
defaults write com.apple.Safari ProxiesInBookmarksBar "()"
#echo ""
#echo "Allow hitting the Backspace key to go to the previous page in history"
#defaults write com.apple.Safari com.apple.Safari.ContentPageGroupIdentifier.WebKit2BackspaceKeyNavigationEnabled -bool true
echo ""
echo "Enabling the Develop menu and the Web Inspector in Safari"
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
echo ""
echo "Adding a context menu item for showing the Web Inspector in web views"
defaults write NSGlobalDomain WebKitDeveloperExtras -bool true
###############################################################################
# Mail
###############################################################################
echo ""
echo "Setting email addresses to copy as 'foo@example.com' instead of 'Foo Bar <foo@example.com>' in Mail.app"
defaults write com.apple.mail AddressesIncludeNameOnPasteboard -bool false
###############################################################################
# Terminal
###############################################################################
echo ""
echo "Enabling UTF-8 ONLY in Terminal.app and setting the Atom theme by default"
defaults write com.apple.terminal StringEncodings -array 4
defaults write com.apple.Terminal "Default Window Settings" -string "Atom"
defaults write com.apple.Terminal "Startup Window Settings" -string "Atom"
###############################################################################
# Time Machine
###############################################################################
echo ""
echo "Preventing Time Machine from prompting to use new hard drives as backup volume"
defaults write com.apple.TimeMachine DoNotOfferNewDisksForBackup -bool true
echo ""
echo "Disabling local Time Machine backups"
hash tmutil &>/dev/null && sudo tmutil disablelocal
###############################################################################
# Messages #
###############################################################################
# echo ""
# echo "Disable automatic emoji substitution (i.e. use plain text smileys)"
# defaults write com.apple.messageshelper.MessageController SOInputLineSettings -dict-add "automaticEmojiSubstitutionEnablediMessage" -bool false
echo ""
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 ""
#echo "Disable continuous spell checking"
#defaults write com.apple.messageshelper.MessageController SOInputLineSettings -dict-add "continuousSpellCheckingEnabled" -bool false
###############################################################################
# Transmission.app #
###############################################################################
echo ""
echo "Use $(~/Downloads/Transmission/__incomplete__) to store incomplete downloads"
defaults write org.m0k.transmission UseIncompleteDownloadFolder -bool true
defaults write org.m0k.transmission IncompleteDownloadFolder -string "${HOME}/Downloads/Transmission/__incomplete__"
echo ""
echo "Don't prompt for confirmation before downloading"
defaults write org.m0k.transmission DownloadAsk -bool false
echo ""
echo "Trash original torrent files"
defaults write org.m0k.transmission DeleteOriginalTorrent -bool true
echo ""
echo "Hide the donate message"
defaults write org.m0k.transmission WarningDonate -bool false
echo ""
echo "Hide the legal disclaimer"
defaults write org.m0k.transmission WarningLegal -bool false
###############################################################################
# Personal Additions
###############################################################################
#echo ""
#echo "Disable hibernation (speeds up entering sleep mode)"
#sudo pmset -a hibernatemode 0
#echo ""
#echo "Remove the sleep image file to save disk space"
#sudo rm /Private/var/vm/sleepimage
#echo "creating 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 ""
# echo "Disable the sudden motion sensor as it's not useful for SSDs"
# sudo pmset -a sms 0
#echo ""
#echo "Speeding 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
echo ""
echo "Disable annoying backswipe in Chrome"
defaults write com.google.Chrome AppleEnableSwipeNavigateWithScrolls -bool false
# Disable hold key giving char accent menu
defaults write -g ApplePressAndHoldEnabled -bool false
# Enable the locate command/database
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist
###############################################################################
# Kill affected applications
###############################################################################
echo ""
cecho "Done!" $white
echo ""
echo ""
cecho "###############################################################################" $white
echo ""
echo ""
cecho "Note that some of these changes require a logout/restart to take effect." $white
cecho "Killing some open applications in order to take effect." $white
echo ""
find ~/Library/Application\ Support/Dock -name "*.db" -maxdepth 1 -delete
for app in "Activity Monitor" "Address Book" "Calendar" "Contacts" "cfprefsd" \
"Dock" "Finder" "Mail" "Messages" "Safari" "SystemUIServer" \
"Terminal" "Transmission"; do
killall "${app}" >/dev/null 2>&1
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment