{ lib, pkgs, config, myconfig, mylibs, ... }: let etherpad = pkgs.callPackage ./etherpad_lite.nix { inherit (mylibs) fetchedGithub; env = myconfig.env.tools.etherpad-lite; }; cfg = config.services.myWebsites.tools.etherpad-lite; in { options.services.myWebsites.tools.etherpad-lite = { enable = lib.mkEnableOption "enable etherpad's website"; }; config = lib.mkIf cfg.enable { deployment.keys = etherpad.keys; systemd.services.etherpad-lite = { description = "Etherpad-lite"; wantedBy = [ "multi-user.target" ]; after = [ "network.target" "postgresql.service" "tools-etherpad-key.service" "tools-etherpad-apikey-key.service" "tools-etherpad-sessionkey-key.service" ]; wants = [ "postgresql.service" "tools-etherpad-key.service" "tools-etherpad-apikey-key.service" "tools-etherpad-sessionkey-key.service" ]; environment.NODE_ENV = "production"; environment.HOME = etherpad.webappDir; path = [ pkgs.nodejs ]; script = '' exec ${pkgs.nodejs}/bin/node ${etherpad.webappDir}/src/node/server.js \ --settings /run/keys/webapps/tools-etherpad ''; serviceConfig = { DynamicUser = true; User = "etherpad-lite"; Group = "etherpad-lite"; SupplementaryGroups = "keys"; WorkingDirectory = etherpad.webappDir; PrivateTmp = true; NoNewPrivileges = true; PrivateDevices = true; ProtectHome = true; ProtectControlGroups = true; ProtectKernelModules = true; Restart = "always"; Type = "simple"; TimeoutSec = 60; ExecStartPre = "+${pkgs.coreutils}/bin/chown etherpad-lite:etherpad-lite /run/keys/webapps/tools-etherpad /run/keys/webapps/tools-etherpad-sessionkey /run/keys/webapps/tools-etherpad-apikey"; }; }; services.myWebsites.tools.modules = [ "headers" "proxy" "proxy_http" "proxy_wstunnel" ]; security.acme.certs."eldiron".extraDomains."ether.immae.eu" = null; services.myWebsites.tools.vhostConfs.etherpad-lite = { certName = "eldiron"; hosts = [ "ether.immae.eu" ]; root = null; extraConfig = [ '' Header always set Strict-Transport-Security "max-age=31536000; includeSubdomains;" RequestHeader set X-Forwarded-Proto "https" RewriteEngine On RewriteMap redirects "txt:${pkgs.writeText "redirects.txt" myconfig.env.tools.etherpad-lite.redirects}" RewriteCond %{QUERY_STRING} "!noredirect" RewriteCond %{REQUEST_URI} "^(.*)$" RewriteCond ''${redirects:$1|Unknown} "!Unknown" RewriteRule "^(.*)$" ''${redirects:$1} [L,NE,R=301,QSD] RewriteCond %{REQUEST_URI} ^/socket.io [NC] RewriteCond %{QUERY_STRING} transport=websocket [NC] RewriteRule /(.*) ws://localhost:${etherpad.listenPort}/$1 [P,L] ProxyVia On ProxyRequests Off ProxyPreserveHost On ProxyPass / http://localhost:${etherpad.listenPort}/ ProxyPassReverse / http://localhost:${etherpad.listenPort}/ Options FollowSymLinks MultiViews AllowOverride None Require all granted '' ]; }; }; }