blog/content/posts/build.md
2021-08-14 13:00:05 -07:00

2.1 KiB

How this site came to be

Tech

The """"tech-stack"""" for this site is pandoc and a single shell script. Ok, technically there's also the issue about python but really you don't need to use it since the site pages build anyways.

Yea so here's the shell(bash) script. I'm going to remove any bashisms soon enough but am very lazy so this is the best I got for ya.

#!/bin/bash
rootDir='./site/'
targetDir='post/'

post() {
	echo Building: $1
	tmp=".swap"
	full=".fullswap"
	base=`basename $1`
	# First build the content of the site
	pandoc $1 > $tmp
	# Title, images and tables get added/fixed here
	sed "s/{TITLE}/<title>${base%.*}<\/title>/g" ./templates/post-header.html > $full
	cat $tmp ./templates/post-footer.html >> $full
	sed -i 's/<img/<img class="pure-img"/g;s/<table>/<table class="pure-table">/g' $full

	# Move things to proper directory and cleanup
	mv $full "$rootDir/$targetDir/${base%.*}.html"
	rm -f $tmp
}

build_all() {
	mkdir -p $rootDir/post/ $rootDir/fonts/ $rootDir/media/img/

	cp style.css "$rootDir"
	cp prebuild/post/style.css "$rootDir/post/"

	cp fonts/* $rootDir/fonts/

	cp img/ $rootDir/media/img/ -r
	mv $rootDir/media/img/favicon.png $rootDir/

	# Try to get xargs to deal with this ugliness
	for r in prebuild/*md;do
		post $r
	done
	for p in prebuild/post/*md;do
		post $p
	done
}

_help() {
	echo 'Options: 
	-h show this prompt
	-p [postDirectory/*] (takes a list of paths to build from)
	-r build root pages 
	-s copy stylesheets
	-l run live server'
}
server() {
	cd $rootDir
	echo 'Address: 0.0.0.0:8080'
	python -m SimpleHTTPServer 8080
}

if [ -z $1 ]
then
	_help
	exit 0
fi

while getopts ":aslrhp:" opt;do
	case "$opt" in
		a)
			build_all;;
		s)
			cp style.css "$rootDir"
			cp prebuild/post/style.css "$rootDir/$targetDir"
			exit 0
			;;
		r)
			# Fix targetDir so that it points to the root of the site output
			targetDir=''
			post './prebuild/about.md'
			post './prebuild/links.md'
			post './prebuild/index.md'
			exit 0
			;;
		p)
			for file in ${@:2};do
				post $file
			done
			;;
		h)
			_help;;
		l)
			server;;
	esac
done

Story