68 lines
4.7 KiB
Markdown
68 lines
4.7 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. Limiter les longueurs des lignes à 78 caractères imprimables.
|
|
4. 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, les commentaires et la documentation restent 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 .
|