SuperAPI AI 工具集

macos-defaults

办公与效率

查看项目

更新于 10-16 07:48

技能介绍

用途

macos-defaults 用于通过 defaults write 命令应用开发者真正想要的 macOS 生活质量偏好设置。它针对每个设置域提供正确的应用步骤,并在之后进行验证。这些键值属于未公开的实现细节,该技能存在的原因是网上大量复制粘贴的命令已经过时(域错误、键失效、缺少应用步骤)。

不适用场景

  • FileVault / 防火墙 / Touch ID sudo → 使用 macos-security-baseline
  • 安装应用(Raycast、Rectangle 等)→ 使用 mac-dev-apps
  • Shell/提示符配置 → 使用 zsh-setup
  • 编辑器设置 → 使用 editor-setup

安全护栏

  • 在应用前向用户展示分组命令列表并确认——若干调整会改变可见状态(Dock 内容、Finder 视图)。
  • Dock 清理保留一份保留列表(应用启动器、备忘录、用户的日常应用)——绝不在未要求的情况下把 Dock 清空。完全重置(persistent-apps -array)会移除所有固定项;它不删除任何应用,可通过重新固定恢复,但这是明确请求,不是默认行为。
  • 此处只处理生活质量偏好——绝不写入安全、更新或 Gatekeeper 相关域。
  • macOS 大版本升级后,在重新应用前先用 defaults read 重新验证;键值会跨大版本漂移。

工作流程

1. 选择设置集

提供下方精选分组;只应用用户想要的部分。完整的已验证键表(含 GUI 等效项和逐版本注意事项)在 references/verified-defaults.md 中——在添加此处未列出的任何内容前请查阅它。

2. 写入前快照(真正的回滚——defaults delete 只恢复出厂行为,不恢复用户之前的值)

for k in "com.apple.finder AppleShowAllFiles" "com.apple.dock autohide" "NSGlobalDomain KeyRepeat"; do
  echo "$k = $(defaults read $k 2>&1)"; done > ~/defaults-before-$(date +%Y%m%d%H%M%S).txt
defaults export com.apple.dock ~/dock-backup-$(date +%Y%m%d%H%M%S).plist   # before ANY Dock change, esp. clearing pins

(快照你即将写入的每一个键,而不仅是这三个。)

3. 应用(每个块以其应用步骤结束)

# --- Finder ---
defaults write com.apple.finder AppleShowAllFiles -bool true        # hidden files (Cmd+Shift+. toggles too)
defaults write com.apple.finder ShowPathbar -bool true
defaults write com.apple.finder ShowStatusBar -bool true
defaults write NSGlobalDomain AppleShowAllExtensions -bool true
defaults write com.apple.finder FXPreferredViewStyle -string "Nlsv" # list view
defaults write com.apple.finder FXDefaultSearchScope -string "SCcf" # search current folder
defaults write com.apple.finder FXEnableExtensionChangeWarning -bool false
defaults write com.apple.finder _FXSortFoldersFirst -bool true
defaults write com.apple.finder NewWindowTarget -string "PfHm"      # new windows open home
killall Finder

# --- Dock ---
defaults write com.apple.dock autohide -bool true
defaults write com.apple.dock autohide-delay -float 0
defaults write com.apple.dock show-recents -bool false
defaults write com.apple.dock mru-spaces -bool false                # stop reordering Spaces
# Optional decluttering, ASK FIRST - don't strip the Dock bare: keep the
# productivity staples (the Apps/Launchpad launcher, Notes, the user's
# daily apps). Ask for the keep-list; removing individual icons is drag-off
# or right-click -> Options -> Remove from Dock. Full reset only on request
# (clears EVERY pin - the user re-pins the keepers afterwards):
# defaults write com.apple.dock persistent-apps -array
killall Dock

