{
  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 utilities.";
    };
  };

  config = lib.mkIf config.me.media.enable (
    lib.mkMerge [
      {
        environment.systemPackages = with pkgs; [
          ffmpeg
          libva-utils # for vainfo
          vdpauinfo
          mkvtoolnix-cli # for mkvmerge
          yt-dlp
        ];
      }
      (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
        ];

        me.install.user.talexander.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";
        };
      })
    ]
  );
}
