at 23.11-pre 1.8 kB view raw
1{ config, lib, pkgs, ... }: 2 3with lib; 4 5let 6 7 cfg = config.services.mjpg-streamer; 8 9in { 10 11 options = { 12 13 services.mjpg-streamer = { 14 15 enable = mkEnableOption (lib.mdDoc "mjpg-streamer webcam streamer"); 16 17 inputPlugin = mkOption { 18 type = types.str; 19 default = "input_uvc.so"; 20 description = lib.mdDoc '' 21 Input plugin. See plugins documentation for more information. 22 ''; 23 }; 24 25 outputPlugin = mkOption { 26 type = types.str; 27 default = "output_http.so -w @www@ -n -p 5050"; 28 description = lib.mdDoc '' 29 Output plugin. `@www@` is substituted for default mjpg-streamer www directory. 30 See plugins documentation for more information. 31 ''; 32 }; 33 34 user = mkOption { 35 type = types.str; 36 default = "mjpg-streamer"; 37 description = lib.mdDoc "mjpg-streamer user name."; 38 }; 39 40 group = mkOption { 41 type = types.str; 42 default = "video"; 43 description = lib.mdDoc "mjpg-streamer group name."; 44 }; 45 46 }; 47 48 }; 49 50 config = mkIf cfg.enable { 51 52 users.users = optionalAttrs (cfg.user == "mjpg-streamer") { 53 mjpg-streamer = { 54 uid = config.ids.uids.mjpg-streamer; 55 group = cfg.group; 56 }; 57 }; 58 59 systemd.services.mjpg-streamer = { 60 description = "mjpg-streamer webcam streamer"; 61 wantedBy = [ "multi-user.target" ]; 62 63 serviceConfig = { 64 User = cfg.user; 65 Group = cfg.group; 66 Restart = "on-failure"; 67 RestartSec = 1; 68 }; 69 70 script = '' 71 IPLUGIN="${cfg.inputPlugin}" 72 OPLUGIN="${cfg.outputPlugin}" 73 OPLUGIN="''${OPLUGIN//@www@/${pkgs.mjpg-streamer}/share/mjpg-streamer/www}" 74 exec ${pkgs.mjpg-streamer}/bin/mjpg_streamer -i "$IPLUGIN" -o "$OPLUGIN" 75 ''; 76 }; 77 78 }; 79 80}