{ lib, config, options, pkgs, ... }: { options.mods.gaming = { enable = lib.mkOption { default = false; example = true; type = lib.types.bool; description = "Enabled gaming related features."; }; tools = lib.mkOption { default = with pkgs; [ gamemode steam lutris wine adwsteamgtk heroic ]; example = [ ]; type = with lib.types; listOf package; description = "Install gaming related packages"; }; kernel = lib.mkOption { default = true; example = false; type = lib.types.bool; description = "Whether to use the xanmod kernel"; }; steam = lib.mkOption { default = true; example = false; type = lib.types.bool; description = "Whether to use steam"; }; gamemode = lib.mkOption { default = true; example = false; type = lib.types.bool; description = "Whether to use gamemode"; }; gpuOptimization = lib.mkOption { default = true; example = false; type = lib.types.bool; description = "Whether to use GPU performance setting. NOTE: this is at your own risk!"; }; gpuDevice = lib.mkOption { default = 0; example = 1; type = lib.types.int; description = "Your gpu device.(Physical id of lshw)"; }; }; config = lib.mkIf config.mods.gaming.enable ( lib.optionalAttrs (options ? environment.systemPackages) { environment.systemPackages = config.mods.gaming.tools; boot.kernelPackages = lib.mkForce pkgs.linuxPackages_xanmod_latest; programs = { steam.enable = config.mods.gaming.steam; gamemode.enable = true; gamemode = { enableRenice = true; settings = { general = { governor = "performance"; }; gpu = lib.mkIf config.mods.gaming.gpuOptimization { apply_gpu_optimisations = "accept-responsibility"; gpu_device = config.mods.gaming.gpuDevice; amd_performance_level = "high"; nv_powermizer_mode = 1; }; custom = { start = "notify-send -a 'Gamemode' 'Optimizations activated'"; end = "notify-send -a 'Gamemode' 'Optimizations deactivated'"; }; }; }; }; } ); }