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