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