Twelve images across seven articles were hotlinked from servers that no longer exist, so they were broken on the live sites. Checked every one against the Wayback Machine, patiently enough to trust the answer: an earlier pass appeared to find seven, but that was a test treating an empty response as a hit. One survives. visualberlin.org's p1010789, a 2011 capture of the projector set up against Mannheim city hall during the Flimmerkiste wildscreening, is now a local asset in flux.vision/content/library/ and the reference points at it. The other eleven were never captured. Both dead domains are archived, so this is not a gap in coverage: of 8,438 visualberlin.org URLs and 204 for mutanten.org, only that one image is there. mutanten.org's archive does not reach back to its fp-content era at all, which is where the Logan's Run stills lived. So lostimages.py learns about dead hosts, which it matches rather than fetching, because a build must not depend on the network and a dead host is a fact about the world rather than about the document. The references stay in the Markdown, as the existing ones do: the reference records what was there. It matters more on the capsule than on the web. A browser shows a broken image as a silent gap, but gemtext has no inline images, so every one becomes a visible => link line and the page would advertise a dead host as somewhere worth going. smolnet.py therefore strips them too, reading the same host list, since it works on the Markdown source and never sees Pelican's output. lostimages.py moves to the repo-level plugins/ directory beside smolnet. It was shared already, with flux.vision reaching into tobias.raayoni-last.com for it, and randogoth.com now needs it too; a shared plugin living inside one site was the wrong shape for three consumers. Left alone deliberately: the two mutanten.org links in mutantenkino-website.md. That entry is about having built the site, so the link is its subject rather than decoration, and a dead link does not make the record wrong. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
100 lines
3.7 KiB
Python
100 lines
3.7 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',
|
|
}
|
|
# 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'
|
|
|
|
# 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
|