diff options
Diffstat (limited to 'build.sh')
-rwxr-xr-x | build.sh | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..906167f --- /dev/null +++ b/build.sh @@ -0,0 +1,172 @@ +#!/bin/sh + +# hitler.rip +# script to build my website using pandoc +# © 2025 hitler.rip <git@hitler.rip> +# licensed under AGPLv3-or-later; see licenses/code.md for more information + +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 ) + + pandoc "$i" -o ../tmp/"$filename".html \ + -f gfm -t html5 \ + --lua-filter=../con/links.lua + + if [ "$filename" == "index" ]; then + + pandoc ../con/contact.md -o ../tmp/con-contact-tmp-file.html \ + -f gfm -t html5 \ + --lua-filter=../con/links.lua + + 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 ) + + pandoc "$i" -o ../../tmp/articles/"$filename".html \ + -f gfm -t html5 \ + --lua-filter=../../con/links.lua + + 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 + + fi + + cp "$i" ../../web/articles/ + + # sort this by date + + if [ -e "$filename".meta ]; then + 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. + export WEBMETA_BASELINK="https://hitler.rip/articles/" + # you will also have to manually change this link to the final destination + # of your articles so that the RSS feed can successfully link there. + + touch ../../tmp/articles/gen-articles-tmp-list.html + tee -a ../../tmp/articles/gen-articles-tmp-list.html > /dev/null << EOF + <article> + <a href="$filename"><h2>$WEBMETA_TITLE</h2></a> + <h6><code>$WEBMETA_DATE</code> by $WEBMETA_AUTH</h6> + <p>$WEBMETA_SUMMARY</p> + </article> +EOF + + touch ../../tmp/articles/gen-articles-tmp-rss.xml + tee -a ../../tmp/articles/gen-articles-tmp-rss.xml > /dev/null << EOF + <item> + <title>$WEBMETA_TITLE</title> + <pubDate>$(date -d "$WEBMETA_DATE" +"%a, %d %b %Y %H:%M:%S +0000" )</pubDate> + <author>$WEBMETA_AUTHOR</author> + <description>$WEBMETA_SUMMARY</description> + <link>/$filename</link> + <guid>/$filename</guid> + </item> +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 ./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!" |