Skelets numériques
Intégration du blog dans mon Obsidian
Note: certains liens ne sont pas encore actifs sur cette page, ça changera (peut-être) quand j’arriverai au bout de ce chantier.
Besoin
Si je veux faire du [[Digital Gardening]] et apprendre en public, une condition nécessaire c’est de rendre l’intégration entre mon blog et le reste de mon jaridn numérique facile.
Actuellement, j’ai une base de connaissance avec [[Obsidian]]. Je ne détaille pas plus ici ce que ça fait, mais une des grosse fonctionnalités que j’utilise ce sont les liens wiki (ou wikilink). En gros: mettre un mot entre double crochets (par exemple, [[idée]]
) ouvre un menu déroulant qui cherche la note au nom le plus proche; et permet d’en créer une si il n’y en a pas. Ça permet d’écrire et de se laisser guider par son flux de pensée et de poser des idées à cultiver plus tard.
Il y a une autre fonctionnalité que j’utilise moins: les rétroliens. En gros, pointer dans une note quelles autres notes y font référence.
Il y a aussi la gestion des métadonnées, on y viendra après.
Problème actuel: si [[Hugo]] (mon générateur de site statique) maîtrise bien les références internes; et manifestement c’est possible de faire des backlinks, il le fait avec une syntaxe différente. En Hugo, il faut écrire [lien](https://blog.canevas.eu/blog/ce-blog/description/)
(si je veux lier vers la note qui a pour titre “ce-blog” dans mon Obsidian).
Pourquoi ça ne m’arrange pas
- j’ai mon Obsidian dans lequel vit mon blog (un dossier spécial qui contient tous le contenu markdown).
- lors de la publication, je suis obligé de convertir les liens entre notes Obsidian au format compris par Hugo (sinon, je vais me retrouver avec des liens morts)
- lors de l’édition d’une note déjà publiée, je ne peux pas faire référence à une autre note hors du site (qui vaudrait le coup d’être intégrée) à moins de rechanger de syntaxe; je ne profite pas du menu déroulant hyper pratique d’Obsidian
La solution que je vois: considérer Obsidian comme la seule source valable de notes (tout écrire dedans). Avoir un dossier séparé qui contiendra les notes que je souhaite publier avec la bonne forme de liens. (j’ai essayé de faire un schéma mais le rendu des liens était bizarre)
![[Intégration du blog dans mon Obsidian 2023-05-21 17.51.45.excalidraw]]
Il existe des scripts déjà existant pour cet usage; mais comme j’avais un peu de temps et envie de programmer un peu, j’ai décidé d’écrire le mien. On part sur le langage OCaml, que je connais un peu mais que je n’ai pas eu l’occasion de trop utiliser pour gérer des strings.
Spécification
On va se résoudre à faire la chose suivante pour commencer
- ouvrir un fichier obsidian
- renvoyer un nouveau fichier dans lequel on aura remplacé
[[ce-blog]]
par[ce-blog](https://blog.canevas.eu/blog/ce-blog/description/)
.
On ne va pas se préoccuper pour l’instant de savoir si le fichier “lien” est accessible par le blog, c’est un problème à traiter ultérieurement.
Dans les extraits de code que je vais présenter, j’omet de mettre des chevrons ouvrant et fermant dans les refs:
({{ ref "ce-blog" }})
doit être compris comme({{CHEVRON_OUVRANT ref "ce-blog" CHEVRON_FERMANT}})
. Je ne sais pas pourquoi Hugo ne sait pas parser cette partie.
TODO
- enregistrer la sortie dans un fichier séparé
- lister tous les fichiers dans un vault
- rendre les fonctions robustes aux fichiers non-existants et aux dossiers manquants
- gestion d’erreur
- ajout automatique des fichiers dans Hugo si mentionnés dans Obsidian
- ajouter des filtres
- dossiers à exclure/inclure
- noms de fichiers à exclure/inclure
- gérer les références internes aux notes (les wikilinks contenant des dièses, en gros)
- gestion des métadonnées de Obsidian avec transformation en Hugo
- transposition des métadonnées Obsidian vers Hugo
- Ajout de métadonnées Hugo par défaut
- (selon un pattern rentré par l’utilisateur?)
Journal
Logbook de développement accessible ici