{ config, lib, pkgs, ... }: let cast_file_vaapi = (pkgs.writeScriptBin "cast_file" (builtins.readFile ./files/cast_file_vaapi)).overrideAttrs (old: { buildCommand = "${old.buildCommand}\n patchShebangs $out"; }); cast_file_nvidia = (pkgs.writeScriptBin "cast_file" (builtins.readFile ./files/cast_file_nvidia)).overrideAttrs (old: { buildCommand = "${old.buildCommand}\n patchShebangs $out"; }); kernel_version_check = lib.versionAtLeast config.boot.kernelPackages.kernel.version "6.12"; nixos_version_check = lib.versionAtLeast (lib.versions.majorMinor lib.version) "25.05"; in { imports = [ ]; options.me = { media.enable = lib.mkOption { type = lib.types.bool; default = false; example = true; description = "Whether we want to install media."; }; }; config = lib.mkIf config.me.media.enable ( lib.mkMerge [ { environment.systemPackages = with pkgs; [ ffmpeg libva-utils # for vainfo vdpauinfo ]; } (lib.mkIf config.me.graphical { environment.systemPackages = with pkgs; [ mpv evince gimp # So far I prefer imv over swayimg because imv supports the 'p' hotkey to print the currently-viewed file to stdout (useful for pipelines) and afaik doesn't support the exec:// protocol which seems like a massive risk. imv ]; home-manager.users.talexander = { pkgs, ... }: { home.file.".config/mpv/mpv.conf" = { source = ./files/mpv.conf; }; }; }) (lib.mkIf (config.me.graphics_card_type == "amd" || config.me.graphics_card_type == "intel") { environment.systemPackages = with pkgs; [ cast_file_vaapi ]; }) (lib.mkIf (config.me.graphics_card_type == "amd") { environment.sessionVariables = { VDPAU_DRIVER = "radeonsi"; }; }) (lib.mkIf (config.me.graphics_card_type == "intel") { hardware.graphics.extraPackages = with pkgs; [ intel-media-driver libvdpau-va-gl # Support vdpau applications using va-api ]; environment.sessionVariables = { VDPAU_DRIVER = "va_gl"; }; }) ] ); }