#!/bin/bash # hitler.rip # script to build my website using pandoc # © 2025 hitler.rip # licensed under AGPLv3-or-later; see licenses/code.md for more information filterfile=($( realfile ./con/links.lua )) convert () { pandoc "$1" -o "$2" \ -f gfm -t html5 \ --lua-filter="$filterfile" } echo "[build] starting to build webpage..." rm -rf ./tmp/ rm -rf ./web mkdir -p ./con/ mkdir -p ./src/articles/ mkdir -p ./tmp/articles/ mkdir -p ./web/articles/ mkdir -p ./web/licenses/ mkdir -p ./dir/ touch ./con/header.html touch ./con/footer.html touch ./con/style.css touch ./con/rss-header.xml touch ./con/rss-footer.xml touch ./con/contact.md touch ./src/index.md touch ./src/articles/index.md echo "[build] writing index..." cd ./src/ for i in *.md; do echo "[build] converting: $i" filename=$( echo "$i" | rev | cut -c4- | rev ) convert "$i" "../tmp/$filename.html" if [ "$filename" == "index" ]; then convert "../con/contact.md" "../tmp/con-contact-tmp-file.html" cat ../con/header.html \ ../tmp/"$filename".html \ ../tmp/con-contact-tmp-file.html \ ../con/footer.html \ > ../web/"$filename".html cat "$i" \ ../con/contact.md \ > ../web/"$filename".md else mkdir -p ../web/"$filename"/ cat ../con/header.html \ ../tmp/"$filename".html \ ../con/footer.html \ > ../web/"$filename"/index.html cp "$i" ../web/"$filename"/index.md fi done echo "[build] writing articles..." cd ./articles/ for i in *.md; do echo "[build] converting: $i" filename=$( echo "$i" | rev | cut -c4- | rev ) convert "$i" "../../tmp/articles/$filename.html" if [ "$filename" == "index" ]; then echo "[build] skipping index file for later..." else mkdir -p ../../web/articles/"$filename"/ cat ../../con/header.html \ ../../tmp/articles/"$filename".html \ ../../con/footer.html \ > ../../web/articles/"$filename"/index.html cp "$i" ../../web/articles/"$filename"/index.md export WEBMETA_TITLE="" export WEBMETA_DATE="" export WEBMETA_AUTH="" export WEBMETA_SUMMARY="" if [ -e "$filename".meta ]; then echo "[build] running script: $filename.meta" source ./"$filename".meta # `.meta` is a simple shell script that uses `export` to # set some variables, notably: # WEBMETA_TITLE (title string) # WEBMETA_DATE (date string YYYY-MM-DD) # WEBMETA_AUTH (author string) # WEBMETA_SUMMARY (summary string) # please note that you have to actually check if this data is correct # and you should not just import random `.meta` files as they can arbitrarily # execute code on your system and are directly injected into the HTML. fi if [ "$WEBMETA_DATE" == "" ]; then export WEBMETA_DATE="2001-09-11*REDACTED!*" fi if [ "$WEBMETA_AUTH" == "" ]; then export WEBMETA_AUTH="Anonymous" fi if [ "$WEBMETA_SUMMARY" == "" ]; then export WEBMETA_SUMMARY="redacted" fi if [ "$WEBMETA_TITLE" == "" ]; then export WEBMETA_TITLE="$filename" fi touch ../../tmp/articles/gen-articles-tmp-list.html tee -a ../../tmp/articles/gen-articles-tmp-list.html > /dev/null << EOF

$WEBMETA_TITLE

$WEBMETA_DATE by $WEBMETA_AUTH

$WEBMETA_SUMMARY

EOF touch ../../tmp/articles/gen-articles-tmp-list.md tee -a ../../tmp/articles/gen-articles-tmp-list.md > /dev/null << EOF ## [$WEBMETA_TITLE]($filename) ###### \`$WEBMETA_DATE\` by $WEBMETA_AUTH $WEBMETA_SUMMARY EOF touch ../../tmp/articles/gen-articles-tmp-rss.xml tee -a ../../tmp/articles/gen-articles-tmp-rss.xml > /dev/null << EOF $WEBMETA_TITLE $(date -d "${WEBMETA_DATE:0:10}" +"%a, %d %b %Y %H:%M:%S +0000" ) $WEBMETA_AUTHOR $WEBMETA_SUMMARY /$filename /$filename EOF fi done cd ../.. echo "[build] generating feed..." cat ./con/header.html \ ./tmp/articles/index.html \ ./tmp/articles/gen-articles-tmp-list.html \ ./con/footer.html \ > ./web/articles/index.html cat ./src/articles/index.md \ ./tmp/articles/gen-articles-tmp-list.md \ > ./web/articles/index.md cat ./con/rss-header.xml \ ./tmp/articles/gen-articles-tmp-rss.xml \ ./con/rss-footer.xml \ > ./web/articles/feed.xml echo "[build] copying static files..." cp ./con/style.css ./web/style.css cp ./con/icon.png ./web/icon.png cp ./licenses/* ./web/licenses/ cp -r ./dir/* ./web/ echo "[build] removing temporary build files..." rm -rf ./tmp echo "[build] done!"