Create a blog with Hugo, Emacs and ox-hugo

2018/08/14

Categories: emacs Tags: blog emacs orgmode hugo

Prerequisites

ox-hugo

ox-hugo is an emacs plugin allowing the export of blog posts from an org-mode file to hugo.

ox-hugo Installation

Add to you emacs configuration file (.emacs.d/init.el for example) the following use-package instruction :

      (use-package ox-hugo
        :ensure t
        :after ox)

Once ox-hugo is installed, the exporting fonctions will be available in the org-mode export menu.

Utilisation

Two publishing modes are available : using one org-mode file for each post, or using a global file.

In this post only the second mode will be described. Beside it’s the recommended way of using ox-hugo : using one file for each post requires copy-pasting all the global properties one each file.

Global properties

Thos properties has to be put on top of the org file.

Export folder

Root of the Hugo folder.

       #+HUGO_BASE_DIR: /home/hugo/

Section

Relative post folder.

       #+HUGO_SECTION: ./post/

Author

       #+author: Author

Post properties

With ox-hugo, each org-mode item can be exported to a post, if the post properties are filled in.

It’s possible to have a certain hierarchical element as a category. Hence every sub-item exported as a post will have a category assigned.

Category The syntax to assign a category to every sub-item is the following :

       * Emacs :@emacs:

Post

In order to export an org item as a post, it is necessary to fill at least the EXPORT_FILE_NAME property.

       ** Create a blog with ox-hugo :blog:
       :PROPERTIES:
       :EXPORT_FILE_NAME: creation-blog-ox-hugo.fr.md
       :END:

Multilingual support

Once the desired languages are configured in hugo, you just have to insert the language code between the filename and its extension in the EXPORT_FILE_NAME property (i.e creation-blog-ox-hugo.en.md).

Complete example

       #+HUGO_BASE_DIR: /home/david/hugo/
       #+HUGO_SECTION: ./post/
       #+author: Author

       * Emacs :@emacs:
       Emacs category

       ** Create a blog with ox-hugo :blog:
       :PROPERTIES:
       :EXPORT_FILE_NAME: creation-blog-ox-hugo.en.md
       :END:
       Post text
>> Home