From 3c44bbc0346f8508fc5dcd6fa4f1da93c0d6b3f5 Mon Sep 17 00:00:00 2001 From: "Giulio De Pasquale (aider)" Date: Sat, 26 Apr 2025 16:51:50 +0100 Subject: [PATCH] feat: add Jellyfin service module with configuration options --- modules/services/default.nix | 1 + modules/services/jellyfin/default.nix | 68 +++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 modules/services/jellyfin/default.nix diff --git a/modules/services/default.nix b/modules/services/default.nix index ba94c76..46575e9 100644 --- a/modules/services/default.nix +++ b/modules/services/default.nix @@ -3,6 +3,7 @@ ./bazarr ./gitea ./immich + ./jellyfin ./prowlarr ./radarr ./sonarr diff --git a/modules/services/jellyfin/default.nix b/modules/services/jellyfin/default.nix new file mode 100644 index 0000000..7d81a40 --- /dev/null +++ b/modules/services/jellyfin/default.nix @@ -0,0 +1,68 @@ +{ config, lib, pkgs, ... }: + +let + inherit (lib) mkIf mkForce; + + cfg = config.pepe.services.jellyfin; +in +{ + options.pepe.services.jellyfin = with lib; { + enable = mkEnableOption "Enable jellyfin"; + package = mkPackageOption pkgs "jellyfin" { }; + domain = mkOption { + type = types.str; + default = null; + }; + tmpfsSize = mkOption { + type = types.str; + default = "20G"; + description = "Size of the tmpfs mount for Jellyfin"; + }; + }; + + config = mkIf cfg.enable { + # needed since StateDirectory does not accept symlinks + systemd.services.jellyfin.serviceConfig.StateDirectory = mkForce ""; + + architect.vhost.${cfg.domain} = with config.architect.networks; { + dnsInterfaces = [ "lan" "tailscale" ]; + locations = { + "/" = { + port = 8096; + allowLan = true; + allow = [ + tailscale.net + ]; + }; + + "/socket" = { + port = 8096; + allowLan = true; + proxyWebsockets = true; + allow = [ + tailscale.net + ]; + }; + }; + }; + + services.jellyfin = { + enable = true; + group = "media"; + package = cfg.package; + }; + + users.groups = { + video.members = [ "jellyfin" ]; + render.members = [ "jellyfin" ]; + }; + + pepe.core.media.groupMembers = mkIf config.pepe.core.media.enable [ "jellyfin" ]; + + fileSystems."/tmp/jellyfin" = { + device = "none"; + fsType = "tmpfs"; + options = [ "defaults" "size=${cfg.tmpfsSize}" "uid=jellyfin" ]; + }; + }; +}