nixfiles/hosts/hetzner-arm/containers/jellyfin/profiles/mediaMount.nix

63 lines
1.6 KiB
Nix

{
config,
pkgs,
...
}: let
inherit (config.services.secrets) secrets;
rcloneMedia = pkgs.writeShellScriptBin "rclone-media" ''
${pkgs.rclone}/bin/rclone --config ${secrets.rclone_config.path} "$@"
'';
mountMedia = pkgs.writeShellScriptBin "mount-media" ''
umount -flR /Media || true
${rcloneMedia}/bin/rclone-media mount Media-Combine: /Media \
--allow-other \
--uid=${toString config.users.users.jellyfin.uid} \
--gid=${toString config.users.groups.jellyfin.gid} \
--fast-list \
--umask=666 \
--cache-dir=/caches/media \
--dir-cache-time=1m \
--vfs-cache-mode=full \
--vfs-cache-max-size=5g \
--vfs-cache-max-age=120m \
--log-level=INFO "$@"
'';
in {
environment.systemPackages = with pkgs; [
rclone
rcloneMedia
fuse
fuse3
mountMedia
];
programs.fuse.userAllowOther = true;
systemd.services.jellyfin = {
wants = ["media-mount.service"];
after = ["media-mount.service"];
serviceConfig.ReadWritePaths = "/Media";
};
systemd.services.media-mount = {
wantedBy = ["jellyfin.service"];
partOf = ["jellyfin.service"];
path = with pkgs; [
fuse
fuse3
];
serviceConfig.ExecStart = "${mountMedia}/bin/mount-media --syslog";
};
systemd.tmpfiles.rules = [
"d /caches - root root"
"d /caches/media - jellyfin jellyfin"
"d /Media - jellyfin jellyfin"
"d /root/.config - root root"
"d /root/.config/rclone - root root"
"L /root/.config/rclone/rclone.conf - - - - ${secrets.rclone_config.path}"
];
}