github clintmod/macprefs v1.0.27

5 hours ago

First release since 2018 — v1.0.26 predated the Python 3 migration, which is why Homebrew installs have been failing with SyntaxError: Missing parentheses in call to 'print' (#9, #22) and missing the -t selective backup/restore flag (#17).

Highlights

  • Python 3 migration completed (#24): runs on Python 3.13; the Homebrew formula now depends on python@3.13.
  • Selective backup/restore: macprefs backup -t preferences dotfiles ... (#17 — the feature existed on master since 2022; this release finally ships it).
  • Backup/restore no longer aborts on unreadable files: rsync "partial transfer" (exit 23/24) now warns and continues — e.g. daemon plists owned by security tools (#14, #6).
  • Restores survive protected files: chown/chmod failures on SIP/endpoint-protected files warn instead of aborting the restore (#5).
  • Restored preferences actually stick: cfprefsd is restarted after plist restores so its cache doesn't clobber freshly restored files (needed on modern macOS).
  • Clean uninstall (#8): the formula now installs to libexec and exposes only the macprefs command in bin. Note for existing users: stray *.py symlinks in your Homebrew bin from v1.0.26 were tracked by the old version — run brew uninstall macprefs && brew install clintmod/formulas/macprefs (rather than brew upgrade) if you want bin fully cleaned.
  • MACPREFS_BACKUP_DIR respected everywhere (#19): all backup paths derive from it; nothing hardcodes ~/Dropbox anymore.
  • Verified working on current macOS (tested on Darwin 25); Sequoia included (#23).

Dev-side: tests migrated to unittest.mock, pinned dev deps, GitHub Actions CI on every PR, and a modernized dev toolchain (mise + uv + rite).

Don't miss a new macprefs release

NewReleases is sending notifications on new releases.