citadel/todo.md

4.0 KiB

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 :
    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 :
    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 :
    # 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 <service> 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