Zolarwind 主题

Zolarwind 是一个支持 Tailwind CSS、KaTeX 和 Mermaid 的 Zola 博客主题。 它的目标用户是想要基于 Tailwind 的样式、图表和数学渲染的博客。 内置了单语言构建的本地化支持。

主题外观截图


特性


重要说明

截至 2026-01-09 的 Zola v0.22.0,颜色语法高亮已更改,需要不同的配置。 该主题反映了这一变化。 此主题不兼容 Zola v0.21.0 及更早版本。


目录


演示网站

你可以在 演示网站 上查看该主题。 此外,还有一个 德语演示


先决条件

要使用该主题,你需要安装以下软件:


安装

独立(快速开始)

如果你想使用此仓库作为新博客的基础,这是最快的方法:

  1. 克隆仓库:

    git clone https://github.com/thomasweitzel/zolarwind.git
    cd zolarwind
  2. 运行站点:

    zola serve

    现在在浏览器中打开 zola serve 提供的链接。

  3. 配置: 根据你的需要在 zola.toml 中调整 base_url 和其他设置。

作为主题(集成)

如果你已经有一个 Zola 站点并想将 Zolarwind 作为主题在 themes/ 文件夹中使用,请参阅集成主题文件夹部分以获取详细说明或使用自动脚本。


配置

你的 zola.toml 文件控制 Zola 站点的自定义。 此主题使用的配置设置:

基本配置:

Markdown 高亮配置:

额外配置:

[extra] 部分是你可以放置任何你想在模板中访问的自定义变量的地方。


子路径 base_url 支持

