{ env, fetchedGithub, fetchurl, stdenv, writeText, pkgs, cacert }: 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.tools-etherpad = { destDir = "/run/keys/webapps"; permissions = "0400"; text = # Make sure we’re not rebuilding whole libreoffice just because of a # dependency let libreoffice = (import {}).libreoffice-fresh; in '' { "title": "Etherpad", "favicon": "favicon.ico", "ip": "127.0.0.1", "port" : ${env.listenPort}, "showSettingsInAdminPage" : false, "dbType" : "postgres", "dbSettings" : { "user" : "${env.postgresql.user}", "host" : "${env.postgresql.socket}", "password": "${env.postgresql.password}", "database": "${env.postgresql.database}", "charset" : "utf8mb4" }, "defaultPadText" : "Welcome to Etherpad!\n\nThis pad text is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents!\n\nGet involved with Etherpad at http:\/\/etherpad.org\n", "padOptions": { "noColors": false, "showControls": true, "showChat": true, "showLineNumbers": true, "useMonospaceFont": false, "userName": false, "userColor": false, "rtl": false, "alwaysShowChat": false, "chatAndUsers": false, "lang": "en-gb" }, "suppressErrorsInPadText" : false, "requireSession" : false, "editOnly" : false, "sessionNoPassword" : false, "minify" : true, "maxAge" : 21600, "abiword" : null, "soffice" : "${libreoffice}/bin/soffice", "tidyHtml" : "${pkgs.html-tidy}/bin/tidy", "allowUnknownFileEnds" : true, "requireAuthentication" : false, "requireAuthorization" : false, "trustProxy" : false, "disableIPlogging" : false, "automaticReconnectionTimeout" : 0, "scrollWhenFocusLineIsOutOfViewport": { "percentage": { "editionAboveViewport": 0, "editionBelowViewport": 0 }, "duration": 0, "scrollWhenCaretIsInTheLastLineOfViewport": false, "percentageToScrollWhenUserPressesArrowUp": 0 }, "users": { "ldapauth": { "url": "ldaps://${env.ldap.host}", "accountBase": "${env.ldap.base}", "accountPattern": "(&(memberOf=cn=users,cn=etherpad,ou=services,dc=immae,dc=eu)(uid={{username}}))", "displayNameAttribute": "cn", "searchDN": "cn=etherpad,ou=services,dc=immae,dc=eu", "searchPWD": "${env.ldap.password}", "groupSearchBase": "${env.ldap.base}", "groupAttribute": "member", "groupAttributeIsDN": true, "searchScope": "sub", "groupSearch": "(memberOf=cn=groups,cn=etherpad,ou=services,dc=immae,dc=eu)", "anonymousReadonly": false } }, "socketTransportProtocols" : ["xhr-polling", "jsonp-polling", "htmlfile"], "loadTest": false, "indentationOnNewLine": false, "toolbar": { "left": [ ["bold", "italic", "underline", "strikethrough"], ["orderedlist", "unorderedlist", "indent", "outdent"], ["undo", "redo"], ["clearauthorship"] ], "right": [ ["importexport", "timeslider", "savedrevision"], ["settings", "embed"], ["showusers"] ], "timeslider": [ ["timeslider_export", "timeslider_returnToPad"] ] }, "loglevel": "INFO", "logconfig" : { "appenders": [ { "type": "console" } ] } } ''; }; 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 ${sessionkey} $out/SESSIONKEY.txt ln -sf ${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 ]; }); in { inherit webappDir keys listenPort; }