站点配置

2026-07-21

站点级配置写在 __everkm/everkm.yaml。渲染时合并主题 everkm-theme.yaml 中的 configfolders站点配置覆盖主题默认值

模板中通过全局变量 __config 读取;目录级规则写在 folders 字段。

最小示例

config:
  timezone: Asia/Shanghai
  default_lang: zh_CN
  site:
    name: 我的站点
    description: 站点简介
    logo: ~/assets/logos/logo.svg

default_template: post.html

folders:
  "/":
    hide_in_url: true
  "/blog/":
    template: list.html
    url_id_suffix: false
  "/docs/":
    template: book.html
    query:
      nav_file: /docs/_nav.md
    breadcrumbs:
      - title: "@i18n:nav.docs"
        url: /docs/

config 常用字段

字段说明
config.timezone时区,默认 Asia/Chongqing
config.default_lang默认语言,影响 @i18n:t() 回退,默认 en_US
config.site站点名称、描述、Logo 等,具体字段取决于主题
config.code_highlight对象;server: true 时由发布引擎在服务端完成 fenced 代码块着色(主题引入 code-highlight.css,输出 syn-* class),省略或 server: false 时保持浏览器 Prism。嵌入方若无主题 CSS,可走引擎 API HighlightRenderOptions.inline_theme 使用内联颜色(见 highlight-packages/README.md
config.math_render对象;server: true 时由发布引擎将正文公式渲染为内联 SVG(Typst + mitex,主题可引入 math-svg.html 样式片段),省略或 server: false 时保持浏览器 KaTeX

config 下的字符串可使用 @i18n:<key> 引用语言包,见 多语言

主题特有配置(如 youlog 的 Algolia 搜索 config.algolia、导航 header_nav)写在 config 下。youlog 各字段说明见 theme-youlog。Algolia 推送与前端搜索配置见 嵌入式搜索

default_template

全站默认页面模板名称。某目录未在 folders 中指定 template 时使用。

可被 folders 中同级或子目录的 template 覆盖。

解析优先级(从高到低):

文章 front matter 的 template
  → 该目录 merged folders.template
  → everkm.yaml#default_template
  → everkm-theme.yaml#default_template

主题可在 everkm-theme.yaml 预设默认值;站点 everkm.yaml 中同名项覆盖主题。

folders 目录规则

everkm.yaml 中按 URL 路径前缀为目录声明渲染规则;主题可在 everkm-theme.yaml#folders 预设默认值,站点按同 path 键覆盖。子目录与祖先合并继承,深层覆盖浅层。

常用字段:

字段说明
url_slug自定义 URL 路径段;显式配置后即使无目录 index.md 也会进入子孙 URL 前缀
template该目录下页面使用的主题内模板名
query合并进模板全局变量 __qs 的键值对
breadcrumbs面包屑;title 支持 @i18n:<key>
hide_in_urltrue 时该目录段不出现在 URL 中
url_id_suffix默认 truefalse 时 URL 为 {slug}.html 而非 {slug}-{id}.html
hash_scatter是否将文章哈希分散到子目录导出

完整字段、合并规则与 URL 生成见 目录配置

folders:
  "/blog/":
    template: list
    url_id_suffix: false   # /blog/my-post.html,而非 /blog/my-post-123.html

与主题配置的关系

两个 YAML 各司其职:主题包预设开箱即用的默认值站点只写差异;并非所有字段都应在两边重复声明。

文件作用
__everkm/theme/<name>/everkm-theme.yaml主题元信息、主题级默认 config / folders / default_template
__everkm/everkm.yaml站点运营配置,在可合并字段上优先级更高

主题元信息字段见 主题开发

配置归属

字段everkm-theme.yamleverkm.yaml说明
name / version / author / repository / demo / screenshots主题包元信息,仅主题侧
config✅ 预设✅ 覆盖合并后供 __config / config() 读取
folders✅ 预设✅ 覆盖按 path 键 field-level extend,见 目录配置
default_template✅ 预设✅ 覆盖fallback 链见上文
inject_js / inject_css站点级 HTML 资源注入,仅项目侧
redirects导出 nginx / Vercel 时的额外重定向,仅项目侧

inject_*redirects 与主题 meta 分属不同配置范围,刻意不在两边都实现:主题自带 JS/CSS 应写在模板或 assets/ 中;重定向与具体部署域名相关,由站点运营者维护;name / version 等描述主题包本身,不属于站点配置。

可合并字段的合并规则

config:主题 config 为底,站点 config 深度合并覆盖(json_patch::merge)。

  • 对象:递归合并,同名 key 站点覆盖主题
  • 数组:整段替换,不是 append(站点写了 config.site.nav 会替换主题同 key 下的整个数组)
  • 渲染前会对 @i18n: 等做 materialize,模板读到的 __config 已是当前语言下的最终值

folders:先合成 effective_folders(主题底、站点按 path extend),再沿文章目录祖先链合并。详见 目录配置

default_template:不参与 merge,按 fallback 链取第一个非空值(站点优先于主题)。

站点专属字段

以下字段写在 __everkm/everkm.yaml,主题 everkm-theme.yaml 不支持、也不需要支持。

inject_js / inject_css:在渲染 HTML 的 </head> / </body> 前注入额外资源。每项:

字段说明
url资源路径;相对路径自动加站点 base_prefix
match_path可选 glob;省略或空则匹配所有页面
inject_css:
  - url: ~/assets/extra.css
inject_js:
  - url: https://cdn.example.com/analytics.js
    match_path: "/blog/**"

redirects:导出 --with-nginx-map / --with-vercel 时追加的重定向规则(与索引别名、permalink 生成的 map 合并)。

redirects:
  - source: /old-path
    destination: /new-path
    permanent: true