From d5eac571a464fe81aba56cbe1bc236101934f4a3 Mon Sep 17 00:00:00 2001
From: Kalle Struik <kalle@kallestruik.nl>
Date: Fri, 11 Apr 2025 21:29:36 +0200
Subject: [PATCH] More automatic roles management

---
 flake.nix         |  2 +-
 roles.nix         | 15 +++++++++++++++
 roles/default.nix | 15 ---------------
 3 files changed, 16 insertions(+), 16 deletions(-)
 create mode 100644 roles.nix
 delete mode 100644 roles/default.nix

diff --git a/flake.nix b/flake.nix
index 5883ff5..3699804 100644
--- a/flake.nix
+++ b/flake.nix
@@ -19,7 +19,7 @@
       homelabConfig = import ./config.nix;
       utils = import ./utils.nix { inherit inputs homelabConfig; };
 
-      roles = import ./roles { inherit utils; };
+      roles = import ./roles.nix { inherit utils lib; };
       hosts = import ./hosts.nix {
         inherit
           homelabConfig
diff --git a/roles.nix b/roles.nix
new file mode 100644
index 0000000..45d5541
--- /dev/null
+++ b/roles.nix
@@ -0,0 +1,15 @@
+{
+  lib,
+  utils,
+  ...
+}:
+lib.attrsets.mapAttrs' (
+  name: _:
+  let
+    mod = utils.mkRole (import (./roles + "/${name}"));
+  in
+  {
+    name = builtins.replaceStrings [ ".nix" ] [ "" ] name;
+    value = mod;
+  }
+) (builtins.readDir ./roles)
diff --git a/roles/default.nix b/roles/default.nix
deleted file mode 100644
index 0c6ed7d..0000000
--- a/roles/default.nix
+++ /dev/null
@@ -1,15 +0,0 @@
-{
-  utils,
-  ...
-}:
-{
-  # Utility
-  postgres = utils.mkRole (import ./postgres.nix);
-  podman = utils.mkRole (import ./podman.nix);
-
-  # Services
-  sonarr = utils.mkRole (import ./sonarr.nix);
-  traefik = utils.mkRole (import ./traefik.nix);
-  authentik = utils.mkRole (import ./authentik);
-  forgejo = utils.mkRole (import ./forgejo.nix);
-}