fix(hass): nfandroidtv proxy

the service on the TV is unreliable, so proxy it with a fake success
response when offline to satisfy the home-assistant integration
This commit is contained in:
arcnmx 2024-06-18 16:52:49 -07:00
parent 9af174aab8
commit eb8b519394
5 changed files with 93 additions and 3 deletions

View file

@ -113,7 +113,7 @@ let
lib, lib,
... ...
}: let }: let
inherit (gensokyo-zone.lib) mkAlmostOptionDefault; inherit (gensokyo-zone.lib) mkAlmostOptionDefault mkAddress6;
inherit (lib.options) mkOption; inherit (lib.options) mkOption;
inherit (lib.modules) mkIf mkOptionDefault mkForce; inherit (lib.modules) mkIf mkOptionDefault mkForce;
inherit (lib.attrsets) attrValues mapAttrs; inherit (lib.attrsets) attrValues mapAttrs;
@ -123,7 +123,7 @@ let
enabledCfg = filter (port: port.enable) cfg; enabledCfg = filter (port: port.enable) cfg;
mkListen = listen: addr: let mkListen = listen: addr: let
listenAttrs = { listenAttrs = {
inherit addr; addr = mkAddress6 addr;
inherit (listen) port ssl extraParameters proxyProtocol; inherit (listen) port ssl extraParameters proxyProtocol;
}; };
in in

View file

@ -216,10 +216,11 @@ let
config = let config = let
enabledServers = filterAttrs (_: server: server.enable) config.servers; enabledServers = filterAttrs (_: server: server.enable) config.servers;
activeServers = filterAttrs (_: server: server.settings.backup or false == false) enabledServers;
assertServers = v: assert enabledServers != {}; v; assertServers = v: assert enabledServers != {}; v;
in { in {
ssl.enable = mkIf (any (server: server.ssl.enable) (attrValues enabledServers)) (mkAlmostOptionDefault true); ssl.enable = mkIf (any (server: server.ssl.enable) (attrValues enabledServers)) (mkAlmostOptionDefault true);
defaultServerName = findSingle (_: true) null null (attrNames enabledServers); defaultServerName = findSingle (_: true) null null (attrNames activeServers);
upstreamConfig = mkMerge ( upstreamConfig = mkMerge (
mapAttrsToList (_: server: mkIf server.enable server.serverDirective) config.servers mapAttrsToList (_: server: mkIf server.enable server.serverDirective) config.servers
++ [config.extraConfig] ++ [config.extraConfig]

View file

@ -0,0 +1,16 @@
{
lib,
gensokyo-zone,
...
}: let
inherit (gensokyo-zone.lib) mkAlmostOptionDefault;
in {
config.exports.services.nfandroidtv = {config, ...}: {
displayName = mkAlmostOptionDefault "Notifications for Android TV";
ports.default = {
port = mkAlmostOptionDefault 7676;
protocol = "http";
#status.enable = mkAlmostOptionDefault true;
};
};
}

View file

@ -0,0 +1,72 @@
{
config,
system,
lib,
...
}: let
inherit (lib.modules) mkIf mkDefault;
inherit (config.services) nginx;
inherit (system.exports.services) nfandroidtv;
upstreamName = "nfandroidtv'bedroom";
in {
config.services.nginx = {
vouch.enable = true;
upstreams'.${upstreamName}.servers = {
android = {
settings.fail_timeout = mkDefault "5s";
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;
};
};
name.shortServer = mkDefault nfandroidtv.id;
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 = ''
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 ];
};
}

View file

@ -19,6 +19,7 @@ in {
nixos.access.zigbee2mqtt nixos.access.zigbee2mqtt
nixos.access.grocy nixos.access.grocy
nixos.access.barcodebuddy nixos.access.barcodebuddy
nixos.access.nfandroidtv
nixos.home-assistant nixos.home-assistant
nixos.zigbee2mqtt nixos.zigbee2mqtt
nixos.syncplay nixos.syncplay