只要所有内部链接和资产都使用 Zola 的 get_url 助手解析,此主题就可以安全地在子路径(例如 https://example.org/blog/)下运行。这就是为什么模板对 CSS、JS、图片和菜单链接使用 get_url。在 zola.toml 中保持内部链接为根相对路径(例如 "/pages/about/"),以便 Zola 可以可靠地添加 base_url 子路径前缀。

如果你添加或调整模板,避免硬编码 href="/..."src="/..."。总是首选:

{{ get_url(path="/img/example.jpg") }}

使用子路径进行本地测试

zola serve 总是挂载在 /,所以它不测试子路径行为。要在本地测试子路径,请构建到子目录并从那里服务输出:

zola build --base-url http://127.0.0.1:1111/demo/zolarwind -o public/demo/zolarwind
python -m http.server --directory public 1111

python -m http.server 只是一个静态文件服务器示例;任何可以服务 public/ 的服务器都可以(例如 Apache、Nginx 或 static-web-server)。

然后在浏览器中打开服务器提供的链接。


Front matter

对于博客文章(content/blog 文件夹中的 Markdown 文件),每篇文章都有自己的文件夹。 这种结构将文章的所有资源保存在一个地方,包括图片、视频和其他文件。

每篇文章都关联一张图片,显示在博客主页和文章详情页上。 如果你没有在 extra.image 下提供图片,将使用默认图片。

Front Matter 示例

你可以将其复制并粘贴到新文章中(例如 content/blog/perception-vs-math/index.md):

+++
date = 2026-02-05
title = "Intuition vs. mathematical facts"
description = "Examine the reliability of tests using probability trees and Bayes' theorem."
authors = ["Jane Doe"]

[taxonomies]
tags = ["math", "statistics"]

[extra]
math = true
diagram = true
image = "banner.jpg"
+++

字段描述


系列

Zolarwind 通过 Zola 分类法支持系列。系列导航出现在属于系列的文章底部。

  1. zola.toml 中启用分类法:

    taxonomies = [
        { name = "tags", paginate_by = 6, feed = true },
        { name = "series", paginate_by = 6, feed = false },
    ]

    系列订阅不如文章/标签订阅常用,因此默认禁用它以保持输出最小化;如果你希望订阅者关注系列页面,请启用它。

  2. 将文章分配给系列:

    [taxonomies]
    series = ["my-series"]
  3. 可选排序:在文章 Front Matter 中设置 extra.series_order。如果省略,系列列表回退到文章日期。

系列索引页面可在 /series//series/<name>/ 处获得。 注意:如果没有文章使用 series 分类法,Zola 不会生成 /series/,因此它将 404。


短代码

Zolarwind 提供了一些短代码。当你想要该功能时使用它们,而不是作为格式化助手。 带有参数和示例的完整文档:docs/shortcodes.md


搜索

此主题附带一个本地、客户端搜索页面,由 Zola 的搜索索引(Elasticlunr 输出)和 MiniSearch 提供支持。

  1. zola.toml 中启用搜索索引:
    build_search_index = true
  2. 创建一个使用搜索模板的页面(例如 content/pages/search.md)。如果你的 content/pages/_index.md 使用 sort_by = "date",页面需要一个 date(或 weight)以避免被忽略。你可以选择设置 extra.results_per_page 来控制分页,设置 extra.pagination_window 来控制当前页面每侧显示的页数。
    +++
    date = 2026-01-14
    title = "Search"
    template = "search.html"
    [extra]
    results_per_page = 5
    pagination_window = 2
    +++
  3. 搜索图标出现在页眉中并链接到 /pages/search/。 注意:仅当 build_search_index = true 时才渲染搜索图标。

当在另一个 Zola 站点中使用此主题时,在该站点仓库中添加 content/pages/search.md。主题 content/ 不会被 Zola 加载。

搜索索引仅针对当前 default_language 构建。

注意:如果 build_search_index = true 但你没有创建 content/pages/search.md,搜索链接将 404。


本地化

考虑博客文章发布页面上的这段文字作为示例:Published on July 04, 2023; 1,234 words。 如果你的博客是德语的,你希望它是 Veröffentlicht am 04. Juli 2023; 1.234 Wörter。 不仅文本应该翻译,日期和数字格式也不同。 并且你想要像 1 word1 Wort 这样的文本,因为在适用的情况下应使用单数形式。 此主题负责处理这个问题。

要使用此主题本地化你的博客:

  1. 通过在 zola.toml 中设置 default_language 来选择你想要的语言。 截至目前,i18n 目录中提供了英语 (en) 和德语 (de) 语言资源。 如果尚未支持你的语言,只需创建包含翻译的新资源文件即可。 使用 en.toml 文件作为你自己翻译的模板。 使用正确的语言代码作为文件名,例如世界语用 eo.toml。 此主题仅支持从左到右 (ltr) 阅读的语言。

  2. 主题将自动以所选语言显示所有特定于主题的字符串资源。

  3. 你提供的内容应与此语言匹配。 但这要是你的责任。 主题不会翻译你的内容。

此主题使用 default_language 作为每次构建单个区域设置的构建时开关。 它不针对单次构建中的 Zola 多语言输出。

如果你需要定义自己的日期格式,请在 这里 查看支持的说明符。


集成主题文件夹

默认情况下,此仓库是一个独立的 Zola 站点。 如果你想将 Zolarwind 作为主题集成到现有的 Zola 网站中,你有两个选项:

选项 1:自动集成(推荐)

有一个辅助脚本 integrate-theme-folder.sh,它自动执行所有必要的文件移动和配置更新(在 Linux/Bash 上测试)。

注意: 仅在 Zolarwind 的全新检出上运行它,因为它会就地移动和编辑文件。

./integrate-theme-folder.sh

选项 2:手动集成

此部分适用于那些喜欢手动移动文件或在非 Linux 系统上的人。 你可以通过将相关主题文件移动到 themes/zolarwind 目录来集成主题。 所有其他文件保留在根目录中。 如果你那里有自己的文件,你需要将它们与此主题的文件合并。 你还需要相应地调整根目录中的 zola.tomlpackage.json 文件。

大多数 extra.* 设置是可选的(除了 titlepath_language_resources),但如果省略,相关的 UI 元素将不会渲染(菜单、页脚链接、社交图标或主题切换)。如果启用了搜索,请在站点仓库中添加 content/pages/search.md。主题 content/ 不会被 Zola 加载(参见搜索部分)。

手动集成部分显示了需要移动的目录。 这是独立站点的目录结构,其中主题在根目录中:

/
├── css
├── i18n
├── static
│   ├── css
│   ├── img
│   ├── js
│   ├── giallo-dark.css
│   └── giallo-light.css
├── syntaxes
├── templates
└── theme.toml

创建一个新目录 themes/zolarwind 并将特定于主题的文件移动到那里。下面的树显示了保留在站点根目录的内容和移动到 themes/zolarwind 下的内容:

/
├── static
│   ├── css
│   ├── giallo-dark.css
│   └── giallo-light.css
├── syntaxes
└── themes
    └── zolarwind
        ├── css
        ├── i18n
        ├── static
        │   ├── img
        │   └── js
        ├── templates
        └── theme.toml

目录 syntaxes 保留在其原始位置。如果你想移动它,你必须调整 zola.toml 中的 extra_grammars 条目。

static/css 目录是一个特殊情况。 它包含生成的名为 generated.css 的 Tailwind CSS 文件。 它将保留在其原始位置。 Zola 总是服务站点的 static/ 目录,即使使用了主题。 此文件是从 css/main.css 文件生成的,它是 CSS 生成的输入。

giallo-dark.cssgiallo-light.css 文件也保留在根 static/ 目录中,因为模板从那里加载它们。

生成过程可以通过 package.json 文件中的脚本触发。 你 需要在更改主题的模板文件或直接在内容文件中使用新的 Tailwind CSS 类时调整并运行 package.json 中的脚本。 由于源文件 css/main.css 已移动到目录 themes/zolarwind/css/main.css,我们需要相应地调整 package.json 中的脚本。

这是独立站点的相关部分的样子:

"scripts": {
  "css:build": "npx tailwindcss -i ./css/main.css -o ./static/css/generated.css --minify",
  "css:watch": "npx tailwindcss -i ./css/main.css -o ./static/css/generated.css --watch",
  "server": "zola serve"
}

现在更改它,使输入文件 css/main.css 变为文件 themes/zolarwind/css/main.css

"scripts": {
  "css:build": "npx tailwindcss -i ./themes/zolarwind/css/main.css -o ./static/css/generated.css --minify",
  "css:watch": "npx tailwindcss -i ./themes/zolarwind/css/main.css -o ./static/css/generated.css --watch",
  "server": "zola serve"
}

由于你现在将 Zolarwind 用作主题,你需要在 zola.toml 文件中声明它。 主题文件已移动到目录 themes/zolarwind,因此你需要通过更改 path_language_resources 条目相应地调整 zola.toml 文件中对主题文件的唯一引用:

# 使用的站点主题
theme = "zolarwind"

# ...

# 语言资源文件的路径
[extra]
path_language_resources = "themes/zolarwind/i18n/"

开发

要自定义 CSS,请编辑 templatescss 目录中的文件。 确保 CSS 文件 static/css/generated.css 已更新。 此文件是从 css/main.css 和通过自动内容检测识别的文件生成的。

主题使用自定义调色板(neutral, primary, ok, warn, fail)而不是默认的 Tailwind 颜色。 当在模板或内容中添加新类时,重建 CSS 以包含生成的调色板类。

如果源文件默认被排除,可以使用 @source 指令将其添加到 css/main.css 中:

@source "../node_modules/@my-company/ui-lib";

当这些文件更改时,运行 package.json 中的 css:build 脚本。这需要 Node.jspackage.json 中的依赖项(通过 npm install 安装)。运行 npm run css:watch 监视文件并在更改时触发 CSS 生成。这确保 static/css/generated.css 保持最新。

建议打开两个终端:一个用于 Zola 服务器 (zola serve),另一个用于 CSS 监视脚本 (npm run css:watch)。当文件被修改时,浏览器会重新加载更新后的 CSS。


隐私

此主题不设置 cookie,也不从第三方站点加载资源。暗色/亮色模式偏好仅在用户显式切换主题后存储在 sessionStorage 中。

KaTeX、Mermaid 和 MiniSearch 捆绑在 static/ 中,因此它们可以从你自己的域提供服务并保持固定在已知版本。 如果你改为从内容分发网络 (CDN) 加载它们,请考虑以下 GDPR 影响:


备注

Markdown 排版

此主题不使用 @tailwindcss/typography 来设置 Markdown 文件的样式。 相反,它在 css/main.css 文件中使用 @apply。 Tailwind CSS 中的 @apply 指令允许将实用程序类组合成自定义 CSS 类。 这允许在单个类中应用多个实用程序样式以进行 Markdown 内容样式设置。

这种方法提供了对视觉结果的控制。 它需要手动设置样式,而不是使用 @tailwindcss/typography 插件。

这重新创建了排版插件已经提供的常见排版模式。


贡献

总是欢迎贡献! 如果你看到改进的地方或想要添加功能,请提交 PR。

我特别对更多翻译感兴趣。 查看 i18n 文件夹以了解可用的内容和不可用的内容。 使用文件 en.toml 作为你自己翻译的模板。


许可证

此主题遵循 MIT 许可证。 有关详细信息,请参阅 LICENSE 文件。

第三方声明