liminalOS/modules/linux/gaming/default.nix

131 lines
3.6 KiB
Nix
Executable file

{
pkgs,
lib,
config,
...
}:
let
cfg = config.liminalOS.extras.gaming;
in
{
options.liminalOS.extras.gaming = {
enable = lib.mkEnableOption "gaming";
utilities = {
hamachi.enable = lib.mkEnableOption "hamachi";
gamemode = {
enable = lib.mkEnableOption "gamemode";
gamemodeUsers = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
description = ''
List of users to add to the gamemode group. Gamemode will likely not work unless you add your user to the group!
'';
};
};
};
roblox.enable = lib.mkOption {
type = lib.types.bool;
default = config.liminalOS.extras.gaming && cfg.enable;
description = ''
Whether to install the Roblox Sober flatpak automatically. Note that this will enable the nix-flatpak service and automatic flatpak updates.`
'';
};
};
config = lib.mkIf cfg.enable (
let
forAllGamemodeUsers = lib.genAttrs cfg.utilities.gamemode.gamemodeUsers;
in
{
environment.systemPackages = with pkgs; [
ryujinx
lutris
heroic
mangohud
mangojuice
r2modman
modrinth-app
];
liminalOS.programs.flatpak.enable = true;
services.flatpak.packages = lib.mkIf cfg.roblox.enable [
{
flatpakref = "https://sober.vinegarhq.org/sober.flatpakref";
sha256 = "sha256:1pj8y1xhiwgbnhrr3yr3ybpfis9slrl73i0b1lc9q89vhip6ym2l";
}
{
appId = "org.vinegarhq.Sober";
origin = "sober";
}
];
programs.steam = {
enable = true;
remotePlay.openFirewall = true;
dedicatedServer.openFirewall = true;
localNetworkGameTransfers.openFirewall = true;
gamescopeSession.enable = true;
};
programs.gamescope.enable = true;
programs.gamemode = {
enable = true;
enableRenice = true;
settings = {
general = {
renice = 10;
};
custom = {
start = "${pkgs.libnotify}/bin/notify-send 'GameMode engaged'";
end = "${pkgs.libnotify}/bin/notify-send 'GameMode disengaged'";
};
};
};
liminalOS.config.extraUnfreePackages = lib.mkIf config.liminalOS.config.allowUnfree [
"modrinth-app"
"modrinth-app-unwrapped"
"steam"
"steam-unwrapped"
];
users.users = forAllGamemodeUsers (username: {
extraGroups = [ "gamemode" ];
});
services.logmein-hamachi.enable = cfg.utilities.hamachi.enable;
programs.haguichi.enable = cfg.utilities.hamachi.enable;
nixpkgs.config.packageOverrides = pkgs: {
steam = pkgs.steam.override {
extraPkgs =
pkgs: with pkgs; [
xorg.libXcursor
xorg.libXi
xorg.libXinerama
xorg.libXScrnSaver
libpng
libpulseaudio
libvorbis
stdenv.cc.cc.lib
libkrb5
(writeShellScriptBin "launch-gamescope" ''
(sleep 1; pgrep gamescope| xargs renice -n -11 -p)&
exec gamescope "$@"
'')
keyutils
];
};
};
warnings =
if cfg.utilities.gamemode.enable && (builtins.length cfg.utilities.gamemode.gamemodeUsers == 0) then
[
''You enabled gamemode without setting any gamemode users in `liminalOS.extras.gaming.utilities.gamemode.gamemodeUsers. Gamemode is unlikely to work unless you add your user to gamemodeUsers.''
]
else
[ ];
}
);
}