From 08a3bae6c637461530b60c27615863820773db68 Mon Sep 17 00:00:00 2001 From: Alexander Heldt Date: Fri, 24 Jul 2026 12:26:33 +0000 Subject: [PATCH] manatee: Add `solo-referee` module --- flake.lock | 56 ++++++++++++++++++ flake.nix | 6 ++ hosts/manatee/modules/default.nix | 1 + .../manatee/modules/solo-referee/default.nix | 46 ++++++++++++++ secrets/manatee/solo-referee-api-key.age | Bin 0 -> 449 bytes secrets/secrets.nix | 1 + 6 files changed, 110 insertions(+) create mode 100644 hosts/manatee/modules/solo-referee/default.nix create mode 100644 secrets/manatee/solo-referee-api-key.age diff --git a/flake.lock b/flake.lock index a797549..89e039a 100644 --- a/flake.lock +++ b/flake.lock @@ -205,6 +205,24 @@ "type": "github" } }, + "flake-utils_4": { + "inputs": { + "systems": "systems_7" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, "home-manager": { "inputs": { "nixpkgs": [ @@ -892,10 +910,33 @@ "nixpkgs": "nixpkgs_3", "pppdotpm-site": "pppdotpm-site", "puppy-tracker": "puppy-tracker", + "solo-referee": "solo-referee", "whib-backend": "whib-backend", "whib-frontend": "whib-frontend" } }, + "solo-referee": { + "inputs": { + "flake-utils": "flake-utils_4", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1784841708, + "narHash": "sha256-MFWt9qWaCZXOCrJnacC8bmxndbnivEkKD1QHEIpWDf8=", + "ref": "main", + "rev": "6782daabb65df4374bd9af433938fe4ab05124a2", + "revCount": 6, + "type": "git", + "url": "ssh://gitea@git.ppp.pm:1122/alex/solo-referee.git" + }, + "original": { + "ref": "main", + "type": "git", + "url": "ssh://gitea@git.ppp.pm:1122/alex/solo-referee.git" + } + }, "systems": { "locked": { "lastModified": 1681028828, @@ -986,6 +1027,21 @@ "type": "github" } }, + "systems_7": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, "whib-backend": { "inputs": { "nixpkgs": [ diff --git a/flake.nix b/flake.nix index df46569..2eff426 100644 --- a/flake.nix +++ b/flake.nix @@ -92,6 +92,12 @@ # url = "path:/home/alex/code/puppy-tracker"; inputs.nixpkgs.follows = "nixpkgs"; }; + + solo-referee = { + url = "git+ssh://gitea@git.ppp.pm:1122/alex/solo-referee.git?ref=main"; + # url = "path:/home/alex/code/solo-referee"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; outputs = diff --git a/hosts/manatee/modules/default.nix b/hosts/manatee/modules/default.nix index c8ce23b..f9553ec 100644 --- a/hosts/manatee/modules/default.nix +++ b/hosts/manatee/modules/default.nix @@ -26,6 +26,7 @@ in homepage.enable = true; disk-smart.enable = true; puppy-tracker.enable = true; + solo-referee.enable = true; }; }; } diff --git a/hosts/manatee/modules/solo-referee/default.nix b/hosts/manatee/modules/solo-referee/default.nix new file mode 100644 index 0000000..6073853 --- /dev/null +++ b/hosts/manatee/modules/solo-referee/default.nix @@ -0,0 +1,46 @@ +{ + inputs, + lib, + config, + ... +}: +let + enabled = config.mod.solo-referee.enable; + port = 8090; +in +{ + options = { + mod.solo-referee = { + enable = lib.mkEnableOption "Enable solo-referee module"; + }; + }; + + imports = [ + inputs.solo-referee.nixosModules.default + ]; + + config = lib.mkIf enabled { + mod.homepage.services = [ + { + name = "Solo Referee"; + port = port; + description = "Solo-RPG tool with Claude as GM"; + # url omitted → homepage links to http://manatee:${port}. + } + ]; + + services.solo-referee = { + enable = true; + inherit port; + # Reachable on the LAN / Tailscale at manatee:${port}; no public vhost. + address = "0.0.0.0"; + openFirewall = true; + # Anthropic API key kept out of the store; the file holds + # `ANTHROPIC_API_KEY=...`. Without it the offline stub GM runs. + apiKeyFile = config.age.secrets."solo-referee-api-key".path; + }; + + age.secrets."solo-referee-api-key".file = + ../../../../secrets/manatee/solo-referee-api-key.age; + }; +} diff --git a/secrets/manatee/solo-referee-api-key.age b/secrets/manatee/solo-referee-api-key.age new file mode 100644 index 0000000000000000000000000000000000000000..0c4d09436a4c1379728bdde106907a5b51e3a099 GIT binary patch literal 449 zcmYdHPt{G$OD?J`D9Oyv)5|YP*Do{V(zR14F3!+RO))YxHMCSH&kic{b5w9ostTyo zt}4>@)~?Dm_w+W8jPTEkO3zG6*LK!Vj`WB~_X{^p_R$Y;HQ_1?FG?{n^fM3j^zt?i zPIA;w$}q?+O-c$4EA%(i_sC5zPBRWPbaiqxFhRFXJKrzSBTykEuQVgexggvxGsPm% zLc7Y#)3-7-Ji|GwIHag7Ji^N?GStb)CD*;kEs)C~Go{4MAlK0;H@v_xGQFb2HN_*Z z$T>VH%G*4vsH`e7NJRsCF z#URwEC^$DY$Sh3Ttuo6X+=8oeyQR@I$#at;E1z+=H9whm{Y}P+dBv`A!CMMuNt??X zzjMEF)YKsJ@ZXu`^W+yO2)He&IpwbFE%VQ*&)VtOwg(?F_WpAE_07mv|5&+A zTtBHe>*Ulm9-gicYVybUW5KU;w;qNvBvsdkR#%=i&aeET6e^%7y)NchS9SIl<2art i0dsa4|8zaI>5$t}u>&tWdM+*sH#vOfnrn?y*Hr*Kp{g$c literal 0 HcmV?d00001 diff --git a/secrets/secrets.nix b/secrets/secrets.nix index f4ca17a..89606b7 100644 --- a/secrets/secrets.nix +++ b/secrets/secrets.nix @@ -43,6 +43,7 @@ in { "manatee/romm-db-password.age".publicKeys = [ manatee alex ]; "manatee/romm-metadata-api-keys.age".publicKeys = [ manatee alex ]; "manatee/puppy-tracker-invite-code.age".publicKeys = [ manatee alex ]; + "manatee/solo-referee-api-key.age".publicKeys = [ manatee alex ]; "backwards/root.backwards.age".publicKeys = [ backwards alex ]; "backwards/root.backwards.pub.age".publicKeys = [ backwards alex ];