#静态网站生成器 #gemini #atom-feed #post #yaml #blog #gemlog

app gempost

一个简单的基于 Gemini 协议的博客静态网站生成器

3 个版本 (重大变更)

0.3.0 2024年2月9日
0.2.0 2024年2月9日
0.1.0 2024年1月29日

#433命令行工具

每月25 次下载

MIT 许可证

52KB
1K SLoC

gempost

gempost 是一个用于在 Gemini 协议上发布博客(gemlog)的最小静态网站生成器。

您将每个 gemlog 文章的元数据存储在旁边的 YAML 文件中,gempost 生成 gemtext 索引页面和 Atom 订阅源。

您可以使用 Tera 模板来自定义索引页面的格式。您还可以使用模板来自定义 gemlog 文章本身的格式,例如添加每个文章的版权页脚或导航头部。请参阅 示例 了解两者。

旁边的 YAML 文件中的元数据允许您生成具有丰富元数据的 Atom 订阅源,但大多数此类元数据是可选的,不是生成有效订阅源所必需的。

入门指南

安装 gempost

要安装 gempost,您必须首先 安装 Rust。然后,您可以使用 Cargo 安装 gempost。

cargo install gempost

创建新的 gempost 项目

您可以通过以下方式初始化一个新的 gempost 项目

gempost init ./capsule

这将创建一个类似这样的目录 ./capsule/

capsule/
├── gempost.yaml
├── posts/
│   ├── hello-world.gmi
│   └── hello-world.yaml
├── static/
│   └── index.gmi
└── templates/
    ├── index.tera
    └── post.tera

这包括

  • 一个示例 gempost.yaml 配置文件,帮助您入门。您需要编辑此文件以设置胶囊的标题和 URL。
  • 一些可以立即使用或自定义的基本模板。
  • 为您的 gemlog 提供的一个“hello world”示例文章,以及其相应的侧车元数据文件。
  • 胶囊根目录的静态 index.gmi

编辑 gempost.yaml 并开始构建您的胶囊!

构建您的胶囊

cd ./capsule
gempost build

您的胶囊将生成在 ./public/ 目录中。您需要一个 Gemini 服务器,如 Agate,以在 Gemini 协议上实际提供您的胶囊。请查看 Awesome Gemini 了解更完整的 Gemini 服务器列表。

创建新的文章

您可以使用以下命令在 gemlog 中添加一篇新帖子:gempost new <slug>。这将在 ./posts/ 目录中创建一个 .gmi 文件,并附带一个 .yaml 元数据文件。有关 YAML 元数据文件中可以设置的所有不同值的示例,请参阅 examples/metadata.yaml。其中一些是必需的。

添加静态内容

您可以将新静态内容添加到胶囊中(除了您的 gemlog 之外的内容),只需将其放入 ./static/ 目录。如果静态目录中的文件与 gempost 生成的文件冲突,则静态目录中的文件将获胜。

自定义模板

您可以从默认设置中自定义索引页面和帖子页面模板,在 ./templates/ 目录中。它们使用类似于流行的 Jinja 模板语言的 Tera 文本模板语言。有关这些模板内可用的所有变量的列表,请参阅下面的 模板 部分。

示例

运行 gempost init 将生成基本的索引页面和帖子页面模板,您可以使用这些模板开始。这对大多数用户来说可能就足够了。

但是,如果您想看到更复杂的模板示例,下面的示例使用了更多的帖子元数据来提供更丰富的输出。您可以直接使用这些模板,或者作为编写自己模板的指南。

此外,有关包含所有可能字段的副车 gemlog 帖子元数据文件的示例,请参阅 examples/metadata.yaml

模板

索引页面模板可以访问

  • 一个 feed 变量,它是一个 Feed 对象。

帖子页面模板可以访问

  • 一个 feed 变量,它是一个 Feed 对象。
  • 一个 entry 变量,它是对当前帖子的 Entry 对象。

所有日期都是 RFC 3339 格式,如下所示

2006-01-02T15:04:05Z07:00

作者对象

  • name (字符串) 作者的姓名
  • email (字符串,可选) 作者的电子邮件地址
  • uri (字符串,可选) 描述作者的 URI

条目对象

  • url (字符串) 帖子的 URL
  • title (字符串) 帖子的标题
  • body (字符串) 帖子的 gemtext 正文
  • updated (字符串) 帖子最后更新时间
  • summary (字符串,可选) 帖子的摘要
  • published (字符串,可选) 帖子最初发布时间
  • author (作者对象,可选) 帖子的作者
  • rights (字符串,可选) 帖子的版权和许可信息
  • lang (字符串,可选) 帖子所写语言的 RFC 5646 语言代码(例如 ende
  • categories (字符串数组) 帖子所属的分类列表

Feed 对象

  • capsule_url (字符串) 您胶囊主页的 URL
  • feed_url (字符串) Atom订阅源URL
  • index_url (字符串) Gemlog索引页面的URL
  • title (字符串) 订阅源标题
  • updated (字符串) 订阅源中任何帖子最后更新时间
  • subtitle (字符串,可选) 订阅源副标题
  • rights (字符串,可选) 订阅源的版权和许可信息
  • author (作者对象,可选) 订阅源的主要作者
  • entries (Entry对象数组) 订阅源中的帖子列表,按发布日期逆序排序,如果没有发布日期,则按最后更新日期排序

建议

以下是使用gempost的一些杂项建议。

如果您喜欢,可以将gempost项目目录提交到您选择的版本控制系统;只需确保您配置它忽略./public/目录即可!

如果您的Gemini服务器期望在特定目录中找到您的胶囊,您可以在gempost.yaml中将./public/目录的位置从其默认位置更改。请注意,gempost.yaml中的文件路径不支持波浪号展开。

每篇帖子都必须有一个唯一的ID来生成Atom订阅源。Atom要求这是一个全局唯一的URI,永远不改变。因此,作为使用可能改变的帖子URL的替代方案,您可以使用UUID URN

urn:uuid:165b10e8-78c9-45ba-83ef-2f7bd5d89725

运行gempost new将自动分配UUID帖子ID。

每篇帖子都必须有一个最后更新时间和可选的原始发布时间。为了获取RFC 3339格式的当前时间——gempost期望的格式,您可以在*nix平台上使用此命令

date --rfc-3339 seconds

类似工具

请查看这些其他优秀的gemlog静态站点生成器

依赖关系

~15–26MB
~403K SLoC