3 个版本 (重大变更)
0.3.0 | 2024年2月9日 |
---|---|
0.2.0 | 2024年2月9日 |
0.1.0 | 2024年1月29日 |
#433 在 命令行工具
每月25 次下载
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
将生成基本的索引页面和帖子页面模板,您可以使用这些模板开始。这对大多数用户来说可能就足够了。
但是,如果您想看到更复杂的模板示例,下面的示例使用了更多的帖子元数据来提供更丰富的输出。您可以直接使用这些模板,或者作为编写自己模板的指南。
- 有关索引页面模板的示例,请参阅 examples/index.tera。
- 有关帖子页面模板的示例,请参阅 examples/post.tera。
此外,有关包含所有可能字段的副车 gemlog 帖子元数据文件的示例,请参阅 examples/metadata.yaml。
模板
索引页面模板可以访问
- 一个
feed
变量,它是一个 Feed 对象。
帖子页面模板可以访问
- 一个
feed
变量,它是一个 Feed 对象。 - 一个
entry
变量,它是对当前帖子的 Entry 对象。
所有日期都是 RFC 3339 格式,如下所示
2006-01-02T15:04:05Z07:00
作者对象
name
(字符串) 作者的姓名email
(字符串,可选) 作者的电子邮件地址uri
(字符串,可选) 描述作者的 URI
条目对象
url
(字符串) 帖子的 URLtitle
(字符串) 帖子的标题body
(字符串) 帖子的 gemtext 正文updated
(字符串) 帖子最后更新时间summary
(字符串,可选) 帖子的摘要published
(字符串,可选) 帖子最初发布时间author
(作者对象,可选) 帖子的作者rights
(字符串,可选) 帖子的版权和许可信息lang
(字符串,可选) 帖子所写语言的 RFC 5646 语言代码(例如en
,de
)categories
(字符串数组) 帖子所属的分类列表
Feed 对象
capsule_url
(字符串) 您胶囊主页的 URLfeed_url
(字符串) Atom订阅源URLindex_url
(字符串) Gemlog索引页面的URLtitle
(字符串) 订阅源标题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