{ config, pkgs, lib, materusArg, inputs, ... }:
let
  steamPkg = pkgs.steam.override {
    extraPkgs = pkgs: [
      pkgs.libdecor
      pkgs.obs-studio-plugins.obs-vkcapture
      pkgs.steamcmd
      pkgs.nss_latest
      pkgs.libstrangle
      pkgs.libkrb5
      pkgs.keyutils
      pkgs.libGL
      pkgs.libglvnd
      pkgs.steamPackages.steam
      pkgs.libxcrypt
      pkgs.gnutls
      pkgs.xorg.libXcursor
      pkgs.xorg.libXi
      pkgs.xorg.libXinerama
      pkgs.xorg.libXScrnSaver
      pkgs.xorg.xinput
      pkgs.xorg.xcbutilwm
      pkgs.xorg.xcbutilimage
      pkgs.xorg.xcbutilkeysyms
      pkgs.xorg.xcbutilerrors
      pkgs.xorg.xcbutilrenderutil
      pkgs.xorg.xcbutil
      pkgs.xorg.xwininfo
      pkgs.yad
      pkgs.xdotool
      pkgs.libinput
      pkgs.openvdb
      pkgs.openssl
      pkgs.tbb
      pkgs.gtk4
      pkgs.gtk3
      pkgs.glib
      pkgs.gsettings-desktop-schemas
      pkgs.fuse
      pkgs.samba4Full
      pkgs.tdb
      pkgs.jbig2enc
      pkgs.jbig2dec
      pkgs.vivaldi
      pkgs.x264.lib
      pkgs.steamtinkerlaunch
      pkgs.pipewire
      pkgs.gitFull
      pkgs.git-lfs

    ] ++ config.materus.profile.packages.list.fonts ++ config.materus.profile.steam.extraPkgs;

    extraLibraries = pkgs: [
      pkgs.libkrb5
      pkgs.keyutils
      pkgs.ncurses6
      pkgs.xorg.xinput
      pkgs.libinput
      pkgs.fontconfig
      pkgs.libxcrypt
      pkgs.gnutls
      pkgs.samba
      pkgs.tdb
      pkgs.jemalloc
      pkgs.gperftools
    ] ++
    (with config.hardware.opengl; if pkgs.hostPlatform.is64bit
    then [ package ] ++ extraPackages
    else [ package32 ] ++ extraPackages32);

    extraEnv = config.materus.profile.steam.extraEnv;

  };

  cfg = config.materus.profile.steam;
in
{
  options.materus.profile.steam.enable = materusArg.pkgs.lib.mkBoolOpt false "Enable materus steam settings for OS";
  options.materus.profile.steam.package = lib.mkOption {
    type = lib.types.package;
    default = steamPkg;
    description = "Package used by steam";
  };
  options.materus.profile.steam.extraPkgs = lib.mkOption {
    default = [ ];
    description = "Extra packages for steam";
  };
  options.materus.profile.steam.extraEnv = lib.mkOption {
    default = { };
    description = "Extra Env for steam";
  };


  config = lib.mkIf cfg.enable {
    programs.gamescope.enable = lib.mkDefault true;
    programs.gamescope.capSysNice = lib.mkDefault false;
    hardware.steam-hardware.enable = lib.mkDefault true;
    materus.profile.steam.extraEnv = {
      XDG_DATA_DIRS = "/usr/share:\${XDG_DATA_DIRS}";
      OBS_VKCAPTURE = "1";
    };
    programs.steam = {
      enable = lib.mkDefault true;
      dedicatedServer.openFirewall = lib.mkDefault true;
      remotePlay.openFirewall = lib.mkDefault true;
      gamescopeSession.enable = lib.mkDefault true;
    };
    environment.sessionVariables = rec {
      STEAM_EXTRA_COMPAT_TOOLS_PATHS = lib.mkDefault "\${HOME}/.steam/root/compatibilitytools.d";
    };
    environment.systemPackages = [
      steamPkg
      steamPkg.run

    ];
  };
}