mirror of
https://github.com/gensokyo-zone/infrastructure.git
synced 2026-02-09 12:29:19 -08:00
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:
parent
9af174aab8
commit
eb8b519394
5 changed files with 93 additions and 3 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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]
|
||||||
|
|
|
||||||
16
modules/system/exports/nfandroidtv.nix
Normal file
16
modules/system/exports/nfandroidtv.nix
Normal 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;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
72
nixos/access/nfandroidtv.nix
Normal file
72
nixos/access/nfandroidtv.nix
Normal 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 ];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue