Merge pull request #7434 from Forkk/plex-media-server

plex: add support for managing plugins via Nix
This commit is contained in:
Arseniy Seroka 2015-05-11 14:48:30 +03:00
commit 26492cdba3

View file

@ -30,6 +30,30 @@ in
default = "plex"; default = "plex";
description = "Group under which Plex runs."; description = "Group under which Plex runs.";
}; };
managePlugins = mkOption {
type = types.bool;
default = true;
description = ''
If set to true, this option will cause all of the symlinks in Plex's
plugin directory to be removed and symlinks for paths specified in
<option>extraPlugins</option> to be added.
'';
};
extraPlugins = mkOption {
type = types.listOf types.path;
default = [];
description = ''
A list of paths to extra plugin bundles to install in Plex's plugin
directory. Every time the systemd unit for Plex starts up, all of the
symlinks in Plex's plugin directory will be cleared and this module
will symlink all of the paths specified here to that directory. If
this behavior is undesired, set <option>managePlugins</option> to
false.
'';
};
}; };
}; };
@ -45,13 +69,48 @@ in
mkdir -p "${cfg.dataDir}" mkdir -p "${cfg.dataDir}"
chown -R ${cfg.user}:${cfg.group} "${cfg.dataDir}" chown -R ${cfg.user}:${cfg.group} "${cfg.dataDir}"
} }
# Copy the database skeleton files to /var/lib/plex/.skeleton # Copy the database skeleton files to /var/lib/plex/.skeleton
# See the the Nix expression for Plex's package for more information on
# why this is done.
test -d "${cfg.dataDir}/.skeleton" || mkdir "${cfg.dataDir}/.skeleton" test -d "${cfg.dataDir}/.skeleton" || mkdir "${cfg.dataDir}/.skeleton"
for db in "com.plexapp.plugins.library.db"; do for db in "com.plexapp.plugins.library.db"; do
cp "${plex}/usr/lib/plexmediaserver/Resources/base_$db" "${cfg.dataDir}/.skeleton/$db" cp "${plex}/usr/lib/plexmediaserver/Resources/base_$db" "${cfg.dataDir}/.skeleton/$db"
chmod u+w "${cfg.dataDir}/.skeleton/$db" chmod u+w "${cfg.dataDir}/.skeleton/$db"
chown ${cfg.user}:${cfg.group} "${cfg.dataDir}/.skeleton/$db" chown ${cfg.user}:${cfg.group} "${cfg.dataDir}/.skeleton/$db"
done done
# If managePlugins is enabled, setup symlinks for plugins.
${optionalString cfg.managePlugins ''
echo "Preparing plugin directory."
PLUGINDIR="${cfg.dataDir}/Plex Media Server/Plug-ins"
test -d "$PLUGINDIR" || {
mkdir -p "$PLUGINDIR";
chown ${cfg.user}:${cfg.group} "$PLUGINDIR";
}
echo "Removing old symlinks."
# First, remove all of the symlinks in the directory.
for f in `ls "$PLUGINDIR/"`; do
if [[ -L "$PLUGINDIR/$f" ]]; then
echo "Removing plugin symlink $PLUGINDIR/$f."
rm "$PLUGINDIR/$f"
fi
done
echo "Symlinking plugins."
for path in ${toString cfg.extraPlugins}; do
dest="$PLUGINDIR/$(basename $path)"
if [[ ! -d "$path" ]]; then
echo "Error symlinking plugin from $path: no such directory."
elif [[ -d "$dest" || -L "$dest" ]]; then
echo "Error symlinking plugin from $path to $dest: file or directory already exists."
else
echo "Symlinking plugin at $path..."
ln -s "$path" "$dest"
fi
done
''}
''; '';
serviceConfig = { serviceConfig = {
Type = "simple"; Type = "simple";