diff --git a/setup/init.sh b/setup/init.sh index c13585d..ac95c61 100755 --- a/setup/init.sh +++ b/setup/init.sh @@ -71,6 +71,10 @@ source ./golang.sh echo "Installing GitHub CLI Extensions" source ./github.sh +# MacOS Default Settings +echo "Restoring default settings for MacOS" +source ./macos.sh + # Install Themes cd ~/.dotfiles/bat bat cache --build diff --git a/setup/macos.sh b/setup/macos.sh new file mode 100644 index 0000000..8c934cd --- /dev/null +++ b/setup/macos.sh @@ -0,0 +1,194 @@ +#!/usr/bin/env bash + +# Inspired by https://mths.be/macos + +# Close any open System Preferences panes, to prevent them from overriding +# settings we’re about to change +osascript -e 'tell application "System Preferences" to quit' + +# Ask for the administrator password upfront +sudo -v + +# Keep-alive: update existing `sudo` time stamp until `macos.sh` has finished +while true; do + sudo -n true + sleep 60 + kill -0 "$$" || exit +done 2>/dev/null & + +############################################################################### +# General UI/UX # +############################################################################### + +# Set Dark Mode +defaults write -g AppleInterfaceStyle Dark + +# Set sidebar icon size +defaults write NSGlobalDomain NSTableViewDefaultSizeMode -int 3 + +# Expand save panel by default +defaults write NSGlobalDomain NSNavPanelExpandedStateForSaveMode -bool true +defaults write NSGlobalDomain NSNavPanelExpandedStateForSaveMode2 -bool true + +# Expand print panel by default +defaults write NSGlobalDomain PMPrintingExpandedStateForPrint -bool true +defaults write NSGlobalDomain PMPrintingExpandedStateForPrint2 -bool true + +# Disable the “Are you sure you want to open this application?” dialog +defaults write com.apple.LaunchServices LSQuarantine -bool false + +# Disable automatic capitalization as it’s annoying when typing code +defaults write NSGlobalDomain NSAutomaticCapitalizationEnabled -bool false + +# Disable smart dashes as they’re annoying when typing code +defaults write NSGlobalDomain NSAutomaticDashSubstitutionEnabled -bool false + +# Disable automatic period substitution as it’s annoying when typing code +defaults write NSGlobalDomain NSAutomaticPeriodSubstitutionEnabled -bool false + +# Disable smart quotes as they’re annoying when typing code +defaults write NSGlobalDomain NSAutomaticQuoteSubstitutionEnabled -bool false + +# Disable auto-correct +defaults write NSGlobalDomain NSAutomaticSpellingCorrectionEnabled -bool false + +# Reduce Motion +defaults write com.apple.universalaccess reduceMotion -bool true + +# Menu Bar Size +defaults write NSGlobalDomain NSTitleBarSize 22 + +############################################################################### +# Trackpad, mouse, keyboard, Bluetooth accessories, and input # +############################################################################### + +# Set a blazingly fast keyboard repeat rate +defaults write NSGlobalDomain KeyRepeat -int 1 +defaults write NSGlobalDomain InitialKeyRepeat -int 10 + +# Set language and text formats +defaults write NSGlobalDomain AppleLanguages -array "en-DE" "de-DE" "ja-DE" +defaults write NSGlobalDomain AppleLocale -string "en_DE@currency=EUR" +defaults write NSGlobalDomain AppleMeasurementUnits -string "Centimeters" + +############################################################################### +# Screen # +############################################################################### + +# Save screenshots to the desktop +defaults write com.apple.screencapture location -string "${HOME}/Dropbox/Bilder/Screenshots" + +############################################################################### +# Finder # +############################################################################### + +# Set Desktop as the default location for new Finder windows +# For other paths, use `PfLo` and `file:///full/path/here/` +defaults write com.apple.finder NewWindowTarget -string "PfLo" +defaults write com.apple.finder NewWindowTargetPath -string "file://${HOME}/Downloads/" + +# Show/hide icons for hard drives, servers, and removable media on the desktop +defaults write com.apple.finder ShowExternalHardDrivesOnDesktop -bool false +defaults write com.apple.finder ShowHardDrivesOnDesktop -bool false +defaults write com.apple.finder ShowMountedServersOnDesktop -bool false +defaults write com.apple.finder ShowRemovableMediaOnDesktop -bool true + +# Finder: show all filename extensions +defaults write NSGlobalDomain AppleShowAllExtensions -bool true + +# Finder: show status bar +defaults write com.apple.finder ShowStatusBar -bool true + +# Finder: show path bar +defaults write com.apple.finder ShowPathbar -bool true + +# Keep folders on top when sorting by name +defaults write com.apple.finder _FXSortFoldersFirst -bool true + +# When performing a search, search the current folder by default +defaults write com.apple.finder FXDefaultSearchScope -string "SCcf" + +# Disable the warning when changing a file extension +defaults write com.apple.finder FXEnableExtensionChangeWarning -bool false + +# Enable spring loading for directories +defaults write NSGlobalDomain com.apple.springing.enabled -bool true + +# Remove the spring loading delay for directories +defaults write NSGlobalDomain com.apple.springing.delay -float 0.5 + +# Avoid creating .DS_Store files on network or USB volumes +defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool true +defaults write com.apple.desktopservices DSDontWriteUSBStores -bool true + +# Disable 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 + +# Automatically open a 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 + +# Show the ~/Library folder +chflags nohidden ~/Library + +# Show the /Volumes folder +sudo chflags nohidden /Volumes + +############################################################################### +# Dock, Dashboard, and hot corners # +############################################################################### + +# Set the icon size of Dock items to 36 pixels +defaults write com.apple.dock tilesize -int 36 + +# Change minimize/maximize window effect +defaults write com.apple.dock mineffect -string "scale" + +# Minimize windows into their application’s icon +defaults write com.apple.dock minimize-to-application -bool true + +# Disable spring loading for all Dock items +defaults write com.apple.dock enable-spring-load-actions-on-all-items -bool false + +# Hide indicator lights for open applications in the Dock +defaults write com.apple.dock show-process-indicators -bool false + +# Don’t animate opening applications from the Dock +defaults write com.apple.dock launchanim -bool false + +# Speed up Mission Control animations +defaults write com.apple.dock expose-animation-duration -float 0.1 + +# Don’t automatically rearrange Spaces based on most recent use +defaults write com.apple.dock mru-spaces -bool false + +# Remove the auto-hiding Dock delay +defaults write com.apple.dock autohide-delay -float 0 + +# Remove the animation when hiding/showing the Dock +defaults write com.apple.dock autohide-time-modifier -float 0 + +# Automatically hide and show the Dock +defaults write com.apple.dock autohide -bool true + +# Make Dock icons of hidden applications translucent +defaults write com.apple.dock showhidden -bool true + +# Don’t show recent applications in Dock +defaults write com.apple.dock show-recents -bool false + +############################################################################### +# Kill affected applications # +############################################################################### + +for app in "Dock" \ + "Finder" \ + "Messages" \ + "SystemUIServer"; do + killall "${app}" &>/dev/null +done + +echo "Done. Note that some of these changes require a logout/restart to take effect."