{ 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.
Format der Verzeichniseinträge muss eines der Folgenden sein:
- Datei mit genau einem Eintrag für den jeweiligen Nutzer
- Verzeichnis mit Dateien die jeweils einen Eintrag enthalten
'';
type = with types; attrsOf (listOf path);
default =
let
# Dateinamen mit öffentlichen SSH-Schlüsseln aus einem Verzeichnis mit Nutzernamen auslesen.
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;
};
}