aboutsummaryrefslogtreecommitdiff
path: root/keys.nix
diff options
context:
space:
mode:
Diffstat (limited to 'keys.nix')
-rw-r--r--keys.nix39
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;
+ };
+}