diff options
Diffstat (limited to 'keys.nix')
| -rw-r--r-- | keys.nix | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/keys.nix b/keys.nix new file mode 100644 index 0000000..0076788 --- /dev/null +++ b/keys.nix @@ -0,0 +1,39 @@ +{ lib, ... }: +let + inherit (lib) mkOption types; +in +{ + options.flake.keys = mkOption { + description = '' + Dateisystempfade zu öffentlichen SSH-Schlüsseln für alle Administratoren + + Kann benutzt werden um entsprechende Systemnutzer in `users.users` automatisch zu erstellen. + ''; + type = with types; attrsOf (listOf path); + default = + let + /* + Dateinamen mit öffentlichen SSH-Schlüsseln aus einem Verzeichnis mit Nutzernamen auslesen. + Format der Verzeichniseinträrge muss eines der Folgenden sein: + - Datei mit genau einem Eintrag für den jeweiligen Nutzer + - Verzeichnis mit Dateien die jeweils einen Eintrag enthalten + */ + get-key-files = + dir: + let + key-files = + username: type: + with builtins; + if type == "regular" then + [ "${dir}/${username}" ] + else + map (keyfile: "${dir}/${username}/${keyfile}") ( + attrValues (lib.filterAttrs (_: keytype: keytype == "regular") subdir) + ); + in + with builtins; + lib.mapAttrs key-files (builtins.readDir dir); + in + get-key-files ./keys; + }; +} |
