Posted on

Table of Contents

I am currently learning how to build this site with Zola, their tutorials are decent, but I think they aren't clear enough about preisely the system image.

zola breaks sites into content, layout, and styling. content is the text, layout is the html, styling is the css

content is broken into sections and pages. each section is a container for pages. each section has an "" header that can establish variables. each page is another markdown file that again has a header of variables and a body of text. the variable header is enclosesed in "+++"-es.

layout is broken into templates. templates can have place-holders which are then filled by other templates that "extend" them. they can also access variables stored in the relavant mark down files as well as certain automatically generated values

styling is either normal css or sass.


  • $zola serve will build and host locally
  • $zola build will build and places the result in the directory called public by default

since im using neocities I can then go to the commandline and say $ neocities push public and it will recursively upload the directory


you can also have user defined categories called Taxonomies. these taxonomies have terms and values. terms are the pieces of metadata inside the taxonomy, for example colors, the values are objects associated with each piece of metadata.

We place the configuration of a taxonomy in the config.toml file.

taxonomies = [
    {name = "colors", feed = "true"},
    {name = "shape", feed = "false"}

you can then set the taxonomies per page in the header of each file

colors=["red", "blue"]

the taxonomy pages are then visible at

$BASE_URL/$NAME/ (taxonomy)
$BASE_URL/$NAME/$SLUG (taxonomy entry)


Zola uses the Tera html templating syntax.


zola uses common mark with shortcodes that allow you to nsert little macros. However, you can also just type raw html in the midst of a markdown document and it will be carried through. the basics:

  • #n is <hn>
  • - is bullet point
  • --- is a horizontal rule
  • *text* to emphasize
  • **text** to bold
  • \`` for code snippets, and triple for blocks
  • ![text](url) to display an image
  • [text](url) to link


As mentioned before, Zola uses Sass as a css preprocessor. Sass has two syntaxes: an extended css syntax, referred to as sassy css and indicated with a .scss filetype and indented syntax indicated with a .sass filetype. I'll be focussing on the scss syntax.

variables can be declared with $var_name:value; they are scoped so that variables declared inside a block are local to that block. you can add interpolation expressions anywhere in a scss document with a #{expression} the evaluated result of which will be inserted in place as an unquated string NOT a number. numbers can be inserted by using sass code as is. ie just using a variable name $var.

you can import other sass documents with @use. @import does the same thing but also imports the styles not just mixins and vars and functions.

mixins are importable styles that take the form of a style annotated with a @mixin before the style name and an optional list of arguments after @mixin style(args){rules}. we then use a mixin with the include keyword like so @include style(args);. arguments can be given default values by doing $arg:val. @include can also pass arguments by name not just positionally.


sometimes you dont wanna build the look from scratch this is where themes come in.

to install a theme you can simply clone it into the themes directory. You then tell Zola to use the theme in the config file. The theme name is the directory it was cloned into e.g themes/blog has the name blog