mirror of
https://github.com/gensokyo-zone/infrastructure.git
synced 2026-02-09 04:19: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,
|
||||
...
|
||||
}: let
|
||||
inherit (gensokyo-zone.lib) mkAlmostOptionDefault;
|
||||
inherit (gensokyo-zone.lib) mkAlmostOptionDefault mkAddress6;
|
||||
inherit (lib.options) mkOption;
|
||||
inherit (lib.modules) mkIf mkOptionDefault mkForce;
|
||||
inherit (lib.attrsets) attrValues mapAttrs;
|
||||
|
|
@ -123,7 +123,7 @@ let
|
|||
enabledCfg = filter (port: port.enable) cfg;
|
||||
mkListen = listen: addr: let
|
||||
listenAttrs = {
|
||||
inherit addr;
|
||||
addr = mkAddress6 addr;
|
||||
inherit (listen) port ssl extraParameters proxyProtocol;
|
||||
};
|
||||
in
|
||||
|
|
|
|||
|
|
@ -216,10 +216,11 @@ let
|
|||
|
||||
config = let
|
||||
enabledServers = filterAttrs (_: server: server.enable) config.servers;
|
||||
activeServers = filterAttrs (_: server: server.settings.backup or false == false) enabledServers;
|
||||
assertServers = v: assert enabledServers != {}; v;
|
||||
in {
|
||||
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 (
|
||||
mapAttrsToList (_: server: mkIf server.enable server.serverDirective) config.servers
|
||||
++ [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.grocy
|
||||
nixos.access.barcodebuddy
|
||||
nixos.access.nfandroidtv
|
||||
nixos.home-assistant
|
||||
nixos.zigbee2mqtt
|
||||
nixos.syncplay
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue