]> git.immae.eu Git - perso/Immae/Config/Nix.git/blob - flakes/etherpad-lite/default.nix
(no commit message)
[perso/Immae/Config/Nix.git] / flakes / etherpad-lite / default.nix
1 { varDir ? "/var/lib/etherpad-lite" # if you override this change the StateDirectory in service file too!
2 , stdenv, callPackage, src, lib, nodejs }:
3 let
4 nodeEnv = callPackage ../../lib/node-env.nix {};
5 moduleNames = [
6 "ep_aa_file_menu_toolbar" "ep_adminpads" "ep_align" "ep_bookmark"
7 "ep_clear_formatting" "ep_colors" "ep_comments_page"
8 "ep_copy_paste_select_all" "ep_cursortrace" "ep_delete_empty_pads"
9 "ep_embedmedia" "ep_font_family" "ep_font_size" "ep_headings2"
10 "ep_immae_buttons" "ep_ldapauth" "ep_line_height" "ep_markdown"
11 "ep_mypads" "ep_page_view" "ep_previewimages" "ep_ruler"
12 "ep_scrollto" "ep_set_title_on_pad" "ep_subscript_and_superscript"
13 "ep_timesliderdiff"
14 ];
15 # nix files are built using node2nix -i node-packages.json
16 allModules = lib.attrsets.genAttrs moduleNames
17 (name: (callPackage (./modules + "/${name}/node-packages.nix") { inherit nodeEnv; }).${name});
18 toPassthru = pkg: moduleNames: {
19 inherit varDir allModules nodejs moduleNames;
20 withModules = withModules pkg;
21 };
22 withModules = pkg: toModules:
23 let
24 modules = toModules allModules;
25 toInstallModule = n: ''
26 cp -a ${n}/lib/node_modules/${n.packageName} $out/node_modules
27 if [ ! -f $out/node_modules/${n.packageName}/.ep_initialized ]; then
28 chmod u+w $out/node_modules/${n.packageName}/
29 ln -s ${varDir}/ep_initialized/${n.packageName} $out/node_modules/${n.packageName}/.ep_initialized
30 fi
31 '';
32 modulesNames = map (n: n.packageName) modules;
33 newEtherpad = pkg.overrideAttrs(old: {
34 installPhase = old.installPhase + "\n" + builtins.concatStringsSep "\n" (map toInstallModule modules);
35 passthru = toPassthru newEtherpad moduleNames;
36 });
37 in newEtherpad;
38 # built using node2nix -l package-lock.json
39 # and changing "./." to "src"
40 node-environment = (callPackage ./node-packages.nix {
41 inherit nodeEnv;
42 src = stdenv.mkDerivation {
43 pname = "etherpad-lite";
44 version = src.version;
45 inherit src;
46 patches = [ ./libreoffice_patch.diff ];
47 buildPhase = ''
48 touch src/.ep_initialized
49 '';
50 installPhase = ''
51 cp -a src/ $out
52 '';
53 };
54 }).package;
55 package = stdenv.mkDerivation rec {
56 name = "etherpad-lite-${src.version}";
57 src = node-environment;
58 version = src.version;
59 installPhase = ''
60 mkdir -p $out
61 mkdir $out/node_modules
62 cp -a lib/node_modules/ep_etherpad-lite $out/src
63 chmod u+w $out/src/static/js/
64 ln -s ../src $out/node_modules/ep_etherpad-lite
65 ln -s ${varDir}/var $out/var
66 '';
67 passthru = toPassthru package [];
68 };
69 in package