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:
cfprefsdis 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
libexecand exposes only themacprefscommand inbin. Note for existing users: stray*.pysymlinks in your Homebrewbinfrom v1.0.26 were tracked by the old version — runbrew uninstall macprefs && brew install clintmod/formulas/macprefs(rather thanbrew upgrade) if you wantbinfully cleaned. MACPREFS_BACKUP_DIRrespected everywhere (#19): all backup paths derive from it; nothing hardcodes~/Dropboxanymore.- 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).