Skip to content
EmreErincPublic

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

buum

macOS updater. Detects installed package managers and runs their update commands. Built-ins: brew, mas, npm, pip, pipx, gem, cargo, rustup, softwareupdate, mise, uv, pnpm, gcloud, conda, composer, gh, deno, bun, yarn, port, tlmgr, flutter, ghcup, opam, nix, tldr, vscode (extensions), vscodium, dotnet (global tools), krew, helm (repos), gup (Go binaries), juliaup, elan, pixi, mamba. Only installed ones run; uninstalled managers are skipped by detection.

Install

Homebrew (recommended)

brew tap EmreErinc/tap
brew install buum
brew upgrade buum   # get the latest release

From source

go build -o /usr/local/bin/buum ./cmd/buum

Release (maintainers)

Push a new semver tag to trigger the release pipeline (build, GitHub Release, Homebrew tap update):

./scripts/release.sh v0.1.4

Manual order if you prefer raw git:

git push origin main
git tag v0.1.4
git push origin v0.1.4

Each tag must be new on GitHub — re-pushing an existing tag does not trigger the workflow. The repo needs a TAP_GITHUB_TOKEN secret with write access to EmreErinc/homebrew-tap.

Usage

buum                    # detect + update all detected managers immediately
buum -i                 # pick managers interactively
buum --dry-run          # show what would run
buum --only brew,npm    # subset
buum --except pip       # all except these
buum --json             # machine-readable event stream
buum --retry-failed     # rerun only what failed last time
buum list               # show detected + known-but-missing managers
buum config path        # print config file path
buum config set         # toggle which installed managers are enabled
buum config edit        # edit config in $EDITOR
buum completion zsh sync  # install/refresh zsh tab completion

Choosing managers

buum config set lists every supported manager with its current state, grouped into Installed and Not installed, and saves your choice as the default:

? Select managers    35 of 36 selected
  ↑↓ move · space toggle · a all · / filter · enter confirm · q cancel
  Installed:
> [x] brew
  [ ] gem
  Not installed:
  [x] pipx
  ...
  ↑ 0 more · ↓ 2 more

The list shows up to 36 lines and scrolls with ↑/↓ (fewer in a short terminal window).

Disabled managers stay in the list, so you can switch them back on. enter saves and q/esc cancels without writing. It needs a real terminal. Saving keeps your comments and any extra keys; only indentation is normalized.

Last run and retry

Every real run (not --dry-run) saves its report to ~/.local/state/buum/last.json (or $XDG_STATE_HOME/buum/last.json), in the same shape as the --json final report. buum --retry-failed reruns only the managers marked failed there. Skipped managers are not retried, and the flag cannot be combined with --only, --except or -i.

Shell completion

buum completion zsh sync sets up zsh tab completion in one step:

  • writes the script to ~/.zsh/completions/_buum
  • appends fpath=(~/.zsh/completions $fpath) plus compinit to ~/.zshrc (or $ZDOTDIR/.zshrc) only if no such fpath line exists
  • deletes ~/.zcompdump* so zsh rebuilds its completion cache

Re-run it after upgrading buum, then exec zsh. buum completion zsh alone still prints the script to stdout.

Interactive mode

buum -i opens a checkbox menu to choose which managers to update. Use:

  • ↑/↓ to move the cursor
  • space to toggle the selected manager
  • a to toggle all managers
  • / to filter by name
  • enter to confirm and run the selected managers
  • q or esc to cancel

All managers start selected. After choosing, buum asks Save this selection as default? [y/N]. Answering yes writes your enable/disable set to the config so future runs honor it. Note: saving only affects the managers you were shown, so combining -i with --only/--except limits which managers the save can enable or disable.

The menu requires a real terminal (stdin and stdout must not be piped). In CI or when input is redirected, buum falls back to a numbered prompt.

Prompt handling

buum never auto-answers prompts and never times out waiting for input. If a manager asks for a sudo password or a y/N confirmation, buum surfaces it and waits. A fully detached run (e.g. cron with no stdin) will block if a manager prompts — pre-authorize sudo or set non-interactive steps in config.

Config

~/.config/buum/config.yaml overrides the built-ins. See config.example.yaml.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages