{
  lib,
  config,
  pkgs,
  ...
}:
let
  cfg = config.share.gaming;
  pkgsVersion = pkgs; # .unstable;
in
{
  imports = [ ./options.nix ];

  config = lib.mkIf cfg.enable {
    # Network option required using sysctl to let Ubisoft Connect work as of 7-12-2023
    boot.kernel.sysctl."net.ipv4.tcp_mtu_probing" = 1;

    # Configure programs
    programs.steam = {
      enable = true;
      # Open ports in the firewall for Steam Remote Play
      remotePlay.openFirewall = true;
      # Open ports in the firewall for Source Dedicated Server
      dedicatedServer.openFirewall = true;
      extraCompatPackages = with pkgsVersion; [ proton-ge-bin ];
      gamescopeSession = {
        enable = true;
        args = [
          "-f"
          "-H 2160"
          "-W 3840"
          "-r 240"
          "--hdr-enabled"
          "--adaptive-sync"
        ];
      };
    }; # "gamescope -f -H 2160 -W 3840 -r 240 --adaptive-sync --hdr-enabled

    programs = {
      alvr = {
        enable = true;
        openFirewall = true;
      };

      gamescope = {
        enable = true;
        capSysNice = true;
      };

      gamemode.enable = true;
    };
    # Hardware configs
    hardware = {
      # Xbox controllers
      xpadneo.enable = false;

      # Steam udev rules for remote play
      steam-hardware.enable = true;
    };

    # Configure nixpkgs
    nixpkgs.config.packageOverrides = pkgs: {
      steam = pkgs.steam.override {
        extraPkgs =
          _pkgs: with pkgsVersion; [
            xorg.libXcursor
            xorg.libXi
            xorg.libXinerama
            xorg.libXScrnSaver
            libpng
            libpulseaudio
            libvorbis
            stdenv.cc.cc.lib
            libkrb5
            keyutils
          ];
      };
    };
  };
}
