1{ config, lib, pkgs, ... }:
2
3with lib;
4
5let
6
7 name = "sickbeard";
8
9 cfg = config.services.sickbeard;
10 sickbeard = cfg.package;
11
12in
13{
14
15 ###### interface
16
17 options = {
18 services.sickbeard = {
19 enable = mkOption {
20 type = types.bool;
21 default = false;
22 description = "Whether to enable the sickbeard server.";
23 };
24 package = mkOption {
25 type = types.package;
26 default = pkgs.sickbeard;
27 defaultText = literalExpression "pkgs.sickbeard";
28 example = literalExpression "pkgs.sickrage";
29 description =''
30 Enable <literal>pkgs.sickrage</literal> or <literal>pkgs.sickgear</literal>
31 as an alternative to SickBeard
32 '';
33 };
34 dataDir = mkOption {
35 type = types.path;
36 default = "/var/lib/${name}";
37 description = "Path where to store data files.";
38 };
39 configFile = mkOption {
40 type = types.path;
41 default = "${cfg.dataDir}/config.ini";
42 description = "Path to config file.";
43 };
44 port = mkOption {
45 type = types.ints.u16;
46 default = 8081;
47 description = "Port to bind to.";
48 };
49 user = mkOption {
50 type = types.str;
51 default = name;
52 description = "User to run the service as";
53 };
54 group = mkOption {
55 type = types.str;
56 default = name;
57 description = "Group to run the service as";
58 };
59 };
60 };
61
62
63 ###### implementation
64
65 config = mkIf cfg.enable {
66
67 users.users = optionalAttrs (cfg.user == name) {
68 ${name} = {
69 uid = config.ids.uids.sickbeard;
70 group = cfg.group;
71 description = "sickbeard user";
72 home = cfg.dataDir;
73 createHome = true;
74 };
75 };
76
77 users.groups = optionalAttrs (cfg.group == name) {
78 ${name}.gid = config.ids.gids.sickbeard;
79 };
80
81 systemd.services.sickbeard = {
82 description = "Sickbeard Server";
83 wantedBy = [ "multi-user.target" ];
84 after = [ "network.target" ];
85
86 serviceConfig = {
87 User = cfg.user;
88 Group = cfg.group;
89 ExecStart = "${sickbeard}/bin/${sickbeard.pname} --datadir ${cfg.dataDir} --config ${cfg.configFile} --port ${toString cfg.port}";
90 };
91 };
92 };
93}