# Getting started

> Install zc-workstation and the tools it drives on macOS, Linux or Windows, then plan and apply.

## Install the tools it drives

`zc-workstation` runs your package manager, chezmoi and mise. Install the ones your config uses. A missing one shows up in the plan as a `MANUAL` step, so you can also start with `plan` and follow it.

**macOS**

```console
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
$ brew install chezmoi mise mas
```

**Ubuntu and Debian**

```console
$ sudo apt-get install -y curl git
$ sh -c "$(curl -fsLS get.chezmoi.io)" -- -b ~/.local/bin
$ curl https://mise.run | sh
```

**Fedora**

```console
$ sudo dnf install -y chezmoi git
$ curl https://mise.run | sh
```

**Windows**

```powershell
PS> winget install --id twpayne.chezmoi --exact
PS> winget install --id jdx.mise --exact
```

## Install zc-workstation

The Homebrew cask, Linux packages and Windows zips come with each release. Before the first one, install with Go, or run `make install` in a clone.

**Homebrew**

```console
$ brew tap zoolcoder/zc-workstation https://github.com/zoolcoder/zc-workstation
$ brew install --cask zc-workstation
```

**Linux packages**

Each release has `.deb`, `.rpm` and `.apk` packages.

```console
$ sudo apt-get install ./zc-workstation_*_linux_amd64.deb
```

**Windows**

Download the `windows_amd64` or `windows_arm64` zip from the releases page and put `zc-workstation.exe` on your `PATH`.

**Go**

```console
$ go install github.com/zoolcoder/zc-workstation/cmd/zc-workstation@latest
```

Needs Go 1.26 or later.

## Write a config

Start from `zc-workstation.example.yaml`. It declares a target for each system and points at the sample manifests in `example/`. Point it at your own dotfiles repository instead. [Writing a config](configuration.html) lists every key.

```console
$ mkdir -p ~/.config/zc-workstation
$ cp zc-workstation.example.yaml ~/.config/zc-workstation/zc-workstation.yaml
$ zc-workstation validate
/Users/me/.config/zc-workstation/zc-workstation.yaml: 6 target(s), valid
```

## Plan, then apply

```console
$ zc-workstation plan -out plan.json
CREATE  brew      brew:chezmoi  install with brew
CREATE  dotfiles  .gitconfig    add
MANUAL  runtimes  trust         mise does not trust .../mise.toml; review it, then run mise trust .../mise.toml

1 of these cannot be automated and are yours to do.
$ zc-workstation apply plan.json
done  CREATE brew brew:chezmoi
done  CREATE dotfiles .gitconfig
applied and verified
```

Installs run attached to your terminal, so `sudo`, a license prompt or the App Store sign-in can ask you directly.

## Check the machine

```console
$ zc-workstation doctor
ok    binary           /opt/homebrew/bin/zc-workstation
ok    system           macbook darwin/arm64
ok    config           /Users/me/.config/zc-workstation/zc-workstation.yaml, 6 target(s)
ok    program brew     /opt/homebrew/bin/brew
ok    program chezmoi  /opt/homebrew/bin/chezmoi
ok    program mise     /opt/homebrew/bin/mise
warn  target brew      78 of 80 packages installed (brew)
ok    target apt       not for darwin, only linux
ok    target dotfiles  2 of 2 dotfiles in place
ok    target runtimes  7 of 7 tools installed
```

Then open the [dashboard](ui.html) with `zc-workstation ui`.
