at 17.09-beta 1.6 kB view raw
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}