# Plan de Migration vers $HOME/.config/citadel ## Objectif Migrer la configuration du projet vers `$HOME/.config/citadel` pour respecter les standards de configuration système et séparer clairement le code de la configuration en production. ## Architecture Cible ### Structure de configuration ``` $HOME/.config/citadel/ ├── backup.env # Configuration principale (était à la racine) ├── restic.conf # Configuration Restic générée (était dans config/) └── services/ # Configurations spécifiques par service (futures extensions) ``` ### Fichiers sample conservés dans le projet ``` backup.env.sample # Guide d'installation (reste à la racine) config/restic.conf # Devient un exemple/template ``` ## Plan d'action détaillé ### Phase 1 : Modification du système de sourcing #### 1.1 Modifier `manage` - **Fichier** : `manage` (lignes 12-18) - **Action** : Remplacer le sourcing conditionnel par un chemin fixe - **Nouveau code** : ```bash CONFIG_DIR="$HOME/.config/citadel" CONFIG_FILE="$CONFIG_DIR/backup.env" if [ -f "$CONFIG_FILE" ]; then source "$CONFIG_FILE" else echo "ERROR: Configuration not found at $CONFIG_FILE" echo "Please run './install setup' to initialize configuration" exit 1 fi ``` #### 1.2 Modifier `install` - **Fichier** : `install` (lignes 12-18) - **Action** : Même modification que `manage` + création du répertoire config - **Ajout** : Fonction de création/migration de la configuration - **Nouveau comportement** : - Créer `$HOME/.config/citadel/` si inexistant - Copier `backup.env.sample` vers `$HOME/.config/citadel/backup.env` si absent - Générer `restic.conf` dans le nouveau répertoire #### 1.3 Modifier `service-script-template.sh` - **Fichier** : `backup/service-script-template.sh` (lignes 8-26) - **Action** : Supprimer la détection automatique de PROJECT_ROOT - **Nouveau code** : ```bash CONFIG_DIR="$HOME/.config/citadel" CONFIG_FILE="$CONFIG_DIR/backup.env" if [ -f "$CONFIG_FILE" ]; then source "$CONFIG_FILE" else echo "ERROR: Configuration not found at $CONFIG_FILE" >&2 exit 1 fi ``` ### Phase 2 : Adaptation des variables de configuration #### 2.1 Modifier `backup.env.sample` - **Action** : Mettre à jour les chemins par défaut - **Variables à modifier** : ```bash # Nouveau chemin de configuration RESTIC_CONFIG_FILE="${RESTIC_CONFIG_FILE:-$HOME/.config/citadel/restic.conf}" # PROJECT_ROOT devient optionnel (pour les templates systemd seulement) PROJECT_ROOT="${PROJECT_ROOT:-/home/nicolas/dev/citadel}" ``` #### 2.2 Modifier la génération de `restic.conf` - **Fichier** : `install` (fonction `generate_config`) - **Action** : Générer le fichier dans `$HOME/.config/citadel/restic.conf` - **Chemin cible** : `$CONFIG_DIR/restic.conf` ### Phase 3 : Tests et validation #### 3.1 Tests de non-régression - `./manage list` fonctionne - `./manage install ` fonctionne - Scripts de backup sourcent correctement la configuration - Installation initiale crée la structure correcte ### Phase 4 : Documentation #### 4.1 Mettre à jour README.md - Documenter le nouveau chemin de configuration - Ajouter la procédure de setup initial #### 4.2 Messages d'erreur informatifs - Guider l'utilisateur vers la bonne commande d'installation - Indiquer clairement les chemins de configuration ## Avantages de cette migration 1. **Standard système** : Respect de la convention `$HOME/.config/` 2. **Séparation claire** : Code et configuration indépendants 3. **Sécurité** : Configuration hors du répertoire de développement 4. **Simplicité** : Plus de détection automatique hasardeuse 5. **Maintenance** : Configuration centralisée et prévisible ## Risques identifiés et mitigations - **Risque** : Scripts cassés après migration - **Mitigation** : Tests de non-régression complets - **Risque** : Confusion utilisateur - **Mitigation** : Messages d'erreur explicites et documentation claire