{ ... }: # Seerr (formerly Jellyseerr) — request manager for Jellyfin, talks to # Sonarr/Radarr to fulfill requests. Fresh install, no migrated data. # # configDir is left at the module default (/var/lib/seerr) on purpose: # systemd's StateDirectory= auto-chown for DynamicUser only applies to that # exact default path, not to an arbitrary custom one (same class of issue as # prowlarr.nix, worked around the same way) — bind-mount AppData onto the # default path instead of overriding configDir, so it stays on the RAID array # and survives an OS-disk reinstall like every other service's data. # # Mount onto /var/lib/private/seerr, NOT the public /var/lib/seerr: # DynamicUser+StateDirectory keeps real data at .../private/ and makes # the public path a symlink to it; binding onto the public path turns it into # a mountpoint systemd then can't rename during its migrate-on-start dance # ("Device or resource busy", exit 238/STATE_DIRECTORY). { services.seerr.enable = true; fileSystems."/var/lib/private/seerr" = { device = "/mnt/data/AppData/seerr"; fsType = "none"; options = [ "bind" ]; }; systemd.tmpfiles.rules = [ "d /mnt/data/AppData/seerr 0755 darman users -" ]; }