Khal pour un agenda synchronisé avec nextcloud

Dans le but d'être résiliant sur la synchronisation des contacts et de ses agenda. Le programme Vdirsyncer fait des miracles!

Ressources:

Installation des dépendances

D'abord, nous installons les dépendances de python 3 :

# apt install python3-pip khal

Via un compte utilisateur, installer vdirsyncer :

$ pip3 install --user vdirsyncer

Configuration

Vdirsyncer

Admettons que l'on utilise une instance nextcloud sur mon-site.com

Nous allons d'abord commencer par vdirsyncer qui va permettre de récupérer les évènements crées dans l'agenda sous forme de fichier .ics.

mkdir -p ~/.config/vdirsyncer/data
mkdir -p ~/.config/vdirsyncer/local
nano ~/.config/vdirsyncer/config
config
[general]
status_path = "~/.config/vdirsyncer/data/"
 
[pair khal]
a = "personal_local"
b = "personal_remote"
collections = null
conflict_resolution = "b wins"
 
[storage personal_local]
type = "filesystem"
path = "~/.config/vdirsyncer/local/"
fileext = ".ics"
 
[storage personal_remote]
type = "caldav"
url = "https://mon-site.com/remote.php/dav/calendars/$user/$non-planning/"
username = "user"
password = "mdp"
  • Dans le premier bloc, on définit l'emplacement de stockage des données qu'il va récupérer.
  • Dans le second bloc, on déclare les espace de stockage et la méthode qui va être utilisé en cas de conflit lors d'une synchronisation. Ici, nextcloud aura toujours raison en cas de conflit.
  • Dans le troisième bloc, on déclare l'espace de stockage locale qui sera interprêté par khal et vdirsyncer se chargera d'y enregistrer les évènements au format .ics.
  • Dans le quatrième bloc, on donne les identifiants et le chemin d'accès au caldav.

Ceci fait et à chaque modification de la configuration, il y aura toujours besoin de lancer le discover puis régulièrement (via une tâche cron par exemple) le sync ainsi :

vdirsyncer discover khal
vdirsyncer sync khal

On obtiendra ce type de sortie :

Copying (uploading) item 28967f88-8cf2-4409-844e-03f4c340830a to personal_local
Copying (uploading) item 28c66d3c-7a2f-4517-9c4a-0c7e31fd10bf to personal_local
Copying (uploading) item 28ea97bc-2f03-43cf-b229-48d49fcac5fb to personal_local

Khal

Passons maintenant à la création et à sa configuration de l'environnement :

mkdir -p ~/.config/khal/
vim ~/.config/khal/config
config
[calendars]
[[planning]]
path = ~/.config/vdirsyncer/local/
color = dark green
 
[sqlite]
path = ~/.config/khal/khal.db
 
[locale]
timeformat = %H:%M
dateformat = %d-%m-%Y
longdateformat = %d-%m-%Y
datetimeformat = %d-%m-%Y %H:%M
longdatetimeformat = %d-%m-%Y %H:%M
 
[default]
default_calendar = "planning"
highlight_event_days = True
  • Dans la premier bloc, nous spécifions l'emplacement des .ics précédemment téléchargé.
  • Dans le second bloc, la base de donnée.
  • Dans le troisième bloc, le format des dates.
  • Dans le quatrième bloc, le calendrier par défaut chargé lors de l'appel de la commande khal.

Exemple d'usage

khal@test:~$ khal list now 7d
Tomorrow, 20-07-2022
 anniv michelle ⟳
09:30-10:00 Point tech@ ⟳
dimanche, 24-07-2022
14:00-15:00 Evolix: ikv ⟳
22:00→ Sysadmin retreat
lundi, 25-07-2022
↔ Sysadmin retreat
↦ Astreinte
mardi, 26-07-2022
↔ Sysadmin retreat
↔ Astreinte