Skip to content

MoonMao42/slate

Repository files navigation

slate logo

slate

A one-command terminal setup for macOS and Linux — themes, prompts, fonts, and tools all in sync.

English · 简体中文

Latest release macOS and Linux Built with Rust MIT license

slate theme picker swapping Solarized Dark and Light
Pick a theme — slate previews the whole stack live, no reload.

Why I built this

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.

Install

# 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-cli

Then run slate setup.

slate setup demo
One command: slate setup.

What it does

  • 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.)

fastfetch themed output
Terminal, prompt, system info, CLI utilities — same palette everywhere.

slate list output showing 9 theme families
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.

Neovim follows along

Slate ships 20 Neovim colorschemes mirroring every terminal family and reloads open buffers the moment you switch.

Neovim with Catppuccin Frappé

Neovim with Kanagawa Lotus

Works with LazyVim, kickstart.nvim, or a bare init.lua.

Auto-theme

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.

Support

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 wrote
How 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.

Themes

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

Development

Built with AI assistance, with every change reviewed and tested by a human before it lands.

License

MIT.

Credits

Built on top of great work from others: Ghostty · Kitty · Alacritty · Neovim · Starship · bat · delta · eza · lazygit · fastfetch · tmux · zsh-syntax-highlighting · Nerd Fonts.

About

One-command terminal setup for macOS and Linux — themes, prompts, fonts, and tools all in sync.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages