Téléverser les fichiers vers "/"
This commit is contained in:
@@ -0,0 +1,268 @@
|
|||||||
|
<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>
|
||||||
Reference in New Issue
Block a user