aboutsummaryrefslogtreecommitdiff
path: root/keys.nix
blob: 5037ad18c2b6c4d0cce3687dd2e5f6410f4b8d77 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
{ 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;
  };
}