nix/moduler/wedding.nix
2026-03-29 14:31:10 +02:00

72 lines
1.7 KiB
Nix

{
config,
inputs,
lib,
pkgs,
...
}:
let
weddingPackage =
if inputs.wedding ? packages then
inputs.wedding.packages.${pkgs.system}.default
else
pkgs.buildGoModule {
pname = "wedding";
version = "source";
src = inputs.wedding;
subPackages = [ "internal/cmd/app" ];
vendorHash = "sha256-rxaikaR4UGXu2hIuR9ZbOnITBsCq5zEDAlwrhhRudoo=";
env = {
CGO_ENABLED = 0;
};
ldflags = [
"-s"
"-w"
];
postInstall = ''
mkdir -p $out/share/wedding
cp -r public $out/share/wedding/public
'';
};
in
{
options.wedding = {
enable = lib.mkEnableOption "Wedding site";
};
config = lib.mkIf config.wedding.enable {
sops.secrets.gotify_password = { };
systemd.services.wedding = {
description = "Wedding site";
wantedBy = [ "multi-user.target" ];
after = [ "network-online.target" ];
wants = [ "network-online.target" ];
serviceConfig = {
ExecStart = "${weddingPackage}/bin/app";
Restart = "on-failure";
DynamicUser = true;
WorkingDirectory = "${weddingPackage}/share/wedding";
Environment = [
"PUBLIC_DIR=${weddingPackage}/share/wedding/public"
"GOTIFY_URL=https://message.wastring.com"
"GOTIFY_TOKEN=AxlVMOKqqoohYxC"
"HTTP_ADDR=0.0.0.0:8083"
"PORT=8083"
];
};
};
services.nginx = {
virtualHosts."wedding.wastring.com" = {
enableACME = true;
forceSSL = true;
locations."/" = {
proxyPass = "http://localhost:8083";
proxyWebsockets = true;
};
};
};
};
}