Hugo博客

cyberlavandatea — Hugo 博客模板

作者 fundor333

CyberLavandaTea 是一个仅深色模式的 Hugo 博客主题,面向开发与代码类博客,使用 Tailwind CSS v4,内置 IndieWeb/POSSE 相关功能、多种订阅源与客户端搜索。

看看你的网站会是什么样

浏览真实页面截图,比较内容排版与手机效果。点击下方缩略图切换,放大查看整页细节。

3 个预览视图
桌面端首页1 / 3
桌面端截图首屏预览

由服务器浏览器实际访问页面后截取。

全部页面与视图 3

截图用于了解视觉与布局,交互效果请以实际项目为准。

采集于 2026-10-07查看来源

值得关注的模板亮点

从已有项目资料中,快速了解它的特点。

01

仅深色模式,theme.js 在首次绘制前锁定 dark 类,不提供浅色切换

02

布局使用纯 CSS,未启用 Tailwind 内容检测也能正常渲染,工具类保留用于自定义

03

调色板在 Tailwind @theme 中定义六个角色(primary 绿、content、link 蓝、visited、background、inactive),surface 与 border 由透明度派生

04

提供 RSS、Atom、JSON Feed 1.1、humans.txt 与动态 robots.txt,搜索基于 SearchIndex 输出与 Lunr 客户端索引

05

内置 Webmention、IndieAuth、Mastodon 评论、Brid.gy Publish、syndication 等 IndieWeb/POSSE 相关模板与脚本

06

内容类型涵盖 micro、photos、weeknote、event、now、series,并支持 Microformats2 与多种响应类型

模板详细介绍

CyberLavandaTea 是 fundor333 发布的 Hugo 主题,定位为开发/代码博客,只提供深色外观,没有浅色切换:assets/js/theme.js 会在首次绘制前锁定 class="dark"。布局以纯 CSS 编写,即使不启用 Tailwind 的内容检测也能正常渲染,Tailwind 工具类保留用于自定义。

主题要求 Hugo 0.146 或更高的 extended 版本(使用 _partials/、_shortcodes/、_markup/ 新模板体系),并通过 @tailwindcss/cli 与 Hugo 的 css.TailwindCSS 配合处理样式,因此需要 Node 环境。安装方式支持 Hugo Module(推荐)或 Git submodule。

站点配置方面,Hugo 会合并主题的 params、related、services、mediaTypes、build,但不会合并 outputs、outputFormats、taxonomies、security、markup,需要把示例配置中的这些块复制到站点自己的 hugo.toml 中。主题自带 exampleSite 可用于本地运行演示。

功能覆盖博客常用结构:baseof/main 块、home、按年份分组的 list、single、404、taxonomy、term 模板;head 中包含 meta、OG、Twitter、JSON-LD BlogPosting、canonical、hreflang 与 rel=first/last/prev/next。内容类型包括 micro、photos、weeknote、event、now、series,并支持 Microformats2 标记与 reply/repost/like/bookmark/rsvp 响应类型。

订阅与发现层面提供 RSS、Atom、JSON Feed 1.1、humans.txt 与动态 robots.txt;搜索通过 SearchIndex 输出生成 /search.json,配合 Lunr 在客户端完成。IndieWeb 相关能力包括 Webmention(webmention.io 客户端渲染 reactions 与评论)、可选 IndieAuth 端点、Mastodon 评论与 toot 嵌入、Brid.gy Publish、syndication 展示,以及 88×31 徽章、webring、引用框、backlinks、related 等小网络元素。

主题将 Lunr、DOMPurify、webmention.js 放在 assets/js/vendor/ 本地提供并做指纹处理;Font Awesome、KaTeX、Google Fonts 为可选外部依赖。调色板在 assets/css/main.css 的 Tailwind @theme 中定义,包含 primary(绿)、content、link(蓝)、visited、background、inactive 六个角色,以及由透明度派生的 surface 与 border;Chroma 语法高亮限制在绿蓝两色加两个色调,错误色为可选红色。字体默认从 Google Fonts 加载(display 为 Audiowide,body 为 Rajdhani),也可自托管。

Hugo博客

适合你的项目吗?

