{ 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_http_version 1.1; 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); }; }; }