jellyfin: nixpkgs service on horse with mediaPaths (NFS or local) #16

Merged
rpickler merged 3 commits from issue-13-jellyfin-storage-options into main 2026-10-23 15:59:18 +00:00
Member

Rewritten from scratch per review — the previous commit is gone (branch force-reset onto main).

New approach:

  • Uses the upstream nixpkgs services.jellyfin module directly (no container, nothing custom). All server options (package, user/group, data dirs, GPU transcoding via services.jellyfin.hardwareAcceleration, firewall) are the stock nixpkgs options.
  • Adds one option, rpickler.jellyfin.mediaPaths, per issue #13: each entry is a media directory, either local storage or NFS (device = "host:/export" creates the fileSystems mount; device = null means local). The jellyfin unit gets RequiresMountsFor for every path so it starts only after the media is mounted — NFS mounts just work.
  • Enabled on horse in hosts/horse.nix for the existing /volume/public/media/{movies,tv,music} (local btrfs); adding an NFS-backed path later is one line in the host config.

Library folders stay a one-time web-UI/API task; the module only guarantees the service can see the paths.

Rewritten from scratch per review — the previous commit is gone (branch force-reset onto `main`). New approach: - Uses the upstream nixpkgs `services.jellyfin` module directly (no container, nothing custom). All server options (package, user/group, data dirs, GPU transcoding via `services.jellyfin.hardwareAcceleration`, firewall) are the stock nixpkgs options. - Adds one option, `rpickler.jellyfin.mediaPaths`, per issue #13: each entry is a media directory, either local storage or NFS (`device = "host:/export"` creates the `fileSystems` mount; `device = null` means local). The jellyfin unit gets `RequiresMountsFor` for every path so it starts only after the media is mounted — NFS mounts just work. - Enabled on `horse` in `hosts/horse.nix` for the existing `/volume/public/media/{movies,tv,music}` (local btrfs); adding an NFS-backed path later is one line in the host config. Library folders stay a one-time web-UI/API task; the module only guarantees the service can see the paths.
Owner

@hermes-bot This is awful. Start over from scratch. Use the service already available in nixpkgs. Ignore the previous commit entirely as that is not the way to do this. Go back to the original issue #13

@hermes-bot This is awful. Start over from scratch. Use the service already available in nixpkgs. Ignore the previous commit entirely as that is not the way to do this. Go back to the original issue #13
hermes-bot force-pushed issue-13-jellyfin-storage-options from 41c8dbb664 to a72e068d59 2026-10-11 07:13:49 +00:00 Compare
hermes-bot changed title from Add jellyfin module with mediaPaths option to jellyfin: nixpkgs service on horse with mediaPaths (NFS or local) 2026-10-11 07:18:46 +00:00
Author
Member

Done — branch force-reset onto main and re-implemented from scratch, the old commit is gone.

It now just drives the nixpkgs services.jellyfin module (no container): the module enables services.jellyfin.enable + openFirewall, and adds a single option, rpickler.jellyfin.mediaPaths, for issue #13. Each path is local storage (device = null) or an NFS mount (device = "host:/export" → creates the fileSystems entry); the jellyfin unit takes RequiresMountsFor for every path so it can’t start before media is mounted.

Enabled on horse for /volume/public/media/{movies,tv,music} (local). GPU transcoding is available through the stock services.jellyfin.hardwareAcceleration options when you want it.

Ready for another look: #16

Done — branch force-reset onto `main` and re-implemented from scratch, the old commit is gone. It now just drives the nixpkgs `services.jellyfin` module (no container): the module enables `services.jellyfin.enable` + `openFirewall`, and adds a single option, `rpickler.jellyfin.mediaPaths`, for issue #13. Each path is local storage (`device = null`) or an NFS mount (`device = "host:/export"` → creates the `fileSystems` entry); the jellyfin unit takes `RequiresMountsFor` for every path so it can’t start before media is mounted. Enabled on horse for `/volume/public/media/{movies,tv,music}` (local). GPU transcoding is available through the stock `services.jellyfin.hardwareAcceleration` options when you want it. Ready for another look: https://git.richardpickler.com/richardpickler.com/nixos/pulls/16
rpickler deleted branch issue-13-jellyfin-storage-options 2026-10-23 15:59:19 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
richardpickler.com/nixos!16
No description provided.