适用场景

  • 搭建以代码和开发笔记为主的个人博客,希望默认深色、配色克制的阅读界面
  • 发布短文、照片、周记、活动与 now 页面等多种内容类型,并需要各自对应的模板
  • 希望博客支持 Webmention、IndieAuth、Mastodon 评论与 POSSE 分发等 IndieWeb 实践
  • 需要 RSS、Atom、JSON Feed 与客户端搜索,让读者通过多种方式订阅和查找内容
  • 在站点中加入 88×31 徽章、webring、引用框、backlinks 等小网络元素

适合人群

  • 使用 Hugo 0.146+ extended 并接受 Node 构建 Tailwind 样式的开发者博客
  • 偏好深色单一外观、不需要浅色主题切换的站点
  • 关注 IndieWeb、POSSE 与 Microformats2 的个人站点作者
  • 需要多种订阅格式与站内客户端搜索的博客
  • 内容类型较多(短文、照片、周记、活动等)并希望分别渲染的站点

上手与定制指南

结合仓库当前版本的说明,按下面的资料检查内容、配置与运行要求。

  1. 1

    需要 Hugo 0.146 或更高 extended 版本,并在站点根目录安装 @tailwindcss/cli

  2. 2

    推荐以 Hugo Module 方式引入主题,也可用 Git submodule 安装到 themes/cyberlavandatea

  3. 3

    outputs、outputFormats、taxonomies、security、markup 不会被主题配置合并,需复制示例配置到站点 hugo.toml

  4. 4

    使用 css.TailwindCSS 需在 security.exec.allow 中允许 node、npx、tailwindcss 等命令

  5. 5

    若希望 Tailwind 为自定义内容生成工具类,可启用 hugo_stats.json 并在 main.css 中通过 @source 引用,否则需把额外类加入 safelist.txt

查看仓库使用说明

授权与来源资料

使用条件与限制

免费使用 · 保留许可声明

本次收录的是公开仓库中采用 MIT 许可的免费版本;免费范围为该版本代码,不代表外部服务或第三方素材免费。

使用时需要遵守

  • 允许免费使用、修改、商用和分发该版本代码。
  • 分发代码副本或实质性部分时,保留原作者版权声明和完整 MIT 许可声明。
  • 代码按现状提供;担保与责任限制以原许可证及适用法律为准。

额外费用与待核对事项

  • 演示图片、字体、图标及其他第三方素材需按各自许可核对,不能仅凭代码的 MIT 许可判断。
  • 域名、托管、数据库、支付或 AI 等外部服务可能另外收费。
  • 主题仅提供深色外观,没有浅色模式切换,无法配置为浅色主题。
  • 必须使用 Hugo 0.146 或更高版本的 extended 构建,普通版本无法使用。
  • 构建样式需要 Node 环境并安装 @tailwindcss/cli,否则无法通过 css.TailwindCSS 处理 Tailwind。
  • 主题配置不会合并 outputs、outputFormats、taxonomies、security、markup,必须手动复制到站点配置中。
  • Font Awesome、KaTeX、Google Fonts 为可选外部依赖,启用时会从外部服务加载资源。
  • 默认从 Google Fonts 加载字体,会请求外部服务;可改为自托管。
  • Webmention 功能依赖 webmention.io 外部服务来渲染 reactions 与评论。
  • Mastodon 评论需要访问 Mastodon 实例的 /context 接口获取数据。
  • Brid.gy Publish 依赖 Brid.gy 外部服务进行内容分发。
  • IndieAuth 默认使用 indieauth.com 作为授权与令牌端点,属于外部服务。
  • pride corner 功能依赖 pride.codes 外部资源,默认关闭。
  • 主题内置的 Lunr、DOMPurify、webmention.js 等第三方脚本有单独的 LICENSES.md,需自行确认其许可。
查看原文依据

Permission is hereby granted, free of charge

许可证原文

Dark only, by design — there is no light toggle.

README 原文

Hugo | **≥ 0.146** *extended* (new template system: `_partials/`, `_shortcodes/`, `_markup/`)

README 原文

Node | for `@tailwindcss/cli`, used by `css.TailwindCSS`

README 原文

It does **not** merge `outputs`, `outputFormats`, `taxonomies`, `security`, `markup` — copy this block into your own site config

README 原文

**External, and optional:** **Font Awesome** (content-type icons — a Kit or the free CDN, or `disable`), **KaTeX** (only when `math` is set), **Google Fonts** (configurable via `params.fonts`).

README 原文

Fonts are loaded from Google Fonts in `_partials/head.html` from `params.fonts`

README 原文

