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