mirror of
https://github.com/aviallon/nixos-lib.git
synced 2026-07-09 13:31:20 +00:00
145 lines
3.8 KiB
Nix
145 lines
3.8 KiB
Nix
{
|
||
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"
|
||
];
|
||
|
||
};
|
||
}
|