{lib, ...}: let inherit (lib.modules) mkIf; inherit (lib.options) mkOption mkEnableOption; wsModule = {config, ...}: { options = with lib.types; { proxy.websocket.enable = mkEnableOption "websocket proxy"; }; config = mkIf config.proxy.websocket.enable { extraConfig = '' proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; ''; }; }; hostModule = {config, ...}: { imports = [wsModule]; options = with lib.types; { locations = mkOption { type = attrsOf (submodule wsModule); }; }; }; in { options = with lib.types; { services.nginx.virtualHosts = mkOption { type = attrsOf (submodule hostModule); }; }; }