A one-command terminal setup for macOS and Linux — themes, prompts, fonts, and tools all in sync.
English · 简体中文
Pick a theme — slate previews the whole stack live, no reload.
I could never find a terminal-beautification tool that actually fit the way I use my machine. Every time I wanted a nice setup, I ended up chasing dotfile repos, copy-pasting snippets, and stacking plugins on top of plugins. After all that effort the environment would usually end up a mess, and when I needed to recover I had to dig through everything to figure out what had actually been changed.
So I wrote slate. One command sets up a coordinated look across your terminal, prompt, fonts, and CLI tools. Everything slate writes lives in files it owns, so when you want it gone, slate clean actually cleans.
# macOS — Homebrew
brew install MoonMao42/tap/slate-cli
# macOS or Linux — install script
curl -fsSL https://raw.githubusercontent.com/MoonMao42/slate/main/install.sh | sh
# Rust users
cargo install slate-cliThen run slate setup.
- One palette across Ghostty, Kitty, Alacritty, Neovim, Starship, bat, delta, ls, eza, lazygit, fastfetch, tmux, and zsh-syntax-highlighting.
- 🌓 Auto dark/light pairing — native watcher on macOS, XDG Desktop Portal (with GNOME fallback) on Linux.
- Non-destructive: slate writes into managed include files and never edits your dotfiles in place. Snapshots before every change; one command to roll back.
- One visual language across every command. Headings, severity markers, and tree receipts all flow through the same render contract, so
slate setup,slate status, and an error message all look like they came from the same tool. - Small sounds on theme apply, picker navigation, setup completion, and errors. Quiet by design; turn it off with
slate config set sound off. (v0.3.0 recordings below are silent — see footnote at the bottom of this section.)
Terminal, prompt, system info, CLI utilities — same palette everywhere.
slate list — 9 family bands, Solarized landing right after Catppuccin.
* Recordings render silently in v0.3.0; a future release will refresh with audio once the curated SFX library lands.
Slate ships 20 Neovim colorschemes mirroring every terminal family and reloads open buffers the moment you switch.
Works with LazyVim, kickstart.nvim, or a bare init.lua.
Light mode → your light theme + matching prompt, syntax, tools
Dark mode → your dark theme + matching prompt, syntax, tools
Enable from the hub (slate → Auto-Theme). Every theme family ships a built-in dark/light pair, and you can override the pairing there too.
Official targets: x86_64-apple-darwin, aarch64-apple-darwin, x86_64-unknown-linux-gnu, aarch64-unknown-linux-gnu. Linux is validated on Debian/Ubuntu + GNOME.
| Tier | Platform | Status & Notes |
|---|---|---|
| Tier 1 — first-class (CI smoke-tested every release) | macOS (Apple Silicon + Intel) | Ghostty, Kitty, Alacritty, Terminal.app (partial — no live preview, no opacity, font cannot auto-apply). |
| Tier 1 — first-class (CI smoke-tested every release) | Debian / Ubuntu + GNOME (x86_64 + aarch64) | Ghostty, Kitty, Alacritty all wired up; live reload works on each. |
| Tier 2 — best effort (wired up, not in CI) | Other Linux distros (Fedora, Arch) and other desktops (KDE, Sway) | Themes still apply; live reload depends on the terminal you run. |
| Tier 3 — out of scope | Windows | No plans to support. |
Shells: zsh, bash, fish. zsh is locally verified; bash and fish are wired up but pending broader testing.
Per-terminal status
| Terminal | Status | Notes |
|---|---|---|
| Ghostty | Recommended | Full support — live reload, opacity, watcher relaunch |
| Kitty | Full | Live palette push via kitten @ set-colors; opacity + Nerd Font sync |
| Alacritty | Full | Inline preview and reload |
| Terminal.app | Partial | macOS only — no live preview, no opacity, font cannot be auto-applied |
| Other | Best effort | Shell and CLI tool theming works; terminal visuals depend on the app |
All commands
slate # interactive hub
slate setup # guided setup
slate setup --quick # non-interactive, defaults
slate setup --only starship # retry a single tool
slate theme # live preview picker
slate theme <name> # apply by name
slate theme --auto # follow system dark/light
slate font # Nerd Font picker
slate config set opacity frosted # solid / frosted / clear
slate config set sound off # toggle feedback sound
slate export # export current config as URI
slate import <uri> # re-apply from URI
slate share # screenshot terminal with watermark
slate status # show current config
slate list # list available themes
slate restore # pick a snapshot to roll back
slate restore --list # list restore points
slate clean # remove everything slate wroteHow it works
Slate composes managed config files alongside your existing setup rather than replacing your dotfiles.
~/.config/slate/config.toml # preferences (theme, font, toggles)
~/.config/slate/auto.toml # dark/light theme pairing
~/.config/slate/managed/<tool>/* # generated assets slate owns
~/.config/<tool>/... # your files, untouched
For Ghostty: config-file = .... For Kitty/Alacritty: managed include/import entries. For zsh/bash/fish: a removable marker block in the shell rc. For Neovim: a pcall(require, 'slate') marker block in init.lua (init.vim works too) that falls back silently if slate is uninstalled. Slate-owned files stay slate-owned; yours stay yours.
20 variants across 9 families: Catppuccin · Solarized · Tokyo Night · Rosé Pine · Kanagawa · Everforest · Dracula · Nord · Gruvbox.
All 20 variants — palette gallery
Regenerate with scripts/render-theme-gallery.sh; future drift is caught by tests/docs_invariants.rs. Swatch order, left to right: background · foreground · brand accent · red.
| Family | Variant | ID | Appearance | Palette |
|---|---|---|---|---|
| Catppuccin | Catppuccin Frappé | catppuccin-frappe |
Dark | |
| Catppuccin | Catppuccin Latte | catppuccin-latte |
Light | |
| Catppuccin | Catppuccin Macchiato | catppuccin-macchiato |
Dark | |
| Catppuccin | Catppuccin Mocha | catppuccin-mocha |
Dark | |
| Solarized | Solarized Dark | solarized-dark |
Dark | |
| Solarized | Solarized Light | solarized-light |
Light | |
| Tokyo Night | Tokyo Night Dark | tokyo-night-dark |
Dark | |
| Tokyo Night | Tokyo Night Light | tokyo-night-light |
Light | |
| Rosé Pine | Rose Pine Dawn | rose-pine-dawn |
Light | |
| Rosé Pine | Rose Pine Main | rose-pine-main |
Dark | |
| Rosé Pine | Rose Pine Moon | rose-pine-moon |
Dark | |
| Kanagawa | Kanagawa Dragon | kanagawa-dragon |
Dark | |
| Kanagawa | Kanagawa Lotus | kanagawa-lotus |
Light | |
| Kanagawa | Kanagawa Wave | kanagawa-wave |
Dark | |
| Everforest | Everforest Dark | everforest-dark |
Dark | |
| Everforest | Everforest Light | everforest-light |
Light | |
| Dracula | Dracula | dracula |
Dark | |
| Nord | Nord | nord |
Dark | |
| Gruvbox | Gruvbox Dark | gruvbox-dark |
Dark | |
| Gruvbox | Gruvbox Light | gruvbox-light |
Light |
Built with AI assistance, with every change reviewed and tested by a human before it lands.
MIT.
Built on top of great work from others: Ghostty · Kitty · Alacritty · Neovim · Starship · bat · delta · eza · lazygit · fastfetch · tmux · zsh-syntax-highlighting · Nerd Fonts.


