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