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