I am finally building out my personal website. I've only been online since 1995, I think it is about time!

Some initial impressions⌗

The default goldmark typographer setting⌗

Don't even get me started about a system that automatically converts a markdown document's quotes into curved quotes. What an absolutely terrible feature for a blog that will be focused on programming. I can't stress enough how much I loathe curved quotes. (If I wanted curved quotes, I'd be writing in LaTeX. Actually... LaTeX + MD might be something for the future.

I found the settings to turn off typographer quickly enough. This is frustrating to other people too; there's even an issue about it.

The shortcode system⌗

It's not that bad once getting the hang of it. There definitely are more flexible templating systems out there, but this one seems good enough. Here are some functions; they can do things.

One of my requirements for this website is the ability to include code snippets, with syntax highlighting, and customizable if not collapsible code blocks.

Luckily, after a few hours of getting familiar with hugo and markdown I discovered a number of ways of implementing code snippets:

```back-ticks```. This is barely acceptable for basic one-liners.

answer2 = sum([len(reduce(set.intersection, [set(_) for _ in x] )) for x in data])

    4 space indent. looks good, but no syntax.

def half_list(alist):
    size = int(len(alist)/2)
    # import ipdb; ipdb.set_trace()
    return alist[:size], alist[size:]

The {{< highlight >}} shortcode. This is better, but has two problems: the need to manually paste code and unwieldy height with large snippets.

{{< readfile >}}: I found this randomly in the knative GH repo. It takes care of automatically inserting a file, but still has the height problem.

After looking through my theme's shortcode files, I discovered it provides a collapsible {{< code */}}. This was nearly perfect, and after a bit of hacking, I combined it with the ideas of the previous readfile to create my own shortcode, that can readfiles or take inputs, and is collapsible.

Here is my {{</* code >}} implementation.

If only {{< gist >}} was more flexible...

And finally, I almost forgot, this theme has prism.js support so backticks followed by a syntax spec work

import requests
r = requests.get('https://cresante.com')
r.close()

Automated deployment⌗

My next step was automated deployment. Of course I can build the site locally and use rsync to push it, but what's the fun in that? I'm supposed to be learning devops, so I'm taking this idea a step further: I need an automated way to deploy it live after a git push.

Problem #0: The default packaged hugo on my webserver is version 0.40, way behind the current version and what my theme requires.

Solution #0.0: Use a docker image to start building with CI. At first I found this, but the unofficial DH found in the docs is newer.

Solution #0.1: Just use a prebuilt binary from the releases page with a github hook. (using a snap was a possible solution in this case, but unnecessary)

I ended up going with the github hook, based around the script in DO's docs

a markdown guide

good documentation about hugo from Mark Dane