at 24.11-pre 2.2 kB view raw
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 = "Whether to enable the sickbeard server."; 24 }; 25 package = mkPackageOption pkgs "sickbeard" { 26 example = "sickrage"; 27 extraDescription = '' 28 Enable `pkgs.sickrage` or `pkgs.sickgear` 29 as an alternative to SickBeard 30 ''; 31 }; 32 dataDir = mkOption { 33 type = types.path; 34 default = "/var/lib/${name}"; 35 description = "Path where to store data files."; 36 }; 37 configFile = mkOption { 38 type = types.path; 39 default = "${cfg.dataDir}/config.ini"; 40 defaultText = literalExpression ''"''${config.${opt.dataDir}}/config.ini"''; 41 description = "Path to config file."; 42 }; 43 port = mkOption { 44 type = types.ints.u16; 45 default = 8081; 46 description = "Port to bind to."; 47 }; 48 user = mkOption { 49 type = types.str; 50 default = name; 51 description = "User to run the service as"; 52 }; 53 group = mkOption { 54 type = types.str; 55 default = name; 56 description = "Group to run the service as"; 57 }; 58 }; 59 }; 60 61 62 ###### implementation 63 64 config = mkIf cfg.enable { 65 66 users.users = optionalAttrs (cfg.user == name) { 67 ${name} = { 68 uid = config.ids.uids.sickbeard; 69 group = cfg.group; 70 description = "sickbeard user"; 71 home = cfg.dataDir; 72 createHome = true; 73 }; 74 }; 75 76 users.groups = optionalAttrs (cfg.group == name) { 77 ${name}.gid = config.ids.gids.sickbeard; 78 }; 79 80 systemd.services.sickbeard = { 81 description = "Sickbeard Server"; 82 wantedBy = [ "multi-user.target" ]; 83 after = [ "network.target" ]; 84 85 serviceConfig = { 86 User = cfg.user; 87 Group = cfg.group; 88 ExecStart = "${sickbeard}/bin/${sickbeard.pname} --datadir ${cfg.dataDir} --config ${cfg.configFile} --port ${toString cfg.port}"; 89 }; 90 }; 91 }; 92}