**Webmention**: `rel=webmention`/`pingback` + the webmention.io client rendering a reactions facepile and inline comments into `#webmentions` (styled)

README 原文

**Mastodon comments** (fetch `/context` + DOMPurify) + build-time toot embed

README 原文

**Brid.gy Publish** with configurable targets + UTM

README 原文

**IndieAuth**: `rel=authorization_endpoint`/`token_endpoint`, opt-in via `params.indieauth` (unset = no tags, clients discover via `rel=me`), defaults to indieauth.com

README 原文

**LGBTQ+ corner** (pride.codes, top-right), opt-in `params.prideCorner` (default `false`)

README 原文

**Vendored in the theme** (`assets/js/vendor/`, served locally, fingerprinted — see `LICENSES.md` there)

README 原文
https://github.com/fundor333/cyberlavandatea/blob/main/LICENSEhttps://github.com/fundor333/cyberlavandatea/blob/main/README.md

DeepSeek 根据仓库许可证和 README 整理 ·2026-10-07。结果仅覆盖已读取资料,依赖、图片、字体及后续条款变更以各自原文为准。

项目核对记录与介绍依据

模板资料

来源平台
GitHub
资料与维护参考分
资料较完整 · 80 / 100
技术栈
Hugo
网站类型
博客
这个分数如何计算

本站按许可资料(最高30分)、演示链接(12分)、预览图(10分)、Star数(15分)、记录的维护时间(15分)、描述完整度(8分)、功能记录(5分)和分类资料(5分)计算。它不是代码、安全或性能测试,也不是 Google 评分;有链接不代表已实测可用。

这个项目需要核对什么

记录的仓库更新时间
2026-09-27
截图检查日期
2026-10-07

已收录演示链接。请用你的内容与屏幕尺寸检查;有演示不代表表单、认证或支付已经可用。

目录记录的主要技术栈是 Hugo。请通过依赖清单和锁文件核对实际版本与托管要求。这些说明基于收录资料,不代表代码审计或部署实测。

查看具体选型方法 →

介绍的制作与核对状态

介绍由 AI 辅助整理目录与仓库资料。仓库作者不等于这篇介绍的审核者。

审核声明: [email protected] · 2026-10-07

查看当时使用的来源资料

SHA-256: 030a8d47c42ca37983c66ce63b8971c91c0d5095c2c3b5a52c563d74ea0aceab

2026-10-07T11:07:27.057Z

来源文件 / 仓库
# CyberLavandaTea

A **dark-only Hugo theme** for dev / code blogs.
**Tailwind CSS v4**, a **6-role palette** (one blue, one green), an
**IndieWeb / POSSE** stack, multiple feeds, client-side search.

- Dark only, by design — there is no light toggle. `assets/js/theme.js` locks
  `class="dark"` before first paint.
- The full layout is written in plain CSS, so the theme renders correctly even
  without Tailwind's content detection; utilities stay available for
  customisation.

## Requirements

| | |
|---|---|
| Hugo | **≥ 0.146** *extended* (new template system: `_partials/`, `_shortcodes/`, `_markup/`) |
| Node | for `@tailwindcss/cli`, used by `css.TailwindCSS` |

```bash
# in your site root
npm install -D @tailwindcss/cli
```

## Install

### As a Hugo Module (recommended)

```bash
hugo mod init github.com/you/your-site      # if you don't have a module yet
```

```toml
# hugo.toml
[module]
  [[module.imports]]
    path = "github.com/fundor333/cyberlavandatea"
```

```bash
hugo mod get -u github.com/fundor333/cyberlavandatea
```

### As a Git submodule

```bash
git submodule add https://github.com/fundor333/cyberlavandatea themes/cyberlavandatea
```

```toml
# hugo.toml
theme = "cyberlavandatea"
```

## Minimal site configuration

Hugo merges `params`, `related`, `services`, `mediaTypes`, `build` from a theme
config. It does **not** merge `outputs`, `outputFormats`, `taxonomies`,
`security`, `markup` — copy this block into your own site config (it is
identical to `exampleSite/hugo.toml`):

