# https://github.com/TUM-DSE/doctor-cluster-config/blob/8c11c117e66af1cc205eb2094ab94e8a3317ff2e/sops.yaml.nix
let
  keys = builtins.fromJSON (builtins.readFile ./sops.json);
  admins = builtins.attrValues keys.admins;

  mapAttrsToList = f: attrs: map (name: f name attrs.${name}) (builtins.attrNames attrs);

  renderPermissions =
    attrs:
    mapAttrsToList (path: keys: {
      path_regex = "^${path}$";
      key_groups = [
        {
          age = keys ++ admins;
        }
      ];
    }) attrs;

  # This is the list of permissions per file. The admins have permissions for all files.
  sopsPermissions =
    {
      "secrets.yaml" = [ ];
      "terraform/secrets.yaml" = [ ];
    }
    // builtins.mapAttrs (_: value: (map (x: keys.hosts.${x}) value)) {
      "modules/secrets/backup.yaml" = [
        "build02"
        "build03"
        "web02"
      ];
      "modules/secrets/community-builder.yaml" = [
        "build01"
        "build05"
        "darwin01"
      ];
      "modules/secrets/hercules-ci.yaml" = [
        "build03"
        "build04"
        "darwin02"
      ];
    }
    // builtins.listToAttrs (
      mapAttrsToList (hostname: key: {
        name = "hosts/${hostname}/secrets.yaml";
        value = [ key ];
      }) keys.hosts
    );
in
{
  creation_rules = renderPermissions sopsPermissions;
}