1{ config, pkgs, lib, mono, ... }:
2
3with lib;
4
5let
6 cfg = config.services.emby;
7 emby = pkgs.emby;
8in
9{
10 options = {
11 services.emby = {
12 enable = mkEnableOption "Emby Media Server";
13
14 user = mkOption {
15 type = types.str;
16 default = "emby";
17 description = "User account under which Emby runs.";
18 };
19
20 group = mkOption {
21 type = types.str;
22 default = "emby";
23 description = "Group under which emby runs.";
24 };
25
26 dataDir = mkOption {
27 type = types.path;
28 default = "/var/lib/emby/ProgramData-Server";
29 description = "Location where Emby stores its data.";
30 };
31 };
32 };
33
34 config = mkIf cfg.enable {
35 systemd.services.emby = {
36 description = "Emby Media Server";
37 after = [ "network.target" ];
38 wantedBy = [ "multi-user.target" ];
39 preStart = ''
40 test -d ${cfg.dataDir} || {
41 echo "Creating initial Emby data directory in ${cfg.dataDir}"
42 mkdir -p ${cfg.dataDir}
43 chown -R ${cfg.user}:${cfg.group} ${cfg.dataDir}
44 }
45 '';
46
47 serviceConfig = {
48 Type = "simple";
49 User = cfg.user;
50 Group = cfg.group;
51 PermissionsStartOnly = "true";
52 ExecStart = "${pkgs.emby}/bin/MediaBrowser.Server.Mono";
53 Restart = "on-failure";
54 };
55 };
56
57 users.extraUsers = mkIf (cfg.user == "emby") {
58 emby = {
59 group = cfg.group;
60 uid = config.ids.uids.emby;
61 };
62 };
63
64 users.extraGroups = mkIf (cfg.group == "emby") {
65 emby = {
66 gid = config.ids.gids.emby;
67 };
68 };
69 };
70}