```toml
[taxonomies]
  series = "series"
  category = "categories"
  tag = "tags"
  theme = "themes"
  group = "group"

[mediaTypes."application/atom+xml"]
  suffixes = ["xml"]

[outputFormats.SearchIndex]
  baseName = "search"
  mediaType = "application/json"
  isPlainText = true
[outputFormats.Atom]
  baseName = "atom"
  mediaType = "application/atom+xml"
[outputFormats.humanstxt]
  baseName = "humans"
  mediaType = "text/plain"
  isPlainText = true

[outputs]
  home = ["html", "rss", "json", "SearchIndex", "Atom", "humanstxt"]
  section = ["html", "rss", "json", "Atom"]

# Required for css.TailwindCSS (Hugo's exec security policy).
[security]
  [security.exec]
    allow = ['^(dart-)?sass$', '^git$', '^go$', '^node$', '^npx$', '^postcss$', '^tailwindcss$']

# Class-based highlighting (theme palette) and lone images as <figure> + caption.
[markup]
  [markup.highlight]
    noClasses = false
  [markup.goldmark.parser]
    wrapStandAloneImageWithinParagraph = false
```

### Tailwind — class detection (optional)

The theme's layout is plain CSS: **it works with no extra setup**. The Tailwind
utilities used in the templates have a fallback in `main.css`. If you want
Tailwind to generate *every* utility you use in your own content / shortcodes,
enable `hugo_stats.json`:

```toml
[build.buildStats]
  enable = true
[[module.mounts]]
  source = "assets"
  target = "assets"
[[module.mounts]]
  source = "hugo_stats.json"
  target = "assets/notwatching/hugo_stats.json"
  disableWatch = true
```

(`main.css` already does `@source "hugo_stats.json"`.) Otherwise add the extra
classes to `assets/css/safelist.txt`, or to an `assets/css/*.css` of your own
that imports `main.css` with your own `@source`.

## Run the demo

```bash
cd themes/cyberlavandatea      # or wherever the theme lives
npm install
npm --prefix exampleSite install
hugo server -s exampleSite --themesDir ../..
```

## Palette

Defined once in [`assets/css/main.css`](assets/css/main.css) inside the Tailwind
`@theme` block, so it is available as utilities (`text-content`, `bg-surface`,
`border-border`, …) **and** as `--color-*` for the partials.

| Role | Tailwind token | Hex | Use |
|---|---|---|---|
| Primary *(green)* | `--color-primary` | `#5FD88F` | accent, `:hover`/`:focus`, active nav, focus ring, `blockquote` border, keyword |
| Content | `--color-content` | `#E6E6EC` | body text, headings, `strong`, code text |
| Links *(blue)* | `--color-link` | `#4D9FFF` | unvisited links, strings, added diff |
| Visited | `--color-visited` | `#7EA88E` | `a:visited` |
| Background | `--color-background` | `#14151A` | `body`, navbar, footer |
| Inactive | `--color-inactive` | `#8B8F9A` | meta, dates, borders, placeholders, comments |
| *(derived)* Surface | `--color-surface` | `#25262B` | `code`/`pre`/`.toc`/`blockquote`/`tr:nth-child(even)` |
| *(derived)* Border | `--color-border` | `#313237` | `hr`, separators, borders |

Chroma syntax highlighting stays within green + blue plus two tints
(`--color-code-fn` `#A8C9FF`, `--color-code-num` `#8FE0AF`) plus one optional red
for errors (`--color-code-err` `#FF6F6F`), inside `<pre>` only.

Fonts are loaded from Google Fonts in `_partials/head.html` from `params.fonts`
(`display` = Audiowide, `body` = Rajdhani; optional `signature` font-file URL for
the "written by a human" line). A site can self-host them instead.

## Runtime dependencies

**Vendored in the theme** (`assets/js/vendor/`, served locally, fingerprinted —
see `LICENSES.md` there): **Lunr** (search), **DOMPurify** (Mastodon comments),
**webmention.js** (the webmention.io client).

**External, and optional:** **Font Awesome** (content-type icons — a Kit or the
free CDN, or `disable`), **KaTeX** (only when `math` is set), **Google Fonts**
(configurable via `params.fonts`). Nothing else phones home at runtime.

## Features

