Gestion de to-do list avec bash et synchronisation avec Nextcloud Notes
Il y a presque quatre ans, j'écrivais que j'avais mis en place quelques alias pour me simplifier la vie et me pousser à écrire plus souvent sur le blog... On dirait que ça n'a pas bien marché...
Qu'à cela ne tienne, j'ai un petit truc à raconter ici. En effet, après avoir testé plein de systèmes pour gérer les tâches à réaliser, j'ai finalement décidé de revenir à une approche KISS, de bien définir mes besoins de base et de tout gérer avec deux fichiers texte et un petit script bash. Pour un accès mobile, j'utilise Nextcloud et en particulier l'application Notes.
Le point de départ, c'est une idée de David Manise qui fait sa to-do list dans un seul fichier avec quelques "codes" assez basiques. Je n'ai pas retrouvé où il parle de ça mais j'ai gardé l'idée de me faire un petit "code" à moi pour organiser les choses. J'ai en effet besoin d'avoir des listes pour différents contextes (perso, pro, familial, ...).
Après quelques tests et réflexions, j'ai donc un fichier en markdown qui ressemble à ça :
ToDo List
=========
- [ ] .S. Documenter script todo
- [ ] .C. Poncer meuble
- [ ] .C. Acheter vis
- [ ] .F. Aller à la piscine avec les enfants
- [x] .S. Script ToDo à faire (v1)
- [ ] .S. Script ToDo à faire (v2?)
- [ ] .V. Terminer de lire "The Anarchist's Design Book"
Récurrents
==========
- [ ]R .S. Méditer (tous les jours)
- [ ]R .S. Faire du sport (étirements, élliptique, quick&dirty, aïkido..)
Légende
=======
.C. : Copeaux (Mes Beaux Copeaux)
.F. : Famille
.S. : Simon (Perso)
.V. : Vrac (trucs pas urgent)
..]R: Récurrents
On remarque quelques catégories (Les trucs pour moi, les trucs pour mon activité professionnelle Mes Beaux Copeaux, les trucs pour la famille, les trucs pas urgents (vrac), ...) et il est possible que j'en ajoute d'autres si le besoin se fait sentir. Les cases "[ ]" rendent la ligne "validable" sur Nextcloud Notes, ce qui est un bonus sympa.
Maintenant, il me faut un petit script. Ce que j'ai besoin c'est :
- Pouvoir isoler facilement les tâches pour un contexte particulier
- Pouvoir couper/coller une tâche terminée dans un autre fichier (pour le suivi des taches réalisées)
J'ai donc passé quelques heures sur un script et voilà le résultat actuel :
#!/bin/bash
set -euo pipefail
todoFile='/home/simon/Cloud/Notes/ToDo.md'
doneFile='/home/simon/Cloud/Notes/Done.md'
#S'il n'y a pas d'argument
if [ $# -eq 0 ]; then
echo -e "Il manque un argument.
s = Simon
f = Famille
c = Mes Beaux Copeaux
v = Vrac (pas urgent)
d = Done (couper les trucs faits dans Done.md)"
exit
fi
#Liste à faire Simon
if [ $1 = 's' ]; then
grep -e "\] \.S\." -e "\]R \.S\." $todoFile
elif [ $1 = 'f' ]; then
grep -e "\] \.F\." -e "\]R \.F\." $todoFile
elif [ $1 = 'c' ]; then
grep -e "\] \.C\." -e "\]R \.C\." $todoFile
elif [ $1 = 'v' ]; then
grep -e "\] \.V\." -e "\]R \.V\." $todoFile
elif [ $1 = 'd' ]; then
IFS=''
while read p;
do
if grep -q '\[x\]' <<<$p; then
echo $p
echo `date "+%Y-%m-%d %H:%M"` $p >> $doneFile
fi
done <$todoFile
sed -i 's/\[x\]R/\[\ \]R/g' $todoFile
sed -i '/\[x\]\ /d' $todoFile
else
echo "Mauvais argument"
fi
À ce stade, je peux donc :
- Afficher les tâches pour un contexte choisi
- Déplacer les tâches terminées dans un fichier à part
- Copier et dé-valider les tâches récurentes dans un fichier à part
Pour me simplifier la vie, j'ai placé le script (todo.sh) dans ''/usr/bin/'' et j'ai créé quelques alias dans ''~/.bash_aliases'' :
#todo
alias todo='nvim /home/simon/Cloud/Notes/ToDo.md'
alias td-s='todo.sh s'
alias td-f='todo.sh f'
alias td-c='todo.sh c'
alias td-v='todo.sh v'
alias td-d='todo.sh d'
Quelques exemples d'utilisations :
$ td-s #tâches pour Simon
- [ ] .S. Documenter script todo
- [x] .S. Script ToDo à faire (v1)
- [ ] .S. Script ToDo à faire (v2?)
- [ ]R .S. Méditer (tous les jours)
- [ ]R .S. Faire du sport (étirements, élliptique, quick&dirty, aïkido..)
Quand il y a une ou plusieurs cases cochées, je peux lancer le script avec l'option "d" (Done"
$ td-d
- [x] .S. Script ToDo à faire (v1)
```bash
La ou les tâches réalisées sont affichées et envoyées dans le fichier "Done.md" avec la date :
```bash
$ cat Cloud/Notes/Done.md
2024-09-18 13:36 - [x] .S. Script ToDo à faire (v1)
Les taches récurentes sont copiées dans "Done.md" et dé-validée dans "ToDo.md". Pas besoin de la re-créer le lendemain donc. C'est encore très basique mais ça me convient pour l'instant.Il n'y a plus qu'à jouer avec tout ça au quotidien et créer une nouvelle habitude.
Quelques idées d'améliorations : * Afficher toutes les tâches à faire (tous les contextes d'un coup!) * Afficher les taches réalisées qui n'ont pas encore été envoyées dans "Done.md"