aboutsummaryrefslogtreecommitdiff
path: root/keys.nix
diff options
context:
space:
mode:
authorValentin <valentin@fricklerhandwerk.de>2025-10-14 14:34:11 +0200
committerValentin <valentin@fricklerhandwerk.de>2025-11-06 16:46:27 +0100
commit8264c7ccb1f9566c3e17b45747dd35736c766be1 (patch)
tree8ec92353f94adcfb8c688a4f88c8621a8a1661c0 /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.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;
+ };
+}