| Area | Where |
|---|---|
| `baseof` + `main` block, `home`, `list` (by year), `single`, `404`, `taxonomy`, `term` | `layouts/*.html` |
| `<head>`: meta, OG, Twitter, JSON-LD `BlogPosting`, `canonical`, `hreflang`, `rel=first/last/prev/next` | `_partials/head.html`, `_partials/meta/*` |
| Asset pipeline: **Tailwind v4** → `minify` → `fingerprint`+`integrity`; `theme.js` in the head, `main.js`+`goToTop` at the end, `additionalScripts` | `_partials/head.html`, `_partials/scripts-*.html` |
| Nav: `Site.Menus.main` with children and `active` state, CSS-only hamburger, language switcher, "back to top" | `_partials/header.html`, `_partials/footer.html`, `assets/js/goToTop.js` |
| `postCard` with a per-type icon, starred, speaker, `<time datetime>` | `_partials/postCard.html`, `_partials/type-icon.html` |
| Bio + **h-card** — footer identity line: name, pronouns, nickname, location, status; each of pronouns / location / status toggled from config | `_partials/bio.html`, `_partials/hcard.html` |
| Social icons (`params.socialIcons`) rendered on the home page (below the bio) and in the footer | `_partials/socialIcons.html`, `layouts/home.html`, `_partials/footer.html` |
| i18n | `i18n/en.yaml`, `i18n/it.yaml` |
| Feeds: RSS (`exclude_from_rss`, `summary`/`full`, `media` namespace), **Atom** (`feedUUID`, `webfeeds`), **JSON Feed 1.1**, **humans.txt**, dynamic **robots.txt** | `layouts/rss.xml`, `list.atom.xml`, `list.json.json`, `index.humanstxt.txt`, `robots.txt` |
| Search: `SearchIndex` output → `/search.json`, `/search` section, `?q=` form, **Lunr** index, `<template>` rendering | `layouts/index.searchindex.json`, `layouts/search/list.html`, `_partials/search-*.html`, `assets/js/search.js` |
| Content types: `micro`, `photos` (EXIF from `exif.json` or `.Exif`), `weeknote`, `event` (`start`/`end`/`location`), `now`, `series` | `layouts/<type>/…` |
| Microformats2: `h-entry` / `e-content` / `u-photo` / `p-category` / `dt-published`; response types reply/repost/like/bookmark/rsvp | `layouts/single.html`, `_partials/micro.html` |
| Favicons entirely from config (`favicon`, `faviconSvg`, `appleTouchIcon`, `icon96`, `webmanifest`, `maskIcon`) | `_partials/favicons.html` |
| **Webmention**: `rel=webmention`/`pingback` + the webmention.io client rendering a reactions facepile and inline comments into `#webmentions` (styled) | `_partials/webmention.html`, `_partials/custom-head.html`, `assets/css/main.css` |
| **IndieAuth**: `rel=authorization_endpoint`/`token_endpoint`, opt-in via `params.indieauth` (unset = no tags, clients discover via `rel=me`), defaults to indieauth.com | `_partials/head.html` |
| **Mastodon comments** (fetch `/context` + DOMPurify) + build-time toot embed | `_partials/mastodon.html`, `_partials/toot.html` |
| **Brid.gy Publish** with configurable targets + UTM | `_partials/bridgy.html` |
| **Syndication** ("also posted on") | `_partials/syndication.html` |
| Render hooks: link (UTM + `target=_blank` + `↗`), image (`figure` + `u-photo`), heading (anchor), codeblock (`HighlightCodeBlock`) | `layouts/_markup/render-*.html` |
| Shortcodes: `toc`, `embed`, `toot`, `xkcd`, `allpages`, `88x31`, `buzzword`, `heart` | `layouts/_shortcodes/*` |
| Content-type icons ("category") with Font Awesome (Kit or free CDN), `params.postIcons` override | `_partials/fontawesome.html`, `_partials/type-icon.html`, `_partials/postCard.html` |
| **LGBTQ+ corner** (pride.codes, top-right), opt-in `params.prideCorner` (default `false`) | `_partials/pride-corner.html` |
| Small-web extras: **88×31** badges (folder + JSON, shuffled), **webring** (`webring.html`: icon / prev-next / web component), **"reference this post"** box (configurable preferred name / pronouns / "learn more" link + copy-URL), a collapsible panel styled like the TOC/series menu, "written by a human", **backlinks** (`findRE`), **related** ("See Also") | `_partials/88x31.html`, `_partials/webring.html`, `_partials/cite.html`, `_partials/inbound-links.html`, `_partials/comments.html`, `footer.html` |
| Palette / theming: 6 roles + surfaces derived by opacity, Chroma within green/blue | `assets/css/main.css` |

