MCPcopy Index your code
hub / github.com/MoonMao42/slate

github.com/MoonMao42/slate @v0.4.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.4.0 ↗ · + Follow
2,488 symbols 7,130 edges 145 files 563 documented · 23%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

slate logo

slate

为 macOS 和 Linux 准备的一键终端配置:主题、提示符、字体、周边工具一次性调成同一套。

English · 简体中文

Latest release macOS and Linux Built with Rust MIT license

slate theme picker swapping Solarized Dark and Light

选一个主题,slate 把整套终端实时切过去,不用重启。

为什么做这个

我一直没找到一款真正顺手的终端美化工具。每次想把终端弄漂亮一点,就得去翻别人的 dotfile 仓库、到处抄配置、叠一堆插件。折腾半天,环境可能一团糟还恢复不过来,必须得去研究到底动了什么。

所以我写了 slate:一条命令把终端、提示符、字体、CLI 工具统一调成一套风格;所有 slate 写的东西都放在它自己管的文件里,想卸载就 slate clean,是真的干净。

安装

# macOS · Homebrew
brew install MoonMao42/tap/slate-cli

# macOS 或 Linux · 一键脚本
curl -fsSL https://raw.githubusercontent.com/MoonMao42/slate/main/install.sh | sh

# Rust 用户
cargo install slate-cli

然后运行 slate setup

slate setup demo

slate setup 一键配置。

它做了什么

  • 一套配色同步到 Ghostty、Kitty、Alacritty、Neovim、Starship、bat、delta、ls、eza、lazygit、fastfetch、tmux、zsh-syntax-highlighting。
  • 🌓 自动跟随系统深浅色:macOS 走原生 watcher,Linux 优先走 XDG Desktop Portal(GNOME 可退回 gsettings)。
  • 不改你的 dotfile:slate 写进自己管的 include 文件里,每次改动前先快照,一条命令可回滚。
  • 所有命令共用一套视觉语言。标题、提示符号、树形结果都走同一个渲染契约,所以 slate setupslate status、报错信息看起来都像出自一手。
  • 主题应用、选择器翻动、配置完成和报错都有轻微反馈音。默认安静设计,不喜欢就 slate config set sound off。(README 录屏是无声的;实际运行时已包含反馈音。)

fastfetch themed output

终端、提示符、系统信息、常用 CLI,全部共用同一套配色。

slate list 输出,展示 9 个主题家族分组

slate list —— 9 个家族分组,Solarized 紧跟在 Catppuccin 后面。

* GitHub README 录屏无声;安装后的 CLI 仍会播放内置反馈音,除非手动关闭。

Neovim 一起跟

slate 内置 20 套对应全部主题家族的 Neovim 配色,切换主题时已打开的 buffer 当场重载。

Neovim with Catppuccin Frappé

Neovim with Kanagawa Lotus

兼容 LazyVim、kickstart.nvim,或者一个裸 init.lua。

自动深浅色

浅色模式 → 浅色主题 + 匹配的提示符、语法高亮、工具配色
深色模式 → 深色主题 + 匹配的提示符、语法高亮、工具配色

从主菜单里开启(slate → Auto-Theme)。每个主题家族自带深浅色配对,也可以在主菜单里自己重新配对。

支持情况

官方构建目标:x86_64-apple-darwinaarch64-apple-darwinx86_64-unknown-linux-gnuaarch64-unknown-linux-gnu。Linux 主要在 Debian/Ubuntu + GNOME 上验证。

等级 平台 状态与说明
Tier 1 — 一线(每次发版 CI smoke test) macOS(Apple Silicon + Intel) Ghostty、Kitty、Alacritty、Terminal.app(部分支持——无 live preview、无透明度、字体无法自动应用)。
Tier 1 — 一线(每次发版 CI smoke test) Debian / Ubuntu + GNOME(x86_64 + aarch64) Ghostty、Kitty、Alacritty 全部接好;各自的热重载都跑通。
Tier 2 — 尽力而为(接好但不进 CI) 其他 Linux 发行版(Fedora、Arch)以及其他桌面(KDE、Sway) 主题仍能应用;热重载视所用终端而定。
Tier 3 — 不支持 Windows 没有支持计划。

Shell:zshbashfishzsh 已在本机验证;bashfish 已接入,尚待更大范围测试。

各终端逐项状态

终端 状态 说明
Ghostty 最推荐 完整支持——热重载、透明度、watcher 自动拉起
Kitty 完整 kitten @ set-colors 实时推送;透明度 + Nerd Font 同步
Alacritty 完整 行内预览与热重载
Terminal.app 部分 仅 macOS;不支持 live preview、不支持透明度、字体无法自动更换
其他 尽力而为 Shell 与 CLI 工具层主题通用;终端自身视觉效果看其能力

