<!-- @generated by usage-cli from usage spec -->
# `mise bootstrap`

- **Usage**: `mise bootstrap [FLAGS] <SUBCOMMAND>`
- **Source code**: [`src/cli/bootstrap/mod.rs`](https://github.com/jdx/mise/blob/main/src/cli/bootstrap/mod.rs)

[experimental] Set up a machine for the current config in one command

Runs the bootstrap steps for the current config in order:

0. `[bootstrap.hooks.pre-packages]` — optional setup hook
1. `mise bootstrap packages install` — install missing
   `[bootstrap.packages]`
   then `[bootstrap.hooks.post-packages]`
2. `mise dotfiles apply` — apply dotfiles from `[dotfiles]`
   surrounded by `pre-dotfiles`/`post-dotfiles` hooks
3. `mise bootstrap macos-defaults apply` — write
   `[bootstrap.macos.defaults]` entries (macOS)
   surrounded by `pre-defaults`/`post-defaults` hooks
4. `mise bootstrap launchd apply` — install/load macOS LaunchAgents
5. `mise bootstrap systemd apply` — install/start systemd user services
   (Linux)
6. `mise bootstrap user apply` — set `[bootstrap.user].login_shell`
   (Unix)
   surrounded by `pre-user`/`post-user` hooks
7. `mise install` — install missing tools from `[tools]`
   surrounded by `pre-tools`/`post-tools` hooks
8. `mise run bootstrap` — if a task named `bootstrap` is defined
9. `[bootstrap.hooks.final]` — optional final hook

The declarative steps converge — anything already in its desired state
is skipped, so re-running is safe. The `bootstrap` task runs on every
invocation; keep it idempotent. Use it for any project-specific setup
that doesn't fit the declarative sections (cloning repos, seeding
databases, etc.) — it runs with the installed tools on PATH.

## Flags

### `-n --dry-run`

Print what would happen without installing anything

### `-y --yes`

Skip confirmation prompts

### `--force-dotfiles`

Overwrite existing files that conflict with whole-file dotfile entries

### `--skip… <SKIP>`

Skip one or more bootstrap parts

Can be passed multiple times or as a comma-separated list.

**Choices:**

- `packages`
- `dotfiles`
- `defaults`
- `launchd`
- `systemd`
- `user`
- `tools`
- `task`
- `final-hook`

### `--update`

Refresh system package manager metadata first (apk: `--update-cache`, apt: `apt-get update`)

## Subcommands

- [`mise bootstrap launchd <SUBCOMMAND>`](/cli/bootstrap/launchd.md)
- [`mise bootstrap macos-defaults <SUBCOMMAND>`](/cli/bootstrap/macos-defaults.md)
- [`mise bootstrap packages <SUBCOMMAND>`](/cli/bootstrap/packages.md)
- [`mise bootstrap systemd <SUBCOMMAND>`](/cli/bootstrap/systemd.md)
- [`mise bootstrap user <SUBCOMMAND>`](/cli/bootstrap/user.md)

Examples:

```
mise bootstrap                    # packages + dotfiles + tools + bootstrap task
mise bootstrap --force-dotfiles   # replace conflicting dotfile targets
mise bootstrap --skip tools,task  # skip tool installation and the bootstrap task
mise bootstrap packages install --yes
mise bootstrap macos-defaults status
mise bootstrap launchd apply --dry-run
mise bootstrap systemd apply --dry-run
mise bootstrap user apply --dry-run
```
