at 17.09-beta 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 "mjpg-streamer webcam streamer"; 16 17 inputPlugin = mkOption { 18 type = types.str; 19 default = "input_uvc.so"; 20 description = '' 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 = '' 29 Output plugin. <literal>@www@</literal> 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 = "mjpg-streamer user name."; 38 }; 39 40 group = mkOption { 41 type = types.str; 42 default = "video"; 43 description = "mjpg-streamer group name."; 44 }; 45 46 }; 47 48 }; 49 50 config = mkIf cfg.enable { 51 52 users.extraUsers = optional (cfg.user == "mjpg-streamer") { 53 name = "mjpg-streamer"; 54 uid = config.ids.uids.mjpg-streamer; 55 group = cfg.group; 56 }; 57 58 systemd.services.mjpg-streamer = { 59 description = "mjpg-streamer webcam streamer"; 60 wantedBy = [ "multi-user.target" ]; 61 62 serviceConfig = { 63 User = cfg.user; 64 Group = cfg.group; 65 Restart = "on-failure"; 66 RestartSec = 1; 67 }; 68 69 script = '' 70 IPLUGIN="${cfg.inputPlugin}" 71 OPLUGIN="${cfg.outputPlugin}" 72 OPLUGIN="''${OPLUGIN//@www@/${pkgs.mjpg-streamer}/share/mjpg-streamer/www}" 73 exec ${pkgs.mjpg-streamer}/bin/mjpg_streamer -i "$IPLUGIN" -o "$OPLUGIN" 74 ''; 75 }; 76 77 }; 78 79}