Files
nix/packages/docker/jellyfin/default.nix
2025-07-06 11:36:13 +01:00

110 lines
3.0 KiB
Nix

{
pkgs,
inputs,
system,
...
}:
let
selfPkgs = inputs.self.packages.${system};
jellyfin = pkgs.jellyfin.overrideAttrs (_: {
makeWrapperArgs = [
"--add-flags"
"--ffmpeg=${pkgs.jellyfin-ffmpeg}/bin/ffmpeg"
];
});
jellyfin-web = pkgs.runCommandLocal "jellyfin-web" { } ''
mkdir -p $out/var/www
cp -r ${pkgs.jellyfin-web}/share/jellyfin-web $out/var/www/jellyfin
'';
jellyfin-plugin-bookshelf = pkgs.runCommandLocal "jellyfin-plugin-bookshelf" { } ''
mkdir -p $out/var/lib/jellyfin/plugins
cp -r ${selfPkgs.jellyfin-plugin-bookshelf} $out/var/lib/jellyfin/plugins/bookshelf
'';
jellyfin-plugin-intro-skipper = pkgs.runCommandLocal "jellyfin-plugin-intro-skipper" { } ''
mkdir -p $out/var/lib/jellyfin/plugins
cp -r ${selfPkgs.jellyfin-plugin-intro-skipper} $out/var/lib/jellyfin/plugins/intro-skipper
'';
jellyfin-plugin-playbackreporting = pkgs.runCommandLocal "jellyfin-plugin-playbackreporting" { } ''
mkdir -p $out/var/lib/jellyfin/plugins
cp -r ${selfPkgs.jellyfin-plugin-playbackreporting} $out/var/lib/jellyfin/plugins/playbackreporting
'';
jellyfin-plugin-reports = pkgs.runCommandLocal "jellyfin-plugin-reports" { } ''
mkdir -p $out/var/lib/jellyfin/plugins
cp -r ${selfPkgs.jellyfin-plugin-reports} $out/var/lib/jellyfin/plugins/reports
'';
jellyfin-plugin-sso = pkgs.runCommandLocal "jellyfin-plugin-sso" { } ''
mkdir -p $out/var/lib/jellyfin/plugins
cp -r ${selfPkgs.jellyfin-plugin-sso} $out/var/lib/jellyfin/plugins/sso
'';
jellyfin-plugin-subtitleextract = pkgs.runCommandLocal "jellyfin-plugin-subtitleextract" { } ''
mkdir -p $out/var/lib/jellyfin/plugins
cp -r ${selfPkgs.jellyfin-plugin-subtitleextract} $out/var/lib/jellyfin/plugins/subtitleextract
'';
jellyfin-plugin-tvdb = pkgs.runCommandLocal "jellyfin-plugin-tvdb" { } ''
mkdir -p $out/var/lib/jellyfin/plugins
cp -r ${selfPkgs.jellyfin-plugin-tvdb} $out/var/lib/jellyfin/plugins/tvdb
'';
entrypoint = pkgs.writeTextFile {
name = "entrypoint";
executable = true;
destination = "/bin/entrypoint";
text = builtins.readFile ./entrypoint.sh;
};
in
pkgs.dockerTools.buildImage {
name = "jellyfin";
fromImage = import ../base { inherit pkgs; };
copyToRoot = pkgs.buildEnv {
name = "root";
paths = [
entrypoint
jellyfin
jellyfin-web
jellyfin-plugin-bookshelf
jellyfin-plugin-intro-skipper
jellyfin-plugin-playbackreporting
jellyfin-plugin-reports
jellyfin-plugin-sso
jellyfin-plugin-subtitleextract
jellyfin-plugin-tvdb
pkgs.jellyfin-ffmpeg
pkgs.curl
pkgs.jq
];
pathsToLink = [
"/bin"
"/lib"
"/var"
];
};
runAsRoot = ''
${pkgs.dockerTools.shadowSetup}
'';
config = {
Entrypoint = [ "entrypoint" ];
ExposedPorts = {
"8096/tcp" = { };
};
WorkingDir = "/var/lib/jellyfin";
Volumes = {
"/etc/jellyfin" = { };
"/var/lib/jellyfin" = { };
"/var/log/jellyfin" = { };
"/tmp/jellyfin" = { };
};
};
}