Gaming related stuff for Nix and NixOS.
See an overview of the flake outputs by running
nix flake show github:fufexan/nix-gaming
.
Package | Description |
---|---|
faf-client |
Forged Alliance Forever client (multiple packages) |
osu-lazer-bin |
osu! lazer, extracted from the official AppImage |
osu-stable |
osu! stable version |
rocket-league |
Rocket League from Epic Games |
star-citizen |
Star Citizen |
technic-launcher |
Technic Launcher |
wine-discord-ipc-bridge |
Wine-Discord RPC Bridge |
wine |
Multiple Wine packages |
winestreamproxy |
Wine-Discord RPC (broken) |
mo2installer |
RockerBacon's Mod Organizer 2 installer script |
northstar-proton |
Proton build based on TKG's proton-tkg build system to run the Northstar client on Linux and SteamDeck |
viper |
Launcher+Updater for Titanfall2 Northstar Client |
legendaryBuilder
is a function that installs games with legendary-gl
. You
are expected to log in before using it, with legendary auth
. The function
takes an attrset containing at least the attrset games
which includes the
games you want installed. Optionally, you can set an opts
attrset that will
set the options you set inside for all games listed. You can find a usage
example in example.nix.It's recommended to set up Cachix so you don't have to build packages (most useful for wine).
# configuration.nix
{
nix.settings = {
substituters = ["https://nix-gaming.cachix.org"];
trusted-public-keys = ["nix-gaming.cachix.org-1:nbjlureqMbRAxR1gJ/f3hxemL9svXaZF/Ees8vCUUs4="];
};
}
Now, rebuild your configuration and continue reading for install instructions.
Add these packages to your home.packages
or environment.systemPackages
by
adding nix-gaming
as an input:
# flake.nix
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
home-manager.url = "github:nix-community/home-manager";
nix-gaming.url = "github:fufexan/nix-gaming";
};
outputs = {self, nixpkgs, ...}@inputs: {
# set up for NixOS
nixosConfigurations.HOSTNAME = nixpkgs.lib.nixosSystem {
specialArgs = {inherit inputs;};
modules = [
./configuration.nix
# ...
];
};
# or for Home Manager
homeConfigurations.HOSTNAME = inputs.home-manager.lib.homeManagerConfiguration {
pkgs = import nixpkgs {
system = "x86_64-linux";
config.allowUnfree = true;
};
extraSpecialArgs = {inherit inputs;};
modules = [
./home.nix
# ...
];
}
};
}
Then, add the package(s):
{pkgs, inputs, ...}: {
environment.systemPackages = [ # or home.packages
inputs.nix-gaming.packages.${pkgs.system}.<package> # installs a package
];
}
If you want to install packages to your profile instead, do it like this
nix profile install github:fufexan/nix-gaming#<package>
Everything is available as an overlay if you prefer that, though your results may greatly differ from the packages.
To install packages to environment.systemPackages
, add this in
configuration.nix
:
{pkgs, ...}: let
nix-gaming = import (builtins.fetchTarball "https://github.com/fufexan/nix-gaming/archive/master.tar.gz");
in {
# install packages
environment.systemPackages = [ # or home.packages
nix-gaming.packages.${pkgs.hostPlatform.system}.<package>
];
}
Here are some NixOS modules for setting gaming related options.
Assuming you've followed the Install/Flakes instructions, all you need to do is add the module to your configuration like this:
{inputs, ...}: {
imports = [
inputs.nix-gaming.nixosModules.<module name>
];
}
Now you can skip to the Usage section of a specific module.
Assuming you've followed the Install/Nix Stable instructions, all you need to do is add the module to your configuration like this:
{pkgs, ...}: let
nix-gaming = /* ... */;
in {
imports = [
nix-gaming.nixosModules.<module name>
];
}
PipeWire is a new audio backend that replaces ALSA, PulseAudio and JACK. It is as low latency as JACK and as easy to use as Pulse.
This module extends the PipeWire module from Nixpkgs and makes it easy to enable the low latency settings in a few lines.
After importing the module in your configuration like described above, enable it along with PipeWire:
{
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
lowLatency = {
# enable this module
enable = true;
# defaults (no need to be set unless modified)
quantum = 64;
rate = 48000;
};
};
# make pipewire realtime-capable
security.rtkit.enable = true;
}
If you get no sound, you may want to increase quantum
.
You can calculate the theoretical latency by dividing quantum
by rate
(48/48000
is exactly 1ms).
SteamOS on the steam deck has set some specific sysctl settings, so that some games can be run at all, or perform better under certain circumstances.
This module extends the Steam module from Nixpkgs but can be enabled as a standalone option.
After importing the module in your configuration like described above, enable it like this:
{
programs.steam.platformOptimizations.enable = true;
}
Wine-based game derivations were written with versatility in mind.
These arguments can be modified in order to get the desired results.
{
wine ? wine-ge, # controls the wine package used to run wine games
wineFlags ? "", # which flags to run wine with (literal)
pname ? "game-name", # name of the script and package
location ? "$HOME/${pname}", # where to install the game/wine prefix
tricks ? [], # which wine tricks to install
preCommands ? "", # run commands before the game is started
postCommands ? "", # run commands after the game is closed
}:
osu-stable
wine-discord-ipc-bridge
wine overridingSometimes you want to override wine
for various reasons. Here's how to do it:
{
environment.systemPackages = let
gamePkgs = inputs.nix-gaming.packages.${pkgs.hostPlatform.system};
in [ # or home.packages
gamePkgs.osu-stable.override rec {
wine = <your-wine>;
wine-discord-ipc-bridge = gamePkgs.wine-discord-ipc-bridge.override {inherit wine;}; # or override this one as well
};
];
}
In order to get the most performance out of your machine, you could use the following tweaks:
linux_xanmod
is the recommended one for games, since
it provides many patches that aid wine and other games. It also provides a
better desktop experience due to its preemptive build and tickless scheduler.gamemode-run
.Thank you: boppyt - gonX - InfinityGhost - LavaDesu - openglfreak - yusdacra and to all the contributors and users of this repo!