{pkgs, inputs, ...}: let unstable = import inputs.unstable { system = pkgs.system; }; in { nixpkgs.config.packageOverrides = pkgs: { vaapiIntel = pkgs.vaapiIntel.override { enableHybridCodec = true; }; }; hardware.graphics = { enable = true; extraPackages = with pkgs; [ intel-media-driver intel-vaapi-driver vaapiVdpau intel-compute-runtime # OpenCL filter support (hardware tonemapping and subtitle burn-in) vpl-gpu-rt # QSV on 11th gen or newer intel-media-sdk # QSV up to 11th gen ]; }; nixpkgs.config.permittedInsecurePackages = [ "dotnet-sdk-6.0.428" "aspnetcore-runtime-6.0.36" ]; users.users."starr" = { isSystemUser = true; group = "starr"; extraGroups = [ "jellyfin" ]; }; users.users.sonarr.extraGroups = ["jellyfin" "radarr" "transmission" "starr"]; users.users.radarr.extraGroups = ["jellyfin" "sonarr" "transmission" "starr"]; users.users.bazarr.extraGroups = ["jellyfin" "sonarr" "transmission" "starr" "radarr"]; users.users.lidarr.extraGroups = ["jellyfin" "starr" "transmission"]; users.users.shobu.extraGroups = [ "jellyfin" "starr" "transmission" "radarr" "sonarr" ]; users.groups = { starr = {}; }; services = { jellyfin = { enable = true; openFirewall = true; }; sonarr = { enable = true; openFirewall = true; group = "starr"; }; radarr = { enable = true; openFirewall = true; group = "starr"; }; prowlarr = { enable = true; openFirewall = true; }; bazarr = { enable = true; openFirewall = true; }; lidarr = { enable = true; openFirewall = true; package = unstable.lidarr; }; jellyseerr = { enable = true; openFirewall = true; }; }; environment.systemPackages = [ pkgs.jellyfin pkgs.jellyfin-web pkgs.jellyfin-ffmpeg ]; }