CLI

One command.
Every theme.

The family installer for Slatewave. One CLI to install, activate, update, and uninstall every theme — backed by per-theme manifests, idempotent activates, and clean uninstalls.

Beta The CLI is in beta — expect rough edges, and please report what breaks. Open an issue →

brew tap kevinlangleyjr/slatewave
brew install slatewave

macOS and Linux via Homebrew · Windows binaries on the GitHub releases page →

Stars
★ 1
Latest release
v0.0.23 · 2 weeks ago
Last commit
4 days ago

What it replaces

Stop pasting install rituals.

Per-theme manifests encode the install paths, activation steps, and post-hooks for every tool — so you stop curating shell snippets.

Before

mkdir -p "$(bat --config-dir)/themes" \
 && curl -fsSL https://raw.githubusercontent.com/kevinlangleyjr/bat-slatewave/main/Slatewave.tmTheme \
      -o "$(bat --config-dir)/themes/Slatewave.tmTheme" \
 && bat cache --build \
 && echo 'export BAT_THEME=Slatewave' >> ~/.zshrc

After

slatewave install bat

First run

Detect, pick, install.

slatewave init walks you through the family — only the tools already on this machine are surfaced, and only what you check actually gets installed.

slatewave init
Detecting Slatewave-supported tools on this machine…
● bat (v0.24.0)
● btop (v1.4.0)
● ghostty (v1.0.1)
● vscode (1.96.0)
○ logseq (not detected — skipped)
? Install Slatewave for which tools? (space to toggle, enter to confirm)
◆ bat ◆ btop ◆ ghostty ◆ vscode
✓ bat installed (curl → ~/.config/bat/themes)
✓ btop installed (curl → ~/.config/btop/themes)
✓ ghostty installed (clone → ~/.config/ghostty/themes/slatewave)
✓ vscode installed (code --install-extension)
4 themes installed · 0 errors · run `slatewave status` to view

Commands

The full surface area.

Every command is fully completion-aware in zsh, bash, and fish — theme names autocomplete on install, only installed themes autocomplete on uninstall.

  • slatewave init

    Interactive setup wizard — detect the tools on this machine, multi-select what to install, and run the install through a live dashboard.

  • slatewave browse

    Interactive TUI list with filter, install, and uninstall — ↑/↓ to navigate, / to filter, i / u to install or uninstall the focused row.

  • slatewave list

    Every theme in the family, with ● / ○ markers showing which ones are installed.

  • slatewave install <theme>

    Install and activate one theme. Add --all to install every shipping theme, or --category=editor to install a category.

  • slatewave install --interactive

    Live progress dashboard instead of streamed steps — useful for --all or --category.

  • slatewave install <theme> --dry-run

    Preview the install plan without writing anything.

  • slatewave update <theme>

    Re-fetch curl assets and git pull clones. --all updates every installed theme.

  • slatewave uninstall <theme>

    Reverse files, restore backups from before the install, and remove appended shell-rc lines.

  • slatewave status [theme]

    Show the install footprint and paths for one theme — or every installed theme.

  • slatewave doctor

    Diagnose drift across installed themes (read-only). Add --fix to interactively remediate stale, missing-tool, or orphan rows.

Design rules

What it will and won't do.

The CLI is opinionated about staying in its lane. These are the four rules every manifest is held to.

  1. It does not install the underlying tool

    If bat is not on $PATH, slatewave install bat errors. Install your tool via brew or your package manager first — this is a theme installer, one job at a time.

  2. Detection before action

    Every manifest declares a detect_command (bat --version, btop --version). Failing detection bails before any filesystem changes happen.

  3. Idempotent activates

    shell-rc lines and ini-key edits no-op when already in place. Re-running an install on a clean install changes nothing.

  4. Backups before edits

    Any manifest whose activate type replaces an existing config line writes a .slatewave.<timestamp>.bak first. slatewave uninstall restores from it.

  5. Hide what will not work

    The CLI is OS-aware. Themes that do not support the current platform are filtered out of list, browse, init, and tab-completion. An explicit install for an unsupported theme errors out before any side-effects.

Cross-platform

Runs on macOS, Linux, and Windows.

Every manifest declares which OSes it works on. The CLI filters list, browse, init, and tab-completion to match — so you only see themes you can actually install. An explicit install for an unsupported theme errors out before any side-effects.

Get the CLI.

Two repos: the Go binary and the Homebrew tap. WTFPL — do whatever you want with it.