KaTeX (conditional, `_partials/helpers/katex.html`) and Google Analytics
(`hugo.IsProduction` + `site.GoogleAnalytics`) are wired up too.

## Params

```toml
[params]
  description       = "…"           # fallback meta description
  dateFormat        = "2 January 2006"
  homeRecentCount   = 20            # posts on the home page
  mainSections      = ["post"]
  secondarysections = ["micro"]     # "Recent updates" list on the home page
  feedSections      = ["post", "micro", "photos", "weeknote"]
  commentSections   = ["post", "micro", "photos", "weeknote"]
  suggestionSections= ["post"]      # "See Also" block (Related)
  toc = true
  tocOpen = false
  goToTop = true
  linkUTM = false                   # UTM on external links (render hook)
  writtenByHuman = true
  shareButtons = true
  cite = true                       # bool, or a [params.cite] table (below)
  badges88x31 = true
  additionalScripts = []            # extra JS assets, bundled + minified
  themeColor = "#14151a"
  feedUUID = ""                     # urn:uuid for the Atom feed
  images = ["/img/og.png"]          # fallback og:image
  prideCorner = false               # pride.codes corner top-right (opt-in)

  # Favicons — used verbatim as URLs (relURL). Nothing set -> the theme's
  # bundled /favicon.svg only.
  favicon        = "/favicon.ico"
  faviconSvg     = "/favicon.svg"
  appleTouchIcon = "/apple-touch-icon.png"
  icon96         = "/favicon-96x96.png"
  webmanifest    = "/site.webmanifest"
  maskIcon       = ""               # Safari pinned-tab mono SVG (optional)
  icon           = "/favicon-196x196.png"   # generic icon, also used by the feeds

  [params.fontawesome]              # content-type icons
    kit = ""                         # a Kit URL (Pro too); empty = free CDN
    version = "6.7.2"                # free CDN version
    disable = false                  # true = no Font Awesome

  # FA icon per "category" (= section type). Sensible defaults included;
  # override only the entries you want to change.
  [params.postIcons]
    post     = "fa-solid fa-newspaper"
    micro    = "fa-solid fa-thumbtack"
    photos   = "fa-solid fa-camera"
    weeknote = "fa-solid fa-mug-hot"
    event    = "fa-solid fa-calendar-days"
    now      = "fa-solid fa-hourglass-half"
    series   = "fa-solid fa-layer-group"

  [params.fonts]
    display = "Audiowide"
    body = "Rajdhani:wght@400;500;600;700"
    signature = ""                   # optional font-file URL for .written-by-human

  [params.cite]                     # "Reference this post" box
    enable       = true
    body         = ""               # intro sentence (default: i18n cite.body)
    name         = ""               # -> "I prefer to be called <name>"
    pronouns     = ""               # e.g. "he/him" (default: from params.hcard.pronouns)
    nameAlt      = ""               # -> "… or <nameAlt>"
    learnMoreUrl = ""               # adds a "Learn more" line

  [params.author]
    name = "" ; intro = "" ; description = "" ; url = "" ; email = ""
    fediverseAccount = "@user@instance"

  [params.hcard]                    # the footer h-card
    fullName = "" ; nickname = "" ; avatar = "img/logo.png" ; biography = ""
    showPronouns = true             # hide the pronouns with `false`
    showLocation = true             # opt-in; shows city/region/country
    city = "" ; region = "" ; country = ""
    status = ""                     # short status line, e.g. "open to freelance"
    statusUrl = ""                  # optional link for the status
    showStatus = true               # hide the status with `false`
    [params.hcard.pronouns]
      nominative = "" ; oblique = "" ; possessive = ""

  [params.webmention]
    targetDomain    = "example.com"  # canonical prod domain: data-page-url becomes
                                     # https://<targetDomain><path> (works on `hugo server`)
    scheme          = "https"        # scheme for that canonical URL
    script          = ""             # override client URL (default: bundled webmention.js)
    wordcount       = 40             # data-wordcount for inline replies
    maxWebmentions  = 30
    preventSpoofing = false
    # endpoint / pingback also read by _partials/custom-head.html
    # Renders <h2>Responses</h2> + <h2>Reactions</h2> into #webmentions, and emits
    # <link rel="webmention"> / <link rel="pingback">.

  # Opt-in: omit [params.indieauth] entirely to emit no
  # authorization_endpoint/token_endpoint tags and let IndieAuth clients
  # discover via rel="me" instead. When enabled, defaults to indieauth.com,
  # which is designed to be declared as a site's own endpoint this way (no
  # client_id registration needed). Don't point these at indielogin.com:
  # it requires apps to pre-register their client_id and is meant to be
  # called directly by app developers, not discovered as a site's endpoint
  # — doing so causes "client_id is not registered" errors for IndieAuth
  # clients. Override the endpoints below for a different provider.
  [params.indieauth]                # <link rel=authorization_endpoint/token_endpoint>
    enable                = true    # opt out with `false` (or omit the table)
    authorizationEndpoint = "https://indieauth.com/auth"
    tokenEndpoint         = "https://tokens.indieauth.com/token"

  bridgy = ["mastodon", "bluesky"]

  # Rendered on the home page (below the bio) and in the footer.
  [[params.socialIcons]]
    name = "github" ; url = "https://github.com/user"
  [[params.socialIcons]]
    name = "mastodon" ; url = "https://mastodon.social/@user"

  # Footer webring(s) (partial webring.html). Each entry:
  #   name, url            plain link
  #   + icon               icon link (30x30 img)
  #   + prev / next        renders  <- name ->
  #   + html [+ script]    raw markup (web component) and a defer script
  [[params.webrings]]
    name = "XXIIVV webring" ; url = "https://webring.xxiivv.com/#86"
    icon = "https://webring.xxiivv.com/icon.white.svg"
```

