nixos-lib/desktop/games.nix

145 lines
3.8 KiB
Nix
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
config,
pkgs,
lib,
myLib,
suyu,
...
}:
with lib;
let
cfg = config.aviallon.desktop;
generalCfg = config.aviallon.general;
optimizePkg = config.aviallon.optimizations.optimizePkg;
mkTmpDir = dirpath: cleanup: "D ${dirpath} 777 root root ${cleanup}";
in
{
options = {
aviallon.desktop.gaming = {
enable = mkEnableOption "gaming features";
emulation = mkEnableOption "console emulators";
yuzu.package = mkOption {
type = with types; package;
description = "Yuzu switch emulator package. WARNING: removed from nixpkgs";
default = suyu.packages.${pkgs.system}.suyu;
};
ryujinx.package = mkOption {
description = "Ryujinx Switch emulator package";
type = myLib.types.package';
default = pkgs.ryubing;
example = literalExpression "pkgs.ryujinx";
};
};
};
config = mkIf cfg.gaming.enable {
assertions = [
{
assertion = cfg.gaming.enable -> cfg.enable;
message = "Gaming features requires desktop to be enabled";
}
{
assertion = cfg.gaming.enable -> !generalCfg.minimal;
message = "Gaming features are incompatible with minimal mode";
}
];
environment.systemPackages =
let
my_yuzu = cfg.gaming.yuzu.package.overrideAttrs (old: {
cmakeFlags = old.cmakeFlags ++ [
#"-DYUZU_USE_PRECOMPILED_HEADERS=OFF"
#"-DDYNARMIC_USE_PRECOMPILED_HEADERS=OFF"
];
});
in
with pkgs;
[
gamescope
mangohud
lutris
#bottles
]
++ optionals cfg.gaming.emulation [
(optimizePkg {
recursive = 0;
lto = false;
} my_yuzu)
(optimizePkg { } cfg.gaming.ryujinx.package)
];
aviallon.windows.wine.enable = mkDefault true;
boot.kernel.sysctl = {
# Fixes crash in Hogwarts Legacy when using Floo network (https://steamcommunity.com/app/990080/discussions/0/3773490215223050912/)
"vm.max_map_count" = 512 * 1024;
};
programs.gamemode = {
settings = {
general = {
renice = 15;
softrealtime = "auto";
};
gpu = {
apply_gpu_optimisations = "accept-responsibility";
amd_performance_level = "high";
nv_powermizer_mode = 1;
};
};
enable = true;
};
users.groups.gamers = { };
hardware.steam-hardware.enable = !generalCfg.minimal;
programs.steam = {
enable = !generalCfg.minimal;
extraPackages = with pkgs; [ config.programs.gamescope.package ];
extest.enable = true;
localNetworkGameTransfers.openFirewall = true;
remotePlay.openFirewall = true;
protontricks.enable = true;
};
# Workaround for https://github.com/NixOS/nixpkgs/issues/523200
security.wrappers.bwrap = lib.mkForce {
source = "${pkgs.bubblewrap}/bin/bwrap";
owner = "root";
group = "root";
setuid = false;
setgid = false;
};
environment.variables = {
"__GL_SHADER_DISK_CACHE" = "true";
"__GL_SHADER_DISK_CACHE_SIZE" = "${toString (50 * 1000)}";
"__GL_SHADER_DISK_CACHE_SKIP_CLEANUP" = "1"; # Avoid 128mb limit of shader cache
"MESA_SHADER_CACHE_MAX_SIZE" = "50G"; # Put large-enough value. Default is only 1G
};
environment.sessionVariables = rec {
XDG_CACHE_HOME = "$HOME/.cache";
"__GL_SHADER_DISK_CACHE_PATH" = "${XDG_CACHE_HOME}/nvidia_gl";
MESA_SHADER_CACHE_DIR = "${XDG_CACHE_HOME}/mesa";
MESA_GLSL_CACHE_DIR = "${XDG_CACHE_HOME}/mesa";
};
hardware.graphics.extraPackages = [ pkgs.gamescope-wsi ];
hardware.graphics.extraPackages32 = [ pkgs.pkgsi686Linux.gamescope-wsi ];
aviallon.programs.allowUnfreeList = [
"steam"
"steam-original"
"steam-runtime"
"steam-run"
];
};
}