# --- Keyboard (needs logout/login to take effect) ---
defaults write NSGlobalDomain KeyRepeat -int 2
defaults write NSGlobalDomain InitialKeyRepeat -int 15
defaults write NSGlobalDomain ApplePressAndHoldEnabled -bool false  # hold-to-repeat, no accent popup
defaults write NSGlobalDomain NSAutomaticSpellingCorrectionEnabled -bool false
defaults write NSGlobalDomain NSAutomaticCapitalizationEnabled -bool false
defaults write NSGlobalDomain NSAutomaticQuoteSubstitutionEnabled -bool false
defaults write NSGlobalDomain NSAutomaticDashSubstitutionEnabled -bool false
defaults write NSGlobalDomain NSAutomaticPeriodSubstitutionEnabled -bool false

# --- Screenshots ---
mkdir -p "$HOME/Screenshots"                                        # folder MUST exist first
defaults write com.apple.screencapture location -string "$HOME/Screenshots"
defaults write com.apple.screencapture type -string "png"           # Tahoe defaults to HEIC on HDR displays
defaults write com.apple.screencapture disable-shadow -bool true
killall SystemUIServer 2>/dev/null || true                          # legacy apply; immediate on Tahoe

# --- Save/print panels expanded (set both key variants; applies to apps
# --- launched AFTER the change - no killall helps) ---
defaults write NSGlobalDomain NSNavPanelExpandedStateForSaveMode -bool true
defaults write NSGlobalDomain NSNavPanelExpandedStateForSaveMode2 -bool true
defaults write NSGlobalDomain PMPrintingExpandedStateForPrint -bool true
defaults write NSGlobalDomain PMPrintingExpandedStateForPrint2 -bool true

# --- .DS_Store suppression on network/USB volumes (needs logout/login) ---
defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool true
defaults write com.apple.desktopservices DSDontWriteUSBStores -bool true

4. 手动(仅 GUI)步骤——告知用户,不要脚本化

  • Spotlight(可选权衡):系统设置 → Spotlight → 搜索隐私…——排除源目录(~/Developer)可停止构建/node_modules 索引的 CPU 峰值,代价是 Spotlight 无法搜索源文件。提供该选项,不要默认启用。
  • Safari 开发菜单:Safari → 设置 → 高级 → “显示网页开发者功能”(旧的 IncludeDevelopMenu defaults 键自 Safari 17 起已失效,且 Safari 的沙盒在没有完全磁盘访问权限时会忽略终端写入)。
  • 触控板轻点/三指拖移:使用系统设置——触控板的 defaults 键最不稳定(cfprefsd 缓存)。

5. 验证并报告——对每个已应用分组做一次 defaults read 抽查,不匹配即视为失败

defaults read com.apple.finder ShowPathbar                    # Finder group: 1
defaults read com.apple.dock autohide                         # Dock group: 1
defaults read NSGlobalDomain KeyRepeat                        # Keyboard group: 2
defaults read com.apple.screencapture location                # Screenshots group: chosen path
defaults read NSGlobalDomain NSNavPanelExpandedStateForSaveMode2      # Panels group: 1
defaults read com.apple.desktopservices DSDontWriteNetworkStores      # .DS_Store group: 1

告知用户哪些更改需要注销/登录(键盘、.DS_Store 分组)、哪些需要应用重启(面板)、哪些已即时生效(Finder/Dock/截图)。

输出规范

完成意味着:每个请求的分组已应用、应用步骤已运行、每组抽查匹配、写入前快照文件存在,且用户知道哪些需要注销。按请求回滚:从快照恢复值(用 defaults write 写回),或对 Dock 使用 defaults import com.apple.dock <backup.plist> && killall Dock。

注意事项

  • 截图文件夹不会自动创建——不存在的位置会静默回退到桌面。
  • _FXShowPosixPathInTitle(在 Finder 标题中显示完整路径)在现代 macOS 上实际已失效——改用路径栏;不要推荐它。
  • com.apple.symbolichotkeys 编辑(例如为 Raycast 释放 Cmd+Space)跨版本很脆弱——请在 GUI 中操作(系统设置 → 键盘 → 键盘快捷键)。
  • 写入“不生效”:先退出目标应用,或写入后 killall cfprefsd;沙盒应用(Safari)需要其 GUI。