Dennis Lee

Hugo: change the automatic title and slug!

Archetypes in Hugo


Update 2020-05-24: This post has been superseded by a newer post. The newer post can be found here.

In a previous post I complained about the format to automatically generated titles and slugs in Hugo.

Hugo makes me specify title and date manually, even when using the aforementioned format. And if I want punctuation in my title (like in this post), I even have to specify the slug manually, because otherwise it auto-generates the slug with the punctuation intact!

But what I didn’t know was that you can actually customize this! There is this optional folder in either your theme’s or your site’s root folder called /archetypes/ (the latter takes precedence over the former) where the default front matter is stored. Here’s what my /archetypes/ looks like now:

title: "{{ replaceRE "[[:^alpha:]]" " " .Name | humanize }}"
date: {{ .Date }}
slug: "{{ replaceRE "[[:^alpha:]]" "-" .Name | replaceRE "-{2,}" "-" | replaceRE "^-" "" | lower }}"

The title: template (using regexp) replaces any non-alphabetic character in the filename with a space, then pipes the result into the humanize function to use sentence case. Hugo seems to trim extra leading whitespace automatically, so that is not accounted for here.

For the slug, every non-alphabetic character is replaced with -. Then, sequences of 2 or more - are replaced with a single -. Then, a leading - is replaced with nothing. Finally, all letters are converted to lowercase.

That’s all for now. Don’t worry, the next post will actually be about something other than Hugo!