# CONSIGNE.md

## Objectif du projet

Créer un dépôt Git hébergé sur Gitea :

https://gitea.maison43.duckdns.org/gilles/postinstall-debian

Ce dépôt doit permettre l'exécution d'un script **post‑installation Debian 13** via une commande simple :

```bash
curl -fsSL https://gitea.maison43.duckdns.org/gilles/postinstall-debian/raw/branch/main/install.sh | bash
```

Le script doit permettre :

- d'installer automatiquement des outils
- de configurer le système
- de proposer des menus interactifs
- d'être évolutif et modulaire
- d'intégrer facilement de nouveaux outils
- d'offrir une interface console claire et agréable

Le projet doit être pensé comme un **framework de post‑installation Debian 13**.

---

# Principes généraux

## Modularité

Chaque outil doit être installé via un **module indépendant**.

Un module correspond à :

- un script d'installation
- un script de configuration
- des métadonnées
- des tests éventuels

Chaque module doit pouvoir être :

- installé indépendamment
- intégré dans un menu
- utilisé dans un profil
- testé isolément

---

# Structure du dépôt

Structure recommandée :

```text
postinstall-debian/

install.sh
README.md
CONSIGNE.md
tools.md
CHANGELOG.md

assets/
config/
core/
lib/
menus/
modules/
profiles/
hardware/
tests/
docs/
```

---

# Organisation détaillée

## install.sh

Script principal.

Fonctions :

- vérification environnement
- vérification Debian
- gestion sudo/root
- chargement librairies
- chargement thème console
- affichage menu principal

Doit fonctionner via **curl | bash**.

---

# Dossier core/

Scripts internes du framework.

Exemples :

- bootstrap.sh
- runtime.sh
- registry.sh
- dispatcher.sh

Rôle :

- gestion des modules
- gestion de l'environnement
- découverte des outils

---

# Dossier lib/

Fonctions réutilisables.

Exemples :

ui.sh
log.sh
package.sh
system.sh
network.sh
prompts.sh
validation.sh

---

# Dossier menus/

Gestion des menus interactifs.

Menus possibles :

Menu principal
Installation par catégorie
Installation par profil
Installation par matériel
Configuration système
Tests

---

# Dossier modules/

Chaque outil possède un dossier dédié.

Exemple :

```
modules/dev/git/

module.sh
config.sh
metadata.conf
tests.sh
```

Fonctions attendues :

module_git_metadata
module_git_check
module_git_install
module_git_configure
module_git_test

---

# Catégories d'outils

Les outils doivent être classés.

Exemples :

system
network
dev
gnome
desktop
multimedia
containers
virtualization
security
monitoring
backup
shell
productivity
communication
selfhosted
hardware

---

# Profils

Les profils installent plusieurs outils.

Exemples :

Desktop minimal
Développeur
Homelab
Laptop
VM de test

Un profil contient une **liste de modules**.

---

# Installation par matériel

Possibilité d'installer un ensemble d'outils selon le matériel.

Exemples :

Laptop ASUS
HP EliteDesk
VM Debian
Poste GNOME

---

# Interface utilisateur

Le script doit être user friendly.

Prévoir :

couleurs
messages clairs
étapes visibles
résumé final

Fonctions UI :

ui_header
ui_section
ui_info
ui_success
ui_warn
ui_error
ui_menu
ui_confirm
ui_pause

---

# Journalisation

Créer un système de logs.

Objectifs :

- log installation
- log erreurs
- log tests

---

# Sécurité curl | bash

Le script doit :

- vérifier Debian
- vérifier réseau
- vérifier droits

Éviter :

- suppression brutale
- modification silencieuse fichiers critiques

---

# Gestion des erreurs

Prévoir :

- arrêt propre
- messages clairs
- gestion codes retour

---

# Qualité Bash

Le code doit :

- être lisible
- être structuré
- utiliser des fonctions

Utiliser si possible :

shellcheck

---

# tools.md

Ce fichier liste les outils demandés.

Pour chaque outil :

nom
description
catégorie
questions
méthode installation
tests
statut

---

# Brainstorming avant ajout d'un outil

Questions obligatoires :

Quel est l'outil

Quel usage

Installation via apt ?

Dépendances

Configuration

Service systemd

Interface graphique

Compatibilité Debian 13

Tests possibles

Menu cible

Profil cible

---

# Tests

Types de tests possibles :

- présence binaire
- version
- service actif
- port ouvert

Tests VM Debian 13 recommandés.

---

# Intégration d'un outil

Cycle :

1 Brainstorming

2 Décision architecture

3 Implémentation module

4 Intégration menu

5 Tests

6 Documentation

---

# Gestion des thèmes et ressources visuelles

Le projet doit permettre d'intégrer des **ressources graphiques et thèmes**.

Exemples :

- thèmes GRUB
- thèmes GNOME
- thèmes GTK
- packs d'icônes
- curseurs
- wallpapers
- polices
- thèmes terminal

Ces ressources doivent être stockées dans **assets/**.

Structure possible :

```text
assets/

assets/grub/
assets/gnome/
assets/icons/
assets/cursors/
assets/fonts/
assets/wallpapers/
assets/terminal/
```

Chaque thème doit idéalement posséder :

metadata.conf

Exemple :

THEME_ID
THEME_NAME
THEME_TYPE
THEME_TARGET
THEME_DESCRIPTION
THEME_DEPENDENCIES

---

# Menus de personnalisation

Ajouter un menu :

Personnalisation

Sous menus :

Thèmes GRUB
Thèmes GNOME
Icônes
Curseurs
Wallpapers
Fonts
Terminal

---

# Bonnes pratiques pour GRUB

Toujours :

sauvegarder config
régénérer grub
avertir utilisateur

---

# GNOME

Distinguer :

GTK
Shell
Icônes
Curseurs

---

# Métadonnées modules

Chaque module peut définir :

TOOL_NAME
TOOL_ID
TOOL_CATEGORY
TOOL_DESCRIPTION
TOOL_DEPENDENCIES
TOOL_SUPPORTED_ON
TOOL_TEST_AVAILABLE

---

# Documentation

Créer documentation :

architecture.md
add_tool_workflow.md
menu_strategy.md
testing_strategy.md
security_notes.md

---

# README

Le README doit contenir :

objectif
installation
structure dépôt
ajout outils

---

# Priorités du projet

1 Clarté

2 Stabilité

3 Modularité

4 Testabilité

5 Évolutivité

6 UX terminal

---

# Conclusion

Ce dépôt doit devenir une **plateforme de post‑installation Debian 13 modulaire** permettant :

- installation d'outils
- configuration système
- personnalisation
- évolution continue

Le projet doit rester lisible, modulaire et maintenable sur le long terme.

