content/orgo.toml

salary-visualization
cleberg.net/content/orgo.toml history · blame · raw

139 lines · 5456 bytes

  1# orgo configuration for cleberg.net.
  2#
  3# Lives in content/ because that directory is the site's URL root: content/blog/post.org
  4# publishes at /blog/post.html. Neither this file nor templates/ is published.
  5#
  6#   orgo serve content -o /tmp/preview      # write and preview
  7#   orgo build content -o _site --strict    # build for real, failing on broken links
  8
  9[site]
 10title = "cleberg.net"
 11description = "Stillness amidst the chaos."
 12language = "en"
 13# Set, because the layout emits canonical links and /feed.xml — a feed is read away from
 14# the site that served it, so its links cannot be relative. Ordinary page-to-page links
 15# stay relative regardless, so a preview build still works from a directory.
 16base_url = "https://cleberg.net"
 17
 18[nav]
 19# Explicit, because the pages that belong in the nav are not all top-level: /blog/ and
 20# /garden/ are generated below, and salary/ is a section index one level down. index.org
 21# is deliberately absent — the layout writes the Home link itself.
 22#
 23# Generated pages are named by their output path, authored ones by their source. Listing
 24# them together is what puts Salary last: a collection with `nav = true` that is not
 25# listed here gets appended after everything that is — which is why the tags collection
 26# below does not set `nav = true`: the live nav has no Tags entry.
 27mode = "explicit"
 28pages = ["blog/index.html", "garden/index.html", "salary/index.org"]
 29
 30[build]
 31# theme/static/ is the site's static root, published at /. orgo reads it from here
 32# rather than needing its files copied next to the writing — one copy, not two.
 33assets = ["../theme/static"]
 34
 35[templates]
 36dir = "templates"
 37
 38# Blog posts render through post.html, which adds the reply snippet. Nothing else does:
 39# the live site also invites replies on garden notes and /now/, and that is a choice
 40# rather than something a directory should decide. Any page opts in for itself with
 41# `#+TEMPLATE: post.html`, and any post opts out with `#+TEMPLATE: base.html`.
 42[[pages]]
 43match = "blog"
 44template = "post.html"
 45
 46[highlight]
 47# Two themes, because the site follows the reader's colour scheme and one theme cannot.
 48# orgo writes both into syntax.css, each behind its own prefers-color-scheme query. The
 49# block surface they sit on is styles.css' business, and it changes with the scheme too.
 50theme = "InspiredGitHub"
 51theme_dark = "base16-ocean.dark"
 52
 53[html]
 54# Level-1 org headings become <h2>, beneath the page title the layout renders as <h1> —
 55# which is what the current site does too.
 56heading_offset = 1
 57toc = true
 58# On, because the live site has numbered headings — inherited from Emacs' default rather
 59# than chosen, but changing it is a design decision to make deliberately rather than a
 60# side effect of switching generators. One line to flip when you want to.
 61section_numbers = true
 62
 63# --- Generated pages -------------------------------------------------------------
 64# These have no source .org file.
 65
 66# The home page. Generated rather than authored, because it is a hand-written
 67# introduction *plus* the most recent posts — and the post list is not something to
 68# maintain by hand. The prose lives in templates/home.html.
 69#
 70# content/index.org was deleted to make room: it held only #+title and #+description,
 71# both of which are now [site] settings above. Restore it any time with
 72# `git checkout content/index.org`, but then this collection must output somewhere else —
 73# two pages cannot claim one URL, and orgo fails the build rather than picking a winner.
 74[[collections]]
 75source = "blog"
 76output = "index.html"
 77template = "home.html"
 78title = "Christian Cleberg"
 79sort = "date"
 80order = "desc"
 81
 82[[collections]]
 83source = "blog"
 84output = "blog/index.html"
 85template = "blog.html"
 86title = "Blog"
 87sort = "date"
 88order = "desc"
 89nav = true
 90
 91[[collections]]
 92source = "garden"
 93output = "garden/index.html"
 94template = "garden.html"
 95title = "Garden"
 96sort = "date"
 97order = "desc"
 98nav = true
 99
100# The detour series index. `source` is blog rather than a directory of its own, because
101# these are ordinary blog posts — they belong in the blog index and the feed — and a
102# collection cannot select by tag. detour.html does that filtering itself.
103#
104# Deliberately out of the nav: `nav = true` is absent and [nav] does not list it, which
105# are both required to keep it out. Posts link to it; the nav does not.
106[[collections]]
107source = "blog"
108output = "detour/index.html"
109template = "detour.html"
110title = "detour"
111sort = "date"
112order = "asc"
113
114# One page per tag, plus the index the live site already has at /tags/. `source` is empty
115# so it groups across the whole site rather than one section, which is how #+FILETAGS: is
116# used here — tags appear on blog posts and garden notes alike.
117[[collections]]
118source = ""
119group_by = "tags"
120output = "tags/{tag}.html"
121template = "list.html"
122title = "Tagged: {tag}"
123index_output = "tags/index.html"
124index_template = "tags.html"
125index_title = "Tags"
126
127# The RSS feed. Not a separate feature — a collection whose template happens to be XML,
128# which is why /feed.xml is declared here alongside the HTML listings.
129[[collections]]
130source = "blog"
131output = "feed.xml"
132template = "feed.xml"
133title = "cleberg.net"
134sort = "date"
135order = "desc"
136# Whole posts, not excerpts. The live feed carries full content, and a subscriber handed
137# excerpts instead would notice. Costs a render of every listed post whenever the feed is
138# rebuilt, which is the trade this is worth making for.
139include_content = true