From 9faffbf6bc5083239d69a2daedac273e6d814bc3 Mon Sep 17 00:00:00 2001 From: t Date: Sat, 11 Jul 2026 11:50:44 -0600 Subject: Archive fictional site examples and audit inherited prose --- weblog/_moving-off-gemini.html | 88 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 weblog/_moving-off-gemini.html (limited to 'weblog/_moving-off-gemini.html') diff --git a/weblog/_moving-off-gemini.html b/weblog/_moving-off-gemini.html new file mode 100644 index 0000000..fdf6165 --- /dev/null +++ b/weblog/_moving-off-gemini.html @@ -0,0 +1,88 @@ + + + + + +Moving my weblog off Gemini (without leaving it) — tjp.lol + + + + + +
+ +
+

~tjp $_

+ +
+ +
+
+
+

← weblog  / 

+

Moving my weblog off Gemini (without leaving it)

+
+ +

This is placeholder text laid out so you can see how a full post reads. Replace it with the real .gmi content when you export the capsule — the structure below covers everything a converted Gemini post will need: headings, lists, quotes, code, and links.

+ +

I've kept a capsule at gemini://gemini.ctrl-c.club/~tjp/ for a few years now. Gemini is a lovely place to write: the format is so constrained that there's nothing to fiddle with, and the whole thing rewards plain, linear prose. But I wanted a web presence too — one that fits in with the personal sites I keep finding in webrings.

+ +

The plan

+

The goal was never to abandon geminispace. It was to have both, from one source of truth. Gemtext is close enough to Markdown that a small converter gets you most of the way there:

+ +
    +
  • Keep writing .gmi files in my capsule.
  • +
  • Run a converter that emits HTML with the same structure.
  • +
  • Wrap each page in the site template you're reading now.
  • +
+ +

The converter

+

Gemtext has exactly one block-level construct per line, which makes parsing almost insultingly simple. Here's the core of it:

+ +
while IFS= read -r line; do
+  case "$line" in
+    "### "*) echo "<h3>${line#### }</h3>" ;;
+    "## "*)  echo "<h2>${line### }</h2>" ;;
+    "# "*)   echo "<h1>${line## }</h1>" ;;
+    "=> "*)  emit_link "$line" ;;
+    "* "*)   emit_list_item "$line" ;;
+    "> "*)   echo "<blockquote>${line#> }</blockquote>" ;;
+    "")      echo "" ;;
+    *)       echo "<p>$line</p>" ;;
+  esac
+done < "$1"
+ +

That's genuinely most of it. The fiddly parts are link lines (=> can be a bare URL or have link text) and collapsing runs of * lines into a single <ul>.

+ +
The best format is the one that outlives the tool you wrote it in. Gemtext will still be readable when this converter is long gone.
+ +

What I kept

+

No client-side anything. The web version renders identically with JavaScript disabled, because there is no JavaScript to disable. Fonts are whatever your system already has. The whole page is a few kilobytes.

+ +

If you want the source, it lives with the rest of my projects. And the capsule is still there — see the colophon for how it all fits together.

+
+ + +
+ + + +
+ + -- cgit v1.3