at 23.11-pre 2.4 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 = 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}