### Recognised front matter

`description`, `image`, `tags`, `categories`, `series`, `themes`, `group`,
`isStarred`, `speaker`, `math`, `toc`, `tocOpen`, `exclude_from_rss`,
`exclude_from_search`, `robotsdisallow`, `allpage`, `feature_link`/`feature_text`,
`syndication` (list of URLs), `comments` (`{host, user, id}` for Mastodon
comments), `reply`/`repost`/`like`/`bookmark`/`rsvp`/`preview_text_from_reply`,
`mastodon_instance`+`mastodon_id`, `start`/`end`/`location` (event).

### Site-side extension

Create these in your own `layouts/_partials/`:

- `custom-head.html` — adds to `<head>` (the theme ships one that emits
  `rel=webmention`/`pingback`; override to extend);
- `custom-scripts.html` — end-of-`<body>` scripts (self-hosted analytics, extra
  widgets, …).

## Structure

```
themes/cyberlavandatea/
├── theme.toml · go.mod · package.json · hugo.toml · LICENSE · README.md
│   CHANGELOG.md · CONTRIBUTING.md · .editorconfig · .gitattributes
├── .github/workflows/    ci.yml (PR build) · pages.yml (deploy demo)
├── archetypes/            default, post, micro, now, photos, event, weeknote
├── assets/
│   ├── css/main.css       Tailwind v4 + @theme (palette) + base + .chroma
│   │   safelist.txt
│   └── js/                theme.js · main.js · goToTop.js · search.js
│       vendor/            lunr · DOMPurify · webmention.js (+ LICENSES.md)
├── data/cyberlavandatea/palette.yaml   palette reference
├── i18n/                  en.yaml · it.yaml
├── exampleSite/           minimal demo (its own hugo.toml + go.mod)
└── layouts/
    ├── baseof · home · list · single · 404 · taxonomy · term
    ├── rss.xml · list.atom.xml · list.json.json
    ├── index.searchindex.json · index.humanstxt.txt · robots.txt
    ├── micro/ photos/ weeknote/ event/ now/ series/ search/
    ├── _markup/            render-link · render-image · render-heading · render-codeblock
    ├── _shortcodes/        toc · embed · toot · xkcd · allpages · 88x31 · buzzword · heart
    └── _partials/          head · header · footer · scripts-* · meta/* · svgs/*
                            postCard · type-icon · fontawesome · bio · toc · tags
                            series · micro · comments · mastodon · toot · webmention
                            syndication · bridgy · hcard · socialIcons · webring
                            search-form · search-index · cite · share-buttons
                            inbound-links · 88x31 · pride-corner · custom-head
                            helpers/katex
```

## Contributing

See [`CONTRIBUTING.md`](CONTRIBUTING.md). Changes are tracked in
[`CHANGELOG.md`](CHANGELOG.md).

## License

MIT — see [`LICENSE`](LICENSE).
反馈内容错误

看看同类模板

对比同技术栈与用途的模板,找到更适合的视觉与内容结构。