Skip to main content

Automated macOS maintenance CLI

Project description

mac-upkeep

Automated macOS maintenance CLI. Runs weekly via brew services to keep your dev environment clean.

Requires macOS — uses Homebrew, launchd, and macOS notifications.

Install

brew install calvindotsg/tap/mac-upkeep
brew services start mac-upkeep  # Monday 12 PM weekly

Or via pip/uvx:

pip install mac-upkeep
uvx mac-upkeep run       # one-off without installing

Tasks

Homebrew updates, dev tool cache pruning (gcloud, pnpm, uv), Fish plugin updates, system optimization via mole, and Brewfile enforcement.

mac-upkeep tasks  # See all tasks with frequency and last-run status

Tasks auto-detect installed tools — missing tools are skipped. Each task runs on a weekly or monthly schedule. Use --force <task> to run a specific task on demand.

Usage

mac-upkeep run                       # Run tasks (frequency-checked)
mac-upkeep run --dry-run             # Preview without executing
mac-upkeep run --force brew_update   # Run only brew_update
mac-upkeep run --force all           # Run all, ignoring schedule
mac-upkeep run --debug               # Verbose output
mac-upkeep tasks                     # List tasks with status
mac-upkeep init                      # Generate config (detects your tools)
mac-upkeep show-config --default     # Show all available task options
mac-upkeep show-config               # Show your config overrides
mac-upkeep setup                     # Print sudoers rules
mac-upkeep status                    # Show brew service status
mac-upkeep logs                      # View last 20 log lines
mac-upkeep logs -f                   # Follow logs
mac-upkeep --version                 # Show version

Configuration

Works out of the box with zero configuration. To customize, generate a starter config:

mac-upkeep init

This probes your system, detects installed tools, and writes a commented config to ~/.config/mac-upkeep/config.toml. Only detected tasks are listed. Built-in defaults apply automatically — uncomment lines to override.

To see all available tasks and options:

mac-upkeep show-config --default

Override examples

# ~/.config/mac-upkeep/config.toml

# Disable a task
[tasks.gcloud]
enabled = false

# Change frequency (weekly or monthly)
[tasks.brew_update]
frequency = "monthly"

# Set Brewfile path explicitly
[paths]
brewfile = "~/.config/Brewfile"

Custom tasks

Add your own tasks using the same format:

[tasks.docker_prune]
description = "Prune Docker system"
command = "docker system prune -f"
detect = "docker"
frequency = "monthly"

# Control execution order
[run]
order = ["brew_update", "brew_upgrade", "docker_prune", "brew_cleanup", "brew_bundle"]

Environment variables

MAC_UPKEEP_GCLOUD=false mac-upkeep run              # Disable a task
MAC_UPKEEP_GCLOUD_FREQUENCY=monthly mac-upkeep run  # Override frequency

Sudoers

mo_clean and mo_optimize require passwordless sudo for the mo binary:

mac-upkeep setup | sudo tee /etc/sudoers.d/mac-upkeep && sudo chmod 0440 /etc/sudoers.d/mac-upkeep
sudo visudo -c

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mac_upkeep-2.1.0.tar.gz (35.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mac_upkeep-2.1.0-py3-none-any.whl (18.8 kB view details)

Uploaded Python 3

File details

Details for the file mac_upkeep-2.1.0.tar.gz.

File metadata

  • Download URL: mac_upkeep-2.1.0.tar.gz
  • Upload date:
  • Size: 35.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for mac_upkeep-2.1.0.tar.gz
Algorithm Hash digest
SHA256 75158a9397bed8b8c356619cd435808e5731bd27c0c13189cdd6b050e3c0b7e7
MD5 c6e98c59ac0b9b20db5a94f42409621c
BLAKE2b-256 5a5e6ee87ecbafed7930d3742f4392c0686c8af7c86d9801e34f1ca046338ace

See more details on using hashes here.

Provenance

The following attestation bundles were made for mac_upkeep-2.1.0.tar.gz:

Publisher: release.yml on calvindotsg/maintenance

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mac_upkeep-2.1.0-py3-none-any.whl.

File metadata

  • Download URL: mac_upkeep-2.1.0-py3-none-any.whl
  • Upload date:
  • Size: 18.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for mac_upkeep-2.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 fc81c75f59d883882e576e2cacfc76d1b8c37db48a90db62bae755f03309c333
MD5 4388f5d19d06886e63d56c6b92bbec1d
BLAKE2b-256 78a73207bad93805a500dd86d76a73c9aaf8be48ca08b73b6d36aace9a378e7a

See more details on using hashes here.

Provenance

The following attestation bundles were made for mac_upkeep-2.1.0-py3-none-any.whl:

Publisher: release.yml on calvindotsg/maintenance

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page