Overview
This is the simplest but smart self-publishing workflow.
org-mode -> ox_hugo -> hugo -> static html -> git commit -a -> git push -> github pages
Everything is according to the universal principles of being almost “pure functional transformations” of a structured and decorated text, together with version control, which provides sort of immutability (of the previous versions).
At each stage or step we delegate some aspect to an appropriate external vendored tool.
We start with the most general and versatile format - org-mode and then
gradually specialize it (via markdown being exported into a static html by hugo)
to be published on the Github Pages.
Using org-mode as the structural text is the key. The same .org file could be
exported into almost everything, including LaTeX, and then a good quality .pdf.
The standalone pandoc tool can be used separately with the source .org files.
The principles
We are trying to separate the concerns and to decouple everything (at each step).
- Each format is reproducible (from an
orgfile) and gets preserved. - Each tool does its own thing only, and, hopefully, does it well.
The tools
- We use
Emacs, which formats the code, checks spelling and grammar, etc. - We write everything in
org-modefiles, decorated with the Hugo-specific properties. ox-hugogenerates all the markdown files inside of$HUGO_BASE_DIR/content.- it follows simple directory-based layout, so we just have a nested directories.
- it runs the
hugobinary which generates the static site html according to the theme. - we use
gitto version the resulting html content and to push it intogithub.
The properties
We just specify default properties which Hugo requires (at least the section).
HUGO_SECTION(required by Hugo)EXPORT_FILE_NAMEto use a whole sub-tree (a directory) for a single “post”.HUGO_BUNDLE