]> git.immae.eu Git - perso/Immae/Config/Nix.git/blobdiff - pkgs/webapps/dokuwiki/default.nix
Use new withPlugin system
[perso/Immae/Config/Nix.git] / pkgs / webapps / dokuwiki / default.nix
index 9df88c6b24ca29fa3614b37385d87c114bae1a24..874f0d87696f69b2ba6d4a21006414dedf2eead1 100644 (file)
@@ -1,4 +1,4 @@
-{ varDir ? "/var/lib/dokuwiki", preload ? "", lib, stdenv, mylibs, writeText }:
+{ varDir ? "/var/lib/dokuwiki", preload ? "", lib, callPackage, stdenv, mylibs, writeText }:
 let
   preloadFile = plugins: let preloads = [preload]
       ++ builtins.concatMap (p: lib.optional (lib.hasAttr "preload" p) (p.preload p)) plugins;
@@ -6,21 +6,26 @@ let
       <?php
       '' + builtins.concatStringsSep "\n" preloads
     );
-  withPlugins = plugins: package.overrideAttrs(old: {
-    name = "${old.name}-with-plugins";
-    installPhase = old.installPhase + (
-      builtins.concatStringsSep "\n" (
-        map (value: "ln -sf ${value} $out/lib/plugins/${value.pluginName}") plugins
-        )
-      );
-    installPreloadPhase = ''
-      cp ${preloadFile plugins} $out/inc/preload.php
-      '';
-    passthru = old.passthru // {
-      inherit plugins;
-      withPlugins = morePlugins: old.withPlugins (morePlugins ++ plugins);
-    };
-  });
+  pluginNames = [ "farmer" "todo" ];
+  allPlugins = lib.attrsets.genAttrs pluginNames
+    (name: callPackage (./plugins + "/${name}.nix") {});
+  toPassthru = pkg: plugins: {
+    inherit plugins varDir allPlugins;
+    withPlugins = withPlugins pkg;
+  };
+  withPlugins = pkg: toPlugins:
+    let
+      plugins = toPlugins allPlugins;
+      toInstallPlugin = n:
+        "ln -sf ${n} $out/lib/plugins/${n.pluginName}";
+      newDokuwiki = pkg.overrideAttrs(old: {
+        installPhase = old.installPhase + "\n" + builtins.concatStringsSep "\n" (map toInstallPlugin plugins);
+        installPreloadPhase = ''
+          cp ${preloadFile (pkg.plugins ++ plugins)} $out/inc/preload.php
+        '';
+        passthru = toPassthru newDokuwiki (pkg.plugins ++ plugins);
+      });
+    in newDokuwiki;
   package = stdenv.mkDerivation (mylibs.fetchedGithub ./dokuwiki.json // rec {
     phases = "unpackPhase buildPhase installPhase installPreloadPhase fixupPhase";
     buildPhase = ''
@@ -35,9 +40,6 @@ let
     installPreloadPhase = ''
       cp ${preloadFile []} $out/inc/preload.php
       '';
-    passthru = {
-      plugins = [];
-      inherit withPlugins varDir;
-    };
+    passthru = toPassthru package [];
   });
 in package