jdx/mise · error

bootstrap users and groups are only supported on Linux

Error message

bootstrap users and groups are only supported on Linux

What it means

On non-Linux platforms `accounts_non_linux.rs` replaces the accounts module. `requests_from_config` is the strict reader used by commands that must reflect real account state; it bails whenever any config file defines `[bootstrap.users]` or `[bootstrap.groups]`, because account inspection is impossible there. The softer `prepare_requests_from_config` only warns and returns empty requests.

Source

Thrown at src/system/accounts_non_linux.rs:96

impl UserRequest {
    pub fn plan(&self) -> ResourcePlan {
        ResourcePlan::new(
            ResourceId::new("user", &self.name),
            "unsupported",
            "unsupported",
            ResourceAction::Unknown,
        )
    }

    pub fn current_primary_group(&self) -> Option<&str> {
        None
    }
}

pub fn requests_from_config(config: &Config) -> Result<AccountRequests> {
    if accounts_configured(config) {
        bail!("bootstrap users and groups are only supported on Linux");
    }
    Ok(AccountRequests::default())
}

pub fn prepare_requests_from_config(config: &Config) -> Result<AccountRequests> {
    if accounts_configured(config) {
        warn!("ignoring [bootstrap.users] and [bootstrap.groups] on non-Linux host");
    }
    Ok(AccountRequests::default())
}

pub fn plans(_requests: &AccountRequests) -> Vec<ResourcePlan> {
    vec![]
}

pub fn apply(requests: &AccountRequests, _dry_run: bool, _yes: bool) -> Result<bool> {
    if !requests.groups.is_empty() || !requests.users.is_empty() {
        bail!("bootstrap users and groups are only supported on Linux");

View on GitHub (pinned to 9dcfcaa0dc)

Solutions

  1. Move account tables into a config only loaded on the Linux hosts (e.g. `/etc/mise/mise.toml` or a per-host `mise.local.toml` kept out of sync).
  2. Or stop running the strict accounts commands on non-Linux machines by gating them on `uname`.
  3. Verify with `mise bootstrap accounts status` on a Linux host that the config still parses there.

Example fix

# before: mise.toml synced to every machine
[bootstrap.users.deploy]
group = "deploy"

# after: keep that table only in the Linux host's /etc/mise/mise.toml
# (and remove it from the synced project/global config)
Defensive patterns

Strategy: validation

Validate before calling

// before calling the strict reader, check the platform yourself
if !cfg!(target_os = "linux") {
    assert!(config.config_files.values().all(|cf| {
        cf.bootstrap_config().map_or(true, |b| b.users.is_empty() && b.groups.is_empty())
    }), "account tables present on a non-Linux host");
}

Prevention

When it happens

Trigger: Running a strict accounts command (e.g. `mise bootstrap accounts status`/plan-style reads) on macOS or Windows while any mise config file (project, local, global, system) contains non-empty `[bootstrap.users]` or `[bootstrap.groups]` tables.

Common situations: A mise.toml written for Linux servers committed to a repo that is also checked out on Mac workstations; dotfiles syncing a global config with account tables to every machine.

Related errors


AI-assisted analysis of jdx/mise@9dcfcaa0dc (2026-08-17). Data as JSON: /api/errors/253971146eadf04d. Report an issue: GitHub.