diff --git a/posts/org-mode/workflow.md b/posts/org-mode/workflow.md new file mode 100644 index 0000000..6828f13 --- /dev/null +++ b/posts/org-mode/workflow.md @@ -0,0 +1,183 @@ +--- +date: 2023-01-18 +author: Alexandre LUCAZEAU +title: org-mode, org-roam et org-journal, le workflow +tags: +- org-mode +- org-roam +- org-journal +- emacs +categories : +- emacs +draft: false +description : "Définir un workflow pour suivre les activités et ce qu'il reste à faire" +--- +# La génèse +Insatisfait de ma gestion de suivi de mon activité, j'ai cherché des solutions. +La méthode GTD ? Org-mode autre ? +Après quelques tentatives, je me suis mis à emacs et org-mode avec l'espoir de trouver une solution "simple" et efficace de noter régulièrement mon activité, d'avoir une base de connaissance mise à jour régulièrement et une trace de ce qu'il me reste à faire. + +## Au début, fut org-mode +org-mode est un mode majeur d'emacs. Il fait parti des modules intégrés. Sa syntaxe est simple, sans être des plus agréable. Mais les automatismes et les modules qui gravitent autour, en font un indispensable. + +**org-mode** permet d'écrire des _notes_ des listes de choses à faire ( les fameux **todo**), de visualiser dans un agenda les taches/projets etc... + +## Puis vient org-roam +**org-roam** est une application de la méthode zettelkasten basée sur org-mode. Cette méthode vous pousse à écrire des notes et de les lier entre elles. +**org-roam** utilise une base **sqlite**. Dans cette base sont enregistrer, entre autre, les liens entre les fiches, la liste des fiches, les tags des fiches. +L'utilisation de **tags** permet de faire des catégories de fiches. + +## Le troisième larron org-journal +Cette troisième pièce du puzzle vous permet de maintenir un journal de votre activité journalière et d'exploiter la puissance des **TODO list** avec celle du calendrier. + +**org-journal** à une fonctionnalité incontournable à mon sens : ce module va récupérer les TODO encore présent dans le journal pour les remettre dans la journée active. Chaque journée fait l'objet d'un fichier. +## Comment tout cela va s'articuler ? +On va utiliser**org-mode** pour sa syntaxe et son ecosystème. +J'ai 1 fichier **org** par entreprise. Ce fichier sera la fiche de niveau supérieur. +Pour chaque entreprise j'ai des fiches de niveau inférieurs qui vont être des fiches prospect, client ou idées produits. +Pour chaque prospect, projet ou client, je vais avoir des fiches devis/réunion etc.. +La création des fiches, la mise en place des liens et la visualisation/recherche se font via org-roam. + +Tout au long de ma journée, j'enregistre ce que je fais dans un journal via or-journal. Depuis le journal je fais des liens vers les fiches. +Par exemple, on m'appel, j'ouvre le journal pour enregistrer l'appel. +Lorsque je sais de quoi il veux parler, j'ouvre une note ou j'en crée une. +Je mets les éléments de notre conversation dans la note, et si derrière j'ai une action je rajoute TODO dans le titre de la sous section. + +exemple : + + * appel david + ** point_certification + ** TODO devis_client1 + ** prepa_reunion_prospect + +J'ai ainsi un suivi de mon activité de la journée, et j'ai les marqueurs permettant de retrouver ce que j'ai à faire. + +## Les status des taches +J'utilise : + * TODO : tache à faire + * DONE : tache terminée + * WAIT : tache mise en attente (en attente d'un livrable, d'un rdv etc..) + +J'ai très peu de **WAIT**. + +## Les tags +J'utilise les **tags** pour classifier les taches. + * DEVIS : pour les devis à faire + * PROJET : concerne les projets clients + * INTERNE : concerne les projets internes + * CLIENT : fiche spécifique à un client + * PROSPECT : fiche spécifique à un prospect + +J'ai différencié les projets internes et clients car mes projets internes sont un fil rouge et se déroule généralement sur des périodes plus longues que les projets clients. + +# Fonctionnement de la journée +Le matin au commancement de la journée, je lance emacs : + + emacsclient -nw + +Je lance l'agenda et j'affiche l'ensemble des TODO : + + C-ca + t + +**TAB** permet d'aller directement sur l'entrée du journal correspondant à la ligne _TOTO_ + +Si au lieu de **t** je choisi **m** je peux filtrer par tag. C'est à dire que je peux choisir d'afficher les devis à faire pour la journée ou les projets + +Une fois que j'ai fais le point sur ce qui est prévu, j'ouvre le journal du jour et j'ajoute ma première activité : + + C-cnj + +Je rentre donc le titre de mon activité, puis j'ouvre une note avec : + + C-cni + +Avec **TAB** je peux sélectionner une fiche existante, ou entrer le nom d'une nouvelle fiche. + +Lorsque l'édition de la fiche est terminée (même temporairement) on ferme la fiche et on crée un lien dans le journal via un simple + + C-c C-c + +Pour ouvrir le lien vers la note : `C-c C-o` et pour revenir au journal (ou revenir en arrière : `C-c &` +Enfin pour terminer, lorsque je crée une note, je la nomme avec la convention suivante : + * PROJET_xxxx + * AO_xxx + * CLIENT_codeclient + * PROSPECT_nomprospect + * INTERNE_xxx + +Les notes principale recevront en fin de journée le lien vers les notes créées ce jour. Ainsi les notes restent liées, conformément à la méthode zettelkasten. + +# La configuration : init.el +Maintenant que nous avons vu les principes de base, nous allons passer en revue la configuration de l'ensemble. + +## org-mode +La configuration de **org-mode** se résume à : + + (require 'org) + (require 'org-mouse) + (setq org-startup-folded t + org-pretty-entities t + org-hide-emphasis-markers t + org-startup-with-inline-images t + org-image-actual-width '(300)) + + * on charge org et org-mouse + * lorsqu'un fichier org est ouvert le contenu est "replié" + * il est possible d'utiliser les **entities** d'org-mode. Il s'agit d'une suite de caractère équivalent à un caractère. Par exemple **\Agrave** sera automatiquement remplacé par **À** + * les symboles utilisés pour mettre en gras, italiques etc.. ne sont pas visible, les mots apparaissent immédiatement en gras etc.. + * on affiche les images plutot que le lien vers l'image + * taille des images + + (add-to-list 'auto-mode-alist '("\\.org$" . org-mode)) + + * chargement du mode org-mode pour tous les fichiers finissant en **.org** + + (setq org-agenda-files '("~/Nextcloud/PRIVE/13_Org/journal")) + + * On précise que les fichiers à utiliser pour générer l'agenda sont dans le dossier _journal_ + +## org-roam + + (setq org-directory (concat (getenv "HOME") "/Nextcloud/PRIVE/13_Org/notes")) + (use-package org-roam + :after org + :init (setq org-roam-v2-ack t) ;; Acknowledge V2 upgrade + :custom + (org-roam-directory (file-truename org-directory)) + :config + (org-roam-setup) + :bind (("C-c n f" . org-roam-node-find) + ("C-c n r" . org-roam-node-random) + (:map org-mode-map + (("C-c n i" . org-roam-node-insert) + ("C-c n o" . org-id-get-create) + ("C-c n t" . org-roam-tag-add) + ("C-c n a" . org-roam-alias-add) + ("C-c n l" . org-roam-buffer-toggle) + ("C-c n o" . org-open-at-point) + ("C-M-i" . completion-at-point)))) + (org-roam-db-autosync-mode)) + + * On définit le dossier qui contiendra l'ensemble des fiches créées par org-roam + * On crée quelques raccourcis claviers, globaux et propre à org-roam + * la dernière ligne force la synchro de la base sqlite à chaque enregistrement + +## org-journal + + (setq org-journal-date-prefix "#+TITLE: ") + (setq org-journal-time-prefix "* ") + (setq org-journal-date-format "%a, %Y-%m-%d") + (setq org-journal-file-format "%Y-%m-%d-journal.org") + (setq org-journal-dir "~/Nextcloud/PRIVE/13_Org/journal/") + (global-set-key "\C-cnj" 'org-journal-new-entry) + (require 'org-journal) + + * Les 3 premières lignes correspondent au modèle de fiches que l'on souhaite au niveau du journal + * on précise ou les journaux doivent être + * création d'un raccourci clavier + * chargement du module + +# The end +On a vu ici les principaux éléments de configuration. La partie Tag étant très standard, pas besoins d'enfaire une explication. +Le fichier de configuration est disponible dans le [git](https://git.atlanticaweb.fr/alexandre/nixos-config/src/branch/main/hosts/dell-5590/nixpkgs/configs/init.el)