Transmissions into the Void

2025-09-06

If you're reading this, I'm sure you're aware of Antenna.

Antenna (Gemini)

It's a great feed aggregator for geminispace. One of the things I think is

really innovative about it is that it does no automatic scraping. Instead, when

posts are made on some capsule it is the capsule's responsibility to notify

Antenna that there's New Stuff. This ensures that

So me being very lazy, I wanted to automate this ping. As part of my pipeline I

automatically regenerate my /posts/index.gmi and /posts/atom.xml files.

(Incidentally, /posts/index.gmi is in proper gemlog format now, so yay.) I just

needed something to notice when one of those files is updated to ping Antenna.

What I came up with is the following. First, a quick and dirty shell script to

notify Antenna that New Stuff is available.

#!/usr/bin/env bash

# /usr/local/bin/antenna-ping

set -euo pipefail FEED_URL="${1:-gemini://remort.app/posts/atom.xml}"

# URL-encode the feed
ENC=$( python3 - "$FEED_URL" <<'PY' import sys,
urllib.parse print(urllib.parse.quote(sys.argv[1], safe='')) PY )

# Fire-and-forget Gemini GET to Antenna
printf 'gemini://warmedal.se/~antenna/submit?%s\r\n' "$ENC" \
| openssl s_client -quiet -servername warmedal.se -connect \
warmedal.se:1965 >/dev/null

exit 0

I set that executable of course (chmod +x). Then I'm leveraging a feature of

systemd that watches paths for changes (and optionally in place file

modifications which I use for my gopher mirror generator). To use that, we first

create a systemd service as normal:

# /etc/systemd/system/antenna-ping.service
[Unit]
Description=Ping Antenna after feed update

[Service]
Type=oneshot
User=remort
Group=remort
ExecStart=/usr/local/bin/antenna-ping gemini://remort.app/posts/atom.xml

So all that does it run our little script and passes in the url to give to

Antenna. Then the file watcher bit is another systemd unit:

# /etc/systemd/system/antenna-ping.path
[Unit]
Description=Watch /srv/gemini/posts/atom.xml for changes

[Path]
PathModified=/srv/gemini/posts/atom.xml
Unit=antenna-ping.service

[Install]
WantedBy=multi-user.target

In my case I'm just having it watch my atom.xml feed file. And whenever that

changes it calls the service which in turn runs our little script and Antenna is

notified.

Now I can be lazy and not have to think about it.

Back to posts
Back to index