paulgorman.org/technical

Hugo

(2017, 2018)

$  hugo new site devilghost
$  cd devilghost
$  git init
$  git submodule add https://github.com/…/the-theme.git themes/the-theme
$  echo 'theme = "the-theme"' >> config.toml
$  hugo new posts/my-cool-post.md
$  vim content/posts/my-cool-post.md
$  hugo server -D --verbose

Hugo is a static site generator/blogging platform. It’s written in Go. Hugo support authoring posts in Markdown, and adding TOML, YAML or JSON metadata as frontmatter.

# apt-get install hugo
$ hugo help

Create a site:

$ mkdir -p ~/Documents/hugo
$ cd ~/Documents/hugo
$ hugo new site example
$ tree -a example/
example/
├── archetypes
├── config.toml
├── content
├── data
├── layouts
├── static
└── themes
6 directories, 1 file
$ cd example
$ cat config.toml 
baseurl = "http://example.org/"
languageCode = "en-us"
title = "My New Hugo Site"

Create a new post:

$ hugo new my-first-post.md
$ hugo new mysection/my-post.md
$ hugo server --buildDrafts

Theme

A Hugo site needs a theme to work, but simply doing hugo new site mysite will not create a theme. Either import an existing community theme or create a new custom theme.

$  cd mysite/
$  hugo new theme mytheme
$  tree mysite/themes/mytheme/
mysite/themes/mytheme/
├── archetypes
│   └── default.md
├── layouts
│   ├── 404.html
│   ├── _default
│   │   ├── baseof.html
│   │   ├── list.html
│   │   └── single.html
│   ├── index.html
│   └── partials
│       ├── footer.html
│       ├── header.html
│       └── head.html
├── LICENSE
├── static
│   ├── css
│   └── js
└── theme.toml

7 directories, 11 files

We can create a bare-bones theme like:

$  hugo new theme mytheme

Look in mytheme/layouts/. The files index.html, list.html, and single.html are required, but hugo new theme only creates empty stubs for these. Until we populate at least these files with some content, Hugo serves blank pages.