# Annexe : Noyau - config.py

## Rôle et utilité

Dans un système d'exploitation classique, les préférences utilisateurs sont souvent éparpillées dans de nombreux fichiers obscurs ou dans une "base de registre" complexe. Dans GrimOS, tout est centralisé. Le script `core/config.py` est l'unique responsable de la lecture et de la sauvegarde des paramètres globaux de l'ordinateur.

## Implémentation technique

- Le fichier JSON : Ce script agit comme une passerelle d'accès vers le fichier `config/settings.json`. Ce format a été choisi car il est naturellement supporté par Python, facile à lire pour un humain, et rapide à traiter.
- Valeurs par défaut : Si le fichier `settings.json` est supprimé ou corrompu, `config.py` est suffisamment robuste pour le détecter. Il possède un dictionnaire statique en mémoire avec des valeurs par défaut (thème de base, fond d'écran uni) qu'il utilisera pour assurer le démarrage de la machine, puis recréera le fichier manquant.
- Fonctions d'accès : Il expose des fonctions simples comme `get_setting(key)` et `set_setting(key, value)`. Chaque appel à `set_setting` écrit de façon synchrone sur le disque pour garantir que les préférences ne sont pas perdues en cas de coupure de courant.

## Pistes de modification

- Chiffrement des données sensibles : Actuellement, `settings.json` stocke le mot de passe administrateur en clair pour la fonction d'Autologin. Une modification majeure de sécurité consisterait à implémenter un module de chiffrement (comme `cryptography.fernet`) dans `config.py` pour chiffrer ce mot de passe.
- Profils utilisateurs : Si GrimOS devenait multi-utilisateurs, il faudrait modifier ce fichier pour qu'il charge non pas `config/settings.json`, mais `~/.config/grimos_settings.json` spécifique à chaque compte Linux.

## Code Source

    import json
    import os

    def load_settings():
        path = os.path.join(os.path.dirname(__file__), '..', 'config', 'settings.json')
        try:
            with open(path, 'r', encoding='utf-8') as f:
                return json.load(f)
        except Exception as e:
            print(f"Erreur chargement settings: {e}")
            return {
                "resolution": "1024x768",
                "background": "gray",
                "fullscreen": False
            }

    def load_applications():
        path = os.path.join(os.path.dirname(__file__), '..', 'config', 'applications.json')
        try:
            with open(path, 'r', encoding='utf-8') as f:
                return json.load(f)
        except Exception as e:
            print(f"Erreur chargement applications: {e}")
            return []