1
0
mirror of https://git.sr.ht/~adnano/kiln synced 2024-09-20 02:32:58 +02:00
kiln/docs/kiln.1.scd

295 lines
7.0 KiB
Plaintext
Raw Normal View History

2020-11-11 01:35:56 +01:00
kiln(1)
# NAME
2021-04-12 06:23:27 +02:00
kiln - a simple static site generator
2020-11-11 01:35:56 +01:00
# SYNOPSIS
2021-04-20 22:00:39 +02:00
*kiln* build++
[-c _config_]++
[-t _task_]
*kiln* new _path_
*kiln* version
# DESCRIPTION
*kiln build* builds a kiln site.
*kiln new* creates a new kiln site at the given path.
*kiln version* prints version information for the *kiln* program.
2020-11-20 18:07:38 +01:00
# OPTIONS
2021-04-20 22:00:39 +02:00
## kiln build
*-c* _config_
2021-04-12 06:23:27 +02:00
Specifies the configuration file to use. Defaults to "config.toml".
2020-11-11 01:35:56 +01:00
2021-04-20 22:00:39 +02:00
*-t* _task_
2021-04-20 22:12:52 +02:00
Specifies the task to run. If unspecified, all tasks will be run.
2020-11-11 01:35:56 +01:00
2021-04-12 06:23:27 +02:00
# OVERVIEW
A kiln site is built in one or more steps called _tasks_.
2021-04-21 03:37:05 +02:00
Tasks read content from the content directory, process the content, and write
the content to the output directory. Tasks can also be configured to copy static
content to the output directory.
2021-04-12 06:23:27 +02:00
2021-04-21 03:37:05 +02:00
The following directories are common to all tasks:
2020-11-11 01:35:56 +01:00
2021-04-24 20:11:22 +02:00
[[ *Directory*
2020-11-11 01:35:56 +01:00
:[ *Description*
2021-02-28 18:17:10 +01:00
| content/
2021-04-12 06:23:27 +02:00
: Content directory
2021-03-20 07:18:15 +01:00
| templates/
2021-04-12 06:23:27 +02:00
: Template directory
# CONFIGURATION
2020-11-11 01:35:56 +01:00
2021-04-12 06:23:27 +02:00
The configuration file uses the _TOML_ configuration file format. For more
information on TOML, see https://toml.io/en/v0.4.0.
2020-11-22 21:51:07 +01:00
2021-04-12 06:23:27 +02:00
The following keys are supported:
2021-04-24 20:11:22 +02:00
[[ *Key*
2021-04-12 06:23:27 +02:00
:[ *Description*
| title
: Site title
| urls
: A list of site URLs
2020-11-11 01:35:56 +01:00
2021-04-12 06:23:27 +02:00
Site URLs may contain paths, but should not end with a trailing slash. Multiple
site URLs may be specified for sites that are available at multiple locations.
2021-04-12 17:09:14 +02:00
## TASKS
Tasks can be specified in the [tasks] table. Each task must have a unique name.
The following keys are supported per task:
2021-04-24 20:11:22 +02:00
[[ *Key*
2021-04-12 17:09:14 +02:00
:[ *Description*
| input_ext
: Input file extension
| output_ext
: Output file extension
| template_ext
: Template file extension
| preprocess
: Preprocess command
| postprocess
: Postprocess command
| static_dir
: Static content directory
| output_dir
: Output directory
2021-04-24 20:11:22 +02:00
The input file extension specifies which files from the content directory to
2021-04-12 17:09:14 +02:00
process. Only files which have the same extension will be processed.
2021-04-24 20:11:22 +02:00
The output file extension specifies the extension of the file that is written to
2021-04-12 17:09:14 +02:00
the output directory.
The template file extension specifies the extension of the templates that will
be used in the template directory. If unset, no templates will be used.
2021-04-24 20:11:22 +02:00
The preprocess command specifies a command which will run before content is
passed to a template. It will be provided the content as standard input and
should write the processed content to standard output.
2021-04-12 17:09:14 +02:00
2021-04-24 20:11:22 +02:00
The postprocess command specifies a command which will run after templating
and before content is written to the output directory. It will be provided the
content as standard input and should write the content to standard output.
2021-04-12 17:09:14 +02:00
2021-04-24 20:11:22 +02:00
The static content directory controls which directory to use for static content.
If unset, no static content directory will be used.
2021-04-12 17:09:14 +02:00
2021-04-24 20:11:22 +02:00
The output directory specifies the directory to which the output files will be
written.
2021-04-12 17:09:14 +02:00
The following configuration generates a Gemini text site and also exports an
2021-04-24 20:11:22 +02:00
HTML version of the site. This configuration makes use of the *gmnitohtml*(1)
2021-04-12 17:09:14 +02:00
command to convert Gemini text to HTML.
```
# Build the site
[tasks.gemini]
input_ext = ".gmi"
output_ext = ".gmi"
template_ext = ".gmi"
static_dir = "static"
output_dir = "public"
# Export an HTML version of the site
2021-04-24 20:11:22 +02:00
[tasks.exporthtml]
2021-04-12 17:09:14 +02:00
input_ext = ".html"
output_ext = ".gmi"
template_ext = ".gmi"
2021-04-24 20:11:22 +02:00
postprocess = "gmnitohtml"
2021-04-12 17:09:14 +02:00
static_dir = "static"
output_dir = "public.html"
```
The following configuration generates an HTML site from Markdown files in the
content directory and HTML templates in the template directory. This
configuration makes use of the *markdown*(1) comand to convert Markdown to HTML.
```
[tasks.markdowntohtml]
input_ext = ".md"
output_ext = ".html"
2021-04-24 20:11:22 +02:00
template_ext = ".html"
2021-04-12 17:09:14 +02:00
preprocess = "markdown"
static_dir = "static"
output_dir = "public"
```
2021-04-12 06:23:27 +02:00
## CONTENT DIRECTORY
The content directory contains content that should be processed before
being published. Any file or directory whose name begins with "\_" will be
ignored.
Files in the content directory may be preprocessed, run through templates, and
postprocessed (in that order). Each operation takes the output of the last
operation as input.
## STATIC CONTENT DIRECTORY
All files in the static content directory will be copied to the output
directory without modification. Static assets like images should be stored in
this directory.
## TEMPLATE DIRECTORY
The template directory contains templates for use when building the site.
Templates use the Go templating language. The following templates are supported:
2020-11-11 01:35:56 +01:00
2021-04-24 20:11:22 +02:00
[[ *Template*
2020-11-11 01:35:56 +01:00
:[ *Description*
2021-04-24 20:11:22 +02:00
| page.ext
2020-11-11 01:35:56 +01:00
: Page template
2021-04-24 20:11:22 +02:00
| index.ext
2020-11-11 01:35:56 +01:00
: Directory index template
2020-11-22 21:51:07 +01:00
| atom.xml
: Atom feed template
2020-11-20 18:07:38 +01:00
2021-04-24 20:11:22 +02:00
where ".ext" is replaced with the template file extension specified in the
task's template_ext configuration option.
2021-04-12 06:23:27 +02:00
The scope of a template is limited to the directory it is placed in. For
example, the template templates/blog/page.gmi will only apply to pages in
content/blog.
2021-04-24 20:11:22 +02:00
Fallback templates can be specified in the templates/\_default directory. These
templates will be applied to any directory which does not have its own templates
specified.
2020-11-22 21:51:07 +01:00
2021-04-12 06:23:27 +02:00
For more information on the Go templating language, see
https://golang.org/pkg/text/template/.
2020-11-20 18:07:38 +01:00
## FUNCTIONS
All templates have the following functions available to them:
2021-04-24 20:11:22 +02:00
[[ *Function*
2020-11-20 18:07:38 +01:00
:[ *Description*
| site
: Returns site metadata
## SITE METADATA
2021-04-12 06:23:27 +02:00
Site metadata contains the following data:
2020-11-20 18:07:38 +01:00
2021-04-24 20:11:22 +02:00
[[ *Variable*
2020-11-20 18:07:38 +01:00
:[ *Description*
| Title
2020-11-22 21:51:07 +01:00
: The title of the site.
2020-12-21 22:41:05 +01:00
| URLs
: The URLs of the site.
2020-11-22 21:51:07 +01:00
To configure these variables, see *CONFIGURATION*.
2020-11-11 01:35:56 +01:00
## PAGE TEMPLATES
2021-04-12 06:23:27 +02:00
Page templates are provided with the following data:
2020-11-11 01:35:56 +01:00
2021-04-24 20:11:22 +02:00
[[ *Variable*
2020-11-11 01:35:56 +01:00
:[ *Description*
| Title
: The title of the page
| Date
: The date of the page
2020-11-20 18:07:38 +01:00
| Path
: Path to the page
2020-11-11 01:35:56 +01:00
| Content
: The contents of the page
2021-04-12 06:23:27 +02:00
Pages can specify dates in their filenames. For example, the file
content/2020-11-20-Hello-world.gmi will have a path of /Hello-world/ and a date
of November 20, 2020.
2020-11-11 01:35:56 +01:00
2021-04-24 20:11:22 +02:00
Pages can also specify dates and titles in frontmatter. For example:
```
---
title: Page title
date: 2021-04-24
---
Page content
```
2020-11-11 01:35:56 +01:00
## INDEX TEMPLATES
2021-04-12 06:23:27 +02:00
Index templates are provided with the following data:
2020-11-11 01:35:56 +01:00
2021-04-24 20:11:22 +02:00
[[ *Variable*
2020-11-11 01:35:56 +01:00
:[ *Description*
| Title
: Title of the directory
| Content
: The contents of the directory index file
2020-11-20 18:07:38 +01:00
| Path
: Path to the directory
2020-11-11 01:35:56 +01:00
| Pages
: List of pages in this directory
2020-11-20 18:07:38 +01:00
| Dirs
2020-11-11 01:35:56 +01:00
: List of subdirectories
2021-04-24 20:11:22 +02:00
The title and content are taken from the index file in the directory. If no
index file exists, then the index template will not be rendered.
2021-04-12 06:23:27 +02:00
## FEEDS
2021-04-12 17:09:14 +02:00
Feeds can be specified in the [feeds] table of the configuration file. Keys
2021-04-24 20:11:22 +02:00
denote the path to the feed directory and values denote the title of the feed.
2021-04-12 17:09:14 +02:00
Feeds are written to the output directory plus the feed directory plus
"atom.xml".
Example feed configuration:
2021-04-12 06:23:27 +02:00
2021-04-12 17:09:14 +02:00
```
# This will generate a feed which will be written to public/blog/atom.xml
[feeds]
"/blog/" = "My blog"
```
2020-11-22 21:51:07 +01:00
2020-11-20 18:07:38 +01:00
## FEED TEMPLATES
2020-11-11 01:35:56 +01:00
2021-04-24 20:11:22 +02:00
Atom feed templates are provided with the following data:
2020-11-11 01:35:56 +01:00
2021-04-24 20:11:22 +02:00
[[ *Variable*
2020-11-20 18:07:38 +01:00
:[ *Description*
| Title
: Title of the feed
| Path
: Path to the feed directory
| Entries
2020-11-22 21:51:07 +01:00
: List of pages in this feed
2020-11-11 01:35:56 +01:00