https://fotosycaptura.cl

Bitácora personal del capitán @fotosycaptura ✨

Compilando con hugo en org mode


Contexto

Exportando Hugo

Una de las grandes ventajas de Emacs es su capacidad para integrarse con casi cualquier flujo de trabajo.
Y si escribes contenido para la web, Org-mode junto con el paquete ox-hugo se convierten en una herramienta muy versátil y lo suficientemente poderosa para generar publicaciones que luego Hugo transforma en un sitio web estático, limpio y profesional.

Actualmente, si has estado leyendo sobre mi sitio Web, sabrás que utilizo pelican para su generación. Sin embargo, las nuevas secciones, o mas bien, las secciones migradas, utilicé Hugo en combinación con org-mode y por supuesto Emacs como editor.

En este artículo les mostraré un poco de lo que hice... Desde la instalación y el cómo exportar un documento de Org-mode a un sitio Hugo, cómo configurar los metadatos, entre otras cosas...

Instalación

La instalación de Hugo se hace muy fácil en Arch... Tan solo:

sudo pacman -S hugo

En Emacs, hay que tener instalado ox-hugo. Eso lo puedes instalar desde la paquetería de Emacs, si lo que deseas es trabajar desde Org-mode y exportar al formato md que usa el programa Hugo.

Para la revisión y prueba, si usas una URL diferente como en mi caso, es decir, si revisas de manera local antes de publicar, puedes usar el siguiente comando:

hugo serve -D --baseURL=http://localhost:1313

¿Qué es ox-hugo?

ox-hugo es un exportador (back-end de Org) que convierte tus archivos .org en archivos .md con el formato de metadatos (front matter) que Hugo necesita.

Cada encabezado (título) dentro del documento puede convertirse en una página o entrada de blog independiente, y el proceso completo puede automatizarse con una simple combinación de teclas.

Para instalarlo basta con tenerlo en la lista de paquetes de Emacs:

(use-package ox-hugo
  :after ox)

Una vez cargado, cualquier archivo .org puede exportarse directamente a Hugo.


Estructura básica de un archivo Org para Hugo

Cada publicación se define mediante un conjunto de variables en la parte superior del archivo.
Estas líneas comienzan con #+ y describen cómo ox-hugo debe generar el archivo final.

Ejemplo real:

#+TITLE: Mi primera publicación con Org y Hugo
#+AUTHOR: Tu nombre
#+DATE: 2025-10-27
#+HUGO_BASE_DIR: ../
#+HUGO_SECTION: posts
#+HUGO_TAGS: emacs hugo org-mode
#+HUGO_CATEGORIES: Emacs
#+HUGO_AUTO_SET_LASTMOD: t
#+HUGO_CUSTOM_FRONT_MATTER: :showToc true :draft false

Luego escribes tu contenido normalmente con formato Org.


Exportar el documento

El comando principal es: M-x org-hugo-export-to-md

Esto genera un archivo .md dentro del directorio que definas con #+HUGO_BASE_DIR, respetando la estructura de Hugo (por ejemplo, content/posts/mi-articulo.md).

También puedes exportar directamente con C-c C-e H H.

Cuando ejecutas el comando, ox-hugo, lo que hace por debajo es:

  1. Toma el contenido de tu archivo Org.
  2. Genera el Markdown con front matter YAML.
  3. Lo guarda en la carpeta correspondiente de tu sitio Hugo.

Integrar con tu proyecto Hugo

Si ya tienes configurado un sitio Hugo (por ejemplo, con el tema PaperMod o Ananke), bastará con tener una estructura como:

mi-sitio/
 ├── content/
    ├── posts/
       └── mi-articulo.md
 ├── themes/
 ├── static/
 ├── config.toml
 └── resources/

Después de exportar, ejecuta en la terminal:

hugo serve -D --baseURL=http://localhost:1313

Esto generará la vista previa en http://localhost:1313/


Ventajas del flujo Org → Hugo

  • Puedes escribir en un formato legible, con listas, tablas, código fuente, y aprovechar todo lo que sabes hacer en Org-mode.
  • Todo el front matter se genera automáticamente.
  • Se pueden usar bloques de código en cualquier lenguaje con resaltado automático.
  • Las imágenes pueden referenciarse directamente desde tu carpeta de static/images/.
  • Puedes mantener todas tus publicaciones dentro de un único archivo Org y exportarlas por secciones, aunque esto no lo hago, prefiero tener todos los archivos - digamos - artículos o post por separado...

Ejemplo de exportación completa

#+TITLE: Ejemplo práctico
#+HUGO_BASE_DIR: ../
#+HUGO_SECTION: posts
#+HUGO_TAGS: ejemplo práctica hugo
#+HUGO_CATEGORIES: Tutoriales
#+HUGO_AUTO_SET_LASTMOD: t
#+HUGO_CUSTOM_FRONT_MATTER: :showToc true :draft false

Este es un ejemplo rápido de cómo se vería un artículo exportado.

Sección 1: Introducción

Escribes tu texto con formato Org.
Puedes usar negritas, /cursivas/, +tachado+, o incluso enlaces

Sección 2: Código

for i in range(3):
    print("Hola desde Emacs y Hugo!", i)

Sección 3: Imagen

[[../images/hugo-export.png]]

Consejos finales

  • Usa :draft false para publicar el artículo, o elimínalo... En mi caso, lo quité porque me comenzó a arrojar problemas al momento de exportar.
  • Si tienes varias publicaciones en un solo archivo, define un encabezado con la propiedad :EXPORT_FILE_NAME: para cada una.
  • Puedes combinar esto con denote o org-roam para tener notas y artículos sincronizados, aunque esto no lo uso, pero leí que se puede...

Conclusión

Exportar desde Org-mode a Hugo no solo acelera tu flujo de escritura, sino que convierte Emacs en una plataforma completa de publicación.
Si ya usas Org-mode para notas o documentación, integrar Hugo te permitirá transformar esas notas en artículos profesionales con apenas un par de comandos.

Ahora que tienes el flujo configurado, el siguiente paso será automatizarlo aún más: exportar, validar y publicar con un simple atajo de teclado.
Pero eso te lo dejaré de tarea...

“El poder de Emacs no está en lo que hace, sino en lo que puedes enseñarle a hacer.”