Matugen:从配色生成到应用刷新

本页目录

Matugen 根据图片或颜色生成调色板,再把颜色填入模板。应用是否立即变色,还取决于它怎样读取主题文件以及是否支持重载。排错时应把“生成”和“刷新”分开。

本文示例以 Matugen 4.1.0 为核对版本。先用独立目录完成实验,再接入正式桌面配置,避免生成过程覆盖正在使用的主题。

配色链的四个环节

环节产物常见问题
输入壁纸路径、种子颜色、明暗模式图片不存在,模式与外壳不一致
生成primary、surface、on_surface 等角色选错 scheme 或角色
模板Ghostty、GTK、Waybar 等格式的文件模板语法错误,输出路径不对
刷新当前应用读取新配置文件已更新,进程仍使用旧内容

surface 适合作为表面背景,on_surface 是对应前景角色,primary 用于强调。直接挑三个看起来好看的颜色,可能破坏文字与背景之间的关系;还应在应用中检查禁用、选中和警告状态。

先在独立目录生成

建立一个新的练习目录并进入,例如 matugen-lab。保存下面的 ghostty.template:

background = {{colors.surface.default.hex}}
foreground = {{colors.on_surface.default.hex}}
cursor-color = {{colors.primary.default.hex}}

同目录保存 config.toml:

[config]

[templates.terminal]
input_path = "ghostty.template"
output_path = "generated.theme"

从这个目录运行,显式指定配置文件:

matugen -c ./config.toml color hex '#6750a4'

查看生成结果:

cat generated.theme

应看到三项实际颜色,没有残留 {{...}}。4.1.0 的 .hex 值已经带 #,模板不能再手工加一个 #;否则 GTK CSS 等目标可能得到 ##...。升级模板引擎后,先在这里验证变量格式,再调整正式输出。Matugen

颜色作为输入便于复现。改成壁纸时,将命令换为 matugen -c ./config.toml image ./wallpaper.png,并确保图片存在。明暗模式可以通过 --mode light / --mode dark 指定。

为每个应用编写自己的模板

同一个角色需要转换成目标应用接受的语法。Waybar 使用 GTK CSS,模板可以是:

@define-color main-bg {{colors.surface.default.hex}};
@define-color main-fg {{colors.on_surface.default.hex}};
@define-color accent {{colors.primary.default.hex}};

Ghostty 的主题使用 key = value,Zellij 使用 KDL,不能把同一份输出直接复制给所有应用。先让每个应用用静态颜色正常工作,再用模板生成相同结构。

正式配置中的每个模板应写明输入和输出路径。输出目录需要存在且可写,文件应只包含该应用需要的语法。对有配置校验器的应用,先校验临时输出,再将其发布到正式主题路径。

post_hook 与刷新策略

Matugen 的模板可以关联生成后的 hook。hook 负责通知应用重新读取配置,不应替代生成结果检查。最初接入时先不设置 hook,确认文件正确后再加刷新动作。

应用建议验证方式
Ghostty生成 themes 文件,执行配置检查,再测试其重载动作
Waybar使用独立测试配置;正确后重载指定实例或对应服务
GTK 应用检查生成 CSS;部分应用需要新建窗口或重启
Zellij检查 KDL 主题和所选主题名,区分新会话与现有会话
外壳使用该外壳公开的主题接口与配置约定

不要把某个应用支持的 SIGUSR2 推广到所有程序。旧配置向终端广播 OSC 颜色序列是自定义脚本行为;它有终端实例选择、复用器转发和应用覆盖颜色等边界。需要热更新时,优先使用目标应用明确支持的机制。

当前 Caelestia 实例如何连接

当前本地流程由 Caelestia 选择壁纸、明暗模式和方案,再通过 caelestia-sync-app-theme 脚本映射到 Matugen 参数。脚本读取当前壁纸状态,对 scheme 名称做转换,并用文件锁避免并发生成。

Matugen 配置包含 Ghostty、Zellij、GTK、KDE、Fuzzel 和 Fcitx5 等输出。Caelestia 外壳本身有自己的主题状态,并不是继续读取 ii 时代的 Quickshell colors.json。

共同壁纸不保证每个界面像素颜色完全相同,因为外壳与模板可能使用不同角色和生成选项。应验证输入、模式与角色选择是否一致,再判断差异是否需要调整。

一处没有更新时怎样定位

  1. 确认此次使用的图片路径、模式和配置文件;不要只检查旧默认配置。
  2. 在独立目录运行同样的生成命令,检查退出状态和输出内容。
  3. 比较正式输出路径、修改时间与应用实际读取的路径。
  4. 单独执行应用支持的重载操作,检查其日志。
  5. 若新窗口正确、旧窗口不变,继续查运行时刷新能力;若二者都错误,回查模板与主题选择。

恢复时先还原主题文件和应用配置,再按应用支持的方式重载。多应用生成并不是天然的全局事务,某个模板失败后可能存在部分更新,应逐项核对。