1
0
mirror of https://git.sr.ht/~adnano/kiln synced 2024-11-08 14:19:20 +01:00
A simple static site generator
Go to file
2020-09-23 13:56:10 -04:00
go.mod Reimplement in Go 2020-09-22 16:42:14 -04:00
kiln.go Update README.md 2020-09-23 13:50:25 -04:00
LICENSE Add LICENSE 2020-09-22 00:02:36 -04:00
main.go Remove titles and dates from pages 2020-09-22 21:11:56 -04:00
README.md Update README.md 2020-09-23 13:56:10 -04:00

kiln

A simple static site generator for Gemini.

Features

  • Zero configuration
  • Simple and fast
  • Gemini support
  • Go templates

Installation

go install

Usage

kiln

Directory Structure

A kiln site is organized in the following way:

src/               Site source
templates/         Templates
    page.gmi       Page template
    directory.gmi  Directory template
dst/               Site destination

Running kiln takes the contents in src, runs them through the templates in templates, and writes the result to dst.

Pages

Page templates are provided with the following information:

  • Title: The title parsed from the first heading in the file
  • Date: The date parsed from the filename (e.g. 2020-09-22-hello-world.gmi)
  • Path: Relative path to the page
  • Permalink: Permalink to the page
  • Content: The contents of the file (including the title)

Pages can specify dates in their filenames. kiln will recognize the date and remove it from the permalink.

Pages can also specify titles in their content. kiln will parse and remove the title from the content. Example:

$ cat src/hello-world.gmi
# Hello, world!

This is some content.

$ cat templates/page.gmi
Title: {{ .Title }}
Content:
{{ .Content }}

$ cat dst/hello-world.gmi
Title: Hello, world!
Content:
This is some content.

Directories

Directory templates are provided with the following information:

  • Path: Relative path to the directory
  • Permalink: Permalink to the directory
  • Pages: The pages in this directory
  • Directories: The subdirectories of this directory

Directory templates are written to index.gmi in the corresponding directory. Example:

$ ls src/posts/
src/posts/post-1.gmi
src/posts/post-2.gmi

$ cat templates/directory.gmi
{{ range .Pages }}=> .Permalink
{{ end }}

$ cat dst/posts/index.gmi
=> /posts/post-1.gmi
=> /posts/post-2.gmi

Templates

Templates are located in the templates directory.

There are currently two supported templates:

  • page.gmi: The template used for pages
  • directory.gmi: The template used for directories

If page.gmi does not exist, page files will not be created. If directory.gmi does not exist, directory index files will not be created.

Every page and directory in the site is assigned a path and a permalink.

file:      src/posts/2020-09-22-hello-world.gmi
path:      posts/2020-09-22-hello-world.gmi
permalink: /posts/hello-world.gmi

Paths are relative and point to the source file. Permalinks are absolute and point to the destination file.

Here is an example of a directory:

directory: src/posts/
path:      posts
permalink: /posts/