{ varDir ? "/var/lib/etherpad-lite" # if you override this change the StateDirectory in service file too! , stdenv, callPackage, mylibs, lib }: let 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 = 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 { inherit nodeEnv; src = stdenv.mkDerivation (mylibs.fetchedGithub ./etherpad-lite.json // rec { patches = [ ./libreoffice_patch.diff ]; buildPhase = '' touch src/.ep_initialized ''; installPhase = '' cp -a src/ $out ''; }); }).package; package = stdenv.mkDerivation rec { name = (mylibs.fetchedGithub ./etherpad-lite.json).name; src = node-environment; installPhase = '' mkdir -p $out mkdir $out/node_modules cp -a lib/node_modules/ep_etherpad-lite $out/src chmod u+w $out/src/static/js/ ln -s ../src $out/node_modules/ep_etherpad-lite ''; passthru = toPassthru package; }; in package