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