Skip to main content Logo (IEC resistor symbol)logo

Quis custodiet ipsos custodes?
Home | About | All pages | RSS Feed | Gopher


Published: 02-12-2014 | Author: Remy van Elst | Text only version of this article

Table of Contents

ingsoc is a static site generator written in Python with the purpose ofgenerating It differs from other static site generators because itdoes not create a blog-like site, but it is focused on pages and structure. Italso does not use a template engine. It generates categories, pages, tags, anXML sitemap and a RSS feed. It takes markdown files with a yaml config header asinput, and outputs html.

I sometimes write updates on new changes in ingsoc, those articles can be foundon this page.


ingsoc requires three directories and content to work. The directory structurecan be as below:

$ tree.|--|-- config.yml|--|--|-- inc|   |-- css|   |   |-- example.css|   |-- img|   |   |-- example.png|   |-- js|   |   |-- example.js|-- src|   |-- software|   |   |--|   |   |--|   `-- tutorials|       |--|       |--|-- out|   |-- everything.html|   |-- feed.xml|   |-- inc|   |   |-- css|   |   |   |-- example.css|   |   |-- img|   |   |   |-- example.png|   |   |-- js|   |   |   |-- example.js|   |-- index.html|   |-- sitemap.xml|   |-- software|   |   |-- ingsoc.html|   |   |-- Awesome_Example_Application.html|   |-- tags|   |   |-- tag1.html|   |   |-- tag2.html|   |   |-- tag3.html|   `-- tutorials|       |-- Awesome_Tutorial_1.html|       |-- Tutorial_2.html`-- tests    |--    |--    |--    |--    `-- words-to-ignore.txt

I have a src directory with my content, which is written in markdown. Theinc directory gets copied over to the output folder, it has the css, js,images and other static content. The out folder is the folder where ingsocputs its generated html.


A content item is a markdown file, with a yaml header. The header looks likethis:

title: "Example Title"author: "John Doe"category: "software"date: "29-06-2015"lastupdate: "05-10-2019"summary: "This is a great article about some stuff related to Lorum Ipsum. The summary of this article is even more awesome."tags:   - example  - lorum  - ipsum  - tag---

Then below the three dashes (---) the actual markdown content is placed. Thecategory item is what also end up in the menu. The date and summary are usedin the RSS. The summary is the only field which is not required.

There is a post generation step in which the css and generated html areminified. The minify: False optional option (default is True) allows a page tobe excluded from the minification.


There is also a config.yml file. It looks like this:

title: "Awesome Website"subtitle: "Awesome Slogan!"rootdir: "./src"outdir: "out"incfolder: "./inc"breadcrumbs: "yes"tags: "yes"rsstitle: "Awesome Website RSS Feed"rssdescr: "The Awesome Website RSS feed, all about awesome stuff"rssurl: ""homepagetext: >    <h3>Welcome!</h3>    This is the <strong>most awesome site</strong> on the entire internet.

The homepagetext item is the raw html code which is put on the index.htmlcode. the tags and breadcrumbs are used to define if tags and breadcrumbsshould be generated and placed or not.


The minification also requires the cssmin and htmlmin.minify modules. It isfully threaded, minifying at least 4 pages at once.

To install them in a standard ubuntu/debian:

sudo apt-get install python-pip

and then:

sudo pip install misaka pyyaml dateutils
Tags: ingsoc, markdown, newspeak,, software, static-site