Now that I am writing all my blog posts using orgmode, I wanted a way to create the file I need for a new post automatically. I couldn't find quite what I wanted, so here is my attempt and writing some elisp to make it happen.
(defun s-dashed-words (words)
(downcase
(replace-regexp-in-string "[^a-z0-9]+" "-" words)))
(defun ps/new-hugo-post (title &optional)
"Create and visit a new draft blog post for the prompted TITLE.
The file for the blog post conforms to the path schema of posts
for petersmith.org"
(interactive "sTitle: ")
(let* ((post-dir (concat ps/data "Code/Websites-source/petersmith/content/blog/"
(format-time-string "%Y%m%d-") (s-dashed-words title) "/"))
(post-fpath (concat post-dir "index.org"))
(post-slug (s-dashed-words title))
(post-date (format-time-string "%+4Y-%m-%dT%H:%M:%S%:z")))
(make-directory post-dir t)
(write-region (concat
"\n#+title: " title
"\n#+date: " post-date
"\n#+lastmod: " post-date
"\n#+categories[]: Tech"
"\n#+tags[]: "
"\n#+slug: " post-slug
"\n#+draft: False"
"\n\n")
nil (expand-file-name post-fpath) nil nil nil t)
(find-file (expand-file-name post-fpath))))
A good chunk of the code came from a post by Jeremy Friesen at Take on Rules. Thanks! (And that reminds me, I still have to get webmentions working).
I modified Jeremy's code a bit to allow for the fact that I use Hugo's page bundles.