This repository has been archived on 2026-10-08. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
maestro/docs/INSTALL.md
T
naps62-yolo a4593c3b19
ci / rust (push) Successful in 1m30s
feat(maestro): add install.sh bootstrap for one-line install/update
Single command for both first install and subsequent updates:

  curl -sSf https://git.naps.pt/naps62/maestro/raw/branch/main/install.sh | sh

Builds `maestro-installer` into a temp `--root`, runs the wizard, cleans up —
so only `maestrod` and `maestro` persist in `~/.cargo/bin`. Re-running updates
in place via cargo install's overwrite semantics. Wizard flags pass through
with `sh -s --`. Docs updated to lead with the one-liner.

Refs NAP-225.
2026-05-25 14:37:52 +00:00

3.1 KiB

Installing Maestro

One command, used for both first install and subsequent updates:

curl -sSf https://git.naps.pt/naps62/maestro/raw/branch/main/install.sh | sh

The bootstrap script builds maestro-installer into a temp directory, runs the wizard, and cleans up — only maestrod and maestro end up persisted in ~/.cargo/bin. Re-run any time to update; cargo install overwrites in place.

Pass flags through to the wizard via sh -s --:

curl -sSf https://git.naps.pt/naps62/maestro/raw/branch/main/install.sh | sh -s -- --yes --no-systemd

The wizard:

  1. Runs cargo install for maestro-daemon and maestro-cli (pinned to the committed Cargo.lock via --locked).
  2. Optionally runs maestrod configure to drop a ~/.config/maestrod/config.toml.
  3. On systemd hosts, optionally writes a user unit at ~/.config/systemd/user/maestrod.service, reloads systemd, and offers to enable + start it.

Both binaries land in ~/.cargo/bin — make sure that's on your $PATH.

Flags

Flag Purpose
--git <url> Install from a different git repo (default: this one).
--branch <name> Pin a branch with --git.
--path <dir> Install from a local workspace checkout (--path + -p <crate>).
--no-locked Drop --locked from cargo install (resolves a fresh dep tree).
--exec-start <path> Override the systemd unit's ExecStart (default ~/.cargo/bin/maestrod).
--no-systemd Skip the systemd step even if detected.
--no-configure Skip the maestrod configure step.
-y, --yes Non-interactive: install binaries + drop systemd unit + reload + enable, but don't auto-run configure or auto-start the unit (those need real config).

What the systemd unit looks like

The wizard writes a user unit (systemctl --user), since maestrod runs per-user and uses tmux sockets under $XDG_RUNTIME_DIR. Body:

[Unit]
Description=Maestro per-host daemon (maestrod)
Documentation=https://git.naps.pt/naps62/maestro
After=network-online.target

[Service]
Type=simple
ExecStart=%h/.cargo/bin/maestrod
Restart=on-failure
RestartSec=5

[Install]
WantedBy=default.target

Check status / logs:

systemctl --user status maestrod
journalctl --user -u maestrod -f

Running the wizard without the bootstrap script

If you'd rather not pipe a script:

cargo install --git https://git.naps.pt/naps62/maestro maestro-installer
maestro-install

This leaves maestro-installer permanently in ~/.cargo/bin — the bootstrap script avoids that by installing to a scratch dir.

Fully manual install (no wizard)

cargo install --git https://git.naps.pt/naps62/maestro --locked maestro-daemon
cargo install --git https://git.naps.pt/naps62/maestro --locked maestro-cli
maestrod configure
maestrod          # foreground; or wire your own service manager

Non-Linux hosts

The wizard works on macOS for the cargo install + maestrod configure parts. The systemd step is automatically skipped (probe of /run/systemd/system). launchd integration is not yet supported — start maestrod from your shell or your own service manager.