# Installation et configuration de vdirsyncer

Synchroniser automatiquement un calendrier iCloud (CalDAV) vers un fichier `.ics` local, exploitable par le module **calendar** de MagicMirror.

---

#### 🧩 Installation

✅ Méthode recommandée (via `apt`)

```shell
sudo apt update
sudo apt install vdirsyncer -y
```

> 💡 Cela installe la version stable packagée pour Ubuntu (ex. `0.19.2`).

**Vérification :**

```bash
vdirsyncer --version
```

**Résultat attendu :**

```postgresql
vdirsyncer, version 0.19.2
```

---

#### ⚙️ Emplacement des fichiers

**Fichier de configuration :**

```bash
~/.vdirsyncer/config
```

**Dossier de statut :**

Il sera automatiquement créé à l’emplacement :

```bash
~/.vdirsyncer/status/
```

**Fichiers `.ics` exportés :**

Répertoire cible à créer pour MagicMirror :

```shell
~/MagicMirror/modules/calendars/
```

---

#### 🧾 3. Configuration `~/.vdirsyncer/config` 

Voici une version corrigée et adaptée pour Ubuntu :

```ini
# vdirsyncer configuration for MagicMirror

[general]
status_path = "~/.vdirsyncer/status/"

# --- CALDAV Sync 1 ---
[pair iCloud_to_MagicMirror1]
a = Mirror1
b = iCloud1
collections = ["home"]
metadata = ["displayname", "color"]

[storage Mirror1]
type = singlefile
path = /home/thymon/MagicMirror/modules/calendars/%s.ics

[storage iCloud1]
type = caldav
url = https://caldav.icloud.com/
username = sebort@icloud.com
password = abcd-efgh-ijkl-mnop   # Mot de passe d'application iCloud
read_only = true
item_types = ["VEVENT"]

# --- CALDAV Sync 2 ---
[pair iCloud_to_MagicMirror2]
a = Mirror2
b = iCloud2
collections = ["145c2a93-c79a-4347-8045-86fca9c3d201"]
metadata = ["displayname", "color"]

[storage Mirror2]
type = singlefile
path = /home/thymon/MagicMirror/modules/calendars/%s.ics

[storage iCloud2]
type = caldav
url = https://caldav.icloud.com/
username = sebou@icloud.com
password = zzzz-yyyy-xxxx-wwww   # Mot de passe d'application iCloud
read_only = true
item_types = ["VEVENT"]

```

---

#### 🔐 Génération du mot de passe d’application iCloud

