diff options
| author | Valentin <valentin@fricklerhandwerk.de> | 2025-10-14 14:34:11 +0200 |
|---|---|---|
| committer | Valentin <valentin@fricklerhandwerk.de> | 2025-11-06 16:46:27 +0100 |
| commit | 8264c7ccb1f9566c3e17b45747dd35736c766be1 (patch) | |
| tree | 8ec92353f94adcfb8c688a4f88c8621a8a1661c0 /keys.nix | |
Einrichtung des ersten Servers
Das System kann mit einem Befehl beim Hosting-Provider aufgesetzt werden.
Es bietet zunächst nur einem SSH-Zugang für Administratoren.
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; + }; +} |
