{ config, lib, ... }: with lib; let cfg = config.modules.services.userweb; in { options.modules.services.userweb = { enable = mkEnableOption "serve user web contents"; domain = mkOption { type = types.str; }; }; config = mkIf cfg.enable { modules.services.nginx.enable = true; services.nginx.virtualHosts.${cfg.domain} = { forceSSL = true; useACMEHost = cfg.domain; serverName = "${cfg.domain} www.${cfg.domain}"; locations."~ ^/(~u/)(?[\w-]+)(?/.*)?$" = { alias = "/home/$user/public_html$user_uri"; index = "index.html index.php index.cgi index.py index.sh index.pl index.lua"; extraConfig = '' error_page 404 /~$user/404.html; ''; }; extraConfig = '' error_log /var/log/nginx/${cfg.domain}-error.log crit; ''; }; }; }