Depuis quelques jours, j'utilise Hugo pour générer mon blog. J'utilisais auparavant Pelican et ça commençait à m'agacer: Pelican devenait lourd et lent.

Il faut dire que j'ai actuellement 203 articles. Il me fallait un meilleur système.

Les Plus !

Premier avantage, et probablement le plus important : c'est puissant. Très peu impacté par le nombre d'articles. Mais pas que…

Pages entièrement traduites

Je n'ai pas réussi, sous Pelican, à faire une traduction complète du thème. Donc il y avait toujours quelques phrases en anglais, quelques autres en francais deci delà.

Là oui. Les pages d'accès aux tags, catégories, etc, sont toutes bien traduites.

Noms des tags et catégories traduits

Sous Pelican, mes tags n'étaient pas différenciés en fonction de la langue. Donc j'essayais d'utiliser un mot, soit français, soit anglais, qui permettait une bonne classification. Idem des catégories. D'où mon utilisation d’Informatics, qui n'est pas un vrai mot mais que j'espérais évocateur.

Avec Hugo, au contraire, les noms des tags peuvent être différenciés en fonction de la langue.

Les Moins.

J'ai bien perdu quelques fonctions.

Plus d'archives !

Je n'ai par exemple plus d'archives annuelles, mensuelles et journalières. C'était un peu la classe, quand on cherche un article d'une année ou d'un mois précis, de pouvoir aller à l'URL /année/mois/ et d'avoir la liste qui va bien. C'est une demande régulière des utilisateurs d'Hugo. Espérons que les develloppeurs trouvent le temps de la mettre en place.

Dates en anglais seulement.

Les dates de publication des articles ne sont pour l'instant disponibles qu'en anglais. C'est ballo, mais on y peut rien.

Fonction résumé pas top

Hugo a une fonction Summary qui permet de faire apparaître les 70 premiers mots d'un article sur la page de garde. Ca casse toute forme de mise en page. Ou alors il faut le faire dans l'article (le markdown source). Pas super.

J'utilise donc cette solution dans mon thème customisé.

Thème

J'ai dû traduire mon thème Pelican vers Hugo. Ca n'a pas été simple mais j'y suis arrivé. Le thème est disponible ici, sous licence ISC.

Le thème reprend les fonctions suivantes :

  • résumé
  • nuage de tags logarythmique (Ceci impose que les tags soient bien écrits dans le frontmatter, sans erreur de syntaxe.)
  • Support d’Isso
  • Les logos des differents réseaux sociaux sont juste des images, et pas des trackers web.
  • Si vous fournissez des logins tipeee ou liberapay, des boutons avec liens vers les comptes sont affichés en haut de la barre de gauche.
  • Listes de liens et blogroll configurables via fichiers json dans le repertoire data.

nginx redirection

Outre le thème, j'ai mis en place des redirections par nginx.

Avec Pelican, les URL de mes articles avaient cette forme : /année/mois/jour/titre-lang/. Mes URL deviennent aujourd'hui /lang/année/mois/jour/titre/. Il m'a donc fallu, pour éviter de casser tous les liens externes pointant vers mon blog, mettre en place des redirections et réécritures d'URL.

# remettre la langue en premier
location ~* ^/([0-9]+)/([0-9]+)/([0-9]+)/(.*)-en/$ {
    try_files /en/$1/$2/$3/$4/ /en/;
    }

location ~* ^/([0-9]+)/([0-9]+)/([0-9]+)/(.*)-da/$ {
    try_files /da/$1/$2/$3/$4/ /da/;
    }

location ~* ^/([0-9]+)/([0-9]+)/([0-9]+)/(.*)-fr/$ {
    try_files /fr/$1/$2/$3/$4/ /fr/;
    }

# on réécrit les tags et categories en démarrant par l'anglais.
location ~* ^/tag/(.*).html$ {
    try_files /en/tags/$1/ /fr/tags/$1/;
    }

location ~* ^/category/(.*).html$ {
    try_files /en/categories/$1/ /fr/categories/$1/;
    }

location ~* ^/downloads/$ {
         autoindex on;
    }

Comme indiqué auparavant, sous Hugo, les URL des tags et catégories deviennent plurielles et surtout dépendent de la langue. Raison pour laquelle, lorsque l'URL ne correspond pas à un shéma actuel, j'essaye, pour chaque cas, de tester d'abord l'anglais, puis le français.

dans le dk

Ah, tiens aussi. En fait, j'ai deux noms de domaines. 22decembre.eu et 22december.dk. Ce dernier permet un accès direct à la partie danoise du blog, soit juste /da/. Sauf que pleins de choses à la racine du site web eu ne sont pas à la racine du site web dk (puisque ce dernier n'est en fait que le dossier /da/ ). Donc là aussi il faut mettre en place une réécriture :

rewrite ^/da/(.*)$ /$1;

Ainsi https://www.22december.dk/da/tags/arbejde/ (adresse lue par le navigateur) devient https://www.22december.dk/tags/arbejde/. Dans le site web eu, ça reste bien https://www.22decembre.eu/da/tags/arbejde/.