synix/modules/nixos/jellyfin/default.nix
sid 95a533c876
All checks were successful
Deploy docs / build-and-deploy (push) Successful in 3s
initial commit
2026-02-23 20:34:35 +01:00

66 lines
1.4 KiB
Nix

{
config,
lib,
pkgs,
...
}:
let
cfg = config.services.jellyfin;
domain = config.networking.domain;
subdomain = cfg.reverseProxy.subdomain;
fqdn = if (cfg.reverseProxy.enable && subdomain != "") then "${subdomain}.${domain}" else domain;
inherit (lib)
mkDefault
mkIf
mkOption
types
;
inherit (lib.utils)
mkReverseProxyOption
mkVirtualHost
;
in
{
options.services.jellyfin = {
reverseProxy = mkReverseProxyOption "Jellyfin" "jf";
libraries = mkOption {
type = types.listOf types.str;
default = [
"movies"
"music"
"shows"
];
description = "A list of library names. Directories for these will be created under ${cfg.dataDir}/libraries.";
};
};
config = mkIf cfg.enable {
services.jellyfin = {
openFirewall = mkDefault false;
};
environment.systemPackages = with pkgs; [
jellyfin-web
jellyfin-ffmpeg
];
systemd.tmpfiles.rules =
(map (
library: "d ${cfg.dataDir}/libraries/${library} 0770 ${cfg.user} ${cfg.group} -"
) cfg.libraries)
++ [
"z ${cfg.dataDir} 0770 ${cfg.user} ${cfg.group} -"
"Z ${cfg.dataDir}/libraries 0770 ${cfg.user} ${cfg.group} -"
];
services.nginx.virtualHosts = mkIf cfg.reverseProxy.enable {
"${fqdn}" = mkVirtualHost {
port = 8096;
ssl = cfg.reverseProxy.forceSSL;
};
};
};
}