diff --git a/flake.nix b/flake.nix
index 608d4f4..7a1cb6c 100644
--- a/flake.nix
+++ b/flake.nix
@@ -17,7 +17,7 @@
   in {
     packages = forAllSystems (system: pkgs: {
       default = self.packages.${system}.gitea-theme-monokai;
-      gitea-theme-monokai = pkgs.callPackage ./default.nix { };
+      gitea-theme-monokai = pkgs.callPackage ./themes/monokai { };
 
       test-machine = let
         system = "x86_64-linux";
@@ -35,10 +35,10 @@
             system.stateVersion = "23.11";
             boot.isContainer = true;
           }
-          {
+          ({pkgs, ... }: {
             services.gitea.enable = true;
-            services.gitea-themes.monokai.enable = true;
-          }
+            services.gitea-themes."monokai" = pkgs.gitea-theme-monokai;
+          })
         ];
       }).config.system.build.toplevel;
     });
diff --git a/module.nix b/module.nix
index 9757ec8..b31b205 100644
--- a/module.nix
+++ b/module.nix
@@ -1,22 +1,27 @@
 { config, pkgs, lib, ... }:
 let
-  cfg = config.services.gitea-themes.monokai;
+  cfg = config.services.gitea-themes;
   giteaCfg = config.services.gitea;
 in
 {
-  options.services.gitea-themes.monokai = {
-    enable = lib.mkEnableOption "monokai theme for gitea";
-    package = lib.mkPackageOption pkgs "gitea-theme-monokai" { };
+  options.services.gitea-themes = lib.mkOption {
+    description = ''
+      Derivations containing gitea themes to install.
+
+      The theme should be named `theme-<name>.css`, and reside in `$out/share/gitea/public/assets/css/`.
+    '';
+    default = { };
+    type = with lib.types; attrsOf path;
   };
 
-  config = lib.mkIf (cfg.enable && giteaCfg.enable)  {
-    services.gitea.settings.ui.THEMES = lib.strings.concatStringsSep "," [
+  config = lib.mkIf (cfg != { }) {
+    services.gitea.settings.ui.THEMES = lib.strings.concatStringsSep "," ([
       "gitea"
       "arc-green"
-      "monokai"
-    ];
+    ] ++ lib.attrNames cfg);
 
-    systemd.services.install-gitea-theme-monokai = {
+    systemd.services.install-gitea-themes = {
+      description = "Install gitea themes in gitea's CUSTOM_DIR";
       wantedBy = [ "gitea.service" ];
       requiredBy = [ "gitea.service" ];
 
@@ -25,13 +30,10 @@ in
         User = giteaCfg.user;
         Group = giteaCfg.group;
       };
-      script = ''
-        mkdir -p "${giteaCfg.customDir}/public/assets/css"
-        if ! [ -f "${giteaCfg.customDir}/public/assets/css/theme-monokai.css" ]; then
-          ln -s "${cfg.package}/share/gitea/public/assets/css/theme-monokai.css" "${giteaCfg.customDir}/public/assets/css/theme-monokai.css"
-          ln -s "${cfg.package}/share/gitea/public/css/theme-monokai.css" "${giteaCfg.customDir}/public/css/theme-monokai.css"
-        fi
-      '';
+      script = lib.concatMapStringsSep "\n" ({ name, value }: ''
+        install -Dm444 "${value}/share/gitea/public/assets/css/theme-${name}.css" -t "${giteaCfg.customDir}/public/assets/css/"
+        install -Dm444 "${value}/share/gitea/public/assets/css/theme-${name}.css" -t "${giteaCfg.customDir}/public/css/"
+      '') (lib.attrsToList cfg);
     };
   };
 }
diff --git a/default.nix b/themes/monokai/default.nix
similarity index 54%
rename from default.nix
rename to themes/monokai/default.nix
index 0447657..eba770a 100644
--- a/default.nix
+++ b/themes/monokai/default.nix
@@ -6,5 +6,5 @@ runCommand "gitea-monokai-theme" {
   buildInputs = [ lessc ];
 } ''
   mkdir $out
-  lessc ${./theme-monokai.less} $out/share/gitea/custom/public/assets/css/theme-monokai.css
+  lessc ${./theme-monokai.less} $out/share/gitea/public/assets/css/theme-monokai.css
 ''
diff --git a/theme-monokai.less b/themes/monokai/theme-monokai.less
similarity index 100%
rename from theme-monokai.less
rename to themes/monokai/theme-monokai.less