2026-03-25 19:11:17 +01:00
2026-03-25 19:01:19 +01:00
2026-03-25 19:11:17 +01:00
2026-03-25 19:01:19 +01:00
2026-03-25 19:01:19 +01:00
2026-03-10 18:51:49 +01:00
2026-03-10 18:51:49 +01:00
2026-03-10 18:51:49 +01:00
2026-03-25 19:01:19 +01:00
2026-03-25 19:01:19 +01:00
2026-03-25 19:01:19 +01:00
2026-03-10 22:16:46 +01:00

NixOS Configuration

Configuration NixOS modulaire basée sur Flakes pour laptop.

📁 Structure

nixos-config/
├── flake.nix                    # Point d'entrée principal avec inputs et configurations
├── configuration.nix            # Configuration racine importée par le flake
├── hosts/
│   └── laptop/
│       └── configuration.nix    # Configuration matérielle spécifique au laptop
│   └── vmgaming/
│       └── configuration.nix    # Configuration matérielle VM Proxmox (VMGaming)
└── modules/
    ├── laptop/                  # Modules spécifiques au laptop
    │   ├── default.nix         # Secrets management (sops-nix) et config de base
    │   ├── users.nix           # Définition utilisateur et packages
    │   ├── gaming.nix          # Gaming (Steam, xpadneo) - avec options
    │   ├── virtualization.nix  # Docker & VirtualBox - avec options
    │   ├── printing.nix        # Imprimantes - avec options
    │   ├── power.nix           # Power management - avec options
    │   ├── bluetooth.nix       # Bluetooth - avec options
    │   └── zwift.nix           # Zwift cycling simulator - avec options
    └── nixos/                   # Modules système génériques
        ├── base.nix            # Configuration système de base (Nix, packages, fonts, locale)
      ├── yubikey.nix         # Authentification YubiKey globale (login/sudo)
        ├── desktop-i3.nix      # Window manager i3
        ├── net.nix             # Réseau (DNS chiffré, WiFi settings)
        ├── wireless-networks.nix # Configuration des réseaux WiFi (SSID, auth)
        └── parsec.nix          # Parsec Cloud client

⚙️ Configuration Centralisée

Tous les paramètres personnalisables se trouvent dans config.nix :

{
  username = "alice";                        # Votre username
  userEmail = "amaury.joly";                # Email pour réseaux WPA-EAP
  configFlakePath = /etc/nixos;            # Chemin vers la config flake
  timezone = "Europe/Paris";               # Timezone
  locale = "fr_FR.UTF-8";                  # Locale
  hostname = "nixos";                      # Hostname du système
}

À adapter lors de la première installation :

  1. Ouvrir config.nix
  2. Remplacer les valeurs par vos préférences (username, email, timezone, etc.)
  3. Ces valeurs sont ensuite utilisées automatiquement dans tous les modules

🎛️ Système d'Options Modulaires

La configuration utilise le système d'options NixOS pour activer/désactiver des fonctionnalités. Toutes les options sont définies dans configuration.nix :

Gaming

custom.gaming.enable = true;           # Active Steam et support gaming
custom.gaming.enableXpadneo = true;    # Driver pour manettes Xbox

Virtualisation

custom.virtualization.docker.enable = true;       # Active Docker
custom.virtualization.docker.dnsServers = [ "172.17.0.1" ];  # DNS pour containers
custom.virtualization.virtualbox.enable = true;   # Active VirtualBox

Impression

custom.printing.enable = true;
custom.printing.printers = [          # Liste des imprimantes
  {
    name = "Mon_Imprimante";
    location = "Bureau";
    deviceUri = "http://192.168.1.100";
    model = "drv:///sample.drv/generic.ppd";
  }
];
custom.printing.defaultPrinter = "Mon_Imprimante";

Power Management

custom.power.enable = true;
custom.power.cpuGovernor = "powersave";  # ou "performance", "ondemand"

Bluetooth

custom.bluetooth.enable = true;
custom.bluetooth.powerOnBoot = true;     # Activer Bluetooth au démarrage

Zwift

custom.zwift.enable = true;              # Zwift cycling simulator

💡 Avantages :

  • Activation conditionnelle : Désactiver une fonctionnalité = enable = false;
  • Documentation intégrée : nixos-option custom.gaming.enable affiche la doc
  • Pas de code mort : Les modules désactivés ne sont pas évalués
  • Réutilisable : Facile de créer une config pour une autre machine

🚀 Déploiement

Build et test (sans activer)

cd ~/src/nixos-config
nixos-rebuild build --flake .#laptop

Build et test de la VM gaming (Proxmox)

cd ~/src/nixos-config
nixos-rebuild build --flake .#VMGaming

Activer la configuration

sudo nixos-rebuild switch --flake .#laptop

Activer la configuration VM gaming

sudo nixos-rebuild switch --flake .#VMGaming

GPU passthrough pour VMGaming

  • La configuration VMGaming est optimisée pour une VM Proxmox avec GPU passthrough.
  • Le profil actuel active les drivers NVIDIA dans configuration-vmgaming.nix.
  • Si tu passes une carte AMD, remplace services.xserver.videoDrivers = [ "nvidia" ]; par services.xserver.videoDrivers = [ "amdgpu" ]; et retire le bloc hardware.nvidia.

Mettre à jour les inputs

nix flake update
sudo nixos-rebuild switch --flake .#laptop

Avec nh (helper recommandé)

nh os switch  # NH_OS_FLAKE est configuré automatiquement

🔐 Gestion des Secrets (sops-nix)

Cette configuration utilise sops-nix pour gérer les secrets de manière sécurisée.

Configuration initiale

  1. Générer une clé age (si pas déjà fait) :
mkdir -p ~/.config/sops/age
age-keygen -o ~/.config/sops/age/keys.txt
  1. Configurer sops pour la clé publique :
# Afficher votre clé publique
age-keygen -y ~/.config/sops/age/keys.txt

# Créer .sops.yaml à la racine si nécessaire
cat > .sops.yaml << EOF
keys:
  - &alice YOUR_PUBLIC_KEY_HERE
creation_rules:
  - path_regex: secrets/.*\.yaml$
    key_groups:
    - age:
      - *alice
EOF
  1. Créer et éditer les fichiers secrets :
mkdir -p ~/.config/secrets/

# Pour les credentials WiFi (legacy - optionnel)
sops ~/.config/secrets/wireless.yaml

# Pour la configuration complète des réseaux WiFi (RECOMMANDÉ - tout chiffré)
sops ~/.config/secrets/wifi-networks.yaml

# Pour Zwift
sops ~/.config/secrets/zwift.yaml

📡 Configuration WiFi Sécurisée (Tout Chiffré)

🔒 Nouveauté : La configuration WiFi est maintenant entièrement chiffrée avec sops, incluant :

  • Noms des réseaux (SSID)
  • Identités/usernames
  • Mots de passe
  • Structure complète de configuration

Avantages :

  • Aucune information sensible visible dans le code source
  • Pas d'exposition des lieux (noms de réseaux maison/travail)
  • Configuration complète dans un seul fichier chiffré

Créer la configuration WiFi chiffrée

  1. Copier l'exemple de configuration :
cp wifi-networks.yaml.example ~/.config/secrets/wifi-networks.yaml
  1. Éditer avec sops :
sops ~/.config/secrets/wifi-networks.yaml
  1. Format du fichier (syntaxe wpa_supplicant.conf) :
# Réseau personnel (WPA-PSK)
network={
    ssid="Mon_WiFi_Maison"
    psk="mon_mot_de_passe_securise"
    priority=100
}

# Réseau entreprise (WPA-EAP)
network={
    ssid="Work_Network"
    key_mgmt=WPA-EAP
    eap=TTLS
    identity="username@company.com"
    password="password_entreprise"
    phase2="auth=PAP"
    priority=10
}

