Files
nixos-workstations/README.md
T

269 lines
7.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<div align="center">
# ✨ NixOS First Login
### Assistant de première connexion pour postes NixOS / KDE Plasma
![NixOS](https://img.shields.io/badge/NixOS-26.05-5277C3?style=for-the-badge&logo=nixos&logoColor=white)
![KDE Plasma](https://img.shields.io/badge/KDE_Plasma-6-1D99F3?style=for-the-badge&logo=kde&logoColor=white)
![Qt](https://img.shields.io/badge/Qt-6-41CD52?style=for-the-badge&logo=qt&logoColor=white)
![QML](https://img.shields.io/badge/UI-QML%20%2F%20Qt_Quick-41CD52?style=for-the-badge)
![Status](https://img.shields.io/badge/UI-VALIDÉE-success?style=for-the-badge)
![License](https://img.shields.io/badge/Licence-PolyForm_Noncommercial-orange?style=for-the-badge)
**Une expérience de première connexion plein écran, claire et moderne, pensée pour industrialiser la préparation des postes NixOS.**
</div>
---
## 🚀 Objectif
**NixOS First Login** fournit un assistant graphique de première connexion inspiré des assistants d'installation d'un système d'exploitation.
L'utilisateur est accompagné pas à pas pour préparer son environnement :
> 👋 **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 :
```text
•••••••• 👁
MonSecret ◉
```
### 📊 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
```text
nixos-workstations/
├── configuration.nix
├── LICENSE
├── COMMERCIAL-LICENSE.md
├── first-login-ui/
│ ├── CMakeLists.txt
│ ├── org.raspot.nixosfirstlogin.desktop
│ └── src/
│ ├── CMakeLists.txt
│ ├── main.cpp
│ └── Main.qml
└── modules/
└── first-login-ui.nix
```
Le matériel propre à chaque poste **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` :
```nix
imports = [
/etc/nixos/hardware-configuration.nix
./modules/software.nix
./modules/users.nix
./modules/security.nix
./modules/yubikey-first-login.nix
./modules/first-login-ui.nix
];
```
---
## 🧪 Validation d'une nouvelle version
Pour conserver une procédure de déploiement prudente :
### 1️⃣ Construire sans activer
```bash
sudo nixos-rebuild build \
-I nixos-config=/home/localadm/nixos-workstations/configuration.nix
```
### 2️⃣ Vérifier l'activation prévue
```bash
sudo nixos-rebuild dry-activate \
-I nixos-config=/home/localadm/nixos-workstations/configuration.nix
```
### 3️⃣ Activer temporairement
```bash
sudo nixos-rebuild test \
-I nixos-config=/home/localadm/nixos-workstations/configuration.nix
```
### 4️⃣ Lancer l'interface
```bash
nixos-first-login-ui
```
### 5️⃣ Rendre la configuration persistante après validation
```bash
sudo nixos-rebuild switch \
-I nixos-config=/home/localadm/nixos-workstations/configuration.nix
```
---
## 🛡️ Sécurité
<div align="center">
**🔐 Les mécanismes sensibles doivent rester séparés de l'interface graphique.**
</div>
L'architecture cible conserve une séparation claire :
```text
┌───────────────────────────────┐
│ Qt Quick / QML │
│ Interface utilisateur │
└───────────────┬───────────────┘
┌───────────────────────────────┐
│ 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.
> ⚠️ **É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é.
---
## 🧰 Technologies
<p align="center">
![Nix](https://img.shields.io/badge/Nix-Déclaratif-5277C3?style=flat-square&logo=nixos&logoColor=white)
![Qt Quick](https://img.shields.io/badge/Qt_Quick-UI-41CD52?style=flat-square&logo=qt&logoColor=white)
![QML](https://img.shields.io/badge/QML-Frontend-41CD52?style=flat-square)
![KDE](https://img.shields.io/badge/KDE_Plasma-Desktop-1D99F3?style=flat-square&logo=kde&logoColor=white)
![FIDO2](https://img.shields.io/badge/FIDO2-YubiKey-black?style=flat-square)
</p>
---
## 📜 Licence
![Licence](https://img.shields.io/badge/SPDX-PolyForm--Noncommercial--1.0.0-orange?style=flat-square)
Le projet est distribué sous **PolyForm Noncommercial License 1.0.0**.
### ✅ Autorisé
- utilisation non commerciale ;
- étude du code ;
- modification ;
- partage dans les limites prévues par la licence.
### 🚫 Exploitation commerciale
Toute exploitation commerciale nécessite **une autorisation ou une licence commerciale distincte accordée par le titulaire des droits**.
Voir :
- [`LICENSE`](./LICENSE)
- [`COMMERCIAL-LICENSE.md`](./COMMERCIAL-LICENSE.md)
> ️ PolyForm Noncommercial est une licence **source-available non commerciale** et non une licence open source au sens OSI.
---
## 🎯 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
```
<div align="center">
### 💙 NixOS • KDE Plasma • FIDO2
**Des postes reproductibles sans sacrifier l'expérience utilisateur.**
</div>