{
  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 '/<EncoderAppPath>/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";
  #   };
  # };
}
