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.
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:
- Runs
cargo installformaestro-daemonandmaestro-cli(pinned to the committedCargo.lockvia--locked). - Optionally runs
maestrod configureto drop a~/.config/maestrod/config.toml. - 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.