summaryrefslogtreecommitdiff
path: root/macos-defaults.sh
blob: c5830e8c283a43c60ea88f47930e33ae2e0cf677 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/bin/bash

# The baseline settings every new Mac starts from: Finder, Dock, keyboard,
# trackpad, menu-bar clock, Spotlight. Run it once, when setting a Mac up:
#
#   ~/src/soarez/dot/macos-defaults.sh
#
# A private layer's bootstrap may run it on a new Mac; install.sh points to it
# otherwise. Nothing runs it on its own, and nothing should: it
# replaces the Dock with the three apps below and restarts Finder and the Dock.
# A Mac is free to drift from these afterwards; this is where it starts, not a
# state kept in sync. Asks for sudo, for the Spotlight setting.
#
# Reference: https://macos-defaults.com/

set -euo pipefail

if [[ "$(uname)" != "Darwin" ]]; then
    >&2 echo "ERROR: macOS only"
    exit 1
fi

# Show hidden files, filename extensions, full path & disable extension warning
defaults write com.apple.finder "AppleShowAllFiles" -bool "true"
defaults write NSGlobalDomain "AppleShowAllExtensions" -bool "true"
defaults write com.apple.finder "ShowPathbar" -bool "true"
defaults write com.apple.finder "FXEnableExtensionChangeWarning" -bool "false"

# Set list view as default Finder view
defaults write com.apple.finder "FXPreferredViewStyle" -string "Nlsv"

# Set Dock size, autohide, recents
defaults write com.apple.dock "tilesize" -int "46"
defaults write com.apple.dock "autohide" -bool "true"
defaults write com.apple.dock "show-recents" -bool "false"

# Menubar date format
defaults write com.apple.menuextra.clock "DateFormat" -string "\"HH:mm\""

# Three finger trackpad drag
defaults write com.apple.AppleMultitouchTrackpad "TrackpadThreeFingerDrag" -bool "true"

# Keyboard settings
# disable FN (globe key)
defaults write ~/Library/Preferences/com.apple.HIToolbox.plist 'AppleFnUsageType' -int 0
defaults write -g ApplePressAndHoldEnabled 0

# Use thin strokes
defaults -currentHost write -g AppleFontSmoothing -int 0
# defaults -currentHost delete -g AppleFontSmoothing

# Set dock apps: the app launcher, Alacritty, iPhone Mirroring. The launcher is
# Launchpad up to macOS 15; macOS 26 has no Launchpad and calls it Apps.
launcher=/System/Applications/Launchpad.app
if [[ ! -e "${launcher}" ]]; then
    launcher=/System/Applications/Apps.app
fi
defaults delete com.apple.dock persistent-apps
dock_item() {
    printf '<dict><key>tile-data</key><dict><key>file-data</key><dict><key>_CFURLString</key><string>%s</string><key>_CFURLStringType</key><integer>0</integer></dict></dict></dict>' "$1"
}
defaults write com.apple.dock persistent-apps -array \
    "$(dock_item "${launcher}")" \
    "$(dock_item /Applications/Alacritty.app)" \
    "$(dock_item '/System/Applications/iPhone Mirroring.app')"

# Disable Spotlight indexing for any volume that gets mounted and has not yet
# been indexed before.
# Use `sudo mdutil -i off "/Volumes/foo"` to stop indexing any volume.
sudo defaults write /Library/Preferences/com.apple.SpotlightServer.plist ExternalVolumesIgnore -bool true

# Restart stuff
killall Finder
killall Dock