From 37fe6d1f1f5fd423cef51217e2a96972192011e3 Mon Sep 17 00:00:00 2001
From: Olivier <1+olivier@noreply.raspot.in>
Date: Tue, 18 Aug 2026 16:26:57 +0200
Subject: [PATCH] =?UTF-8?q?T=C3=A9l=C3=A9verser=20les=20fichiers=20vers=20?=
=?UTF-8?q?"/"?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 382 ++++++++++++++++++++++++++++++++++--------------------
1 file changed, 243 insertions(+), 139 deletions(-)
diff --git a/README.md b/README.md
index d545ccf..91a14d8 100644
--- a/README.md
+++ b/README.md
@@ -1,97 +1,84 @@
-# ✨ NixOS First Login
+# 🛡️ NixOS Workstations
-### Assistant de première connexion pour postes NixOS / KDE Plasma
+### Déploiement industrialisé d'environnements de bureau NixOS sécurisés


-
-
-
-
+
+
+
+
-**Une expérience de première connexion plein écran, claire et moderne, pensée pour industrialiser la préparation des postes NixOS.**
+**Une base NixOS reproductible pour construire, sécuriser et maintenir un parc de postes de travail homogènes.**
---
-## 🚀 Objectif
+## 🎯 Objectif du projet
-**NixOS First Login** fournit un assistant graphique de première connexion inspiré des assistants d'installation d'un système d'exploitation.
+**NixOS Workstations** a pour objectif d'industrialiser le déploiement de postes de travail NixOS en séparant clairement :
-L'utilisateur est accompagné pas à pas pour préparer son environnement :
+- 🧩 la **configuration commune du parc** ;
+- 💻 la **détection matérielle propre à chaque poste** ;
+- 📦 les **logiciels et paramètres du bureau** ;
+- 👤 les **comptes utilisateurs** ;
+- 🔐 les **mécanismes d'authentification** ;
+- 🔑 l'utilisation de **clés FIDO2 / YubiKey** ;
+- ✨ l'expérience de **finalisation du poste à la première connexion**.
-> 👋 **Bienvenue** → 🔐 **Mot de passe** → 🔑 **YubiKey** → ✅ **Poste prêt**
-
-L'interface est développée en **Qt Quick / QML**, s'intègre naturellement à **KDE Plasma 6** et fonctionne en plein écran.
-
----
-
-## 🧭 Parcours utilisateur
-
-| Étape | Fonction |
-|---|---|
-| 👋 **Bienvenue** | Présentation de l'assistant et du processus de configuration |
-| 🔐 **Mot de passe** | Saisie du mot de passe temporaire, choix du nouveau mot de passe et confirmation |
-| 🛡️ **Robustesse** | Indicateur visuel de qualité du mot de passe, sans blocage d'un mot de passe faible |
-| 👁️ **Affichage des secrets** | Bouton œil pour afficher ou masquer mots de passe et PIN |
-| 🔑 **YubiKey** | Saisie du PIN temporaire, choix du nouveau PIN et confirmation |
-| ✅ **Poste prêt** | Synthèse visuelle de la configuration terminée |
-
----
-
-## ✨ UX / UI
-
-### 🖥️ Interface plein écran
-
-L'assistant occupe l'écran afin de créer un parcours simple et sans distraction, proche d'un assistant d'installation classique.
-
-### 🧩 Navigation guidée
-
-Les étapes sont présentées dans des colonnes de largeur fixe afin de conserver un alignement propre, quel que soit le libellé.
-
-### 👁️ Affichage des mots de passe et PIN
-
-Chaque champ secret possède un bouton permettant de basculer entre :
+L'idée est qu'un poste puisse être réinstallé puis reconstruit à partir du dépôt Git avec un minimum d'opérations manuelles.
```text
-•••••••• 👁
- ↓
-MonSecret ◉
+ ┌─────────────────────────────┐
+ │ Dépôt Git │
+ │ nixos-workstations │
+ └──────────────┬──────────────┘
+ │
+ ┌───────────────┼────────────────┐
+ │ │ │
+ ▼ ▼ ▼
+ 📦 Logiciels 🔐 Sécurité 🖥️ Bureau KDE
+ │ │ │
+ └───────────────┼────────────────┘
+ │
+ ▼
+ 💻 Poste NixOS
+ │
+ 🔑 FIDO2 / YubiKey
+ │
+ ▼
+ ✅ Poste opérationnel
```
-### 📊 Robustesse du mot de passe
-
-Le mot de passe reçoit une indication visuelle :
-
-- 🔴 **Faible**
-- 🟠 **Moyen**
-- 🔵 **Bon**
-- 🟢 **Très bon**
-
-> 💡 **Cette indication est informative uniquement.** Un mot de passe faible n'est volontairement pas bloqué.
-
-### 🔒 Parcours verrouillé
-
-Tant que les informations nécessaires ne sont pas renseignées :
-
-- ⛔ impossible de passer à l'étape suivante ;
-- ⛔ impossible de quitter depuis l'interface ;
-- ⛔ `Ctrl+Q` n'est pas proposé ;
-- ⛔ une tentative de fermeture de la fenêtre avant la fin est interceptée ;
-- ✅ les confirmations doivent correspondre avant de continuer.
-
---
-## 🏗️ Architecture
+## ✨ Principes
+
+| | Principe | Objectif |
+|---|---|---|
+| 🧬 | **Configuration déclarative** | Décrire l'état attendu du poste dans Git |
+| ♻️ | **Reproductibilité** | Pouvoir reconstruire un poste de manière cohérente |
+| 🧱 | **Modularité** | Séparer logiciels, utilisateurs, sécurité et UX |
+| 🔐 | **Sécurité native** | S'appuyer sur les mécanismes NixOS plutôt que les contourner |
+| 🔑 | **FIDO2 / YubiKey** | Fournir une authentification moderne aux utilisateurs |
+| 🖥️ | **Expérience utilisateur** | Fournir un bureau KDE Plasma cohérent et simple |
+| 🧪 | **Validation progressive** | `build` → `dry-activate` → `test` → `switch` |
+| 🧰 | **Industrialisation** | Limiter les opérations spécifiques à chaque poste |
+
+---
+
+## 🏗️ Architecture du dépôt
```text
nixos-workstations/
├── configuration.nix
├── LICENSE
├── COMMERCIAL-LICENSE.md
+├── u2f-mappings
+│
├── first-login-ui/
│ ├── CMakeLists.txt
│ ├── org.raspot.nixosfirstlogin.desktop
@@ -99,23 +86,24 @@ nixos-workstations/
│ ├── CMakeLists.txt
│ ├── main.cpp
│ └── Main.qml
+│
└── modules/
+ ├── software.nix
+ ├── users.nix
+ ├── security.nix
+ ├── yubikey-first-login.nix
└── first-login-ui.nix
```
-Le matériel propre à chaque poste **n'est pas stocké dans le dépôt commun** :
+### 💻 Matériel propre à chaque machine
+
+Le fichier matériel généré par NixOS **n'est pas stocké dans le dépôt commun** :
```text
/etc/nixos/hardware-configuration.nix
```
-reste généré localement par NixOS.
-
----
-
-## ⚙️ Intégration NixOS
-
-Le module est importé depuis `configuration.nix` :
+La configuration du parc l'importe directement :
```nix
imports = [
@@ -128,45 +116,87 @@ imports = [
];
```
+Ainsi, les UUID, partitions et périphériques propres à une installation restent locaux tandis que les règles communes restent centralisées dans Git.
+
---
-## 🧪 Validation d'une nouvelle version
+## 🧩 Modules principaux
-Pour conserver une procédure de déploiement prudente :
+### 📦 `software.nix`
-### 1️⃣ Construire sans activer
+Décrit l'environnement logiciel commun :
-```bash
-sudo nixos-rebuild build \
- -I nixos-config=/home/localadm/nixos-workstations/configuration.nix
+- 🌐 Chromium ;
+- 🦊 Firefox ESR ;
+- 📄 OnlyOffice ;
+- 💬 Teams ;
+- ✉️ Outlook Web ;
+- 🔧 Git et outils nécessaires au poste.
+
+### 👤 `users.nix`
+
+Décrit les comptes locaux attendus et leurs rôles :
+
+- 🛠️ compte d'administration locale ;
+- 👩💻 comptes utilisateurs standards ;
+- 👥 appartenance aux groupes nécessaires ;
+- 🔐 mécanismes d'initialisation des secrets lorsque nécessaire.
+
+### 🛡️ `security.nix`
+
+Centralise les paramètres d'authentification et les mappings FIDO2/U2F.
+
+```text
+Utilisateur
+ │
+ ├──── 🔐 mot de passe
+ │
+ └──── 🔑 YubiKey / FIDO2
```
-### 2️⃣ Vérifier l'activation prévue
+### 🔑 `yubikey-first-login.nix`
-```bash
-sudo nixos-rebuild dry-activate \
- -I nixos-config=/home/localadm/nixos-workstations/configuration.nix
-```
+Gère le workflow de personnalisation initiale des secrets liés au poste et à la YubiKey.
-### 3️⃣ Activer temporairement
+### ✨ `first-login-ui.nix`
-```bash
-sudo nixos-rebuild test \
- -I nixos-config=/home/localadm/nixos-workstations/configuration.nix
-```
+Installe l'interface graphique plein écran utilisée lors de la finalisation du poste.
-### 4️⃣ Lancer l'interface
+L'assistant graphique est **une composante du projet**, pas sa finalité.
-```bash
-nixos-first-login-ui
-```
+---
-### 5️⃣ Rendre la configuration persistante après validation
+## ✨ Finalisation du poste utilisateur
-```bash
-sudo nixos-rebuild switch \
- -I nixos-config=/home/localadm/nixos-workstations/configuration.nix
-```
+Lors de la première utilisation, l'utilisateur dispose d'un assistant graphique intégré au bureau KDE.
+
+
+
+### 👋 Bienvenue → 🔐 Mot de passe → 🔑 YubiKey → ✅ Poste prêt
+
+
+
+L'objectif est de rendre les opérations de personnalisation simples et compréhensibles, sans exposer l'utilisateur aux outils système.
+
+### 🔐 Mot de passe
+
+- 🔒 saisie masquée par défaut ;
+- 👁️ bouton pour afficher ou masquer les secrets ;
+- 📊 indicateur de robustesse ;
+- 💡 recommandations informatives ;
+- ✅ confirmation obligatoire ;
+- 🟢 un mot de passe faible n'est pas bloqué volontairement.
+
+### 🔑 YubiKey
+
+- 🔢 saisie du PIN temporaire ;
+- 👁️ affichage/masquage du PIN ;
+- 🔁 choix et confirmation du nouveau PIN ;
+- ✅ validation avant la fin du parcours.
+
+### ✅ Poste prêt
+
+L'écran final récapitule visuellement les opérations réalisées avant de rendre le poste à l'utilisateur.
---
@@ -174,30 +204,120 @@ sudo nixos-rebuild switch \
-**🔐 Les mécanismes sensibles doivent rester séparés de l'interface graphique.**
+### 🔐 L'interface graphique ne doit pas réimplémenter les mécanismes de sécurité du système.
-L'architecture cible conserve une séparation claire :
+L'architecture sépare l'interface des opérations sensibles :
```text
-┌───────────────────────────────┐
-│ Qt Quick / QML │
-│ Interface utilisateur │
-└───────────────┬───────────────┘
+┌────────────────────────────────┐
+│ Qt Quick / QML │
+│ Présentation et validation │
+└───────────────┬────────────────┘
│
▼
-┌───────────────────────────────┐
-│ Backend contrôlé │
-├───────────────────────────────┤
-│ Mot de passe → passwd NixOS │
-│ PIN YubiKey → ykman │
-└───────────────────────────────┘
+┌────────────────────────────────┐
+│ Backend contrôlé │
+├────────────────────────────────┤
+│ 🔐 Mot de passe → passwd NixOS │
+│ 🔑 PIN YubiKey → ykman │
+└────────────────────────────────┘
```
-L'interface ne doit jamais modifier directement `/etc/shadow` ni réimplémenter PAM.
+Principes retenus :
-> ⚠️ **État de cette V4 :** l'interface graphique est validée, mais ce nouveau frontend n'exécute encore directement ni `passwd` ni `ykman`. Le module historique `yubikey-first-login.nix` reste distinct tant que le backend de la nouvelle UI n'a pas été intégré et testé.
+- 🚫 pas de modification directe de `/etc/shadow` ;
+- 🚫 pas de réimplémentation artisanale de PAM ;
+- ✅ utilisation des mécanismes NixOS prévus pour les mots de passe ;
+- ✅ utilisation des outils FIDO2/YubiKey dédiés ;
+- ✅ séparation entre compte administrateur et utilisateur standard ;
+- ✅ validation des changements avant activation persistante.
+
+---
+
+## 🧪 Cycle de validation
+
+Une modification du dépôt n'est pas directement appliquée avec `switch`.
+
+### 1️⃣ Construction
+
+```bash
+sudo nixos-rebuild build \
+ -I nixos-config=/home/localadm/nixos-workstations/configuration.nix
+```
+
+> 🧱 Construit la nouvelle configuration sans l'activer.
+
+### 2️⃣ Prévisualisation de l'activation
+
+```bash
+sudo nixos-rebuild dry-activate \
+ -I nixos-config=/home/localadm/nixos-workstations/configuration.nix
+```
+
+> 🔎 Permet d'inspecter les changements d'activation prévus.
+
+### 3️⃣ Test temporaire
+
+```bash
+sudo nixos-rebuild test \
+ -I nixos-config=/home/localadm/nixos-workstations/configuration.nix
+```
+
+> 🧪 Active la configuration pour validation sans en faire la génération de démarrage par défaut.
+
+### 4️⃣ Validation définitive
+
+```bash
+sudo nixos-rebuild switch \
+ -I nixos-config=/home/localadm/nixos-workstations/configuration.nix
+```
+
+> ✅ Rend la configuration active et persistante pour les prochains démarrages.
+
+---
+
+## 🚀 Vision de déploiement
+
+L'objectif est de réduire progressivement la préparation d'un poste à une chaîne standardisée :
+
+```text
+💿 Installation NixOS
+ │
+ ▼
+🧬 Génération du matériel local
+ │
+ ▼
+📥 Récupération du dépôt Git
+ │
+ ▼
+🧱 Construction de la configuration
+ │
+ ▼
+🛡️ Application du socle de sécurité
+ │
+ ▼
+👤 Affectation de l'utilisateur
+ │
+ ▼
+🔑 Préparation FIDO2 / YubiKey
+ │
+ ▼
+✨ Finalisation graphique
+ │
+ ▼
+✅ Poste prêt
+```
+
+À terme, cette chaîne doit pouvoir être complétée par :
+
+- 🧰 installation automatisée ;
+- 🗂️ inventaire des machines ;
+- 🧩 profils matériels ;
+- 👥 affectation déclarative utilisateurs/postes ;
+- 🔄 mises à jour centralisées par Git ;
+- 📋 intégration avec les outils de gestion de parc.
---
@@ -205,11 +325,12 @@ L'interface ne doit jamais modifier directement `/etc/shadow` ni réimplémenter
-
-
-
+
+

-
+
+
+
@@ -217,7 +338,8 @@ L'interface ne doit jamais modifier directement `/etc/shadow` ni réimplémenter
## 📜 Licence
-
+
+
Le projet est distribué sous **PolyForm Noncommercial License 1.0.0**.
@@ -241,28 +363,10 @@ Voir :
---
-## 🎯 Vision
-
-L'objectif à terme est de pouvoir préparer un poste de manière industrialisée :
-
-```text
-💻 Installation NixOS
- ↓
-📦 Déploiement de la configuration commune
- ↓
-👤 Première connexion utilisateur
- ↓
-🔐 Personnalisation du mot de passe
- ↓
-🔑 Personnalisation de la YubiKey
- ↓
-✅ Poste opérationnel
-```
-
-### 💙 NixOS • KDE Plasma • FIDO2
+### 🛡️ NixOS Workstations
-**Des postes reproductibles sans sacrifier l'expérience utilisateur.**
+**Déployer des postes homogènes, reproductibles et sécurisés sans transformer chaque machine en projet individuel.**