One of the central ideas behind Weblorg is to allow web developers to leverage their skills to deliver content with the experience they can build with familiar tools like HTML and CSS. Weblorg defines a convention for packaging a file

It's highly recommended to have read the Getting Started document; this write up assumes that you understand the gist of how to declare routes that point to Org-Mode files and how to execute the publish.el script to generate the static website. That being said, there's enough context in the examples that illustrate this article to allow anyone to follow it.

1 Builtin Themes

The Weblorg melpa package currently ships with two themes: default and autodoc. Unsurprisingly, if no other theme is informed, default is picked.

In order to use a theme that's shipped with Weblorg, use the following on your site configuration (this goes anywhere before declaring the routes):

 :theme #'weblorg-theme-autodoc)

2 Disable the default theme

The default theme's function is weblorg-theme-default. If you need to unset the default theme, you can set :theme to nil e.g.:

(weblorg-site :theme nil)

Disabling the default theme might be useful if you want to build your own theme from scratch and want to use weblorg-copy-static to copy your own assets and not include any builtin theme's asset in the copy list.

3 The theme directory

When a directory named theme exists within the root of the website (same level as the publish.el script), then weblorg-route will prioritize looking up templates within theme/templates. And weblorg-copy-static will include theme/assets within it's search for resources to copy.

This is useful for either creating a theme from scratch or overriding a single piece of a theme you're inheriting from. For example, if you only want to override the index template of a theme, create a file named theme/templates/index.html and weblorg will use your file instead of the index.html file from whatever theme you have selected via the :theme option in weblorg-site.

4 Syntax Highlight of source code blocks

For properly generating syntax highlight for Org-Mode source code blocks, the package for such mode must be installed and configured at the time of the HTML generation.

When the HTML generation happens automatically, for example on a continuous integration scenario, that can go within the publish.el template. E.g.:

;; We need this to produce proper syntax highlight if any blog
;; posts include Clojure code in source code blocks.  Notice that
;; built-in modes don't require this.
(require 'clojure-mode)

;; This is not required, but might be desired.  It configures the
;; library that Org-Mode uses to generate syntax highlight with CSS
;; classes instead of HTML font properties.
(require 'htmlize)
(setq org-html-htmlize-output-type 'css)

 :name "posts"
 :input-pattern "./posts/*.org"
 :template "post.html"
 :output "./posts/{{ slug }}.html"
 :url "/posts/{{ slug }}.html")