{ 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; }; }