Org meta-data to Hugo front-matter

For subtree-based exports #

When organizing the posts as Org subtrees, many Hugo front-matter variables get set implicitly using the meta-data parsed from the posts in Org.

Below, where subtree is mentioned, it implies a valid Hugo-post subtree i.e. an Org subtree that has the EXPORT_FILE_NAME property set.

Table 1: Hugo front-matter translation for subtree-based exports
Hugo front-matter (TOML) Org Org description
title = "foo" * foo Subtree heading
date = 2017-09-11T14:32:00-04:00 CLOSED: [2017-09-11 Mon 14:32] Auto-inserted CLOSED subtree property when switch to Org DONE state
date = 2017-07-24 :EXPORT_DATE: 2017-07-24 Subtree property
publishDate = 2018-01-26 SCHEDULED: <2018-01-26 Fri> Auto-inserted SCHEDULED subtree property using default C-c C-s binding
publishDate = 2018-01-26 :EXPORT_HUGO_PUBLISHDATE: 2018-01-26: Subtree property
expiryDate = 2999-01-01 DEADLINE: <2999-01-01 Tue> Auto-inserted DEADLINE subtree property using default C-c C-d binding
expiryDate = 2999-01-01 :EXPORT_HUGO_EXPIRYDATE: 2999-01-01: Subtree property
lastmod = <current date> :EXPORT_HUGO_AUTO_SET_LASTMOD: t Subtree property
lastmod = <current date> #+hugo_auto_set_lastmod: t Org keyword
tags = ["toto", "zulu"] * foo :toto:zulu: Subtree heading tags
categories = ["x", "y"] * foo :@x:@y: Subtree heading tags with @ prefix
draft = true * TODO foo Subtree heading Org Todo state set to TODO (or DRAFT)
draft = false * foo Subtree heading Org Todo state not set to TODO (or DRAFT)
weight = 123 :EXPORT_HUGO_WEIGHT: auto When set to auto, weight is auto-calculated
weight = 123 (in []) :EXPORT_HUGO_MENU: :menu foo Menu weight is auto-calculated unless specified

Notes #

  • Precedence for date parsing: CLOSED subtree property more than EXPORT_DATE subtree property more than #+date: keyword.

For file-based exports #

Table 2: Hugo front-matter translation for file-based exports
Hugo front-matter (TOML) Org
title = "foo" #+title: foo
date = 2017-07-24 #+date: 2017-07-24
publishDate = 2018-01-26 #+hugo_publishdate: 2018-01-26
expiryDate = 2999-01-01 #+hugo_expirydate: 2999-01-01
lastmod = <current date> #+hugo_auto_set_lastmod: t
tags = ["toto", "zulu"] #+hugo_tags: toto zulu
categories = ["x", "y"] #+hugo_categories: x y
draft = true #+hugo_draft: true
draft = false #+hugo_draft: false (default)
weight = 123 #+hugo_weight: 123
weight = 123 (in []) #+hugo_menu: :menu foo :weight 123

Notes #

  • The auto weight calculation for posts and menu items works only for subtree exports. For the file-based export flow, one needs to specify the weights manually. The value of weight set to "auto" will be equivalent to nil for the file-based export flow.
  • See org-hugo-date-format for customizing the date formats for all date front-matter parameters.