Mon premier fork et migration, encore

Une vraie girouette… je viens à peine de migrer le blog vers Zola que je le migre déjà vers autre chose. Et le titre annonce un fork ?! Allez, voyons un peu ce qu’il s’est passé pour en arriver là.

Zola

Zola reste actuellement la solution la plus complète dans le monde des générateurs de site statique écrits en Rust. Mais certaines choses me plaisait moins, comparativement à Cobalt :

  • <!-- more --> en tant que séparateur : je trouve ça inesthétique et lourd à taper, j’avais contourné la gêne avec un snippet sous VSCode, mais là où Cobalt donne le choix du séparateur, là j’étais coincé avec cet héritage de WordPress (enfin je crois, je n’ai vu ça que sous Wordpress) ;
  • la structure des sources du blog est plus compliquée, chaque dossier devant être configuré avec un fichier _index.md, multipliant les méta fichiers ;
  • l’absence de commande new pour créer un nouveau post ;
  • pareil pour la commande publish (ces deux manques me poussant à créer Émile) ;
  • et un désaccord avec le mainteneur de Zola sur le tri des mots accentués, désaccord que je comprend et respecte, mais qui ne m’arrange pas. ^^'

Du coup, que faire ? Revenir à Cobalt bien sûr, mais retomber dans l’immobilisme ?

Antimoine

Vu que j’étais coincé avec Zola, j’ai demandé son avis à Ed, le mainteneur de Cobalt, sur l’idée que je fork Cobalt pour en faire mon propre projet. J’en avais parfaitement le droit du fait de la licence MIT, mais je préférais le mettre au courant de mes intentions. Il m’a donné sa « bénédiction » et c’est ainsi qu’est né Antimoine !

C’est quoi ce nom ?

L’antimoine est un métal qui était utilisé en alliage avec du plomb et de l’aluminium pour donner le « plomb typographique », inventé par Gutenberg et utilisé pour les caractères métalliques mobiles de son imprimante.

Je voulais utiliser le nom anglais (antimony) mais malheureusement, un autre projet écrit en Rust utilise déjà le nom (projet qui semble abandonné d’ailleurs, mais le nom reste pris tout de même). :’(

Me voilà donc à la tête d’un fork de Cobalt. Actuellement, je n’ai pas fait de pub pour le projet (comprendre « annonce sur reddit », par exemple) car je compte lui faire prendre de la valeur ajoutée avant d’en parler plus largement.

Les changements

Pour l’instant, la compatibilité avec Cobalt est totale, modulo le nom du fichier de configuration qui passe de _cobalt.yml à _sb.yml. Pourquoi sb ? C’est le symbole de l’antimoine sur le tableau périodique des éléments ! C’est aussi ainsi que se nomme l’exécutable : sb (ajoutez .exe sous Windows), ce qui est bien plus court à taper qu’antimoine. ^^'

Les nouveautés

Pour le moment, qu’ai-je fait ? J’ai commencé par mettre à jour l’intégralité des dépendances du projet. Mention spéciale à hyper, le framework permettant de faire le mini serveur web pour la commande serve. Il a tellement changé et m’a semblé tellement compliqué à mettre en œuvre que j’ai fini par le changer pour tiny-http, bien plus intuitif à prendre en main. :)

J’ai ensuite intégré toutes les commandes d’emile qui me permettent de remplacer la ribambelle de scripts shell de mon workflow. J’ai aussi ajouté une option pour la commande new afin de créer un post avec un décalage configurable pour l’année. Ça permet de mettre les nouveaux posts en tête de liste, tout en gardant l’ordre de leur création. Sans ça, Cobalt mettait une date arbitraire configurable, l’astuce étant qu’on la mettait dans le futur. Mais tous les posts étaient à cette même date, perdant ainsi leur ordre de création, vu qu’en cas de date identique, c’est l’ordre alphabétique qui prime.

J’ai ensuite amélioré le comportement de serve qui reconstruisait la totalité du site à chaque modification. Désormais, lorsqu’un post est modifié, je ne reconstruis que celui-ci et si on modifie une feuille de style, je ne reconstruis que la CSS.

Autre raffinement pour serve, vu que j’aimais beaucoup cette fonction avec Zola, le refresh dans le navigateur est désormais automatique lorsque le contenu est modifié ! Je ne vous raconte pas la satisfaction d’avoir implémenté ça ! :D

Il me reste encore quelques tâches avant de faire une vraie release mais désormais, ça ne dépends plus que de moi !