grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / hardware / vdr.nix
blob6adab680257ff5731df56afc44d04e4f33b6d635
1 { config, lib, pkgs, ... }:
2 let
3   cfg = config.services.vdr;
5   inherit (lib)
6     mkEnableOption mkPackageOption mkOption types mkIf optional;
7 in
9   options = {
11     services.vdr = {
12       enable = mkEnableOption "VDR, a video disk recorder";
14       package = mkPackageOption pkgs "vdr" {
15         example = "wrapVdr.override { plugins = with pkgs.vdrPlugins; [ hello ]; }";
16       };
18       videoDir = mkOption {
19         type = types.path;
20         default = "/srv/vdr/video";
21         description = "Recording directory";
22       };
24       extraArguments = mkOption {
25         type = types.listOf types.str;
26         default = [ ];
27         description = "Additional command line arguments to pass to VDR.";
28       };
30       enableLirc = mkEnableOption "LIRC";
32       user = mkOption {
33         type = types.str;
34         default = "vdr";
35         description = ''
36           User under which the VDR service runs.
37         '';
38       };
40       group = mkOption {
41         type = types.str;
42         default = "vdr";
43         description = ''
44           Group under which the VDRvdr service runs.
45         '';
46       };
47     };
49   };
51   config = mkIf cfg.enable {
53     systemd.tmpfiles.rules = [
54       "d ${cfg.videoDir} 0755 ${cfg.user} ${cfg.group} -"
55       "Z ${cfg.videoDir} - ${cfg.user} ${cfg.group} -"
56     ];
58     systemd.services.vdr = {
59       description = "VDR";
60       wantedBy = [ "multi-user.target" ];
61       wants = optional cfg.enableLirc "lircd.service";
62       after = [ "network.target" ]
63         ++ optional cfg.enableLirc "lircd.service";
64       serviceConfig = {
65         ExecStart =
66           let
67             args = [
68               "--video=${cfg.videoDir}"
69             ]
70             ++ optional cfg.enableLirc "--lirc=${config.passthru.lirc.socket}"
71             ++ cfg.extraArguments;
72           in
73           "${cfg.package}/bin/vdr ${lib.escapeShellArgs args}";
74         User = cfg.user;
75         Group = cfg.group;
76         CacheDirectory = "vdr";
77         StateDirectory = "vdr";
78         RuntimeDirectory = "vdr";
79         Restart = "on-failure";
80       };
81     };
83     environment.systemPackages = [ cfg.package ];
85     users.users = mkIf (cfg.user == "vdr") {
86       vdr = {
87         inherit (cfg) group;
88         home = "/run/vdr";
89         isSystemUser = true;
90         extraGroups = [
91           "video"
92           "audio"
93         ]
94         ++ optional cfg.enableLirc "lirc";
95       };
96     };
98     users.groups = mkIf (cfg.group == "vdr") { vdr = { }; };
100   };