Introduction

This past summer, I bought a $200- mini PC and made it my homelab. I installed proxmox + ubuntu + docker, and deployed several services on it:

  • Pi-hole - network-wide DNS with ad-blocker
  • Immich - Google Photos alternative
  • RomM - retro-game library

The other day, I obtained a domain name from https://porkbun.com/ and exposed the mini PC to the Internet so that I can see my photos from remote. I deployed:

  • porkbun-ddns - DDNS for a domain name purchased at pork-bun
  • Caddy - web server with automated certificate renewal; using it as a reverse-proxy

This time, I’m installing:

  • Hugo - extremely fast static site generator
  • ox-hugo - convert org files to hugo-readable markdown files

Install hugo

  • first, try apt install hugo
$ sudo apt install hugo
$ hugo version
hugo v0.123.7+extended linux/amd64 BuildDate=2025-07-18T03:41:49Z VendorInfo=ubuntu:0.123.7-1ubuntu0.3
  • Ouch. It’s too old. Removing.
  • Also tried snap. it was a little better, but doesn’t install new release enough for hugo quick start document.
  • Let’s install from github official repo
$ wget https://github.com/gohugoio/hugo/releases/download/v0.152.1/hugo_extended_0.152.1_linux-amd64.deb

$ sudo dpkg -i hugo_extended_0.152.1_linux-amd64.deb
Selecting previously unselected package hugo.
(Reading database ... 222824 files and directories currently installed.)
Preparing to unpack hugo_extended_0.152.1_linux-amd64.deb ...
Unpacking hugo (0.152.1) ...
Setting up hugo (0.152.1) ...

$ hugo version
hugo v0.152.1-5869cbddd88590563c2b7b400e804ccc7d2cb697+extended linux/amd64 BuildDate=2025-10-22T19:10:44Z VendorInfo=gohugoio
  • Ok, it’s the latest.

Install ox-hugo

(use-package ox-hugo
  :ensure t
  :pin melpa
  :after ox)
  • create ~/hugo and cd to it

Create a site

  • create a site: couk, cd to it, and then initialize the project
hugo new site couk
cd couk
hugo mod init achiwa.co.uk
  • git clone theme: PaperMod
git clone https://github.com/adityatelange/hugo-PaperMod themes/PaperMod --depth=1
  • add to hugo.toml
theme = "PaperMod"
[markup.goldmark.renderer]
  unsafe = true
  • mkdir content-org
  • create and edit content-org/all-posts.org
    • all posts will be in this file.
#+hugo_base_dir: ../
#+author: kyos
#+toc: headlines 2

# Commented out next 2 lines not to confuse emacs source block...
#* Speech                                                      :@Toastmasters:
#** <DONE> Moved to a new apartment                             :blog:speech:
:PROPERTIES:
:EXPORT_FILE_NAME: new_apartment
:EXPORT_DATE: 2025-10-28
:END:

This is a draft speech script for a Toastmasters club.
<snip>
  • run local server
hugo server --buildDrafts --navigateToChanged
  • C-c C-e H H (or C-c C-e H A) to export
  • visit http://localhost:1313
  • add about me page and menu. edit hugo.toml, and now looks like this:
baseURL = 'https://blog.achiwa.co.uk/'
languageCode = 'ja-jp'
title = 'Daydream in Boston'
theme = "PaperMod"
[menu]
  [[menu.main]]
    name = "Home"
    url = "/"
    weight = 10

  [[menu.main]]
    name = "About"
    url = "/about/"
    weight = 20

[markup.goldmark.renderer]
  unsafe = true
  • create pages.org in hugo/couk and write about me.
#+title: Website Pages
#+hugo_base_dir: ..

# * About Me  # commented out not to confuse emacs
:PROPERTIES:
:EXPORT_FILE_NAME: about
:EXPORT_HUGO_SECTION:
:EXPORT_HUGO_MENU: main
:END:

Hello, welcome to my personal blog.
I live in a small apartment in Boston with my wife and daughter.
<snip>
  • If satisfied, publish
hugo  # w/o arguments