Doshi's blog

Thème:

vdirsyncer, khal et khard

, — ~6mn de lecture

Récemment (début novembre), je me suis mis à khal et khard pour avoir mes contacts et calendriers sur mon PC, et donc aussi à vdirsyncer pour synchroniser entre mon téléphone et mon PC. Étant donné que ça avait trainé parce que j’avais la flemme de bidouiller du fichier de config, je vais faire un billet explicatif pour réduire la charge de travail de celleux qui étaient dans mon cas. Et puis j’ai que ça à foutre de mon Noël de toute façon.

Vdirsyncer

Bon déjà, le premier truc à faire c’est configurer vdirsyncer pour avoir les contacts et le calendrier synchro sur le PC.

Bah pour ça je vous laisse installer le bousin avec votre gestionnaire de paquets (dans mon cas, un bon vieux sudo pacman -S vdirsyncer).

Et on est parti pour éditer le fichier ~/.config/vdirsyncer/config

CalDAV

J’ai commencé à faire ce truc pour le calendrier principalement donc je vais commencer par CalDAV. On commence par lui dire qu’est-ce qu’il faut sync

[pair calendar]
a = "calendar_remote"
b = "calendar_local"
collections = ["from a", "from b"]

↑ Donc, ce qu’il faut sync, c’est a et b. On verra tout à l’heure comment on définit calendar_remote et calendar_local. Pour les collections, si vous voulez tous les calendriers de votre remote et si vous voulez garder leur nom, gardez la ligne telle quelle. Sinon, la ligne est un peu plus complexe, et dans mon cas elle ressemble à ça :

collections = [["perso", "personal", "perso"], ["birthdays", "204A-5BE86680-9-54AB6500", "birthdays"], ["fac", "1A7A-5BE86280-9-10EFDBC0", "fac"], ["edt", "183C-5BEC0B00-B-75C9D80", "edt"]]

↑ C’est parce que j’utilise le CalDAV de mon registrar, Gandi, et bien que le nom des calendriers soit modifiable, leur id ne l’est pas. Hors ce que vdirsyncer va synchro c’est les id, donc si je gardais le ["from a", "from b"], mes calendriers locaux se seraient appelés par exemple 204A-5BE86680-9-54AB6500 et c’est pas franchement pratique.

Du coup cette ligne collections elle se décompose comme ça : c’est une liste de triplets, et chaque triplet est de la forme [id-local, nom-remote, nom-local]. L’id-local c’est un nom qu’on veut donner à la paire pour s’y retrouver ; nom-remote, c’est le nom du calendrier distant ; et nom-local c’est le nom qu’on veut lui donner localement.

Et voilà on a fait le plus dur, le reste c’est plus compréhensible.

# Calendars also have a color property
metadata = ["displayname", "color"]

↑ Ce qu’on veut sync comme métadonnées sur nos calendriers, ici le nom et la couleur.

Et je vous parlais qu’on allait voir comment on déclare calendar_local et calendar_remote, nous y voilà !

[storage calendar_local]
type = "filesystem"
path = "~/.vdirsyncer/calendars/"
fileext = ".ics"

↑ Localement, on a juste besoin de lui donner où est-ce qu’on va stocker notre bousin, et sous quel format et c’est plié

[storage calendar_remote]
type = "caldav"
url = "l'url de votre calendrier"
username = "username"
password.fetch  = ["command", "la-commande", "les", "arguments", "potentiels"]

↑ Remotement, il nous faut l’url du calendrier, le nom d’utilisateur, et le mot de passe, rien de bien folichon. Et comme on est pas des gorets, on met pas notre mot de passe en clair dans le fichier de configuration, donc on lui donne une commande pour aller le recupérer dans notre gestionnaire de mot de passe favori

Et puis si on est des gorets, bah on fait comme ça ↓

password = "lemotdepasse"

Et on a fini pour le CalDAV !

Passons au CardDAV, du coup

CardDAV, du coup

[pair contacts]
a = "contacts_local"
b = "contacts_remote"
collections = ["from a", "from b"]

↑ On commence comme pour CalDAV, sauf que cette fois j’ai pas besoin de collections cheloues

metadata = ["displayname"]

↑ Je synchronise que le nom de mes contacts (je vous avoue que j’ai juste copié-collé cette ligne)

[storage contacts_local]
type = "filesystem"
path = "~/.vdirsyncer/contacts/"
fileext = ".vcf"

↑ Toujours rien de folichon, c’est exactement pareil que le calendar_local

