Files
website/blog.sh
2025-11-28 20:59:12 -08:00

84 lines
3.6 KiB
Bash
Executable File

#!/usr/bin/env sh
# Site specific settings
DOMAIN="https://iiogama.0x212.com"
SITE_TITLE="iiogama@0x212.com"
DESCRIPTION="Some dude compulsively online, like so many others"
COPYRIGHT="Copyright $(date +%Y), Thai Noodles"
AUTHOR="Thai Noodles, (iiogama@0x212.com)"
CONTENT_DIR="content"
BLOG_DIR="$CONTENT_DIR/blog"
ASSET_DIR="assets"
OUTPUT_DIR="_output"
mkdir -p "$OUTPUT_DIR"
build_pages() {
rsync -r --exclude="*.html" --exclude="*.xml" "$CONTENT_DIR/" "$OUTPUT_DIR/"
#rsync -r "$ASSET_DIR/" "$OUTPUT_DIR/"
find $CONTENT_DIR -type f -name "*.html" | while read -r file; do
local OUTPUT_FILE="$(echo "$file" | sed "s/$CONTENT_DIR/$OUTPUT_DIR/")"
if [ ! -f "$OUTPUT_FILE" ]; then
printf '<!DOCTYPE html>\n' > "$OUTPUT_FILE"
printf '<html xmlns="http://www.w3.org/1999/xhtml" lang="en_US" xml:lang="en_US">\n' >> "$OUTPUT_FILE"
sed "s!<title>!&$SITE_TITLE!" "templates/_head.html" >> "$OUTPUT_FILE"
printf '<body>\n' >> "$OUTPUT_FILE"
cat "templates/_nav.html" "$file" "templates/_footer.html" >> "$OUTPUT_FILE"
printf '</body>\n' >> "$OUTPUT_FILE"
printf '</html>\n' >> "$OUTPUT_FILE"
fi
done
}
#build_feeds() {
# find $CONTENT_DIR -type f -name "*.xml" | while read -r file; do
# local OUTPUT_FILE="$(echo "$file" | sed "s/$CONTENT_DIR/$OUTPUT_DIR/")"
# if [ ! -f "$OUTPUT_FILE" ]; then
# printf '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n' > "$OUTPUT_FILE"
# printf '<?xml-stylesheet href="style.xsl" type="text/xsl"?>\n' >> "$OUTPUT_FILE"
# printf '<rss version="2.0">\n' >> "$OUTPUT_FILE"
# printf '<channel>' >> "$OUTPUT_FILE"
# printf '<title>%s</title>\n' "$SITE_TITLE" >> "$OUTPUT_FILE"
# printf '<link>%s</link>\n' "$DOMAIN" >> "$OUTPUT_FILE"
# printf '<description>%s</description>\n' "$DESCRIPTION" >> "$OUTPUT_FILE"
# printf '<copyright>%s</copyright>\n' "$COPYRIGHT" >> "$OUTPUT_FILE"
# cat "$file" >> "$OUTPUT_FILE"
# printf '</channel>\n' >> "$OUTPUT_FILE"
# printf '</rss>\n' >> "$OUTPUT_FILE"
# fi
# done
#}
build_feeds() {
local BLOG_INDEX="$BLOG_DIR/index.html"
local OUTPUT_FILE="$OUTPUT_DIR/index.xml"
printf '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n' > "$OUTPUT_FILE"
printf '<?xml-stylesheet href="style.xsl" type="text/xsl"?>\n' >> "$OUTPUT_FILE"
printf '<rss version="2.0">\n' >> "$OUTPUT_FILE"
printf '<channel>' >> "$OUTPUT_FILE"
printf '<title>%s</title>\n' "$SITE_TITLE" >> "$OUTPUT_FILE"
printf '<link>%s</link>\n' "$DOMAIN" >> "$OUTPUT_FILE"
printf '<description>%s</description>\n' "$DESCRIPTION" >> "$OUTPUT_FILE"
printf '<copyright>%s</copyright>\n' "$COPYRIGHT" >> "$OUTPUT_FILE"
grep -Eo "/blog/[a-zA-Z0-9./?=_%:-]*.html" "$BLOG_INDEX" | while read POST_URL; do
local POST_FILE="$CONTENT_DIR$POST_URL"
local POST_TITLE="$(grep "class=\"title\"" "$POST_FILE" | head -n 1 | sed 's!^[^>]*>!!' | sed 's!<.*$!!')"
local POST_DATE="$(date -d "$(grep "class=\"date\"" "$POST_FILE" | head -n 1 | sed 's!^[^>]*>!!' | sed 's!<.*$!!')" '+%a, %d %b %Y %H:%M:%S %Z')"
local POST_CONTENT="$(tail -n +6 "$POST_FILE" | head -n -1)"
printf '<item><author>%s</author>' "$AUTHOR" >> "$OUTPUT_FILE"
printf '<pubDate>%s</pubDate>' "$POST_DATE" >> "$OUTPUT_FILE"
printf '<title>%s</title>' "$POST_TITLE" >> "$OUTPUT_FILE"
printf '<guid>%s' "$DOMAIN" >> "$OUTPUT_FILE"
printf '%s</guid>' "$POST_URL" >> "$OUTPUT_FILE"
printf '<link>%s' "$DOMAIN" >> "$OUTPUT_FILE"
printf '%s</link>' "$POST_URL" >> "$OUTPUT_FILE"
printf '<description><![CDATA[\n' >> "$OUTPUT_FILE"
printf '%s' "$POST_CONTENT" >> "$OUTPUT_FILE"
printf '\n]]></description></item>\n' >> "$OUTPUT_FILE"
done
printf '</channel></rss>\n' >> "$OUTPUT_FILE"
}
case "$1" in
build)
build_pages
build_feeds
;;
esac