--- layout: wiki title: Site generator updated: 2026-10-12 23:30 author: rick toc: true --- ## How this site is built This site is fully static. There is no database, no wiki engine and no content management system: every page is a plain Markdown file with front matter in the `content/` tree, and a single Python script turns that into HTML. - Build: `python3 generate.py` - wipes and rebuilds `site/` - Preview: `python3 -m http.server 8001 --bind 127.0.0.1` from `site/` - No external dependencies, standard library only The current version of the script is attached to this page, so you can read exactly what produced the page you are looking at. Every content page also links its own raw Markdown source at the bottom (`index.txt`, the successor of the old Trac "Download in other formats: Plain Text"). ## Styling inspiration - **The old Trac instance** at [rickvanderzwet.nl/trac/personal](https://rickvanderzwet.nl/trac/personal): the red links with dotted underline, the uppercase pill navigation, the yellow floating table of contents - **The FreeBSD Handbook** ([docs.freebsd.org](https://docs.freebsd.org/en/books/handbook/)): the dark code blocks with subtle syntax colors, the light blocks for plain command output and the admonition boxes - **A modern twist of our own**: the card grid on the homepage, the heading anchors, the version stamp in the footer ## Syntax reference A page is a directory under `content/` with an `index.md` and optional files under `attachments/`. Everything the generator understands is listed below. Emphasis with `_` is deliberately not supported. ### Front matter The block between `---` markers at the top of `index.md`: | Key | Applies to | Meaning | |---|---|---| | `layout: post` | blog posts | page in `content/blog/`, gets a date | | `layout: notes` | notes | page in `content/notes/` (`wiki` is the legacy alias) | | `title` | all | page title (h1 and browser title) | | `date` | posts | `YYYY-MM-DD HH:MM`, publication date | | `updated` | notes | `YYYY-MM-DD HH:MM`, last change | | `author` | all | shown in the meta line | | `categories` | posts | comma separated list, generates category pages | | `draft: true` | posts | concept: rendered for preview, hidden from indexes | | `toc: true` | all | yellow table of contents box from the h2-h6 headings | | `default: true` | notes | hide from the section index (converted Trac docs) | ### Inline formatting | Markdown | Renders as | |---|---| | `**bold**` | **bold** | | `*italic*` | *italic* | | `~~strike through~~` | ~~strike through~~ | | `` `inline code` `` | `inline code` | | `underline` | underline | | `x2 and H2O` | x2 and H2O | | `[text](https://example.com)` | [text](https://example.com) | | `[text](/notes/FreeBSDJail/)` | [text](/notes/FreeBSDJail/) | | `` | | | `https://rickvanderzwet.nl` | https://rickvanderzwet.nl | | `\*not emphasis\*` | \*not emphasis\* | ### Headings ```markdown ## Heading level 2 ### Heading level 3 ``` Renders as real headings; every heading gets an anchor link (`#`) on hover and the slug id used by the table of contents. ### Lists ```markdown - unordered item - item wrapped over multiple lines - nested item 1. ordered item 2. second item ``` Renders as: - unordered item - item wrapped over multiple lines - nested item 1. ordered item 2. second item ### Code blocks Fenced code with a language gets syntax coloring. A ```sh-block with prompt lines renders as a terminal session: `#` is the root prompt, `$` the regular user. ````markdown ```sh build# truncate -s 6GB embedded.img build# gpart create -s MBR $MD ``` ```` Renders as: ```sh build# truncate -s 6GB embedded.img build# gpart create -s MBR $MD ``` Supported languages: `sh` (also `bash`, `console`, `sh-session`), `python`, `c`, `diff` and `ini`. A fenced block without language and without prompt lines renders as a light output block. ### Tables ```markdown | Interface | Address | |---|---| | igb0 | 192.168.178.1 | | wlan0 | 192.168.182.1 | ``` Renders as: | Interface | Address | |---|---| | igb0 | 192.168.178.1 | | wlan0 | 192.168.182.1 | The first row is the header row. Tables without a header row are converted to a plain HTML table. ### Blockquotes and rules ```markdown > Quoted text, for example from a mailing list. --- ``` Renders as: > Quoted text, for example from a mailing list. Followed by a horizontal rule: --- ### Admonitions A paragraph starting with a keyword and a colon (or the bold variant) renders as a colored box: ```markdown Note: plain keyword **Tip:** bold variant ``` Renders as: Note: plain keyword **Tip:** bold variant Warning: oranje Caution: rood Important: paars TODO: grijs ### Images and attachments ```markdown ![alt text](attachments/photo.jpg) ![photo](attachments/photo.jpg){style="max-width:750px"} ``` Files in `attachments/` next to `index.md` are copied to the site and listed automatically at the bottom of the page, with file size. ## License The content of this site is licensed under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) - the successor of the old "BSDLike" documentation license. The build scripts themselves are BSD 2-Clause licensed. The full text of both lives in the `LICENSE.md` of the site repository. ## Credits Designed and maintained by Rick van der Zwet. The generator, the conversion of the old Trac content and this site were built in collaboration with Mistral Vibe (Mistral AI) as co-author.