Merge pull request #139553 from andrew-d/andrew/plex-scanners

Sandro a0a5e0be 0a3a4b3f

Changed files
+60 -7
nixos
modules
services
misc
pkgs
servers
+24
nixos/modules/services/misc/plex.nix
···
'';
};
+
extraScanners = mkOption {
+
type = types.listOf types.path;
+
default = [];
+
description = ''
+
A list of paths to extra scanners to install in Plex's scanners
+
directory.
+
+
Every time the systemd unit for Plex starts up, all of the symlinks
+
in Plex's scanners directory will be cleared and this module will
+
symlink all of the paths specified here to that directory.
+
'';
+
example = literalExample ''
+
[
+
(fetchFromGitHub {
+
owner = "ZeroQI";
+
repo = "Absolute-Series-Scanner";
+
rev = "773a39f502a1204b0b0255903cee4ed02c46fde0";
+
sha256 = "4l+vpiDdC8L/EeJowUgYyB3JPNTZ1sauN8liFAcK+PY=";
+
})
+
]
+
'';
+
};
+
package = mkOption {
type = types.package;
default = pkgs.plex;
···
# Configuration for our FHS userenv script
PLEX_DATADIR=cfg.dataDir;
PLEX_PLUGINS=concatMapStringsSep ":" builtins.toString cfg.extraPlugins;
+
PLEX_SCANNERS=concatMapStringsSep ":" builtins.toString cfg.extraScanners;
# The following variables should be set by the FHS userenv script:
# PLEX_MEDIA_SERVER_APPLICATION_SUPPORT_DIR
+36 -7
pkgs/servers/plex/default.nix
···
test -d "$pluginDir" || mkdir -p "$pluginDir"
# First, remove all of the symlinks in the plugins directory.
-
echo "Removing old symlinks"
-
for f in $(ls "$pluginDir/"); do
-
if [[ -L "$pluginDir/$f" ]]; then
-
echo "Removing plugin symlink: $pluginDir/$f"
-
rm "$pluginDir/$f"
-
fi
-
done
+
while IFS= read -r -d $'\0' f; do
+
echo "Removing plugin symlink: $f"
+
done < <(find "$pluginDir" -type l -print0)
echo "Symlinking plugins"
IFS=':' read -ra pluginsArray <<< "$PLEX_PLUGINS"
···
echo "Symlinking plugin at: $path"
ln -s "$path" "$dest"
fi
+
done
+
fi
+
+
if [[ -n "''${PLEX_SCANNERS:-}" ]]; then
+
for scannerType in Common Movies Music Series; do
+
echo "Preparing $scannerType scanners directory"
+
+
scannerDir="$PLEX_DATADIR/Plex Media Server/Scanners/$scannerType"
+
test -d "$scannerDir" || mkdir -p "$scannerDir"
+
+
# First, remove all of the symlinks in the scanners directory.
+
echo "Removing old symlinks"
+
while IFS= read -r -d $'\0' f; do
+
echo "Removing scanner symlink: $f"
+
done < <(find "$scannerDir" -type l -print0)
+
+
echo "Symlinking scanners"
+
IFS=':' read -ra scannersArray <<< "$PLEX_SCANNERS"
+
for path in "''${scannersArray[@]}"; do
+
# The provided source should contain a 'Scanners' directory; symlink
+
# from inside that.
+
subpath="$path/Scanners/$scannerType"
+
while IFS= read -r -d $'\0' file; do
+
dest="$scannerDir/$(basename "$file")"
+
+
if [[ -f "$dest" || -L "$dest" ]]; then
+
echo "Error symlinking scanner from $file to $dest: file or directory already exists"
+
else
+
echo "Symlinking scanner at: $file"
+
ln -s "$file" "$dest"
+
fi
+
done < <(find "$subpath" -type f -print0)
+
done
done
fi