Files
dotfiles/nixos/tsuba/services/jellyfin.nix
servius 165dff7faa
Some checks failed
Flake checker / Build Nix targets (push) Has been cancelled
feat(tsuba): Add image pruning systemd timer
2026-01-13 00:55:46 +05:30

70 lines
2.0 KiB
Nix

{
pkgs,
config,
...
}: {
virtualisation.oci-containers = {
containers = {
jellyfin = {
image = "jellyfin/jellyfin:latest";
ports = ["127.0.0.1:8096:8096"];
volumes = ["/var/lib/jellyfin:/config" "/volumes/media:/media" "/volumes/media/.cache:/cache"];
environment = {
PUID = toString config.users.users.jellyfin.uid;
PGID = toString config.users.groups.jellyfin.gid;
TZ = config.time.timeZone;
};
};
};
};
users.users.jellyfin = {
isSystemUser = true;
home = "/var/lib/jellyfin";
createHome = true;
group = "jellyfin";
};
users.extraUsers.jellyfin.extraGroups = ["media"];
users.groups.jellyfin = {};
services = {
# jellyseerr = {
# enable = true;
# package = unstablePkgs.jellyseerr;
# };
caddy = {
# virtualHosts."jellyseerr.tsuba.darksailor.dev".extraConfig = ''
# import cloudflare
# reverse_proxy localhost:${builtins.toString config.services.jellyseerr.port}
# '';
virtualHosts."jellyfin.tsuba.darksailor.dev".extraConfig = ''
import cloudflare
reverse_proxy localhost:8096
'';
virtualHosts."media.darksailor.dev".extraConfig = ''
import cloudflare
reverse_proxy localhost:8096
'';
};
};
systemd.services.jellyfin-image-update = {
description = "Pull latest Jellyfin Docker image";
serviceConfig = {
Type = "oneshot";
ExecStart = "${pkgs.docker}/bin/docker pull jellyfin/jellyfin:latest";
ExecStartPost = "${pkgs.systemd}/bin/systemctl restart docker-jellyfin.service";
};
};
# Systemd timer to run the update service every 5 days
systemd.timers.jellyfin-image-update = {
description = "Timer for Jellyfin image updates";
wantedBy = ["timers.target"];
timerConfig = {
OnCalendar = "Mon *-*-* 02:00:00";
OnUnitInactiveSec = "5d";
Persistent = true;
RandomizedDelaySec = "1h";
};
};
}