aboutsummaryrefslogtreecommitdiff
path: root/docs/posts/static_sites_with_bash.html
diff options
context:
space:
mode:
Diffstat (limited to 'docs/posts/static_sites_with_bash.html')
-rw-r--r--docs/posts/static_sites_with_bash.html74
1 files changed, 74 insertions, 0 deletions
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 @@
1<!DOCTYPE html>
2<html lang="en">
3 <head>
4 <link rel="stylesheet" href="/style.css">
5 <meta charset="UTF-8">
6 <meta name="viewport" content="initial-scale=1">
7 <meta content="#ffffff" name="theme-color">
8 <meta name="HandheldFriendly" content="true">
9 <meta property="og:title" content="nerdypepper">
10 <meta property="og:type" content="website">
11 <meta property="og:description" content="a static site {for, by, about} me ">
12 <meta property="og:url" content="https://nerdypepper.tech">
13 <body>
14 <div class="post posts">
15 <div class="date">23/11 2019</div>
16 <span style="font-size: 2rem; font-weight: 600">
17 Static Sites With Bash
18 </span>
19 <div class="post-text">
20 <p>After going through a bunch of static site generators
21(<a href="https://blog.getpelican.com/">pelican</a>,
22<a href="https://gohugo.io">hugo</a>,
23<a href="https://github.com/icyphox/vite">vite</a>), I decided to roll
24my own. If you are more of the &#8216;show me the code&#8217; kinda guy,
25<a href="https://github.com/nerdypepper/site">here</a> you go.</p>
26
27<p><strong>Text formatting</strong>: I chose to write in markdown, and convert
28to html with <a href="https://kristaps.bsd.lv/lowdown/">lowdown</a>.</p>
29
30<p><strong>Directory structure</strong>: I host my site on GitHub pages, so
31<code>docs/</code> has to be the entry point. Markdown formatted posts
32go into <code>posts/</code>, get converted into html, and end up in
33<code>docs/index.html</code>, something like this:</p>
34
35<pre><code>posts=$(ls -t ./posts) # chronological order!
36for f in $posts; do
37 file=&quot;./posts/&quot;$f # `ls` mangled our file paths
38 echo &quot;generating post $file&quot;
39
40 html=$(lowdown &quot;$file&quot;)
41 echo -e &quot;html&quot; &gt;&gt; docs/index.html
42done
43</code></pre>
44
45<p><strong>Assets</strong>: Most static site generators recommend dropping image
46assets into the site source itself. That does have it&#8217;s
47merits, but I prefer hosting images separately:</p>
48
49<pre><code># strip file extension
50ext=&quot;${1##*.}&quot;
51
52# generate a random file name
53id=$( cat /dev/urandom | tr -dc &#39;a-zA-Z0-9&#39; | fold -w 2 | head -n 1 )
54id=&quot;$id.$ext&quot;
55
56# copy to my file host
57scp -P 443 &quot;$1&quot; emerald:files/&quot;$id&quot;
58echo &quot;https://files.nerdypepper.tech/$id&quot;
59</code></pre>
60
61<p><strong>Templating</strong>:
62<a href="https://github.com/NerdyPepper/site/blob/master/generate.sh"><code>generate.sh</code></a>
63brings the above bits and pieces together (with some extra
64cruft to avoid javascript). It uses <code>sed</code> to produce nice
65titles from the file names (removes underscores,
66title-case), and <code>date(1)</code> to add the date to each post
67listing!</p>
68
69 </div>
70 <a href="/index.html" class="post-end-link">‹ Back</a>
71 <div class="separator"></div>
72 </div>
73 </body>
74</html>