Skip to content

kmaasrud/sss

main
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
src
 
 
 
 
 
 
 
 
 
 
 
 
 
 

sss

simple static sites

sss is a very simple static site generator, meant to give you only the necessary functionality and staying out of your way as much as possible. It has no configuration file, no dependencies and weighs in at only ~350 kB.

Directory structure

The default directory structure is as follows:

  • src: This directory contains source files that directly map to a HTML file in the output. They can be any filetype.

    You can override this directory by setting the environment variable SSS_SRC.

  • tmpl: This directory contains your templates. It has to include at least a file called default.html, which will be the fallback template for all files in the src directory. If a HTML file in this directory is the equivalent of a source file in the source directory (e.g. tmpl/subdir/title.html is equivalent to src/subdir/title.md), it will be used as a template for that source.

    You can override this directory by setting the environment variable SSS_TMPL.

  • dst: This directory will hold your generated site. If you want any static files in your website, place them here.

    You can override this directory by setting the environment variable SSS_DST.

Templating

Templating is done in POSIX shell, which allows great flexibility in how you want your pages rendered. The templates have an extremely simple syntax. You start in echo-mode, and alter between echo-mode and script-mode by placing #! on a separate line. In echo-mode, regular shell string interpolation can be used, while in script-mode, you can write in regular shell script.

Consider e.g. the following template:

<ul>
#!
for f in range "file1 subdir/file2 sub/subsub/file3"; do
#!
<li>File: $f</li>
#!
done
</ul>

It will get rendered as:

<ul>
<li>File: file1</li>
<li>File: subdir/file2</li>
<li>File: sub/subsub/file3</li>
</ul>

This means that including a file's content is as easy as cating it in the template, and rendering markdown can be done by interpolating e.g. a Pandoc command like $(pandoc -f markdown -t html $src).

All templates have the following variables available to them:

  • $srcs: An array of paths pointing to all source files. This array is newline-separated, so you can handle filenames with spaces.
  • $src_dir$: The path to the source directory.
  • $tmpl_dir$: The path to the template directory.
  • $dst_dir$: The path to the output directory.

Additionally, the templates that map to a source file (default.html and templates matching a source path) also have the following variables available to them:

  • $src: The path pointing to the source file the template is currently rendering.

  • $path_to_root: A path to the root from the source file.

    Example: The source src/subdir/subsubdir/file.md will have path_to_root="../..".

    Example: The source src/file.md will have path_to_root="".