全部命令

slate                         # 交互式主菜单
slate setup                   # 引导式配置
slate setup --quick           # 非交互、默认值
slate setup --only starship   # 单独重配某个工具
slate theme                   # 带实时预览的主题选择器
slate theme <name>            # 按名称应用
slate theme --auto            # 跟随系统深浅色
slate font                    # Nerd Font 选择器
slate config set opacity frosted  # 透明度:solid / frosted / clear
slate config set sound off    # 反馈音开关
slate export                  # 把当前配置导成 URI
slate import <uri>            # 从 URI 恢复配置
slate share                   # 截取带水印的终端图
slate status                  # 查看当前配置
slate doctor ghostty          # 检查 Ghostty 配置问题
slate list                    # 列出所有主题
slate restore                 # 选一个快照回滚
slate restore --list          # 列出所有回滚点
slate clean                   # 清除 slate 写下的一切

工作原理

slate 通过独立的 include 文件跟你现有的配置共存,不会替换你的 dotfile:

~/.config/slate/config.toml        # 偏好(主题、字体、开关)
~/.config/slate/auto.toml          # 深浅色配对
~/.config/slate/managed/<tool>/*   # slate 自管的生成物
~/.config/<tool>/...               # 你自己的文件,原样不动

Ghostty 用 config-file = ...;Kitty/Alacritty 用 include/import;zsh/bash/fish 是 rc 文件里一段带明确 START/END 标记的代码块;Neovim 是 init.lua(或 init.vim)里一行 pcall(require, 'slate') —— slate 卸载后 pcall 自动降级为 no-op。slate 的文件归 slate 管,你自己的文件永远不动。

主题

共 20 款变体、9 个家族:Catppuccin · Solarized · Tokyo Night · Rosé Pine · Kanagawa · Everforest · Dracula · Nord · Gruvbox。

20 款变体 · 调色板预览

使用 scripts/render-theme-gallery.sh 重新生成;后续若有漂移,由 tests/docs_invariants.rs 兜底。色块顺序从左到右:背景 · 前景 · 品牌强调色 · 红色。

家族 变体 ID 外观 调色板
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

开发说明

借助 AI 辅助开发,每一处改动都经过人工 review 和测试后才合入。

许可

MIT。

致谢

站在一堆很棒的项目之上: Ghostty · Kitty · Alacritty · Neovim · Starship · bat · delta · eza · lazygit · fastfetch · tmux · zsh-syntax-highlighting · Nerd Fonts

Extension points exported contracts — how you extend this code

EventSink (Interface)
Sink trait — a downstream consumer (sound, analytics, …) that wants to react to [`BrandEvent`]s. Must be `Send + Sync` s [8 …
src/brand/events.rs
ToolAdapter (Interface)
Trait all tool adapters must implement. Adapters are responsible for: - Detecting if tool is installed - Knowing how to [16 …
src/adapter/mod.rs
PortalSettings (Interface)
(no doc)
src/platform/portal.rs
PlayBackend (Interface)
Injection seam — production = [`SubprocessPlayer`] (afplay / pw-play / ...); tests = `MockPlayer` capturing a `Vec<Sampl [2 …
src/brand/sound_sink.rs
PortalScreenshot (Interface)
(no doc)
src/platform/portal.rs
PortalRequest (Interface)
(no doc)
src/platform/portal.rs

Core symbols most depended-on inside this repo

path
called by 365
src/brand/roles.rs
fg
called by 225
src/cli/picker/preview/blocks.rs
get
called by 184
src/theme/mod.rs
config_dir
called by 56
src/adapter/opencode.rs
xdg_config_home
called by 54
src/env.rs
span
called by 54
src/cli/picker/preview/blocks.rs
mock_theme
called by 53
src/brand/render_context.rs
dispatch
called by 52
src/brand/events.rs

Shape

Function 1,775
Method 552
Class 103
Enum 52
Interface 6

Languages

Rust100%
Python1%

Modules by API surface

tests/integration_tests.rs75 symbols
src/adapter/ghostty.rs62 symbols
src/detection.rs60 symbols
src/config/shell_integration.rs57 symbols
src/adapter/nvim.rs57 symbols
src/cli/picker/state.rs48 symbols
src/cli/setup.rs47 symbols
src/cli/clean.rs45 symbols
src/adapter/font.rs44 symbols
src/config/mod.rs40 symbols
src/cli/font.rs40 symbols
src/cli/wizard_core.rs39 symbols

For agents

$ claude mcp add slate \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page