From a8bfce17c5eda890d3486357952572f4c1c6b18a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Isma=C3=ABl=20Bouya?= Date: Wed, 8 May 2019 10:56:21 +0200 Subject: [PATCH] Move etherpad-lite to pkgs --- .../modules/websites/tools/ether/default.nix | 4 +- .../websites/tools/ether/etherpad_lite.nix | 80 ++----------------- pkgs/impure/etherpad-lite/default.nix | 69 ++++++++++++++++ .../impure/etherpad-lite}/etherpad-lite.json | 0 .../etherpad-lite}/libreoffice_patch.diff | 0 pkgs/webapps/default.nix | 26 ++++++ 6 files changed, 102 insertions(+), 77 deletions(-) create mode 100644 pkgs/impure/etherpad-lite/default.nix rename {nixops/modules/websites/tools/ether => pkgs/impure/etherpad-lite}/etherpad-lite.json (100%) rename {nixops/modules/websites/tools/ether => pkgs/impure/etherpad-lite}/libreoffice_patch.diff (100%) diff --git a/nixops/modules/websites/tools/ether/default.nix b/nixops/modules/websites/tools/ether/default.nix index 0d04c36..09e5c9d 100644 --- a/nixops/modules/websites/tools/ether/default.nix +++ b/nixops/modules/websites/tools/ether/default.nix @@ -1,7 +1,7 @@ { lib, pkgs, config, myconfig, mylibs, ... }: let etherpad = pkgs.callPackage ./etherpad_lite.nix { - inherit (mylibs) fetchedGithub; + inherit (pkgs.webapps) etherpad-lite etherpad-lite-modules; env = myconfig.env.tools.etherpad-lite; }; @@ -44,7 +44,7 @@ in { Restart = "always"; Type = "simple"; TimeoutSec = 60; - ExecStartPre = "+${pkgs.coreutils}/bin/chown etherpad-lite:etherpad-lite /var/secrets/webapps/tools-etherpad /var/secrets/webapps/tools-etherpad-sessionkey /var/secrets/webapps/tools-etherpad-apikey"; + ExecStartPre = "+${pkgs.coreutils}/bin/chown -R etherpad-lite:etherpad-lite /var/secrets/webapps/tools-etherpad /var/secrets/webapps/tools-etherpad-sessionkey /var/secrets/webapps/tools-etherpad-apikey"; }; }; diff --git a/nixops/modules/websites/tools/ether/etherpad_lite.nix b/nixops/modules/websites/tools/ether/etherpad_lite.nix index e67497b..35220ee 100644 --- a/nixops/modules/websites/tools/ether/etherpad_lite.nix +++ b/nixops/modules/websites/tools/ether/etherpad_lite.nix @@ -1,35 +1,8 @@ -{ env, fetchedGithub, fetchurl, stdenv, writeText, pkgs, cacert }: +{ env, etherpad-lite, etherpad-lite-modules, writeText, pkgs }: let listenPort = env.listenPort; sessionkey = writeText "SESSIONKEY.txt" env.session_key; apikey = writeText "APIKEY.txt" env.api_key; - jquery = fetchurl { - url = https://code.jquery.com/jquery-1.9.1.js; - sha256 = "0h4dk67yc9d0kadqxb6b33585f3x3559p6qmp70l00qwq030vn3v"; - }; - etherpad_modules = [ - "ep_aa_file_menu_toolbar" - "ep_adminpads" - "ep_align" - "ep_bookmark" - "ep_clear_formatting" - "ep_colors" - "ep_copy_paste_select_all" - "ep_cursortrace" - "ep_embedmedia" - "ep_font_family" - "ep_font_size" - "ep_headings2" - "ep_ldapauth" - "ep_line_height" - "ep_markdown" - "ep_previewimages" - "ep_ruler" - "ep_scrollto" - "ep_set_title_on_pad" - "ep_subscript_and_superscript" - "ep_timesliderdiff" - ]; keys = [ { dest = "webapps/tools-etherpad-apikey"; @@ -146,53 +119,10 @@ let ''; } ]; - webappDir = stdenv.mkDerivation (fetchedGithub ./etherpad-lite.json // rec { - __noChroot = true; - patches = [ ./libreoffice_patch.diff ]; - buildPhase = '' - export GIT_SSL_CAINFO=${cacert}/etc/ssl/certs/ca-bundle.crt - export SSL_CERT_FILE=${cacert}/etc/ssl/certs/ca-bundle.crt - export HOME=$PWD - - touch src/.ep_initialized - cp -v src/static/custom/js.template src/static/custom/index.js - cp -v src/static/custom/js.template src/static/custom/pad.js - cp -v src/static/custom/js.template src/static/custom/timeslider.js - cp -v src/static/custom/css.template src/static/custom/index.css - cp -v src/static/custom/css.template src/static/custom/pad.css - cp -v src/static/custom/css.template src/static/custom/timeslider.css - - sed -i 's/var\/dirty.db/\/var\/lib\/etherpad-lite\/dirty.db/g' \ - settings.json.template - - mkdir -v node_modules - ln -s ../src node_modules/ep_etherpad-lite - - node bin/doc/generate doc/index.md --format=html \ - --template=doc/template.html > documentation.html - - cd src - npm install - cd .. - ${builtins.concatStringsSep "\n" - (map (n: "npm install ${n}; touch node_modules/${n}/.ep_initialized") etherpad_modules)} - ''; - installPhase = '' - mkdir -p $out - install -t $out/src/ -vDm 644 src/.ep_initialized - cp -a node_modules $out/ - cp -a src/* $out/src/ - ln -sf /var/secrets/webapps/tools-etherpad-sessionkey $out/SESSIONKEY.txt - ln -sf /var/secrets/webapps/tools-etherpad-apikey $out/APIKEY.txt - cp ${jquery} $out/src/static/js/jquery.js - - mkdir $out/doc - install -t "$out/doc/" \ - -vDm 644 {CHANGELOG,CONTRIBUTING,README}.md \ - -vDm 644 documentation.html - ''; - buildInputs = [ pkgs.nodejs pkgs.python ]; - }); + webappDir = (etherpad-lite.override { + session_key = "/var/secrets/webapps/tools-etherpad-sessionkey"; + api_key = "/var/secrets/webapps/tools-etherpad-apikey"; + }).withModules etherpad-lite-modules; in { inherit webappDir keys listenPort; diff --git a/pkgs/impure/etherpad-lite/default.nix b/pkgs/impure/etherpad-lite/default.nix new file mode 100644 index 0000000..c85bd7e --- /dev/null +++ b/pkgs/impure/etherpad-lite/default.nix @@ -0,0 +1,69 @@ +{ session_key ? "/etc/etherpad-lite/SESSIONKEY.txt" +, api_key ? "/etc/etherpad-lite/APIKEY.txt" +, stdenv, mylibs, cacert, nodejs, python, fetchurl }: +let + jquery = fetchurl { + url = https://code.jquery.com/jquery-1.9.1.js; + sha256 = "0h4dk67yc9d0kadqxb6b33585f3x3559p6qmp70l00qwq030vn3v"; + }; + withModules = modules: package.overrideAttrs(old: { + buildPhase = old.buildPhase + + builtins.concatStringsSep "\n" + (map (n: "npm install ${n}; touch node_modules/${n}/.ep_initialized") modules); + # FIXME: ln -s don’t seem to work, etherpad seems + # unable to "touch" them after initialization + passthru = old.passthru // { + inherit modules; + withModules = moreModules: old.withModules (moreModules ++ modules); + }; + }); + package = stdenv.mkDerivation (mylibs.fetchedGithub ./etherpad-lite.json // rec { + __noChroot = true; + patches = [ ./libreoffice_patch.diff ]; + buildPhase = '' + export GIT_SSL_CAINFO=${cacert}/etc/ssl/certs/ca-bundle.crt + export SSL_CERT_FILE=${cacert}/etc/ssl/certs/ca-bundle.crt + export HOME=$PWD + + touch src/.ep_initialized + cp -v src/static/custom/js.template src/static/custom/index.js + cp -v src/static/custom/js.template src/static/custom/pad.js + cp -v src/static/custom/js.template src/static/custom/timeslider.js + cp -v src/static/custom/css.template src/static/custom/index.css + cp -v src/static/custom/css.template src/static/custom/pad.css + cp -v src/static/custom/css.template src/static/custom/timeslider.css + + sed -i 's/var\/dirty.db/\/var\/lib\/etherpad-lite\/dirty.db/g' \ + settings.json.template + + mkdir -v node_modules + ln -s ../src node_modules/ep_etherpad-lite + + node bin/doc/generate doc/index.md --format=html \ + --template=doc/template.html > documentation.html + + cd src + npm install + cd .. + ''; + installPhase = '' + mkdir -p $out + install -t $out/src/ -vDm 644 src/.ep_initialized + cp -a node_modules $out/ + cp -a src/* $out/src/ + ln -sf ${session_key} $out/SESSIONKEY.txt + ln -sf ${api_key} $out/APIKEY.txt + cp ${jquery} $out/src/static/js/jquery.js + + mkdir $out/doc + install -t "$out/doc/" \ + -vDm 644 {CHANGELOG,CONTRIBUTING,README}.md \ + -vDm 644 documentation.html + ''; + buildInputs = [ nodejs python ]; + passthru = { + modules = []; + inherit withModules; + }; + }); +in package diff --git a/nixops/modules/websites/tools/ether/etherpad-lite.json b/pkgs/impure/etherpad-lite/etherpad-lite.json similarity index 100% rename from nixops/modules/websites/tools/ether/etherpad-lite.json rename to pkgs/impure/etherpad-lite/etherpad-lite.json diff --git a/nixops/modules/websites/tools/ether/libreoffice_patch.diff b/pkgs/impure/etherpad-lite/libreoffice_patch.diff similarity index 100% rename from nixops/modules/websites/tools/ether/libreoffice_patch.diff rename to pkgs/impure/etherpad-lite/libreoffice_patch.diff diff --git a/pkgs/webapps/default.nix b/pkgs/webapps/default.nix index 8fbb20f..a771aee 100644 --- a/pkgs/webapps/default.nix +++ b/pkgs/webapps/default.nix @@ -13,6 +13,32 @@ rec { lib.attrsets.genAttrs names (name: callPackage (./dokuwiki/plugins + "/${name}.nix") {}); + etherpad-lite = callPackage ../impure/etherpad-lite {}; + etherpad-lite-with-modules = etherpad-lite.withModules etherpad-lite-modules; + etherpad-lite-modules = [ + "ep_aa_file_menu_toolbar" + "ep_adminpads" + "ep_align" + "ep_bookmark" + "ep_clear_formatting" + "ep_colors" + "ep_copy_paste_select_all" + "ep_cursortrace" + "ep_embedmedia" + "ep_font_family" + "ep_font_size" + "ep_headings2" + "ep_ldapauth" + "ep_line_height" + "ep_markdown" + "ep_previewimages" + "ep_ruler" + "ep_scrollto" + "ep_set_title_on_pad" + "ep_subscript_and_superscript" + "ep_timesliderdiff" + ]; + infcloud = callPackage ./infcloud {}; mantisbt_2 = callPackage ./mantisbt_2 {}; -- 2.41.0