380b428d9a
- Added configuration for media stack on r5500, including paths for Jellyfin, Sonarr, Radarr, and other media services. - Integrated NFS client for accessing Jellyfin libraries from nixdesk. - Established Docker services for Dispatcharr and Organizr, including necessary user and group setups. - Created systemd services for managing media directories and ensuring proper permissions.
71 lines
2.5 KiB
Nix
71 lines
2.5 KiB
Nix
# Shared media group, directory layout, and Jellyfin config bind-mount on /mnt/media-stack.
|
|
{ config, lib, pkgs, ... }:
|
|
let
|
|
paths = import ./media-stack-paths.nix;
|
|
prowlarrCustomIndexer = "${./../_services/prowlarr/torrent9-custom.yml}";
|
|
inherit (paths)
|
|
mediaRoot
|
|
downloadsDir
|
|
downloadsIncompleteDir
|
|
sonarrDataDir
|
|
radarrDataDir
|
|
prowlarrDataDir
|
|
qbittorrentDataDir
|
|
seerrConfigDir
|
|
dispatcharrDataDir
|
|
organizrDataDir
|
|
jellyfinConfigDir
|
|
jellyfinMoviesDir
|
|
jellyfinTvDir
|
|
;
|
|
in
|
|
{
|
|
_module.args.mediaStackPaths = paths;
|
|
|
|
users.groups.media = { };
|
|
|
|
users.users.server.extraGroups = [ "media" ];
|
|
|
|
# Layout dirs only after /mnt/media-stack is mounted (tmpfiles at early boot would
|
|
# otherwise create paths on the root fs and break bind mounts / boot).
|
|
systemd.services.r5500-media-stack-dirs = {
|
|
description = "Create media-stack directory layout";
|
|
after = [ "mnt-media\\x2dmedia\\x2dstack.mount" ];
|
|
wantedBy = [ "multi-user.target" ];
|
|
serviceConfig = {
|
|
Type = "oneshot";
|
|
RemainAfterExit = true;
|
|
};
|
|
script = ''
|
|
set -e
|
|
install -d -m 0775 -o root -g media ${mediaRoot}
|
|
install -d -m 2775 -o root -g media ${jellyfinMoviesDir} ${jellyfinTvDir} ${downloadsDir}
|
|
install -d -m 2775 -o root -g media ${downloadsIncompleteDir}
|
|
install -d -m 0755 -o jellyfin -g jellyfin ${jellyfinConfigDir}
|
|
install -d -m 0700 -o sonarr -g sonarr ${sonarrDataDir}
|
|
install -d -m 0700 -o radarr -g radarr ${radarrDataDir}
|
|
install -d -m 0700 -o prowlarr -g prowlarr ${prowlarrDataDir}
|
|
install -d -m 0750 -o qbittorrent -g qbittorrent ${qbittorrentDataDir}
|
|
install -d -m 0755 -o jellyseerr -g jellyseerr ${seerrConfigDir} 2>/dev/null \
|
|
|| install -d -m 0755 -o root -g root ${seerrConfigDir}
|
|
install -d -m 0777 -o root -g root ${dispatcharrDataDir}
|
|
install -d -m 0755 -o organizr -g organizr ${organizrDataDir} 2>/dev/null \
|
|
|| install -d -m 0755 -o root -g root ${organizrDataDir}
|
|
install -d -m 0700 -o prowlarr -g prowlarr ${prowlarrDataDir}/Definitions/Custom
|
|
ln -sfn ${prowlarrCustomIndexer} ${prowlarrDataDir}/Definitions/Custom/torrent9-custom.yml
|
|
'';
|
|
};
|
|
|
|
# Jellyfin metadata on the media subvolume; nofail so a missing subvol never bricks boot.
|
|
fileSystems."/var/lib/jellyfin" = {
|
|
device = jellyfinConfigDir;
|
|
fsType = "none";
|
|
neededForBoot = false;
|
|
options = [
|
|
"bind"
|
|
"nofail"
|
|
"x-systemd.after=mnt-media\\x2dmedia\\x2dstack.mount"
|
|
];
|
|
};
|
|
}
|