De Nikola à Hugo

Une nouvelle fois, il est grand temps de migrer le système de blog.

Motivations

En 2019, Nikola n’est plus fonctionnel : la conversion markdown échoue. Visiblement, le packaging Debian de Nikola a pris suffisament de retard pour que le code ne soit plus compatible.

Conception

Les outils étant à la fois proches (générateurs de site statiques) et bien différents, un peu de conception s’imose pour partir sur de bonnes bases.

Avec Nikola, on utilise les concepts suivants :

  • billets de blogs
  • stories
  • tags
  • gallerie de photos
  • listings pour les codes
  • files (pièces jointes brutes)

Néanmoins, il reste un concept que je n’ai pas réussi à faire ressortir : les randos. En effet, parmi les stories, la collection de mini-topo guides mériterait de mieux ressortir. Qui plus est, idéalement, il faudrait que cette catégorie donne lieu à un index qui présente ces topos sur une carte.

Concernant la gallerie de photo, il s’agit en fait surtout d’un artifice technique, Nikola traitant spécifiquement les photos dans l’arborescence galleries pour générer des vignettes, ce que Hugo aborde différemment avec des fonctions/shortcodes spécifiques. De plus, nombre des photos accumulées dans ce dossier n’ont d’autres vocation que d’illustrer d’autres contenus. Dans l’esprit de Hugo, ces images devraient être considérées comme des Page Resources.

On fait strictement le même constat pour les listings. Du coup, ce concept va disparaître pour dispatcher les fichiers au plus près des articles.

Arborescence

Au final, on obtient l’arborescence suivante :

content/
|- posts/  # les billets de blog
|- stories/  # les pages thématiques
|- rando/ # les randos
|- galleries/ # quelques photos
|- Stories/ # fichiers statiques d'une très ancienne version du site
static/

Randos

Pour les randos, on pourra déplacer le contenu statique directement dans content/rando. On pourra même profiter de la notion de Page Bundle pour stocker dans le même dossier la description de la rando et les ressources (image, GPX) :

content/
|- rando/
   |- ma-rando/
      |- index.md
      |- map.png
      |- data.gpx

On peut aussi profiter de toute la flexibilité de Hugo pour générer un index par Pays+Région en ajoutant deux méta-données : pays et region. Il suffit ensuite de déclarer un template layouts/rando/list.html avec du code exploitant la formule magique :

{{ range .Pages.GroupByParam "region" }}

Outillage

Le site compte environ 300 pages. Un joli morceau déjà. Du coup, inimaginable de convertir à la main.

J’ai donc gratté quelques scripts pour me faciliter la vie :

Références