As the command `hugo new` does not work for org files I'm using emacs for that task.
The code is based on what I found at Peter Smith's which seem to be based on the code from Tohojo.
First we've to set the location where the blog source files are.
(setq hugo-base-dir "~/Documents/repo/TechBlog/")
Then we need the current time in two formats. The first for the name of the file we are creating and the second is used in the frontmatter.
(defun today-is ()
(format-time-string "%Y-%m-%d-"))
(defun now-is ()
(concat (format-time-string "%Y-%m-%dT%T")
((lambda (x) (concat (substring x 0 3) ":" (substring x 3 5)))
(format-time-string "%z"))))
Then a new buffer is created and populated with the frontmatter. I found no way to set the mode other than hardcoding it to org-mode.
(defun org-hugo-new-post ()
"Creates a new org file in Hugo's content/post directory"
(interactive)
(let* ((title (read-from-minibuffer "Title: "))
(filename (read-from-minibuffer "Filename: "
(replace-regexp-in-string "-\\.org" ".org"
(concat (downcase
(replace-regexp-in-string "[^a-z0-9]+" "-" title))
".org"))))
(blogfile (concat "post/" (today-is) filename))
(url (concat (downcase
(replace-regexp-in-string "[^a-z0-9]+" "-"
title))))
(path (concat hugo-base-dir "content/" blogfile)))
(if (file-exists-p path)
(message "File already exists!")
(message blogfile)
(switch-to-buffer (generate-new-buffer blogfile))
(insert "#+DATE: " (now-is))
(insert "\n#+TITLE: " title)
(insert "\n#+URL: /" url "/")
(insert "\n#+BANNER: \n#+CATEGORIES: \n#+TAGS:\n\n")
(org-mode)
(write-file path)
(goto-char (point-max)))))
Banner image courtesy of Lohrelei