kiln/README.md
2020-09-23 13:50:25 -04:00

132 lines
2.7 KiB
Markdown

# 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 outputs 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, kiln will simply copy pages from source to
destination. If `directory.gmi` does not exist, directory index files will not
be created.
## Permalinks
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/
```