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
- follows: https://ox-hugo.scripter.co/doc/quick-start/
- install ox-hugo (~/.emacs.d/init.el)
- if you see an error indicating it can’t find the ox-hugo version, do:
M-x list-packagesand refresh the package list
- if you see an error indicating it can’t find the ox-hugo version, do:
(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(orC-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