Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions docs/cli/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -166,9 +166,6 @@ Can also use `MISE_NO_HOOKS=1`
- [`mise sync python [--pyenv] [--uv]`](/cli/sync/python.md)
- [`mise sync ruby [--brew]`](/cli/sync/ruby.md)
- [`mise system <SUBCOMMAND>`](/cli/system.md)
- [`mise system brew <SUBCOMMAND>`](/cli/system/brew.md)
- [`mise system brew tap [-n --dry-run] <TAP> [URL]`](/cli/system/brew/tap.md)
- [`mise system brew untap [-n --dry-run] <TAPS>…`](/cli/system/brew/untap.md)
- [`mise system install [FLAGS] [PACKAGE]…`](/cli/system/install.md)
- [`mise system status [-J --json] [--missing]`](/cli/system/status.md)
- [`mise system upgrade [FLAGS] [PACKAGE]…`](/cli/system/upgrade.md)
Expand Down
1 change: 0 additions & 1 deletion docs/cli/system.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ with `chsh -s`.

## Subcommands

- [`mise system brew <SUBCOMMAND>`](/cli/system/brew.md)
- [`mise system install [FLAGS] [PACKAGE]…`](/cli/system/install.md)
- [`mise system status [-J --json] [--missing]`](/cli/system/status.md)
- [`mise system upgrade [FLAGS] [PACKAGE]…`](/cli/system/upgrade.md)
Expand Down
15 changes: 0 additions & 15 deletions docs/cli/system/brew.md

This file was deleted.

30 changes: 0 additions & 30 deletions docs/cli/system/brew/tap.md

This file was deleted.

26 changes: 0 additions & 26 deletions docs/cli/system/brew/untap.md

This file was deleted.

