citadel/todo.md

117 lines
4.0 KiB
Markdown

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