269 lines
7.7 KiB
Markdown
269 lines
7.7 KiB
Markdown
<div align="center">
|
||
|
||
# ✨ NixOS First Login
|
||
|
||
### Assistant de première connexion pour postes NixOS / KDE Plasma
|
||
|
||

|
||

|
||

|
||

|
||

|
||

|
||
|
||
**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">
|
||
|
||

|
||

|
||

|
||

|
||

|
||
|
||
</p>
|
||
|
||
---
|
||
|
||
## 📜 Licence
|
||
|
||

|
||
|
||
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>
|