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}