Link labels in every capsule index are now ISO 8601 and lead with the date, which is what Gemini's subscription convention reads a feed entry from: the first ten characters of a label must parse as YYYY-MM-DD or the line is ignored. The board's `09 Oct 26` parsed as nothing, so the front page, the archive and all six areas registered zero entries and the capsule was invisible to every aggregator in Geminispace. `/archive` now carries 36. The Connect page advertised `/feeds/all.rss.xml` and `/feeds/all.atom.xml`, which exist only in the HTML build and 404 over Gemini. That paragraph now sits behind an itsybitsy `only html` format gate, with prose outside it that is true on both faces. The gate can only cut that way round: Pelican does not implement the directive and renders it as an inert comment, so a gate subtracts from the capsule and never from the site. Also adds dormant `SMOLNET_COMMENTS` support, for a per-article thread link gated to the text formats. Off until kapara is deployed, since setting it would put a dead link under every article. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
121 lines
4.8 KiB
Python
121 lines
4.8 KiB
Python
AUTHOR = 'randogoth'
|
|
SITENAME = 'RANDOGOTH'
|
|
SITEURL = ''
|
|
PATH = 'content'
|
|
TIMEZONE = 'Asia/Jerusalem'
|
|
DEFAULT_LANG = 'en'
|
|
|
|
# An ANSI bulletin board. The TuiCSS theme that came over from TRL was a DOS
|
|
# *application*: grey chrome, dialogs, a menu bar. A board is a different thing,
|
|
# and the one actually wanted here. mc-pelican stays in the tree as the fallback.
|
|
THEME = 'bbs'
|
|
PLUGIN_PATHS = ['plugins', '../plugins']
|
|
PLUGINS = ['crtimages', 'smolnet', 'lostimages']
|
|
|
|
# Hosts that no longer exist, so their hotlinked images can never resolve.
|
|
# Checked against Wayback: of twelve such images only one was ever captured,
|
|
# and it now lives in content/library/. See lostimages.py.
|
|
LOSTIMAGES_DEAD_HOSTS = [
|
|
'visualberlin.org', 'mutanten.org', 'web.mac.com',
|
|
'kino.web.de', 'lh4.google.it', 'l.yimg.com',
|
|
]
|
|
|
|
|
|
# The sections are message areas, numbered so they can be dialled by key the way
|
|
# a board's main menu works. No descriptions: the names are the whole listing,
|
|
# as they were on a real board, and working out what an area holds is the point.
|
|
BBS_AREAS = {
|
|
'RANDOM': 1, 'PLACE': 2, 'MINIMAL': 3,
|
|
'MACHINES': 4, 'GONZO': 5, 'ENDTIMES': 6,
|
|
}
|
|
|
|
# The capsule mirrors the board: same areas, same order, same words. Gemini
|
|
# clients number link lines themselves, so an area is still dialled by number
|
|
# over there without the plugin writing a single bracket.
|
|
SMOLNET_SECTION_DIR = 'area'
|
|
SMOLNET_SECTION_ORDER = BBS_AREAS
|
|
SMOLNET_LABELS = {
|
|
'sections': 'Message areas', 'latest': 'Latest messages',
|
|
'archive': 'All messages', 'back': 'Main menu', 'pages': 'System',
|
|
'comments': 'Replies',
|
|
}
|
|
# The address is rot13 in the HTML because of web crawlers. That defence needs
|
|
# JavaScript, which Gemini does not have, and the renderer drops raw HTML, so
|
|
# without this the one thing the Connect page exists to carry would vanish.
|
|
SMOLNET_ROT13_ATTR = 'data-r'
|
|
|
|
# The capsule's half of the replies box, off until kapara is deployed. Setting
|
|
# it puts a Replies link under every article in the capsule, so it must not be
|
|
# switched on before something answers Gemini on the other end.
|
|
#
|
|
# When it lands: kapara gateways this same remark42 instance, and remark42 keys
|
|
# a thread by the article's canonical web URL, which bbs.js builds as origin +
|
|
# pathname. So kapara has to run with `-page-url 'https://randogoth.com/%s.html'`
|
|
# and `-site randogoth`, or the capsule opens a second, empty thread under every
|
|
# article instead of joining the one that is there. Port 1966, not the default:
|
|
# stunnel owns 1965 in front of itsybitsy, and kapara has to terminate its own
|
|
# TLS because Gemini client certificates are its identity mechanism.
|
|
#
|
|
# SMOLNET_COMMENTS = 'gemini://comments.randogoth.com:1966/c/{slug}'
|
|
|
|
# Articles live flat in content/; assets are carved out of that.
|
|
ARTICLE_PATHS = ['']
|
|
ARTICLE_EXCLUDES = ['pages', 'library', 'images', 'files']
|
|
PAGE_PATHS = ['pages']
|
|
STATIC_PATHS = ['library', 'images', 'files']
|
|
|
|
# Flat slugs, for the reason TRL learned the hard way: sections get reworked and
|
|
# every reassignment moves a URL. The section lives in the listing, not the path.
|
|
ARTICLE_URL = '{slug}.html'
|
|
ARTICLE_SAVE_AS = '{slug}.html'
|
|
PAGE_URL = '{slug}.html'
|
|
PAGE_SAVE_AS = '{slug}.html'
|
|
CATEGORY_URL = 'section/{slug}.html'
|
|
CATEGORY_SAVE_AS = 'section/{slug}.html'
|
|
CATEGORIES_SAVE_AS = 'sections.html'
|
|
TAG_URL = 'tag/{slug}.html'
|
|
TAG_SAVE_AS = 'tag/{slug}.html'
|
|
TAGS_SAVE_AS = 'tags.html'
|
|
ARCHIVES_SAVE_AS = 'archives.html'
|
|
AUTHOR_SAVE_AS = ''
|
|
AUTHORS_SAVE_AS = ''
|
|
|
|
# Unlike the other two sites, this one is a blog, so it is paginated and it has
|
|
# feeds. People should be able to subscribe to a devlog without visiting it.
|
|
DEFAULT_PAGINATION = 15
|
|
FEED_ALL_ATOM = 'feeds/all.atom.xml'
|
|
FEED_ALL_RSS = 'feeds/all.rss.xml'
|
|
CATEGORY_FEED_ATOM = 'feeds/{slug}.atom.xml'
|
|
CATEGORY_FEED_RSS = 'feeds/{slug}.rss.xml'
|
|
TRANSLATION_FEED_ATOM = None
|
|
AUTHOR_FEED_ATOM = None
|
|
AUTHOR_FEED_RSS = None
|
|
|
|
# The eight sections are the navigation, the way a file manager shows directories.
|
|
DISPLAY_CATEGORIES_ON_MENU = True
|
|
DISPLAY_PAGES_ON_MENU = False
|
|
MENUITEMS = [
|
|
('ARCHIVES', '/archives.html'),
|
|
('TAGS', '/tags.html'),
|
|
]
|
|
|
|
# No nl2br. The recovered bodies are hard wrapped at roughly 70 characters, so it
|
|
# turns every source line into a forced break and the prose stops reflowing.
|
|
MARKDOWN = {
|
|
'extension_configs': {
|
|
'markdown.extensions.tables': {},
|
|
'markdown.extensions.footnotes': {},
|
|
'markdown.extensions.codehilite': {'css_class': 'highlight'},
|
|
'markdown.extensions.extra': {},
|
|
},
|
|
'output_format': 'html5',
|
|
}
|
|
|
|
DELETE_OUTPUT_DIRECTORY = True
|
|
CACHE_CONTENT = False
|
|
|
|
# The comment server. One instance serves three sites, keyed on COMMENTS_SITE,
|
|
# so this is the id rather than the hostname. Unset it and the replies section
|
|
# disappears from every article, which is the off switch.
|
|
COMMENTS_HOST = 'https://comments.randogoth.com'
|
|
COMMENTS_SITE = 'randogoth'
|