nixos: add tdpixi service (port 8093) + vps-relay vhost

Idle Tower Defence Mini App by @plasmagoat forked from
github.com/plasmagoat/TDPixi. Pure static FastAPI serve,
no DB. Proxied at tdpixi.dannydannydanny.me.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
DannyDannyDanny 2026-06-08 22:27:32 +02:00
parent e2cf93e7d6
commit f8a873bd06
2 changed files with 30 additions and 3 deletions

View file

@ -50,11 +50,11 @@ in
# KomTolk (:8080), Shelfish (:8081), Scuttle (:8082), Bananasimulator # KomTolk (:8080), Shelfish (:8081), Scuttle (:8082), Bananasimulator
# (:8083), Forgejo (:3000), Escape Hormuz (:8090), bon (:8091), # (:8083), Forgejo (:3000), Escape Hormuz (:8090), bon (:8091),
# notes (:8092) are reachable only over the ZeroTier mesh — the # notes (:8092), TDPixi (:8093) are reachable only over the ZeroTier mesh —
# vps-relay Caddy reverse-proxies into them. Same pattern as # the vps-relay Caddy reverse-proxies into them. Same pattern as
# sunken-ship's bbbot. Not in global allowedTCPPorts, so the WAN side # sunken-ship's bbbot. Not in global allowedTCPPorts, so the WAN side
# stays closed. # stays closed.
networking.firewall.interfaces."zt+".allowedTCPPorts = [ 3000 8080 8081 8082 8083 8090 8091 8092 ]; networking.firewall.interfaces."zt+".allowedTCPPorts = [ 3000 8080 8081 8082 8083 8090 8091 8092 8093 ];
hardware.enableRedistributableFirmware = true; # iwlwifi (Intel 8260) + GPU + BT firmware hardware.enableRedistributableFirmware = true; # iwlwifi (Intel 8260) + GPU + BT firmware
@ -527,6 +527,29 @@ in
}; };
}; };
# TDPixi — Idle Tower Defence Telegram Mini App by @plasmagoat.
# Pure static serve, no DB. Code rsync'd to /home/danny/tdpixi/.
# Upstream: https://github.com/plasmagoat/TDPixi
systemd.services.tdpixi = let
pythonEnv = pkgs.python3.withPackages (ps: with ps; [
fastapi
uvicorn
]);
in {
description = "tdpixi Idle Tower Defence Mini App";
after = [ "network-online.target" ];
wants = [ "network-online.target" ];
wantedBy = [ "multi-user.target" ];
path = [ pythonEnv ];
serviceConfig = {
WorkingDirectory = "/home/danny/tdpixi";
ExecStart = "${pythonEnv}/bin/python -m uvicorn server:app --host :: --port 8093";
Restart = "on-failure";
RestartSec = 10;
User = "danny";
};
};
# Hara morning heartbeat — daily email check + Telegram good-morning ping. # Hara morning heartbeat — daily email check + Telegram good-morning ping.
# Runs claude in print mode with the Gmail MCP, then sends output via Bot API. # Runs claude in print mode with the Gmail MCP, then sends output via Bot API.
# Token lives in ~/.claude/channels/telegram/.env (managed by the telegram plugin). # Token lives in ~/.claude/channels/telegram/.env (managed by the telegram plugin).

View file

@ -142,6 +142,10 @@
"bon.dannydannydanny.me".extraConfig = '' "bon.dannydannydanny.me".extraConfig = ''
reverse_proxy http://[fdd5:53a2:de33:d269:6499:936c:48a:bbdc]:8091 reverse_proxy http://[fdd5:53a2:de33:d269:6499:936c:48a:bbdc]:8091
''; '';
# TDPixi — Idle Tower Defence Mini App by @plasmagoat, port 8093.
"tdpixi.dannydannydanny.me".extraConfig = ''
reverse_proxy http://[fdd5:53a2:de33:d269:6499:936c:48a:bbdc]:8093
'';
# notes — markdown blog (notes.X) + apex landing (X). Same backend # notes — markdown blog (notes.X) + apex landing (X). Same backend
# service on phantom :8092 routes by Host header. # service on phantom :8092 routes by Host header.
"notes.dannydannydanny.me".extraConfig = '' "notes.dannydannydanny.me".extraConfig = ''