Introduction
La signature de commits Git est devenue une pratique essentielle pour garantir l'authenticité du code source. Avec NixOS et Home Manager, cette configuration devient déclarative, reproductible et élégante. Cet article détaille comment configurer Git avec la signature SSH ED25519, à la place de gpg, particulièrement adaptée aux forges auto-hébergées comme Forgejo ou Gitea. Github et gitlab intègre l'affichage du controle de signature.
Pourquoi signer ses commits ?
La signature de commits offre plusieurs avantages :
- Authenticité : garantit que c'est bien vous qui avez créé le commit
- Traçabilité : essentiel pour les projets sensibles ou collaboratifs
- Badge vérifié : sur Forgejo/Gitea, vos commits affichent un badge de vérification
Avec SSH, vous réutilisez vos clés existantes sans la complexité de GPG. L'apport principal de GPG étant la durée de vie des clés et la révocation, à vous de mesurer votre besoins.
A ce jour, je ne travail pas dans un contexte ou j'ai besoins des fonctionnalités de GPG, j'ai donc opté pour SSH, mais ce contexte pourrait changer dans un futur plus ou moins proche. Le changement pour GPG sera simple.
Configuration déclarative avec Home Manager
Structure du module home-manager
Le fichier git.nix configure Git de manière déclarative. Voici la configuration complète :
|
|
J'utilise delta comme pager à la place de less. Je le trouve plus lisible dans les diffs avec de la coloration et l'affichage des numéros de lignes.
Points clés de la configuration
Fichier allowed_signers
Le fichier ~/.ssh/allowed_signers est crucial pour la vérification locale des signatures :
|
|
Home-Manager génère automatiquement ce fichier en lisant votre clé publique. Le format est simple : un motif (ici * pour tout email) suivi de la clé publique.
Activation de la signature automatique
Le paramètre commit.gpgsign = true signe automatiquement tous vos
commits sans avoir à ajouter -S à chaque fois.
Format SSH au lieu de GPG
L'option gpg.format = "ssh" indique à Git d'utiliser SSH au lieu du traditionnel GPG, simplifiant drastiquement la configuration.
Génération de la clé SSH
Si vous n'avez pas encore de clé ED25519 :
|
|
La clé publique se trouve dans ~/.ssh/id_ed25519-2025.pub.
Configuration sur Forgejo/Gitea
Ajout de la clé de signature
- Connectez-vous à votre instance Forgejo
- Accédez à Paramètres → Clés SSH / GPG
- Dans la section Clés SSH, cliquez sur Ajouter une clé
- Important : cochez la case "Utiliser cette clé pour signer les commits"
- Collez le contenu de votre
id_ed25519-2025.pub - Donnez-lui un nom descriptif (ex: "NixOS Desktop 2025")
Vérification sur Forgejo
|
|
Sur l'interface web de Forgejo, votre commit devrait maintenant afficher un badge Vérifié avec une coche verte.
Alias Git pratiques
La configuration inclut plusieurs alias qui améliorent le workflow :
|
|
L'alias oups est particulièrement utile pour amender le dernier commit signé sans éditer le message.
Intégration avec Delta
La configuration utilise Delta comme pager pour des diffs plus lisibles :
|
|
Delta nécessite d'être installé dans votre configuration NixOS :
|
|
Vérification locale des signatures
Pour vérifier les signatures de commits localement :
|
|
La sortie devrait afficher :
Good "git" signature for lucazeau.alexandre@gmail.com with ED25519 key SHA256:...
Debugging et problèmes courants
Erreur "gpg failed to sign the data"
Vérifiez que :
- Le fichier
allowed_signersexiste et contient votre clé - Le chemin vers
signingkeyest correct - La clé privée est chargée dans le ssh-agent
|
|
La signature n'apparaît pas sur Forgejo
- Vérifiez que la clé SSH sur Forgejo a bien la case "signature" cochée
- L'email dans
user.emaildoit correspondre à un email vérifié sur Forgejo - Assurez-vous que la clé publique est exactement la même
Chemin relatif vs absolu
La configuration utilise ~/.ssh/... plutôt que des chemins absolus. Home Manager résout automatiquement ~ vers votre répertoire home.
Avantages de l'approche déclarative
Avec NixOS et Home-Manager :
- Reproductibilité : même configuration sur toutes vos machines
- Versionnage : votre config Git est dans votre dépôt dotfiles
- Atomicité : activation/rollback instantané avec
home-manager switch - Documentation : la config est auto-documentée en Nix
Migration depuis GPG
Si vous utilisiez GPG auparavant, la migration est simple :
|
|
Aucun impact sur vos anciens commits signés avec GPG, ils restent valides.
Conclusion
La signature SSH de commits avec NixOS offre le meilleur des deux mondes : la simplicité de SSH et la puissance de la configuration déclarative.
Pour aller plus loin :
- Activez la signature obligatoire sur vos dépôts Forgejo
- Configurez des hooks pre-commit pour vérifier les signatures
- Explorez
git config --global tag.gpgSign truepour signer aussi les tags
Ressources
—
Configuration testée sur NixOS 25.11 avec Home-Manager et Forgejo 1.21