Synchronize macOS application configurations across multiple machines using Git.
- Keep dotfiles and app settings consistent across Macs
- SSH and HTTPS authentication for private repositories
- Choose specific applications to sync
- Automatic backups before restoring configurations
- Preview changes with dry run mode
- Pre-flight environment validation
- Resume setup after interruptions
- Comprehensive logging
- Selective font syncing
curl -O https://raw.githubusercontent.com/specbug/iconfig/main/web_installer.sh
chmod +x web_installer.sh
./web_installer.sh
git clone https://github.com/specbug/iconfig.git
cd iconfig
chmod +x install.sh
./install.sh
- Homebrew:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- Git & Git LFS:
brew install git git-lfs && git lfs install
mac-sync-wizard setup
mac-sync-wizard sync
Run the web installer and answer "Yes" when prompted for new machine setup.
After setup, use the generated Brewfile:
brew bundle --file ~/.iconfig/Brewfile
- Cursor: Settings, keybindings, extensions
- PyCharm: IDE settings, keymaps, code styles
- Sublime Text: Preferences and packages
- Trackpad: macOS trackpad preferences
- Git: Global configuration
- Warp: Terminal themes and settings
- Fonts: Custom fonts (selective sync available)
- Anki: Add-ons and preferences
- Stretchly: Break reminder settings
- Maccy: Clipboard manager preferences
- Shell: Aliases, functions, and configurations
iconfig extracts and syncs existing shell aliases and functions.
Shell sync is integrated into the main setup:
mac-sync-wizard setup
# Enable "shell" when prompted
The setup:
- Scans existing shell files (
.bashrc
,.zshrc
, etc.) - Extracts aliases and functions to
~/.iconfig/shell/aliases.sh
- Configures auto-loading in your shell
- Preserves original files
- Aliases and functions are stored in
~/.iconfig/shell/aliases.sh
- This file syncs across machines
- Machine-specific items go in
~/.iconfig/shell/local.sh
(not synced)
When you run mac-sync-wizard restore
on a new machine:
- Shell files are copied to
~/.iconfig/shell/
- Your shell configuration is automatically updated to load aliases
- Run
source ~/.zshrc
(or restart terminal) to activate
# Original .zshrc:
alias gitpush='git push origin $(git rev-parse --abbrev-ref HEAD)'
alias gs='git status'
gitpull() {
BRANCH=${1:-$(git rev-parse --abbrev-ref HEAD)}
git pull origin $BRANCH --no-rebase
}
# After setup: These are extracted to ~/.iconfig/shell/aliases.sh
# and sync to all machines
The ~/Library/Fonts/
directory can be large (1.5GB+). Configure selective font syncing:
# Interactive font configuration
mac-sync-wizard config --fonts
# Or through main config
mac-sync-wizard config
-
Font Families: Specify by name (includes all weights/styles)
Example: "Zed Plex Sans", "SF Mono", "JetBrains Mono"
-
File Patterns: Use wildcards
Example: MyCompany-*.ttf, Custom*.otf
-
Exclude Patterns: Sync all except matches
Example: System*.ttf, *.dfont
-
All Fonts: Sync everything (not recommended)
Configure repository and preferences.
--fresh
: Clean reinstall
Sync configurations.
--dry-run
: Preview changes--daemon
: Run continuously--verbose
: Show detailed output
Restore configurations.
--utility <name>
: Restore specific utility
Modify settings.
--enable <utility>
: Enable utility sync--disable <utility>
: Disable utility sync--frequency <seconds>
: Set sync interval--reset
: Reset to defaults--fonts
: Configure font sync
Check sync status.
--verbose
: Detailed information
Manage background service.
--uninstall
: Remove service
Settings stored in ~/.iconfig/config/sync_config.json
.
- URL: Git repository URL
- Branch: Sync branch (default: main)
- Authentication: SSH (recommended) or HTTPS
- Frequency: Auto-sync interval
- Auto-commit: Automatic commits
- Pull strategy: Rebase (default) or merge
Each utility has:
- Paths: Files/directories to sync
- Exclude patterns: Files to ignore
- Include patterns: Specific file patterns (fonts only)
- Custom fonts: Font families to sync (fonts only)
Font files may exceed Git's 100MB limit. iconfig uses Git LFS automatically.
- Install:
brew install git-lfs
- Setup wizard configures LFS automatically
- GitHub provides 1GB free LFS storage
If LFS unavailable:
- Sync only essential fonts
- Use interactive selector
- Exclude large font families
Located in ~/.iconfig/logs/
- Git not found:
brew install git
- SSH authentication fails: Set up SSH keys for Git provider
- Large font files: Install Git LFS
- Large sync size: Configure selective font sync
- Conflicts: Tool attempts auto-resolution or prompts for manual resolution
- SSH keys recommended for authentication
- Exclude sensitive files using patterns
- Operations create backups before changes
- Use private repository for configurations
Pull requests welcome. Please:
- Follow existing code style
- Test on macOS
- Update documentation
MIT License - see LICENSE file