Carnet de thèse

Un outil en CLI pour exporter des notes et les transclusions

· Alexandre

Comme j’utilise Obsidian au quotidien pour travailler, j’ai accumulé un grand nombre de notes et surtout de liens (v. Comment Obsidian m’aide à rester DRY). Et quand je dois partager des notes avec d’autres personnes, je dois m’assurer que celles-ci reçoivent aussi le contenu des transclusions !

La solution de facilité, c’est d’exporter en PDF. Obsidian le fait très bien nativement, ce qui permet d’avoir un document qui reprend le thème du coffre, et qui contient toutes les informations, même celles des transclusions.

Mais pour un partage de la note au format Markdown, c’est malheureusement plus complexe. Il existe un plugin, Longform, qui permet de “compiler” les fichiers Markdown et les transclusions, mais cela ajoute encore un plugin et de la lourdeur au logiciel. Pas idéal.

Donc voici une solution qui repose sur un outil en ligne de commande, facilement utilisable !

Ce petit programme écrit en Rust permet, par défaut, d’exporter l’intégralité de ses notes Obsidian, en compilant les transclusions. Je sais, j’ai dit que je ne voulais pas installer d’outils supplémentaires et j’installe un outil en CLI… On est toutes et tous pétris de contradictions, non ?

Voilà la commande qui doit être exécutée au niveau de la racine du coffre Obsidian, et que j’explique ensuite :

fd -e md | fzf --preview="bat {}" | xargs -I {} obsidian-export "./" "./x/exported-full-notes/" --start-at "{}"

J’utilise aussi fd et fzf, qui sont deux petits utilitaires : le premier est un remplacement de la commande find (plus rapide) ; le second est un fuzzy matcher hyper cool (en gros, il permet de faire des recherches en tolérant les fautes de frappes).

xargs permet de récupérer la sortie de la dernière commande et de la passer en argument de la commande d’après (ce n’est pas du texte mais bien un argument).

Donc en gros, cette commande permet :

  • fd -e md : trouve tous les fichiers dont l’extension est en .md ;
  • fzf --preview="bat {}" : ouvre le fzf et affiche un aperçu du fichier pour ne pas se tromper ;
  • xargs -I {} : transmet la sélection du fzf à obsidian-export en argument. L’option -I permet de définir un espace réservé ({}) qui sera remplacé par le chemin de notre fichier ;
  • obsidian-export "./" "./x/exported-full-notes/" --start-at "{}" : exporte ensuite dans un dossier d’Obsidian qui récupère la n`te et le contenu des transclusions.
  • L’option --start-at détermine en fait la note exacte qu’on cherche à exporter — il faut mettre la racine du coffre en « input » sans quoi les transclusions ne seront pas résolues.

C’est une solution « quick and dirty » parce qu’on ne vérifie pas si on est dans le bon dossier, que le dossier est bien un vault Obsidian, que le dossier d’export existe, on ne gère pas les erreurs de l’utilisateur, etc. Mais bon. Ça marche si on sait ce qu’on fait.

Alexandre