{ pkgs, config, ... }: let jellyfin-config = '' { "includeCorsCredentials": false, "multiserver": false, "themes": [ { "name": "Apple TV", "id": "appletv", "color": "#bcbcbc" }, { "name": "Blue Radiance", "id": "blueradiance", "color": "#011432" }, { "name": "Dark", "id": "dark", "color": "#202020", "default": true }, { "name": "Light", "id": "light", "color": "#303030" }, { "name": "Purple Haze", "id": "purplehaze", "color": "#000420" }, { "name": "WMC", "id": "wmc", "color": "#0c2450" } ], "menuLinks": [ { "name": "Link SSO Account", "icon": "add_link", "url": "https://media.donsz.nl/SSOViews/linking" } ], "servers": [], "plugins": [ "playAccessValidation/plugin", "experimentalWarnings/plugin", "htmlAudioPlayer/plugin", "htmlVideoPlayer/plugin", "photoPlayer/plugin", "comicsPlayer/plugin", "bookPlayer/plugin", "youtubePlayer/plugin", "backdropScreensaver/plugin", "pdfPlayer/plugin", "logoScreensaver/plugin", "sessionPlayer/plugin", "chromecastPlayer/plugin", "syncPlay/plugin" ] } ''; in { environment.systemPackages = [ pkgs.jellyfin pkgs.jellyfin-web pkgs.jellyfin-ffmpeg ]; services.nginx.virtualHosts."media.donsz.nl" = { forceSSL = true; enableACME = true; locations."/" = { proxyPass = "http://localhost:8096"; extraConfig = '' proxy_buffering off; ''; }; locations."/socket" = { inherit (config.services.nginx.virtualHosts."media.donsz.nl".locations."/") proxyPass ; proxyWebsockets = true; }; }; users.groups.jellyfin = { }; users.users.jellyfin = { isSystemUser = true; group = "jellyfin"; extraGroups = [ "storage" ]; }; services.nginx.virtualHosts."media.donsz.nl".locations."/web/config.json".extraConfig = '' add_header Content-Type application/json; add_header Access-Control-Allow-Origin *; return 200 '${jellyfin-config}'; ''; services.jellyfin = { enable = true; openFirewall = true; user = "jellyfin"; group = "jellyfin"; }; # Only set this if you're using intel-vaapi-driver (see below): nixpkgs.config.packageOverrides = pkgs: { intel-vaapi-driver = pkgs.intel-vaapi-driver.override { enableHybridCodec = true; }; }; systemd.services.jellyfin.environment.LIBVA_DRIVER_NAME = "iHD"; # or i965, see below environment.sessionVariables = { LIBVA_DRIVER_NAME = "iHD"; }; # ditto hardware.graphics = { enable = true; extraPackages = with pkgs; [ intel-ocl intel-media-driver intel-media-sdk ]; }; # hardware.graphics = { # enable = true; # package = pkgs.intel-media-driver; # }; # systemd.services.jellyfin = { # # if EncoderAppPath is manually set in the web UI, it can never be updated through --ffmpeg # preStart = "test ! -e /var/lib/jellyfin/config/encoding.xml || sed -i '//d' /var/lib/jellyfin/config/encoding.xml"; # serviceConfig = { # # allow access to GPUs for hardware transcoding # DeviceAllow = lib.mkForce "char-drm"; # BindPaths = lib.mkForce "/dev/dri"; # # to allow restarting from web ui # Restart = lib.mkForce "always"; # Slice = "mediaplayback.slice"; # }; # }; }