]> git.immae.eu Git - perso/Immae/Config/Nix.git/blobdiff - pkgs/webapps/etherpad-lite/default.nix
Fix some etherpad-lite modules and packaging
[perso/Immae/Config/Nix.git] / pkgs / webapps / etherpad-lite / default.nix
index 5cd1cfb008f1adc7cb4ce8a25222a83b6ebdf0e5..4327384840be37ad7dc8ec812c368bcf2a5e9e27 100644 (file)
@@ -1,31 +1,43 @@
 { varDir ? "/var/lib/etherpad-lite" # if you override this change the StateDirectory in service file too!
-, stdenv, callPackage, mylibs, fetchurl }:
+, stdenv, callPackage, mylibs, lib }:
 let
-  jquery = fetchurl {
-    url = https://code.jquery.com/jquery-1.9.1.js;
-    sha256 = "0h4dk67yc9d0kadqxb6b33585f3x3559p6qmp70l00qwq030vn3v";
+  nodeEnv = callPackage mylibs.nodeEnv {};
+  moduleNames = [
+    "ep_aa_file_menu_toolbar" "ep_adminpads" "ep_align" "ep_bookmark"
+    "ep_clear_formatting" "ep_colors" "ep_comments_page"
+    "ep_copy_paste_select_all" "ep_cursortrace" "ep_delete_empty_pads"
+    "ep_embedmedia" "ep_font_family" "ep_font_size" "ep_headings2"
+    "ep_immae_buttons" "ep_ldapauth" "ep_line_height" "ep_markdown"
+    "ep_mypads" "ep_page_view" "ep_previewimages" "ep_ruler"
+    "ep_scrollto" "ep_set_title_on_pad" "ep_subscript_and_superscript"
+    "ep_timesliderdiff"
+  ];
+  # nix files are built using node2nix -i node-packages.json
+  allModules = lib.attrsets.genAttrs moduleNames
+    (name: (callPackage (./modules + "/${name}/node-packages.nix") { inherit nodeEnv; }).${name});
+  toPassthru = pkg: {
+    inherit varDir allModules;
+    withModules = withModules pkg;
   };
-  withModules = modules: package.overrideAttrs(old: {
-    installPhase = let
-      modInst = n:
-      let n' = n.override {
-        postInstall = ''
-          if [ ! -f $out/lib/node_modules/${n.moduleName}/.ep_initialized ]; then
-            ln -s ${varDir}/ep_initialized/${n.moduleName} $out/lib/node_modules/${n.moduleName}/.ep_initialized
-          fi
-        '';
-      };
-        in "cp -a ${n'}/lib/node_modules/${n.moduleName} $out/node_modules";
-    in old.installPhase + builtins.concatStringsSep "\n" (map modInst modules);
-    passthru = old.passthru // {
-      inherit modules;
-      withModules = moreModules: old.withModules (moreModules ++ modules);
-    };
-  });
+  withModules = pkg: toModules:
+    let
+      modules = toModules allModules;
+      toInstallModule = n: ''
+        cp -a ${n}/lib/node_modules/${n.packageName} $out/node_modules
+        if [ ! -f $out/node_modules/${n.packageName}/.ep_initialized ]; then
+          chmod u+w $out/node_modules/${n.packageName}/
+          ln -s ${varDir}/ep_initialized/${n.packageName} $out/node_modules/${n.packageName}/.ep_initialized
+        fi
+      '';
+      newEtherpad = pkg.overrideAttrs(old: {
+        installPhase = old.installPhase + "\n" + builtins.concatStringsSep "\n" (map toInstallModule modules);
+        passthru = toPassthru newEtherpad;
+      });
+    in newEtherpad;
   # built using node2nix -l package-lock.json
   # and changing "./." to "src"
   node-environment = (callPackage ./node-packages.nix {
-    nodeEnv = callPackage mylibs.nodeEnv {};
+    inherit nodeEnv;
     src = stdenv.mkDerivation (mylibs.fetchedGithub ./etherpad-lite.json // rec {
       patches = [ ./libreoffice_patch.diff ];
       buildPhase = ''
@@ -44,12 +56,8 @@ let
       mkdir $out/node_modules
       cp -a lib/node_modules/ep_etherpad-lite $out/src
       chmod u+w $out/src/static/js/
-      #cp ${jquery} $out/src/static/js/jquery.js
       ln -s ../src $out/node_modules/ep_etherpad-lite
       '';
-    passthru = {
-      modules = [];
-      inherit varDir withModules;
-    };
+    passthru = toPassthru package;
   };
 in package