102 lines
3.1 KiB
Nix
102 lines
3.1 KiB
Nix
{ config, lib, pkgs, ... }:
|
|
|
|
with lib;
|
|
let
|
|
hostname = config.instance.hostname;
|
|
hostSecrets = config.fudo.secrets.host-secrets."${hostname}";
|
|
|
|
domainName = "sea.fudo.org";
|
|
|
|
frigateExternalHost = "sea-cam.fudo.link";
|
|
frigateHost = "zbox";
|
|
frigateDirectory = frigateCfg.state-directory;
|
|
frigateMqttPassword =
|
|
pkgs.lib.passwd.stablerandom-passwd-file "frigate-mqtt-passwd"
|
|
config.instance.build-seed;
|
|
|
|
immichHost = "toothless";
|
|
|
|
in {
|
|
imports = [ ./sea.fudo.org/8bitdo.nix ];
|
|
|
|
config = {
|
|
fudo = {
|
|
services = {
|
|
metrics = {
|
|
private-network = true;
|
|
grafana.oauth = {
|
|
hostname = "authentik.fudo.org";
|
|
client-id =
|
|
config.fudo.secrets.files.domain-secrets."fudo.org"."grafana-oid-client-id";
|
|
client-secret =
|
|
config.fudo.secrets.files.domain-secrets."fudo.org"."grafana-oid-client-secret";
|
|
slug = "grafana-metrics";
|
|
};
|
|
};
|
|
|
|
mqtt.private.users.frigate = {
|
|
password-file = frigateMqttPassword;
|
|
acl = [ "frigate/#" ];
|
|
};
|
|
};
|
|
zones."sea.fudo.org".aliases = {
|
|
chat = "nostromo";
|
|
frigate = "zbox";
|
|
immich = immichHost;
|
|
};
|
|
};
|
|
|
|
services = {
|
|
immichContainer = mkIf (hostname == immichHost) {
|
|
enable = true;
|
|
images = let immichVersion = "v1.94.1";
|
|
in {
|
|
immich = "ghcr.io/immich-app/immich-server:${immichVersion}";
|
|
immich-ml =
|
|
"ghcr.io/immich-app/immich-machine-learning:${immichVersion}";
|
|
redis = "redis:6.2-alpine";
|
|
postgresql = "tensorchord/pgvecto-rs:pg14-v0.1.11";
|
|
};
|
|
};
|
|
|
|
nginx = mkIf (hostname == immichHost) {
|
|
enable = true;
|
|
recommendedOptimisation = true;
|
|
recommendedGzipSettings = true;
|
|
recommendedProxySettings = true;
|
|
virtualHosts."immich.${domainName}".locations."/" = {
|
|
proxyPass = "http://${immichHost}.${domainName}:${
|
|
toString config.services.immichContainer.port
|
|
}/";
|
|
recommendedProxySettings = true;
|
|
};
|
|
};
|
|
|
|
frigateContainer = mkIf (config.instance.hostname == frigateHost) {
|
|
enable = true;
|
|
log-level = "info";
|
|
images.frigate = "ghcr.io/blakeblackshear/frigate:0.13.0-beta5";
|
|
cameras =
|
|
genAttrs [ "cam-steps" "cam-patio" "cam-entrance" "cam-driveway" ]
|
|
(cam: {
|
|
default = cam == "cam-driveway";
|
|
streams = {
|
|
low =
|
|
"rtsp://frigate:{FRIGATE_RTSP_PASSWORD}@${cam}.sea.fudo.org:554/cam/realmonitor?channel=1&subtype=0";
|
|
high =
|
|
"rtsp://frigate:{FRIGATE_RTSP_PASSWORD}@${cam}.sea.fudo.org:554/cam/realmonitor?channel=1&subtype=0";
|
|
};
|
|
});
|
|
camera-password-file =
|
|
config.fudo.secrets.files.domain-secrets."sea.fudo.org".seattle-camera-password;
|
|
mqtt = {
|
|
host = config.fudo.services.mqtt.mqtt-hostname;
|
|
port = config.fudo.services.mqtt.private.port;
|
|
user = "frigate";
|
|
password-file = frigateMqttPassword;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
}
|