diff options
| author | Joe Carstairs <me@joeac.net> | 2026-06-18 19:59:58 +0100 |
|---|---|---|
| committer | Joe Carstairs <me@joeac.net> | 2026-06-18 20:01:32 +0100 |
| commit | 2d89475f0b9648e5efcf827d3e01356ee84b5465 (patch) | |
| tree | b7e0e41a729e638abc97f287cfb6b1fa772f50d1 /gemini | |
| parent | f71fbdafacff125830268a4d7eab29f39f55aec1 (diff) | |
renames capsule -> gemini
Diffstat (limited to 'gemini')
| -rw-r--r-- | gemini/.editorconfig | 2 | ||||
| -rw-r--r-- | gemini/.gitignore | 8 | ||||
| -rw-r--r-- | gemini/Makefile | 34 | ||||
| -rwxr-xr-x | gemini/build_loglog.bash | 131 | ||||
| -rwxr-xr-x | gemini/build_longlog.bash | 38 | ||||
| -rwxr-xr-x | gemini/build_microlog.bash | 38 | ||||
| -rw-r--r-- | gemini/comitium-data/feeds.txt | 16 | ||||
| -rw-r--r-- | gemini/comitium-data/header.gmi | 4 | ||||
| l--------- | gemini/content/feed.gmi | 1 | ||||
| l--------- | gemini/content/images | 1 | ||||
| -rw-r--r-- | gemini/content/index.gmi | 17 | ||||
| -rw-r--r-- | gemini/content/logs/index.gmi | 8 | ||||
| l--------- | gemini/content/logs/longlog | 1 | ||||
| l--------- | gemini/content/subscriptions.gmi | 1 | ||||
| l--------- | gemini/microlog | 1 | ||||
| -rwxr-xr-x | gemini/run.sh | 5 | ||||
| -rw-r--r-- | gemini/templates/loglog-header.gmi | 6 | ||||
| -rw-r--r-- | gemini/templates/longlog-header.gmi | 3 | ||||
| -rw-r--r-- | gemini/templates/microlog-header.gmi | 3 |
19 files changed, 318 insertions, 0 deletions
diff --git a/gemini/.editorconfig b/gemini/.editorconfig new file mode 100644 index 0000000..22357a2 --- /dev/null +++ b/gemini/.editorconfig @@ -0,0 +1,2 @@ +[*] +max_line_length = 99999 diff --git a/gemini/.gitignore b/gemini/.gitignore new file mode 100644 index 0000000..398c8d1 --- /dev/null +++ b/gemini/.gitignore @@ -0,0 +1,8 @@ +.certificates +content/logs/microlog.gmi +content/logs/longlog.gmi +content/logs/loglog.gmi +tmp-build-loglog-* +comitium-data/feed.gmi +comitium-data/subscriptions.gmi +comitium-data/comitium.json diff --git a/gemini/Makefile b/gemini/Makefile new file mode 100644 index 0000000..eee7273 --- /dev/null +++ b/gemini/Makefile @@ -0,0 +1,34 @@ +COMITIUM_DATA := comitium-data +TEMPLATES_DIR := templates +MICROLOG_HEADER := $(TEMPLATES_DIR)/microlog-header.gmi +LONGLOG_HEADER := $(TEMPLATES_DIR)/longlog-header.gmi +LOGLOG_HEADER := $(TEMPLATES_DIR)/loglog-header.gmi +MICROLOG_ENTRIES := $(wildcard microlog/*) +LONGLOG_ENTRIES := $(wildcard content/logs/longlog/*) +LOGLOG_TARGET := content/logs/loglog.gmi +FEED_TARGET := $(COMITIUM_DATA)/subscriptions.json $(COMITIUM_DATA)/feed.gmi $(COMITIUM_DATA)/subscriptions.gmi +FEED_OUTPUTS := $(FEED_TARGET) $(COMITIUM_DATA)/subscriptions.json $(COMITIUM_DATA)/feed.gmi $(COMITIUM_DATA)/subscriptions.gmi +MICROLOG_TARGET := content/logs/microlog.gmi +MICROLOG_OUTPUTS := $(MICROLOG_TARGET) $(wildcard content/logs/microlog/*) +LONGLOG_TARGET := content/logs/longlog.gmi + +.DELETE_ON_ERROR: +all: $(MICROLOG_TARGET) $(MICROLOG_OUTPUTS) $(LONGLOG_TARGET) $(LOGLOG_TARGET) $(FEED_OUTPUTS) + +$(MICROLOG_TARGET): $(wildcard microlog/*) $(MICROLOG_HEADER) + bash ./build_microlog.bash + +$(LONGLOG_TARGET): $(LONGLOG_ENTRIES) $(LONGLOG_HEADER) + bash ./build_longlog.bash + +$(LOGLOG_TARGET): $(MICROLOG_TARGET) $(LONGLOG_TARGET) $(LOGLOG_HEADER) + bash ./build_loglog.bash + +$(FEED_TARGET): $(COMITIUM_DATA)/feeds.txt + rm -f $(COMITIUM_DATA)/comitium.json + while read feed; do \ + comitium add --data "$(COMITIUM_DATA)" $$feed; \ + done <$(COMITIUM_DATA)/feeds.txt + +clean: + rm -rf $(MICROLOG_OUTPUTS) $(LONGLOG_TARGET) $(LOGLOG_TARGET) $(FEED_OUTPUTS) diff --git a/gemini/build_loglog.bash b/gemini/build_loglog.bash new file mode 100755 index 0000000..247da74 --- /dev/null +++ b/gemini/build_loglog.bash @@ -0,0 +1,131 @@ +#!/bin/bash + +TMP="tmp-build-loglog-$(date +%s%N)" +LOGLOG="content/logs/loglog.gmi" +LOGLOG_HEADER="templates/loglog-header.gmi" + +new_filename() +{ + DATE="$1" + mkdir -p "$TMP/$DATE" + N=0 + while [[ -f "$TMP/$DATE/$N" ]]; do + N=$(( N + 1 )) + done + echo "$TMP/$DATE/$N" +} + +read_log_to_tmp() +{ + LOGPATH="$1" + LOG="$(echo $LOGPATH | sed "s/.*\///g" | sed "s/\.gmi//g")" + CURRENT_POST_HEADING="" + CURRENT_POST_FILENAME="" + while read line; do + if [[ -z "$CURRENT_POST_FILENAME" ]]; then + if [[ "$line" =~ (\#+)\ *([0-9]{4}-[0-9]{2}-[0-9]{2})(\.[0-9]+)?\ * ]]; then + CURRENT_POST_HEADING="${BASH_REMATCH[1]}" + DATE="${BASH_REMATCH[2]}" + CURRENT_POST_FILENAME="$(new_filename $DATE)" + elif [[ "$line" =~ \=\>\ +([^\ ]+)\ +([0-9]{4}-[0-9]{2}-[0-9]{2})(\.[0-9]+)?\ +(.*) ]]; then + HREF="${BASH_REMATCH[1]}" + DATE="${BASH_REMATCH[2]}" + NAME="${BASH_REMATCH[3]}" + FILENAME="$(new_filename $DATE)" + echo " +=> $HREF $DATE $NAME + +From my $LOG. + +=> /logs/$LOG.gmi My $LOG" \ + >> "$FILENAME" + fi + else + if [[ "$line" =~ (\#+)\ *([0-9]{4}-[0-9]{2}-[0-9]{2})\ * ]]; then + echo "From my $LOG. + +=> /logs/$LOG.gmi My $LOG" \ + >> "$CURRENT_POST_FILENAME" + CURRENT_POST_HEADING="${BASH_REMATCH[1]}" + DATE="${BASH_REMATCH[2]}" + CURRENT_POST_FILENAME="$(new_filename $DATE)" + elif [[ "$line" =~ \#.* ]] && ! [[ "$line" =~ ${CURRENT_POST_HEADING}\#.* ]]; then + echo "From my $LOG. + +=> /logs/$LOG.gmi My $LOG" \ + >> "$CURRENT_POST_FILENAME" + CURRENT_POST_HEADING="" + DATE="" + CURRENT_POST_FILENAME="" + else + echo "$line" >> "$CURRENT_POST_FILENAME" + fi + fi + done <$LOGPATH +} + +trim_entries() +{ + ENTRY_DIR="$1" + for entry in $ENTRY_DIR/*; do + while [[ -z "$(head -n 1 "$entry")" && "$(wc -l "$entry" | cut -c1)" -ne 0 ]]; do + tail -n +2 "$entry" | tee "$entry" 1>/dev/null + done + while [[ -z "$(tail -n 1 "$entry")" && "$(wc -l "$entry" | cut -c1)" -ne 0 ]]; do + head -n -1 "$entry" | tee "$entry" 1>/dev/null + done + if [[ -z "$(cat "$entry")" ]]; then + echo "Removing entry $entry: $(cat $entry)" + rm "$entry" + fi + done + if [[ "$(ls "$ENTRY_DIR" | wc -l)" -eq 0 ]]; then + rmdir "$ENTRY_DIR" + fi +} + +append_entries_for_date() +{ + DATE_DIR="$1" + DATE="$(echo "$DATE_DIR" | sed "s/.*\///g")" + echo "## $DATE +" >> "$LOGLOG" + ENTRY_COUNT="$(ls $DATE_DIR | wc -l)" + LAST_ENTRY="$(ls $DATE_DIR | tail -n 1)" + for entry in $DATE_DIR/*; do + cat "$entry" >> "$LOGLOG" + echo "" >> "$LOGLOG" + if [[ "$ENTRY_COUNT" -gt 1 && "$entry" != "$DATE_DIR/$LAST_ENTRY" ]]; then + echo \ +------------------------------------------------------------------------ >> "$LOGLOG" + echo "" >> "$LOGLOG" + fi + done +} + +echo "Cleaning existing loglog..." +rm -f "$LOGLOG" + +echo "Reading logs to temporary files..." +for log in content/logs/*log.gmi; do + read_log_to_tmp "$log" +done + +echo "Trimming entries in temporary files..." +for date in $TMP/*; do + trim_entries "$date" +done + +echo "Copying loglog header..." +cp "$LOGLOG_HEADER" "$LOGLOG" + +echo "Appending entries to loglog..." +dates=($TMP/*) +for ((i=${#dates[@]}-1; i>=0; i--)); do + append_entries_for_date "${dates[i]}" +done + +echo "Cleaning up temporary files..." +rm -rf "$TMP" + +echo "Done." diff --git a/gemini/build_longlog.bash b/gemini/build_longlog.bash new file mode 100755 index 0000000..d23acfa --- /dev/null +++ b/gemini/build_longlog.bash @@ -0,0 +1,38 @@ +#!/bin/bash + +LONGLOG="content/logs/longlog.gmi" +LONGLOG_HEADER="templates/longlog-header.gmi" +LONGLOG_SRC_DIR="content/logs/longlog" +HR="-----------------------------------------------------------------------" + +trim_longlog_tail() +{ + while [[ -z "$(tail -n 1 "$LONGLOG")" && "$(wc -l "$LONGLOG" | cut -c1)" -ne 0 ]]; do + head -n -1 "$LONGLOG" | tee "$LONGLOG" 1>/dev/null + done +} + +echo "Cleaning existing longlog..." +rm -f "$LONGLOG" + +echo "Copying longlog header..." +cp "$LONGLOG_HEADER" "$LONGLOG" +trim_longlog_tail +echo "" >> "$LONGLOG" + +echo "Appending entries to longlog..." +posts=(${LONGLOG_SRC_DIR}/*) +for ((i=${#posts[@]}-1; i>=0; i--)); do + post="${posts[i]}" + if [[ "$post" =~ ${LONGLOG_SRC_DIR}/([0-9]{4}-[0-9]{2}-[0-9]{2}(\.[0-9]+)?)\.gmi ]]; then + date="${BASH_REMATCH[1]}" + suffix="${BASH_REMATCH[2]}" + title="$(head -n 1 "${posts[i]}" | sed "s/^\#\+ *//")" + echo "=> /logs/longlog/${date}${suffix}.gmi ${date} ${title}" >> "$LONGLOG" + else + echo "Error: $post does not match format YYYY-MM-DD(.n). Aborting..." + exit 1 + fi +done + +echo "Done." diff --git a/gemini/build_microlog.bash b/gemini/build_microlog.bash new file mode 100755 index 0000000..b3c37dc --- /dev/null +++ b/gemini/build_microlog.bash @@ -0,0 +1,38 @@ +#!/bin/bash + +MICROLOG="content/logs/microlog.gmi" +MICROLOG_HEADER="templates/microlog-header.gmi" +MICROLOG_SRC_DIR="microlog" +HR="-----------------------------------------------------------------------" + +trim_microlog_tail() +{ + while [[ -z "$(tail -n 1 "$MICROLOG")" && "$(wc -l "$MICROLOG" | cut -c1)" -ne 0 ]]; do + head -n -1 "$MICROLOG" | tee "$MICROLOG" 1>/dev/null + done +} + +echo "Cleaning existing microlog..." +rm -f "$MICROLOG" + +echo "Copying microlog header..." +cp $MICROLOG_HEADER $MICROLOG +trim_microlog_tail + +echo "Appending entries to microlog..." +posts=(${MICROLOG_SRC_DIR}/*) +for ((i=${#posts[@]}-1; i>=0; i--)); do + if [[ "${posts[i]}" =~ ${MICROLOG_SRC_DIR}/([0-9]{4}-[0-9]{2}-[0-9]{2}(\.[0-9]+)?)\.gmi ]]; then + date="${BASH_REMATCH[1]}" + echo "" >> "$MICROLOG" + echo "## ${date}" >> "$MICROLOG" + echo "" >> "$MICROLOG" + cat "${posts[i]}" >> "$MICROLOG" + trim_microlog_tail + else + echo "Error: ${posts[i]} does not match format YYYY-MM-DD(.n). Aborting..." + exit 1 + fi +done + +echo "Done." diff --git a/gemini/comitium-data/feeds.txt b/gemini/comitium-data/feeds.txt new file mode 100644 index 0000000..6b5fff2 --- /dev/null +++ b/gemini/comitium-data/feeds.txt @@ -0,0 +1,16 @@ +gemini://joeac.net/logs/loglog.gmi +gemini://joeac.net/logs/microlog.gmi --watch +gemini://idiomdrottning.org:1965/sub +gemini://spool-five.com:1965/gemlog/index.gmi +gemini://jsreed5.org:1965/feeds/log.xml +https://free-our-feeds.ghost.io/rss +https://www.inkandswitch.com/index.xml +https://euhwc.co.uk/feed/ +https://www.youtube.com/feeds/videos.xml?channel_id=UCVfwlh9XpX2Y_tQfjeln9QA +https://www.youtube.com/feeds/videos.xml?channel_id=UCfJxmjbygyA5KEdzzZv6Pbw +gemini://eph.smol.pub/posts +https://mwgmac.github.io --watch +https://dieterhelm.co.uk/feed/ +https://extinctionrebellion.uk/feed/ +https://pluralistic.net/feed/ +https://podcasts.files.bbci.co.uk/p0gg4k6r.rss "Radical with Amol Rajan" diff --git a/gemini/comitium-data/header.gmi b/gemini/comitium-data/header.gmi new file mode 100644 index 0000000..b7609bb --- /dev/null +++ b/gemini/comitium-data/header.gmi @@ -0,0 +1,4 @@ +# joeac's feed aggregator + +Hi! I'm Joe Carstairs, and you've found my feed aggregator. This is a list of +some stuff I think I might read. diff --git a/gemini/content/feed.gmi b/gemini/content/feed.gmi new file mode 120000 index 0000000..c05592d --- /dev/null +++ b/gemini/content/feed.gmi @@ -0,0 +1 @@ +../comitium-data/feed.gmi
\ No newline at end of file diff --git a/gemini/content/images b/gemini/content/images new file mode 120000 index 0000000..ccc7a5b --- /dev/null +++ b/gemini/content/images @@ -0,0 +1 @@ +../../common/images/
\ No newline at end of file diff --git a/gemini/content/index.gmi b/gemini/content/index.gmi new file mode 100644 index 0000000..88b7303 --- /dev/null +++ b/gemini/content/index.gmi @@ -0,0 +1,17 @@ +# joeac's capsule + +Hi! I'm Joe Carstairs, and you've found my capsule, gemini://joeac.net. + +=> /logs/longlog.gmi My longlog (for long posts) +=> /logs/microlog.gmi My microlog (for short posts) +=> /logs/loglog.gmi My loglog (all my posts forgathered) +=> /logs/index.gmi An index of all my logs (don't visit this page) +=> /feed.gmi My feed aggregator + +Here are some other ways to 'engage' with me on the so-called 'Internet': + +=> https://joeac.net Web +=> https://www.linkedin.com/in/joe-carstairs-0aa936277/ LinkedIn +=> https://www.facebook.com/joe.carstairs.5 Facebook +=> https://git.joeac.net My own Gitea instance +=> https://github.com/joeacarstairs GitHub diff --git a/gemini/content/logs/index.gmi b/gemini/content/logs/index.gmi new file mode 100644 index 0000000..e9109a8 --- /dev/null +++ b/gemini/content/logs/index.gmi @@ -0,0 +1,8 @@ +# joeac's logs + +I told you not to visit this page! There's nothing here you can't get on my homepage. I hope you're disappointed. + +=> / My homepage (way cooler than this page) +=> /logs/longlog.gmi My longlog (for long posts) +=> /logs/microlog.gmi My microlog (for short posts) +=> /logs/loglog.gmi My loglog (all my posts forgathered) diff --git a/gemini/content/logs/longlog b/gemini/content/logs/longlog new file mode 120000 index 0000000..f04f5e4 --- /dev/null +++ b/gemini/content/logs/longlog @@ -0,0 +1 @@ +../../../common/longlog/
\ No newline at end of file diff --git a/gemini/content/subscriptions.gmi b/gemini/content/subscriptions.gmi new file mode 120000 index 0000000..0935ecb --- /dev/null +++ b/gemini/content/subscriptions.gmi @@ -0,0 +1 @@ +../comitium-data/subscriptions.gmi
\ No newline at end of file diff --git a/gemini/microlog b/gemini/microlog new file mode 120000 index 0000000..5fcc383 --- /dev/null +++ b/gemini/microlog @@ -0,0 +1 @@ +../common/microlog/
\ No newline at end of file diff --git a/gemini/run.sh b/gemini/run.sh new file mode 100755 index 0000000..7535975 --- /dev/null +++ b/gemini/run.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +make && \ + ( ( sleep 5; comitium refresh --data comitium-data/ ) & ) \ + && agate --content content/ --addr [::]:1965 --addr 0.0.0.0:1965 --lang en-GB diff --git a/gemini/templates/loglog-header.gmi b/gemini/templates/loglog-header.gmi new file mode 100644 index 0000000..59bf60a --- /dev/null +++ b/gemini/templates/loglog-header.gmi @@ -0,0 +1,6 @@ +# joeac's loglog + +Hi! I'm Joe Carstairs, and you've found my loglog; my log of logs; all my posts of every description, all gathered into one place. If you're really that interested in my posts, I would encourage you to strongly consider the benefits of touching grass. + +You should be aware that my build script seems to muck up the dates. Everything seems to be 2 months and 2 days off? I haven't got round to debugging and fixing this yet. Any theories, let me know. + diff --git a/gemini/templates/longlog-header.gmi b/gemini/templates/longlog-header.gmi new file mode 100644 index 0000000..6e82e48 --- /dev/null +++ b/gemini/templates/longlog-header.gmi @@ -0,0 +1,3 @@ +# joeac's longlog + +Hi! I'm Joe Carstairs, and you've found my longlog. Sometimes, I write a long or long-ish post, and I put it here. diff --git a/gemini/templates/microlog-header.gmi b/gemini/templates/microlog-header.gmi new file mode 100644 index 0000000..761e61a --- /dev/null +++ b/gemini/templates/microlog-header.gmi @@ -0,0 +1,3 @@ +# joeac's microlog + +Hi! I'm Joe Carstairs, and you've found my microlog. Sometimes, when I think something, I put the thought here. I'm not sure why you'd want to read this, to be honest. I'd recommend turning the computer off and going for a walk instead. |
