{ config, lib, pkgs, ...}:
let
  cfg = config.nixfiles.hardware.opengl;
in
{
  options.nixfiles.hardware.opengl.enable = lib.mkEnableOption "OpenGL configuration";
  config = lib.mkIf cfg.enable {
    environment.systemPackages = let
      offload-enabled = config.hardware.nvidia.prime.offload.enableOffloadCmd;
      glxinfo = lib.getExe' pkgs.glxinfo "glxinfo";
      auto-offload = pkgs.writeShellScriptBin "auto-offload" (
      (if offload-enabled then ''
        if nvidia-offload ${glxinfo} > /dev/null 2>&1 ; then
          exec nvidia-offload "$@"
        fi
      '' else "")
      +
      ''
        exec "$@"
      '');
    in [ auto-offload ];
    # Enable OpenGL
    hardware.opengl = {
      enable = true;
      driSupport = lib.mkDefault true;
      driSupport32Bit = lib.mkDefault config.hardware.opengl.driSupport;
    };
  };
}