# Eduroam (université)
network={
    ssid="eduroam"
    key_mgmt=WPA-EAP
    eap=PEAP
    identity="etudiant@universite.fr"
    password="mot_de_passe_univ"
}

# Réseau caché
network={
    ssid="Hidden_Network"
    psk="password"
    scan_ssid=1
    priority=50
}

Ajouter un nouveau réseau WiFi

Tout se fait dans le fichier chiffré !

# Éditer le fichier chiffré
sops ~/.config/secrets/wifi-networks.yaml

# Ajouter un nouveau bloc network={...}
# Sauvegarder et quitter

# Appliquer la configuration
sudo nixos-rebuild switch --flake .#laptop

Exemples de configuration selon le type de réseau :

WiFi personnel (WPA2) :

network={
    ssid="MonReseau"
    psk="MotDePasse123"
    priority=100
}

WiFi entreprise (802.1X) :

network={
    ssid="CorpWiFi"
    key_mgmt=WPA-EAP
    eap=TTLS
    identity="user@company.com"
    password="my_password"
    phase2="auth=PAP"
}

Hotspot mobile :

network={
    ssid="iPhone_Alice"
    psk="hotspot_pass"
    scan_ssid=1
}

Migration depuis l'ancienne configuration

Si vous aviez des réseaux définis en Nix (ancienne méthode), migrez-les vers le fichier chiffré :

  1. Copier les configs depuis modules/nixos/wireless-networks.nix
  2. Convertir au format wpa_supplicant.conf
  3. Ajouter dans ~/.config/secrets/wifi-networks.yaml
  4. Chiffrer avec sops
  5. Les anciennes définitions seront ignorées

Format du fichier zwift.yaml

# Configuration Zwift ici

📦 Modules et Fonctionnalités

🖥️ Système de Base

Base System (modules/nixos/base.nix)

  • Configuration Nix avec flakes et nix-command
  • Packages système essentiels (wget, jq, element-desktop, etc.)
  • Fonts Nerd Fonts (DejaVu, Droid Sans Mono)
  • Locale française (Europe/Paris - configurable)
  • Shell Fish par défaut

YubiKey Authentication (modules/nixos/yubikey.nix)

  • Active l'authentification YubiKey (U2F) pour login et sudo
  • S'applique à tous les systèmes qui importent ce module

Fingerprint (Laptop) (modules/laptop/fingerprint.nix)

  • Active fprintd sur le laptop
  • Ajoute l'authentification empreinte pour login et sudo
  • Sur laptop, l'authentification peut se faire avec YubiKey ou empreinte selon la méthode disponible

Networking (modules/nixos/net.nix)

  • DNS chiffré : dnscrypt-proxy (primaire + backup dns0-eu)
  • WiFi : wpa_supplicant avec multi-réseaux
  • Hostname : Configurable via config.nix

Desktop (modules/nixos/desktop-i3.nix)

  • Window manager i3
  • Terminal : alacritty
  • Launcher : rofi
  • Panel : tint2
  • Notifications : dunst

🎮 Fonctionnalités Optionnelles (avec options)

Gaming (modules/laptop/gaming.nix)

  • Steam avec steam-hardware
  • Driver xpadneo pour manettes Xbox (optionnel)
  • Option : custom.gaming.enable

Virtualization (modules/laptop/virtualization.nix)

  • Docker avec DNS personnalisé
  • VirtualBox avec extension pack
  • Options : custom.virtualization.docker.enable, custom.virtualization.virtualbox.enable

Printing (modules/laptop/printing.nix)

  • CUPS avec configuration d'imprimantes
  • Option : custom.printing.enable

Power Management (modules/laptop/power.nix)

  • CPU frequency governor configurable
  • Option : custom.power.enable

Bluetooth (modules/laptop/bluetooth.nix)

  • Bluetooth avec blueman GUI
  • Mode dual controller + experimental features
  • Option : custom.bluetooth.enable

