A full redesign of The Plain Libre Jekyll theme https://software.franco.net.eu.org/frnmst/the-flux-of-thought
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.
frnmst/Franco Masotti 139d2599df Moved robots.txt page so that it works. 5 years ago
_assets Changed some png images to svg for sake of efficiency. 5 years ago
_comments Improved commenting system. Improved website structure. Various fixes. 5 years ago
_includes Changed some png images to svg for sake of efficiency. 5 years ago
_layouts Some SEO fixes. Updated readme. 5 years ago
_media/2017-02-11-another-post Fixed and extended image handling. Added visualization of update date in posts. Minor fixes. 5 years ago
_pages Moved robots.txt page so that it works. 5 years ago
_posts CSS fixes. Fixed feed.xml page and addeed link to it. Added disable excerpts variable. Other fixes. 5 years ago
_sass Changed some png images to svg for sake of efficiency. 5 years ago
.gitattributes 🍭 Added .gitattributes & .gitignore files 7 years ago
.gitignore Update readme, .gitignore & renaming license file 6 years ago
LICENSE.md Update readme, .gitignore & renaming license file 6 years ago
Makefile Improved commenting system. Improved website structure. Various fixes. 5 years ago
README.md Some SEO fixes. Updated readme. 5 years ago
_config.yml Fixed baseurl variable for the example. 5 years ago
robots.txt Moved robots.txt page so that it works. 5 years ago


The Plain Libre

The Plain Libre is just another minimalist Jekyll theme that designed to focus on writing matters. This theme is best use for personal blog type, it relies on free software only and does not include any Javascript. The font used is served from the local instance.

Original version

This version compared to the original one 1443d83

  • Removed all analytics
  • Removed Google font
  • Removed Gravatar
  • Removed MathJax
  • Changed main font
  • Bigger font rendering
  • Changed background colors
  • outline: none for links
  • Simpler image handling
  • Last post update shown
  • Static commenting system
  • Full tag and category support
  • Lists style CSS: circle instead of disk
  • Excerpts support


  • Search Engine Optimization (SEO)

  • Better mobile support

  • CNAME?

  • shell scipt that builds example posts, images (base64 or similar), etc using:

    cat <<-EOF
    # whatever

    so that examples and real blog content can be decoupled. This script will be called using the Makefile.

Theme installation

# pacman -S ruby
$ gem update
$ gem install jekyll jekyll-sitemap


$ make




Commenting system


This theme handles comments in the most static way possible: a mailto link is generated for each post thanks to GMAIL mail aliases, using the address specified in the _config.yml file. This idea came out while reading this page.

Moreover, for each post a comment section gets exposed. To get comments inside this section, you must create a new file in the _comments directory using the corresponding posts path name as file name. Let's say a user sends a comment for the another-post post. The mailto link will have this structure:


You may notice the substring 2017-02-11-another-post after the gmail's email (but it works for any mailer system supporting these kind of mail aliases). This string is part of the file name corresponding to the post which is:


Let's ingnore the ./_posts/ and .md substrings for a moment and save 2017-02-11-another-post somewhere. Since a post may have more than a comment, we must distinguish between one and another. To do this we create a new directory using the comment path, like the following:

$ mkdir _/comments/2017-02-11-another-post

and we will save the comment files inside to keep things tidy.

We then create a new markdown file corresponding to the comment, and its file name will be used as an id, for example:


You can use any non spaced string, and avoid using .md except at the end of this file name.

Out final comment path is:


As a final remark you may have noticed that each comment is referenced as a paragraph (using the id) and that markdown is enabled by default.

Comment attributes

Comment files have 5 attributes:

  • layout

    • Always use comment as variable.
  • date

    • Use the format reported by the following date command: $ date "+%F %T %z"
  • from

    • string representing the name or the id or the mail of the person that commented the post.
  • subject

    • String representing the mail subject.

For example:

layout: comment
title: This is another post
date: 2017-02-11 23:37:05 +0100
from: x.y@y.x, A Mailer
subject: test subject

This is a test comment for the `Hello again` post.

