Files
nixos-infra/.ai-rules.md
T

67 lines
4.6 KiB
Markdown

# Règles du Projet : nixos-infra
## Contexte Technique
**Stack :** NixOS 25.11, agenix, bash, SSH, Proxmox VE, LXC, KVM, IPv4, IPv6
**Environnement :** VSCodium (VSCode) sur Debian 13 + extension Continue poru l'IA, bash, SSH, Gitea, IPv4, IPv6
**Package Manager :** Nix
**Style :** Privilégier la modularité, dans la philosophie Unix. Utilisation de bash pour les tâches d'exploitation, avec un fallback sur python si bash devient impossible à maintenir.
**Tests :** Test Driven Development dans la mesure du possible.
**Matériels :** ordinateurs de bureau X86-64, un vieux Dell T62°, un vieux Dell T330, un Rpi 3B
## Conventions de Code
**Nommage :** camelCase pour les variables, PascalCase pour les composants et types. Majuscules et "_" pour les variables d'environnement shell.
**Types :** N/A
**Imports :** N/A
**Formatage :**
- Utiliser exclusivement `alejandra` ou `nixfmt-rfc-style`. Ne jamais laisser de trailing whitespaces.
- Préférer `inherit` pour les variables de même nom.
- Utiliser `with lib;` ou `with builtins;` avec parcimonie à l'intérieur des fonctions, mais préférer les chemins explicites pour la clarté.
- Toujours déclarer les arguments en début de fichier : `{ config, pkgs, lib, ... }:`.
**Modularité :** Chaque service doit être encapsulé dans un module avec une option `enable` (ex: `services.mon-service.enable = true;`).
## Architecture & Dossiers
**Architecture :**
Le but est de permettre le déploiement et la maintenance de services d'infrastructure réseau et applicatifs
(DNS, serveur de dépôts git, gestionnaire de mots de passe, file server, backup server, reverse proxy,
workstations, etc.). Le dépôt git contient l'ensemble des fichiers permettant de configurer et installer
n'importe quelle machine du parc (images d'OS, fichiers de configuration et scripts de déploiemente et maintenance).
En cible, reconstruire l'ensemble du parc doit être possible depuis une workstation Linux (pas forcément NixOS) sur lequel ce dépôt aura été cloné.
**Dossiers :**
- `/nixos-infra/hosts/servers` : Configurations spécifiques de chaque serveur (.nix, lxc.config).
- `/nixos-infra/hosts/workstations` : Configurations spécifiques de chaque station de travail (.nix, lxc.config).
- `/nixos-infra/modules/machine-types` : Modules Nix standardisant les différents types d'hotes (hyperviseur, VM, LXC, stations, etc.).
- `/nixos-infra/modules/services` : Modules Nix standardisant les différents services d'infrastructure réseau (DNS, etc.).
- `/nixos-infra/modules/user-profiles` : Modules Nix standardisant les différents profils d'utilisateurs (admin, dev, burautique, etc.).
- `/nixos-infra/overlays` : Overlays Nix (dernier recours).
- `/nixos-infra/pkgs` : Paquets personnalisés non présents dans Nixpkgs.
- `/nixos-infra/lib` : Fonctions utilitaires Nix.
- `/nixos-infra/scripts` : Scripts d'exploitation et de helpers.
Le point d'entrée pour chaque machine est hosts/<servers|workstations>/\<hostname>/configuration.nix.
## Gestion des Secrets
**Interdiction Formelle :** Ne JAMAIS écrire de mot de passe, clé d'API ou token en clair dans les fichiers `.nix`.
**Outil :** Utiliser **agenix**.
## Instructions NixOS
1. Ne pas utiliser les flakes Nix.
2. Toujours vérifier si une option (https://search.nixos.org/options), un paquetage (https://search.nixos.org/packages) ou une fonction (https://noogle.dev/) avant de l'inventer.
3. Ne pas supposer que la workstation utilisée est elle-même sous NixOS. L'environnement de développement est sous Debian Trixie jusqu'à ce que le projet soit complètement auto-porteur. Néanmoins, le paquetage "nix-bin" est installé pour disposer des binaires de Nix.
4. Utiliser nix-isntantiate pour vérifier la syntaxe et l'évaluation des fichiers Nix:
```
nix-instantiate --parse chemin/vers/fichier.nix # Vérifie la syntaxe
nix-instantiate --eval -E 'import ./hosts/machine/configuration.nix {}' # Vérifie l'évaluation
```
## Instructions Spécifiques (Guidelines)
1. Ne **jamais** exposer de mot de passe, de clef API ou tout secret en clair. Utiliser les mécanismes de gestion/protection de secrets appropriés au contexte.
2. Privilégier les clefs SSH pour l'authentification aux systèmes.
3. Signaler les éventuelles incohérences de pratiques au sein du projet ou avec les bonnes pratiques.
## Préférences de Réponses
- Langue : Français. Le code reste en Anglais.
- Style : Technique, concis, orienté "Infrastructure as Code".
- Toujours expliquer brièvement *pourquoi* une option NixOS spécifique a été choisie (référence aux options officielles).
- Me signaler si et quand il aura été difficile ou impossible de respecter les instructions fournies dans .ai-rules.md .