Zwift (modules/laptop/zwift.nix)

  • Zwift cycling simulator via Docker
  • Ports réseau configurés automatiquement
  • Option : custom.zwift.enable

👤 Utilisateur & Applications

User Configuration (modules/laptop/users.nix)

Packages par catégorie :

  • Browsers : Firefox
  • Office : LibreOffice, OnlyOffice, Obsidian, TickTick, Nextcloud
  • Development : VSCode, Git, Neovim, Zotero, tcpdump, Pandoc
  • Communication : Slack, Thunderbird, Discord
  • Media : VLC, Spotify, Mixxx, Pympress
  • Gaming : Prismlauncher (Minecraft), Widelands, Moonlight
  • System : Rclone, Fuse3, Pavucontrol

🔧 Flake Inputs

  • nixpkgs : nixos-unstable channel
  • sops-nix : Secrets management
  • parsec-cloud-nix : Parsec Cloud client
  • claude-desktop : Claude AI desktop app
  • zwift : Zwift cycling simulator

<EFBFBD> Personnalisation

Configuration de base

  1. Timezone et Locale : Éditer config.nix

    timezone = "Europe/Paris";
    locale = "fr_FR.UTF-8";
    
  2. Username et email : Éditer config.nix

    username = "alice";
    userEmail = "votre.email";
    
  3. Hostname : Éditer config.nix

    hostname = "nixos";
    

Activer/Désactiver des fonctionnalités

Dans configuration.nix, modifier les options custom.* :

# Désactiver le gaming
custom.gaming.enable = false;

# Activer uniquement Docker (pas VirtualBox)
custom.virtualization.docker.enable = true;
custom.virtualization.virtualbox.enable = false;

# Changer le CPU governor
custom.power.cpuGovernor = "performance";  # pour laptop branché

Ajouter des packages utilisateur

Éditer modules/laptop/users.nix et ajouter dans la liste appropriée :

packages = with pkgs; [
  # Development
  python3
  nodejs
  # ... vos packages
];

Ajouter une nouvelle fonctionnalité avec options

  1. Créer modules/laptop/ma-feature.nix :
{ config, lib, pkgs, ... }:
{
  options.custom.maFeature.enable = lib.mkEnableOption "ma fonctionnalité";
  
  config = lib.mkIf config.custom.maFeature.enable {
    # votre configuration
  };
}
  1. Importer dans configuration.nix
  2. Activer : custom.maFeature.enable = true;

🐛 Dépannage

Lister les options disponibles

# Voir toutes les options custom.*
nixos-option custom

# Voir une option spécifique avec sa documentation
nixos-option custom.gaming.enable

Erreurs de build

# Vérifier la syntaxe Nix
nix flake check

# Build avec logs détaillés
nixos-rebuild build --flake .#laptop --show-trace

Secrets non déchiffrables

Vérifier que :

  • La clé age existe : ~/.config/sops/age/keys.txt
  • Les fichiers secrets existent : ~/.config/secrets/*.yaml
  • Les permissions sont correctes (0400 recommandé)

Problèmes DNS

# Vérifier dnscrypt-proxy
systemctl status dnscrypt-proxy
systemctl status dnscrypt-proxy-backup

# Tester la résolution
dig @127.0.0.1 example.com

📚 Ressources

📝 Notes

  • stateVersion : Actuellement 24.05 - NE PAS MODIFIER après installation
  • Auto-upgrade : Désactivé pour éviter les mises à jour imprévues
  • Unfree packages : Activé globalement pour Steam, Slack, etc.

🔄 Maintenance

Nettoyage du store Nix

# Via nh (automatique toutes les 4 jours, garde 3 générations)
nh clean all --keep-since 4d --keep 3

# Ou manuellement
nix-collect-garbage -d
sudo nix-collect-garbage -d

Lister les générations

nixos-rebuild list-generations

Rollback

sudo nixos-rebuild switch --rollback
# Ou au boot via GRUB
Description
No description provided
Readme 115 KiB
Languages
Nix 90.9%
Shell 9.1%