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