From 071ad3b4cb371e864316a821120ea1b63e6bf213 Mon Sep 17 00:00:00 2001 From: Akshay Date: Sat, 25 Jan 2020 19:16:36 +0530 Subject: site layout; use esh --- docs/posts/static_sites_with_bash.html | 74 ++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 docs/posts/static_sites_with_bash.html (limited to 'docs/posts/static_sites_with_bash.html') diff --git a/docs/posts/static_sites_with_bash.html b/docs/posts/static_sites_with_bash.html new file mode 100644 index 0000000..70eda1a --- /dev/null +++ b/docs/posts/static_sites_with_bash.html @@ -0,0 +1,74 @@ + + + + + + + + + + + + + +
+
23/11 2019
+ + Static Sites With Bash + +
+

After going through a bunch of static site generators +(pelican, +hugo, +vite), I decided to roll +my own. If you are more of the ‘show me the code’ kinda guy, +here you go.

+ +

Text formatting: I chose to write in markdown, and convert +to html with 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 +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!

+ +
+ ‹ Back +
+
+ + -- cgit v1.2.3