infrastructure/nixos/access/nfandroidtv.nix
2024-06-23 11:50:31 -07:00

79 lines
2.1 KiB
Nix

{
config,
systemConfig,
lib,
...
}: let
inherit (lib.modules) mkIf mkAfter mkDefault;
inherit (config.services) nginx;
inherit (systemConfig.exports.services) nfandroidtv;
upstreamName = "nfandroidtv'bedroom";
name.shortServer = mkDefault nfandroidtv.id;
timeout = "5s";
in {
config.services.nginx = {
vouch.enable = true;
upstreams'.${upstreamName}.servers = {
android = {
settings.fail_timeout = mkDefault timeout;
addr = mkDefault "10.1.1.67";
port = mkDefault nfandroidtv.ports.default.port;
/*
accessService = {
system = "bedroomtv";
name = "nfandroidtv";
};
*/
};
fallback = let
virtualHost = nginx.virtualHosts.nfandroidtv'fallback;
listen = virtualHost.listen'.nfandroidtv;
in {
addr = mkDefault listen.addr;
port = mkDefault listen.port;
settings.backup = mkDefault true;
};
};
virtualHosts = let
locations = {
"/" = {
proxy.enable = true;
extraConfig = ''
proxy_connect_timeout ${timeout};
'';
};
};
listen'.nfandroidtv = {
port = nfandroidtv.ports.default.port;
extraParameters = ["default_server"];
};
in {
nfandroidtv'local = {
inherit name locations listen';
local.enable = true;
proxy.upstream = mkDefault upstreamName;
};
nfandroidtv'fallback = {
serverName = "@nfandroidtv_fallback";
locations."/" = {
extraConfig = mkAfter ''
add_header Content-Type 'text/html';
return 200 'OK';
'';
};
listen'.nfandroidtv = {
addr = "127.0.0.1";
port = 7677;
extraParameters = ["default_server"];
};
};
};
};
config.networking.firewall.interfaces.lan = let
virtualHost = nginx.virtualHosts.nfandroidtv'local;
listen = virtualHost.listen'.nfandroidtv;
in
mkIf (virtualHost.enable && listen.enable) {
allowedTCPPorts = [listen.port];
};
}