at 23.11-beta 1.9 kB view raw
1{ config, lib, pkgs, ... }: 2 3let 4 cfg = config.services.mediamtx; 5 format = pkgs.formats.yaml {}; 6in 7{ 8 meta.maintainers = with lib.maintainers; [ fpletz ]; 9 10 options = { 11 services.mediamtx = { 12 enable = lib.mkEnableOption (lib.mdDoc "MediaMTX"); 13 14 package = lib.mkPackageOptionMD pkgs "mediamtx" { }; 15 16 settings = lib.mkOption { 17 description = lib.mdDoc '' 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 }; 32 33 env = lib.mkOption { 34 type = with lib.types; attrsOf anything; 35 description = lib.mdDoc "Extra environment variables for MediaMTX"; 36 default = {}; 37 example = { 38 MTX_CONFKEY = "mykey"; 39 }; 40 }; 41 42 allowVideoAccess = lib.mkEnableOption (lib.mdDoc '' 43 access to video devices like cameras on the system 44 ''); 45 }; 46 }; 47 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; 51 52 systemd.services.mediamtx = { 53 after = [ "network.target" ]; 54 wantedBy = [ "multi-user.target" ]; 55 56 environment = cfg.env; 57 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 }; 67}