1. Se connecter à [https://appleid.apple.com<span aria-hidden="true" class="ms-0.5 inline-block align-middle leading-none"><svg class="block h-[0.75em] w-[0.75em] stroke-current stroke-[0.75]" data-rtl-flip="" fill="currentColor" height="20" viewbox="0 0 20 20" width="20" xmlns="http://www.w3.org/2000/svg"><path d="M14.3349 13.3301V6.60645L5.47065 15.4707C5.21095 15.7304 4.78895 15.7304 4.52925 15.4707C4.26955 15.211 4.26955 14.789 4.52925 14.5293L13.3935 5.66504H6.66011C6.29284 5.66504 5.99507 5.36727 5.99507 5C5.99507 4.63273 6.29284 4.33496 6.66011 4.33496H14.9999L15.1337 4.34863C15.4369 4.41057 15.665 4.67857 15.665 5V13.3301C15.6649 13.6973 15.3672 13.9951 14.9999 13.9951C14.6327 13.9951 14.335 13.6973 14.3349 13.3301Z"></path></svg></span>](https://appleid.apple.com)
2. Section **Sécurité** → *Mots de passe spécifiques d’application* → *Générer un mot de passe…*
3. Donner un nom (ex. *vdirsyncer*)
4. Copier le mot de passe généré (ex. `abcd-efgh-ijkl-mnop`)
5. Le coller dans la configuration (`password = …`)

> ⚠️ iCloud **refuse les mots de passe standards** pour CalDAV — ce mot de passe spécifique est obligatoire.

---

#### 🧪 Test de découverte

Découverte des calendriers disponibles :

```bash
vdirsyncer discover
```

Résultat attendu :

```bash
Discovering collections for pair iCloud_to_MagicMirror1
Found 1 collection
/home/thymon/MagicMirror/modules/calendars/home.ics
```

> Si tu vois une erreur `401 Unauthorized`, vérifie ton mot de passe d’application iCloud.

---

#### 🔁 Synchronisation manuelle

Pour lancer une synchronisation :

```bash
vdirsyncer sync
```

Le ou les fichiers `.ics` seront créés dans :

```bash
~/MagicMirror/modules/calendars/
```

---

##### ⏱️ Synchronisation automatique avec systemd.timer

Créer le dossier systemd utilisateur :

```bash
mkdir -p ~/.config/systemd/user
```

Télécharger les unités :

```bash
curl -o ~/.config/systemd/user/vdirsyncer.service https://raw.githubusercontent.com/pimutils/vdirsyncer/master/contrib/vdirsyncer.service
curl -o ~/.config/systemd/user/vdirsyncer.timer https://raw.githubusercontent.com/pimutils/vdirsyncer/master/contrib/vdirsyncer.timer
```

Modifier la fréquence (facultatif) :

```bash
nano ~/.config/systemd/user/vdirsyncer.timer
```

Par défaut :

```ini
[Timer]
OnBootSec=5m
OnUnitActiveSec=15m
```

➡️ Modifier par exemple pour une synchro toutes les heures :

```ini
OnUnitActiveSec=1h
```

Activer et démarrer :

```bash
systemctl --user daemon-reload
systemctl --user enable --now vdirsyncer.timer
```

Vérifier :

```bash
systemctl --user status vdirsyncer.timer
```

---

#### 📋 Points importants

<div class="_tableContainer_1rjym_1" id="bkmrk-%C3%89l%C3%A9ment-ancien-tuto-"><div class="group _tableWrapper_1rjym_13 flex w-fit flex-col-reverse" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="4767" data-start="4221"><thead data-end="4276" data-start="4221"><tr data-end="4276" data-start="4221"><th data-col-size="sm" data-end="4231" data-start="4221">Élément</th><th data-col-size="sm" data-end="4255" data-start="4231">Ancien tuto Raspberry</th><th data-col-size="sm" data-end="4276" data-start="4255">Adaptation Ubuntu</th></tr></thead><tbody data-end="4767" data-start="4333"><tr data-end="4366" data-start="4333"><td data-col-size="sm" data-end="4347" data-start="4333">Utilisateur</td><td data-col-size="sm" data-end="4354" data-start="4347">`pi`</td><td data-col-size="sm" data-end="4366" data-start="4354">`thymon`</td></tr><tr data-end="4416" data-start="4367"><td data-col-size="sm" data-end="4377" data-start="4367">Chemins</td><td data-col-size="sm" data-end="4394" data-start="4377">`/home/pi/...`</td><td data-col-size="sm" data-end="4416" data-start="4394">`/home/thymon/...`</td></tr><tr data-end="4488" data-start="4417"><td data-col-size="sm" data-end="4445" data-start="4417">Guillemets dans la config</td><td data-col-size="sm" data-end="4458" data-start="4445">`"Mirror"`</td><td data-col-size="sm" data-end="4488" data-start="4458">`Mirror` (sans guillemets)</td></tr><tr data-end="4576" data-start="4489"><td data-col-size="sm" data-end="4523" data-start="4489">Dates Python (`datetime.now()`)</td><td data-col-size="sm" data-end="4556" data-start="4523">Autorisées (ancien vdirsyncer)</td><td data-col-size="sm" data-end="4576" data-start="4556">❌ Non supportées</td></tr><tr data-end="4642" data-start="4577"><td data-col-size="sm" data-end="4592" data-start="4577">systemd unit</td><td data-col-size="sm" data-end="4614" data-start="4592">`/etc/systemd/user`</td><td data-col-size="sm" data-end="4642" data-start="4614">`~/.config/systemd/user`</td></tr><tr data-end="4700" data-start="4643"><td data-col-size="sm" data-end="4654" data-start="4643">Commande</td><td data-col-size="sm" data-end="4674" data-start="4654">`sudo vdirsyncer`</td><td data-col-size="sm" data-end="4700" data-start="4674">❌ Toujours sans `sudo`</td></tr><tr data-end="4767" data-start="4701"><td data-col-size="sm" data-end="4723" data-start="4701">Mot de passe iCloud</td><td data-col-size="sm" data-end="4734" data-start="4723">Standard</td><td data-col-size="sm" data-end="4767" data-start="4734">🔐 Mot de passe d’application</td></tr></tbody></table>

</div></div>