Hugo has a hugo new helper command that can generate new content files for you. It doesn’t quite do what I want, though, so I’ve added this quick Bash function to my .profile to make it easier to use:

hnp() {
hugo new "${2:-posts}/$(date +%Y)/$(date +%m)/${1}/index.md"
}


All it does is create a new post file in its own content directory at a date-based path, which is the structure I use for my Hugo sites.

Use it like this:

hnp my-post-slug


And you’ll get a file at content/posts/2022/01/my-post-slug/index.md with initial content like:

---
title: "My Post Slug"
date: 2022-01-15T12:52:06Z
draft: true
---


You can also specify an optional second argument if you don’t want the item at posts:

hnp my-post-slug blog


Will create a new file at content/blog/2022/01/my-post-slug/index.md.