synix/modules/nixos/jellyfin/default.nix
sid ecf5132cbb
Some checks failed
Build tests / build-hosts (pull_request) Failing after 3s
Flake check / flake-check (pull_request) Failing after 13s
enforce new flake schema. formatting.
2026-05-31 18:50:41 +02:00

64 lines
1.4 KiB
Nix

{
config,
lib,
pkgs,
...
}:
let
cfg = config.services.jellyfin;
inherit (config.networking) domain;
inherit (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;
};
};
};
}