My simple static site generator for blogs or projects.
Sawsge is availible as a Gem and as an AUR package.
Install as a Gem: gem install sawsge
NOTE: When installing as a Gem, Pandoc must also be installed.
Install from the AUR: paru -S sawsge
Run sawsge [DIRECTORY]
where [DIRECTORY]
is the source
directory root. If [DIRECTORY]
is not provided, Sawsge
will target ./
In the source directory root should exist header.html
,
footer.html
, and config.toml
. Additional files may need
to exist for different modes.
Here's an example config for a project:
[general]
# For now this can only be a single directory, no
# subdirectories allowed!
out_dirname = "out"
# "blog" or "project"
mode = "project"
# If (header|footer)_filename is an empty string, no header
# or footer will be added to the rendered pages, although
# for now this will build a broken website.
header_filename = "header.html"
footer_filename = "footer.html"
# All external links will be given the `target=_blank`
# attribute, opening them in new tabs when clicked, unless
# the link has a user-set target.
external_links_target_blank = true
# A list of files, relative to the src root, to exclude from
# builds
ignore = ["README.md"]
[blog]
posts_dirname = "post"
Sawsge makes all links on the site point to directories, so
there is no index.html
at the end of any URL
(example.com/thing/index.html vs example.com/thing/). Sawsge
will build your website to out_dirname
in your config;
make sure there are no files in there, as they will be
deleted!
Blog mode creates a special homepage with the title and a
summary of each post, with latest posts at the top. In blog
mode, sawsge will look for posts under posts_dirname
in
the config. In posts_dirname
, each post should be in a
directory specifying its date in YYYY/MM/DD format, e.g.
/[posts_dirname]/2021/03/09/index.md
. In its source, the
post should include at least one <h1></h1>
and one
<summary></summary>
HTML block. Both will be used to
generate the summary on the front page.
Project mode is much simpler than blog mode. It performs no special handling with different files--each Markdown file will be generated as a plain page.