[storage contacts_remote]
type = "carddav"
url = "l'url de vos contacts"
username = "votre nom"
password.fetch  = ["command", "la-commande", "arguments"]

Et voilà c’est fini, rien n’a changé pour ces bouts la

Et nous voilà finis avec vdirsyncer !

Il nous reste plus qu’à lancer un petit vdirsyncer discover pour qu’il trouve les nouveaux trucs à sync, puis ensuite vdirsyncer sync pour les synchroniser

À noter que si vous êtes comme moi sur ArchLinux, il faut downgrade le paquet python-idna en version inférieur à 2.8, sinon vdirsyncer ne fonctionne pas.

Khal

Bon donc khal c’est un petit outil en ligne de commande pour gérer son calendrier. J’en suis pas archi fan parce que Python et les runtime errors débiles, mais sinon c’est un excellent outil.

Et du coup, go le configurer.

Comment ça se présente ? Je déclare un calendrier par… calendrier que j’ai, pour pouvoir choisir la couleur avec laquelle ça s’afficher. À noter le dernier type=birthdays qui permet d’aller chercher les anniversaires dans les contacts, et ça c’est cool. ↓

[calendars]
[[perso]]
path = ~/.vdirsyncer/calendars/perso
color = dark blue

[[fac]]
path = ~/.vdirsyncer/calendars/fac
color = dark red

[[edt]]
path = ~/.vdirsyncer/calendars/edt

[[birthdays]]
path = ~/.vdirsyncer/calendars/birthdays
color = yellow

[[birthdays_contacts]]
type=birthdays
path = ~/.vdirsyncer/contacts/personal/
color = yellow

Ensuite viennent les histoires de format d’affichage et du fuseau horaire, je suis resté sur du très classique ↓

[locale]
timeformat = %H:%M
dateformat = %d/%m
longdateformat = %d/%m/%Y
datetimeformat = %d/%m %H:%M
longdatetimeformat = %d/%m/%Y %H:%M
local_timezone = Europe/Paris

Pareil, ça j’ai absolument pas touché parce que la giga flemme et ça me va très bien comme ça ↓

[view]
agenda_day_format = "{bold}{name}, {date-long}{reset}"
agenda_event_format = "{calendar-color}{cancelled}{start-end-time-style} {title}{repeat-symbol} | {location}{reset}"
bold_for_light_color = False
event_format = "{calendar-color}{cancelled}{start}-{end} {title}{repeat-symbol} | {location}{reset}"
event_view_always_visible = True
frame = color

Et enfin les petits paramètres par défaut, on s’en bat franchement les gonades ↓

[default]
default_calendar = "perso"
highlight_event_days = True
show_all_days = True
timedelta = 7d

Et c’est fini pour khal, et on attaque la dernière ligne droite, qui ne posera pas plus de souci que le reste

Khard

Allez on rentre direct dans le vif du sujet, on lui dit où aller chercher nos contacts ↓

[addressbooks]
[[contacts]]
path = ~/.vdirsyncer/contacts/personal/

Les trucs par défaut ↓

[general]
debug = no
default_action = list
editor = vim
merge_editor = vim

Et j’ai absolument pas touché au reste, j’ai laissé les commentaires qui étaient là ↓

[contact table]
# display names by first or last name: first_name / last_name
display = first_name
# group by address book: yes / no
group_by_addressbook = no
# reverse table ordering: yes / no
reverse = no
# append nicknames to name column: yes / no
show_nicknames = no
# show uid table column: yes / no
show_uids = yes
# sort by first or last name: first_name / last_name
sort = last_name
# localize dates: yes / no
localize_dates = yes

[vcard]
# extend contacts with your own private objects
# these objects are stored with a leading "X-" before the object name in the vcard files
# every object label may only contain letters, digits and the - character
# example:
#   private_objects = Jabber, Skype, Twitter
private_objects = Jabber, Skype, Twitter
# preferred vcard version: 3.0 / 4.0
preferred_version = 3.0
# Look into source vcf files to speed up search queries: yes / no
search_in_source_files = no
# skip unparsable vcard files: yes / no
skip_unparsable = no

Eeeeet voilà c’est fini, normalement tout marche bien ! Et si ça marche pas, bah vous pouvez toujours passer un petit message par mail ou autre, j’essayerais de vous aider si j’ai le temps.


Si vous voulez commenter, il faut suivre @Doshirae@comments.doshi.re sur le fediverse, et répondre au post correspondant à ce billet. C'est un peu expérimental, mais je paie les pots cassés pour que ça devienne top