From 9e18e8e078d5eacff002bc779a980da476338006 Mon Sep 17 00:00:00 2001 From: Tom Hubrecht Date: Fri, 30 Jun 2023 18:38:10 +0200 Subject: [PATCH] modules/dgn-secrets: Init Add a way to simplify secrets imports --- modules/dgn-secrets.nix | 112 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 modules/dgn-secrets.nix diff --git a/modules/dgn-secrets.nix b/modules/dgn-secrets.nix new file mode 100644 index 0000000..c43eea3 --- /dev/null +++ b/modules/dgn-secrets.nix @@ -0,0 +1,112 @@ +# Copyright : +# - Tom Hubrecht 2023 +# +# Ce logiciel est un programme informatique servant à déployer des +# configurations de serveurs via NixOS. +# +# Ce logiciel est régi par la licence CeCILL soumise au droit français et +# respectant les principes de diffusion des logiciels libres. Vous pouvez +# utiliser, modifier et/ou redistribuer ce programme sous les conditions +# de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA +# sur le site "http://www.cecill.info". +# +# En contrepartie de l'accessibilité au code source et des droits de copie, +# de modification et de redistribution accordés par cette licence, il n'est +# offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons, +# seule une responsabilité restreinte pèse sur l'auteur du programme, le +# titulaire des droits patrimoniaux et les concédants successifs. +# +# A cet égard l'attention de l'utilisateur est attirée sur les risques +# associés au chargement, à l'utilisation, à la modification et/ou au +# développement et à la reproduction du logiciel par l'utilisateur étant +# donné sa spécificité de logiciel libre, qui peut le rendre complexe à +# manipuler et qui le réserve donc à des développeurs et des professionnels +# avertis possédant des connaissances informatiques approfondies. Les +# utilisateurs sont donc invités à charger et tester l'adéquation du +# logiciel à leurs besoins dans des conditions permettant d'assurer la +# sécurité de leurs systèmes et ou de leurs données et, plus généralement, +# à l'utiliser et l'exploiter dans les mêmes conditions de sécurité. +# +# Le fait que vous puissiez accéder à cet en-tête signifie que vous avez +# pris connaissance de la licence CeCILL, et que vous en avez accepté les +# termes. + +{ config, lib, dgn-lib, ... }: + +let + inherit (lib) + mkOption + + types; + + inherit (dgn-lib) + getSecrets + mkBaseSecrets + recursiveFuse; + + cfg = config.dgn-secrets; + + optionsType = with types; submodule ({ config, ... }: { + options = { + mode = mkOption { + type = str; + default = "0400"; + description = '' + Permissions mode of the decrypted secret in a format understood by chmod. + ''; + }; + + owner = mkOption { + type = str; + default = "0"; + description = '' + User of the decrypted secret. + ''; + }; + + group = mkOption { + type = str; + default = users.${config.owner}.group or "0"; + description = '' + Group of the decrypted secret. + ''; + }; + }; + }); +in + +{ + options.dgn-secrets = { + sources = mkOption { + type = with types; listOf path; + default = [ ]; + description = '' + List of directories containing secrets managed with agenix. + ''; + }; + + options = mkOption { + type = with types; listOf (attrsOf optionsType); + default = [ ]; + description = '' + List of attribute sets of secrets' configuration overrides. + ''; + }; + + names = mkOption { + type = with types; listOf str; + default = builtins.foldl' (acc: dir: acc ++ (dgn-lib.getSecrets dir)) [ ] cfg.sources; + description = '' + List of the names of the secrets. + ''; + }; + }; + + config = { + age.secrets = recursiveFuse (cfg.options ++ ( + builtins.map + (dir: mkBaseSecrets dir (getSecrets dir)) + cfg.sources + )); + }; +}