at 22.05-pre 2.3 kB view raw
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}