Files
homelab/config/frigate-frigate.nix
2025-12-09 14:35:20 +01:00

120 lines
2.6 KiB
Nix

{ config, tools, ... }:
let
hostname = tools.build_hostname "frigate";
mask_cidr = tools.mask_cidr;
camera = tools.build_ip "camera-entree-4";
user = "admin"; # use yours
pass = "admin"; # use yours
in
{
services.frigate = {
enable = true;
hostname = hostname;
checkConfig = false;
settings = {
auth = {
enabled = false;
trusted_proxies = [
mask_cidr
];
};
proxy = {
header_map = {
user = "X-authentik-name";
role = "X-authentik-groups";
};
separator = "|";
default_role = "admin";
};
# database.path => postgres ??
mqtt = {
enabled = true;
host = tools.build_hostname "mqtt";
user = "frigate";
password = "pouet";
# Auth ???
};
detect = {
enabled = true;
fps = 5;
};
detectors.cpu.type = "cpu";
objects.track = [
"person"
"car"
"bird"
"cat"
"dog"
];
motion.enabled = true;
# genai => ollama
semantic_search = {
enabled = true;
model_size = "small";
};
review.detections = {
enabled = true;
labels = [
"car"
"person"
"cat"
"dog"
];
};
record = {
enabled = true;
retain.days = 2;
preview.quality = "medium";
};
snapshots = {
enabled = true;
retain.default = 7;
};
# face_recognition = {
# enabled = true;
# model_size = "small";
# };
# lpr.enabled = true;
# classification.bird.enabled = true;
cameras = {
front = {
enabled = true;
ffmpeg.inputs = [
{
# TODO: Move this elsewhere
path = "rtsp://${user}:${pass}@${camera}:554/?streamtype=0&subtype=1";
roles = [
"audio"
"detect"
"record"
];
}
];
onvif = {
host = camera;
port = 8899;
user = user;
password = pass;
};
zones = {
ZoneA = {
coordinates = "0,0.036,0.985,0.041,0.985,0.494,0.01,0.496";
loitering_time = 0;
};
ZoneB = {
coordinates = "0,0.502,0,1,1,1,1,0.501";
inertia = 3;
loitering_time = 0;
};
};
# review.alerts.required_zones = [
# "ZoneA"
# "ZoneB"
# ];
};
};
};
# vaapiDriver ...
};
}