From d1faa7e508e863ff21f5076c8d2b40de6a4a16f6 Mon Sep 17 00:00:00 2001 From: Akshay Date: Sat, 23 Nov 2019 14:00:58 +0530 Subject: new post! --- posts/static_sites_with_bash.md | 50 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 posts/static_sites_with_bash.md diff --git a/posts/static_sites_with_bash.md b/posts/static_sites_with_bash.md new file mode 100644 index 0000000..d87cefd --- /dev/null +++ b/posts/static_sites_with_bash.md @@ -0,0 +1,50 @@ +After going through a bunch of static site generators +([pelican](https://blog.getpelican.com/), +[hugo](https://gohugo.io), +[vite](https://github.com/icyphox/vite)), I decided to roll +my own. If you are more of the 'show me the code' kinda guy, +[here](https://github.com/nerdypepper/site) you go. + +**Text formatting**: I chose to write in markdown, and convert +to html with [lowdown](https://kristaps.bsd.lv/lowdown/). + +**Directory structure**: I host my site on GitHub pages, so +`docs/` has to be the entry point. Markdown formatted posts +go into `posts/`, get converted into html, and end up in +`docs/index.html`, something like this: + +``` +posts=$(ls -t ./posts) # chronological order! +for f in $posts; do + file="./posts/"$f # `ls` mangled our file paths + echo "generating post $file" + + html=$(lowdown "$file") + echo -e "html" >> docs/index.html +done +``` + +**Assets**: Most static site generators recommend dropping image +assets into the site source itself. That does have it's +merits, but I prefer hosting images separately: + +``` +# strip file extension +ext="${1##*.}" + +# generate a random file name +id=$( cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 2 | head -n 1 ) +id="$id.$ext" + +# copy to my file host +scp -P 443 "$1" emerald:files/"$id" +echo "https://files.nerdypepper.tech/$id" +``` + +**Templating**: +[`generate.sh`](https://github.com/NerdyPepper/site/blob/master/generate.sh) +brings the above bits and pieces together (with some extra +cruft to avoid javascript). It uses `sed` to produce nice +titles from the file names (removes underscores, +title-case), and `date(1)` to add the date to each post +listing! -- cgit v1.2.3