43 changes: 11 additions & 32 deletions docs/system-packages/brew.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,39 +20,18 @@ bottle. Formulae without a usable bottle are built from source, also without
Homebrew (see [Source formulae](#source-formulae)). mise never shells out to
`brew` for homebrew/core formulae.

Third-party taps are supported when Homebrew itself is installed. Tapped
formulae are delegated to a real `brew` command; use the same
fully-qualified formula name you would pass to `brew install`:

```toml
[system.packages]
"brew:railwaycat/emacsmacport/emacs-mac" = "latest"
```

For non-GitHub taps, or taps whose URL cannot be inferred by Homebrew, add a
tap source. This mirrors `[plugins]`: the key is the tap name and the value
is the git URL.
Third-party taps are not installed yet. `[system.brew.taps]` can record tap
URLs in shared config for future direct tap support, but mise will not proxy
to a `brew` executable:

```toml
[system.brew.taps]
"acme/tools" = "https://git.example.com/acme/homebrew-tools.git"

[system.packages]
"brew:acme/tools/widget" = "latest"
```

Before installing or upgrading tapped formulae, mise runs `brew tap` for any
configured tap URL and then `brew update-if-needed` so the tap is current.

You can also manage taps imperatively, matching `mise plugins install` /
`mise plugins uninstall`: these commands shell out to Homebrew and do not
modify `mise.toml`.

```sh
mise system brew tap railwaycat/emacsmacport
mise system brew tap acme/tools https://git.example.com/acme/homebrew-tools.git
mise system brew untap acme/tools
```
Fully-qualified third-party tap formulae such as
`brew:railwaycat/emacsmacport/emacs-mac` fail with an explicit unsupported
message until mise can resolve and install them directly.

This exists because shared-library packages — postgres, ffmpeg, imagemagick,
php — fundamentally can't be served by mise's per-project backends like
Expand Down Expand Up @@ -164,11 +143,11 @@ operation.

## Limitations

- **Formulae only.** Casks (GUI apps) and `brew services` are not
implemented.
- **Tapped formulae require Homebrew.** mise's direct bottle/source installer
is only for homebrew/core. Fully-qualified third-party tap formulae are
delegated to a real `brew` command.
- **homebrew/core formulae only.** Casks (GUI apps), `brew services`, and
third-party tap formulae are not implemented.
- **No `brew` executable proxying.** Unsupported Homebrew features fail
rather than shelling out to Homebrew. This keeps `brew` usable on machines
without Homebrew installed.
- **Source builds cover the common formula shapes.** mise's formula shim
implements the widely-used subset of the DSL (see
[Source formulae](#source-formulae)); formulae that reach beyond it fail
Expand Down
3 changes: 3 additions & 0 deletions e2e/cli/test_system_status
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ EOF
assert_succeed "mise system status"
assert_contains "mise system status 2>&1" "invalid system package spec"

# tapped formulae must not proxy to the brew CLI
assert_fail "mise system install --dry-run brew:owner/tap/formula" "refusing to proxy to \`brew\`"

# empty [system.packages] section
cat <<EOF >mise.toml
[system.packages]
Expand Down
31 changes: 0 additions & 31 deletions mise.usage.kdl
Original file line number Diff line number Diff line change
Expand Up @@ -2898,37 +2898,6 @@ ever acted on when explicitly requested with `mise system install` (or
`mise bootstrap`). Login shell changes are current-user settings applied
with `chsh -s`.
"""#
cmd brew subcommand_required=#true help="Manage Homebrew taps used by system packages" {
long_help #"""
Manage Homebrew taps used by system packages

These commands shell out to Homebrew and do not modify `mise.toml`. Use
`[system.brew.taps]` when you want tap sources shared in config.
"""#
cmd tap help="Tap a Homebrew formula repository" {
after_long_help #"""
Examples:

$ mise system brew tap railwaycat/emacsmacport
$ mise system brew tap acme/tools https://git.example.com/acme/homebrew-tools.git

"""#
flag "-n --dry-run" help="Print the command that would run without running it"
arg <TAP> help="Tap name, e.g. `owner/repo`"
arg "[URL]" help="Git URL for non-GitHub or otherwise custom taps" required=#false
}
cmd untap help="Untap Homebrew formula repositories" {
alias remove rm
after_long_help #"""
Examples:

$ mise system brew untap railwaycat/emacsmacport

"""#
flag "-n --dry-run" help="Print the command that would run without running it"
arg <TAPS>… help="Tap name(s), e.g. `owner/repo`" var=#true
}
}
cmd install help=#"""
Install missing system packages from `[system.packages]`, apply files
from `[system.files]` and edits from `[system.edits]`, write macOS
Expand Down
32 changes: 0 additions & 32 deletions src/cli/system/brew/mod.rs

This file was deleted.

31 changes: 0 additions & 31 deletions src/cli/system/brew/tap.rs

This file was deleted.

27 changes: 0 additions & 27 deletions src/cli/system/brew/untap.rs

This file was deleted.

6 changes: 0 additions & 6 deletions src/cli/system/mod.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
use clap::Subcommand;
use eyre::Result;

#[cfg(unix)]
mod brew;
pub(super) mod driver;
pub(super) mod install;
mod status;
Expand Down Expand Up @@ -33,8 +31,6 @@ pub struct System {

#[derive(Debug, Subcommand)]
enum Commands {
#[cfg(unix)]
Brew(brew::SystemBrew),
Install(install::SystemInstall),
Status(status::SystemStatus),
Upgrade(upgrade::SystemUpgrade),
Expand All @@ -44,8 +40,6 @@ enum Commands {
impl System {
pub async fn run(self) -> Result<()> {
match self.command {
#[cfg(unix)]
Commands::Brew(cmd) => cmd.run().await,
Commands::Install(cmd) => cmd.run().await,
Commands::Status(cmd) => cmd.run().await,
Commands::Upgrade(cmd) => cmd.run().await,
Expand Down
2 changes: 0 additions & 2 deletions src/cli/system/use.rs
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@ pub struct SystemUse {
impl SystemUse {
pub async fn run(self) -> Result<()> {
Settings::get().ensure_experimental("mise system")?;
let config = crate::config::Config::get().await?;
let mut by_mgr: IndexMap<String, Vec<PackageRequest>> = IndexMap::new();
let mut entries: Vec<(String, String)> = vec![];
for spec in &self.packages {
Expand All @@ -72,7 +71,6 @@ impl SystemUse {
None => requests.push(request),
}
}
system::attach_brew_tap_urls(&config, &mut by_mgr);
// resolve managers before touching the config file so a typo'd
// manager doesn't get written
let mgrs = system::packages_from_requests(by_mgr)?;
Expand Down
Loading
Loading