def hi

Media files

Extending this ideas I came up with the following:


Just like comments, each media file is contained in one directory corresponding to a post. However, unlike comments, media content may be referenced from more than one post. This is how it works.

File locations

If out example post is ./_posts/2017-02-11-another-post.md and we want to add media files to it, we must create a corresponding directory in _media:


We can now place our file inside, for example:


Possible combinations

Now, let's go back to ./_posts/2017-02-11-another-post.md. To be able to display that picture we need to use the include liquid tag. In the simplest form the only required parameter is the file name:

{% include image.html file="terminal.png" %}

You can also use the alt and/or capiton tags:

{% include image.html file="terminal.png" alt="ter" caption="A terminal example caption" %}

You can also use plain markdown, which is not advisable in this case, since you need to input the whole path:

![ter]({{ site.baseurl }}/media/2017-02-11-another-post/terminal.png)

Calling files from another post

In some cases you may want to recall media files from another post. You can do that using the otherpost tag. Let's say we are in the ./_posts/2015-09-09-download-this-theme.md post.

{% include image.html file="2017-02-11-another-post/terminal.png" alt="Terminal" caption="A terminal image from the other post" otherpost=true %}

As you can see you don't have to specify the full path but only the post name slash the file name. The rest is filled in automatically.

Finally, notice the otherpost=true tag at the end.


This feature is currently available only for images.

Static pages

Reading this gave me the idea to move the static pages like index, 404, etc.. in the ./_pages directory. If you want to add new pages remember to add a sensible permalink for each page and remember to keep include: [ "_pages" ] and collections: pages: output: false in the _config.yml file.

Tags and categories


In this theme tags and categories are considered the same thing. I will use the word tag to speak about both tags and categories.

I gathered some ideas from here and using the official Jekyll documentation.

A full list of tags is present on the home page, i.e: ./_pages/index.html. This list is just a set of links pointing to the appropriate entry in the ./_pages/tags.md page. This page has that same list as well as links to each post belonging to a tag.

If a post contains at least one tag, this is reported at the top of the page with a link pointing to the appropriate bookmark of ./_pages/tags.md (just like in the home page). A user looking at a post can see all related posts just by clicking at those tag links.


The tag entry is optional which means that you can specify from 0 to n tags. If you want to add some, simply write your comma separated list of tags in the front matter of your post:

tags: [tag 0, tag 1, ... , tag n]

Let's make an example. What follows is the front matter of the ./_posts/2015-09-09-download-this-theme.md post.

title: Download this Theme
updated: 2017-04-09 00:29
categories:  Download
tags: [download, terminal, image from another post]

As you may have noticed, tags can contain spaces.

Once you run make, you should see the following links just below the Download this Theme title:

*download* *terminal* *image from another post*


Excerpts are reported in the home page.

Use the <!--more--> tag inside a post to mark the end of the excerpt.

If this tag is omitted, the first 10 words of the post will be reported instead. You can specify the number of words in the excerpt by editing the excerpt_words variable in the ./_config.yml file.

If you are not interested in excerpts set the excerpt_enabled variable to false in ./_config.yml.

Have a look at this article for more ideas.

RSS feeds

This theme contains an Atom file useful for RSS feeds in ./_pages/feed.xml

The link to feed.xml is available in the footer of every page thanks to a modified public domain svg icon. The purpose is that your readers open this link with a feed reader so that they remain up to date with your posts.

A patch has been added to the SVG image because it was badly rendered on some browsers available for Android. See this article.

Search Engine Optimizaition (SEO)

I'm a noob in this field so I followed this tutorial.

  • sitemap is available thanks to the jekyll-sitemap plugin.
  • Always use image alt tags. For images in ./_assets these are already coded in.
  • social media???
  • responsiveness: the theme is reported responsive by Google.
  • ...

Mobile support

Mobile support is available for this theme through the CSS file. It works but it can be much better.


Use a squared avatar in ./_assets/avatar.jpg.


Copyright (C) 2017, Franco Masotti franco.masotti@student.unife.it