vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / services / video / mediamtx.nix
blob5d8d76be69a3a4eccf338f7c976abc19523cf63e
1 { config, lib, pkgs, ... }:
3 let
4   cfg = config.services.mediamtx;
5   format = pkgs.formats.yaml {};
6 in
8   meta.maintainers = with lib.maintainers; [ fpletz ];
10   options = {
11     services.mediamtx = {
12       enable = lib.mkEnableOption "MediaMTX";
14       package = lib.mkPackageOption pkgs "mediamtx" { };
16       settings = lib.mkOption {
17         description = ''
18           Settings for MediaMTX. Refer to the defaults at
19           <https://github.com/bluenviron/mediamtx/blob/main/mediamtx.yml>.
20         '';
21         type = format.type;
22         default = {};
23         example = {
24           paths = {
25             cam = {
26               runOnInit = "\${lib.getExe pkgs.ffmpeg} -f v4l2 -i /dev/video0 -f rtsp rtsp://localhost:$RTSP_PORT/$RTSP_PATH";
27               runOnInitRestart = true;
28             };
29           };
30         };
31       };
33       env = lib.mkOption {
34         type = with lib.types; attrsOf anything;
35         description = "Extra environment variables for MediaMTX";
36         default = {};
37         example = {
38           MTX_CONFKEY = "mykey";
39         };
40       };
42       allowVideoAccess = lib.mkEnableOption ''
43         access to video devices like cameras on the system
44       '';
45     };
46   };
48   config = lib.mkIf cfg.enable {
49     # NOTE: mediamtx watches this file and automatically reloads if it changes
50     environment.etc."mediamtx.yaml".source = format.generate "mediamtx.yaml" cfg.settings;
52     systemd.services.mediamtx = {
53       after = [ "network.target" ];
54       wantedBy = [ "multi-user.target" ];
56       environment = cfg.env;
58       serviceConfig = {
59         DynamicUser = true;
60         User = "mediamtx";
61         Group = "mediamtx";
62         SupplementaryGroups = lib.mkIf cfg.allowVideoAccess "video";
63         ExecStart = "${cfg.package}/bin/mediamtx /etc/mediamtx.yaml";
64       };
65     };
66   };