summaryrefslogtreecommitdiff
path: root/modules/nixos/games
diff options
context:
space:
mode:
Diffstat (limited to 'modules/nixos/games')
-rw-r--r--modules/nixos/games/default.nix38
-rw-r--r--modules/nixos/games/gamemode.nix13
-rw-r--r--modules/nixos/games/gog.nix18
-rw-r--r--modules/nixos/games/lutris.nix32
-rw-r--r--modules/nixos/games/mangohud.nix26
-rw-r--r--modules/nixos/games/minecraft.nix50
-rw-r--r--modules/nixos/games/steam-run.nix73
-rw-r--r--modules/nixos/games/steam.nix25
8 files changed, 275 insertions, 0 deletions
diff --git a/modules/nixos/games/default.nix b/modules/nixos/games/default.nix
new file mode 100644
index 0000000..1c5766b
--- /dev/null
+++ b/modules/nixos/games/default.nix
@@ -0,0 +1,38 @@
+{
+ config,
+ lib,
+ ...
+}:
+with lib; let
+ cfg = config.nixfiles.modules.games;
+in {
+ imports = [
+ ./gamemode.nix
+ ./gog.nix
+ ./lutris.nix
+ ./mangohud.nix
+ ./minecraft.nix
+ ./steam-run.nix
+ ./steam.nix
+ ];
+
+ options.nixfiles.modules.games.enable32BitSupport =
+ mkEnableOption "support for games";
+
+ config = mkIf cfg.enable32BitSupport {
+ services = {
+ jack.alsa.support32Bit = config.services.jack.alsa.enable;
+
+ pipewire.alsa.support32Bit = config.services.pipewire.alsa.enable;
+ };
+
+ hardware = {
+ opengl = mkIf config.hardware.opengl.enable {
+ extraPackages32 = config.hardware.opengl.extraPackages;
+ driSupport32Bit = config.hardware.opengl.driSupport;
+ };
+
+ pulseaudio.support32Bit = config.hardware.pulseaudio.enable;
+ };
+ };
+}
diff --git a/modules/nixos/games/gamemode.nix b/modules/nixos/games/gamemode.nix
new file mode 100644
index 0000000..051d12e
--- /dev/null
+++ b/modules/nixos/games/gamemode.nix
@@ -0,0 +1,13 @@
+{
+ config,
+ lib,
+ ...
+}:
+with lib; let
+ cfg = config.nixfiles.modules.games.gamemode;
+in {
+ options.nixfiles.modules.games.gamemode.enable =
+ mkEnableOption "Feral GameMode";
+
+ config = mkIf cfg.enable {programs.gamemode.enable = true;};
+}
diff --git a/modules/nixos/games/gog.nix b/modules/nixos/games/gog.nix
new file mode 100644
index 0000000..86039f1
--- /dev/null
+++ b/modules/nixos/games/gog.nix
@@ -0,0 +1,18 @@
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
+with lib; let
+ cfg = config.nixfiles.modules.games.gog;
+in {
+ options.nixfiles.modules.games.gog.enable =
+ mkEnableOption "stand-alone GOG clients and the ability to run GOG games";
+
+ config = mkIf cfg.enable {
+ nixfiles.modules.games.steam-run.enable = true;
+
+ hm.home.packages = with pkgs; [lgogdownloader];
+ };
+}
diff --git a/modules/nixos/games/lutris.nix b/modules/nixos/games/lutris.nix
new file mode 100644
index 0000000..72179fc
--- /dev/null
+++ b/modules/nixos/games/lutris.nix
@@ -0,0 +1,32 @@
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
+with lib; let
+ cfg = config.nixfiles.modules.games.lutris;
+in {
+ options.nixfiles.modules.games.lutris.enable = mkEnableOption "Lutris";
+
+ config = mkIf cfg.enable {
+ nixfiles.modules.games = {
+ gamemode.enable = true;
+ mangohud.enable = true;
+ steam-run.enable = true;
+ };
+
+ hm.home.packages = with pkgs; [
+ (lutris.override {
+ lutris-unwrapped = lutris-unwrapped.override {
+ wine = buildFHSUserEnv {
+ # We don't really need Wine because Lutris downloads a required
+ # runtime for us.
+ name = "empty";
+ };
+ };
+ })
+ vkBasalt
+ ];
+ };
+}
diff --git a/modules/nixos/games/mangohud.nix b/modules/nixos/games/mangohud.nix
new file mode 100644
index 0000000..d693c82
--- /dev/null
+++ b/modules/nixos/games/mangohud.nix
@@ -0,0 +1,26 @@
+{
+ config,
+ lib,
+ ...
+}:
+with lib; let
+ cfg = config.nixfiles.modules.games.mangohud;
+in {
+ options.nixfiles.modules.games.mangohud.enable = mkEnableOption "MangoHud";
+
+ config = mkIf cfg.enable {
+ hm.programs.mangohud = {
+ enable = true;
+ settings = {
+ fps = true;
+ frame_timing = true;
+ gpu_stats = true;
+ gpu_temp = true;
+ cpu_stats = true;
+ cpu_temp = true;
+ ram = true;
+ vram = true;
+ };
+ };
+ };
+}
diff --git a/modules/nixos/games/minecraft.nix b/modules/nixos/games/minecraft.nix
new file mode 100644
index 0000000..e53f9eb
--- /dev/null
+++ b/modules/nixos/games/minecraft.nix
@@ -0,0 +1,50 @@
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
+with lib; let
+ cfg = config.nixfiles.modules.games.minecraft;
+in {
+ options.nixfiles.modules.games.minecraft = {
+ client.enable = mkEnableOption "Minecraft client";
+ server = {
+ enable = mkEnableOption "Minecraft server";
+
+ memory = mkOption {
+ description = "Amount of RAM to allocate.";
+ type = types.str;
+ default = "2G";
+ };
+ };
+ };
+
+ config = mkMerge [
+ (mkIf cfg.client.enable {
+ hm.home.packages = with pkgs; [pollymc];
+ })
+ (mkIf cfg.server.enable {
+ # Configurations, opslist, whitelist and plugins are managed imperatively.
+ # TODO Make it declarative.
+ services.minecraft-server = {
+ enable = true;
+ eula = true;
+
+ package = pkgs.minecraftServers.purpur_1_19_2;
+
+ # TODO Make a PR fixing trailing whitespace on this.
+ jvmOpts =
+ (concatStringsSep " " [
+ "-Xmx${cfg.server.memory}"
+ "-Xms${cfg.server.memory}"
+ "--add-modules=jdk.incubator.vector"
+ ])
+ + " ";
+ };
+
+ # Defined in /var/lib/minecraft/server.properties.
+ networking.firewall.allowedTCPPorts = [55565];
+ })
+ ];
+}
diff --git a/modules/nixos/games/steam-run.nix b/modules/nixos/games/steam-run.nix
new file mode 100644
index 0000000..1a1e61f
--- /dev/null
+++ b/modules/nixos/games/steam-run.nix
@@ -0,0 +1,73 @@
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
+with lib; let
+ cfg = config.nixfiles.modules.games.steam-run;
+in {
+ options.nixfiles.modules.games.steam-run = {
+ enable = mkEnableOption "native Steam runtime";
+
+ quirks = {
+ mountAndBladeWarband = mkEnableOption ''fixes for "Mount & Blade: Warband" issues'';
+ cryptOfTheNecrodancer = mkEnableOption ''fixes for "Crypt of the NecroDancer" issues'';
+ };
+ };
+
+ config = mkIf cfg.enable {
+ nixfiles.modules = {
+ common.nix.allowedUnfreePackages = ["steam" "steam-run"];
+
+ games = {
+ enable32BitSupport = true;
+ gamemode.enable = true;
+ };
+ };
+
+ hm.home.packages = with pkgs; [
+ (steam.override {
+ extraLibraries = _:
+ with cfg.quirks;
+ []
+ ++ optionals mountAndBladeWarband [
+ (glew.overrideAttrs (_: super: let
+ opname = super.pname;
+ in rec {
+ pname = "${opname}-runfix";
+ inherit (super) version;
+ src = fetchurl {
+ url = "mirror://sourceforge/${opname}/${opname}-${version}.tgz";
+ hash = "sha256-BN6R5+Z2MDm8EZQAlc2cf4gLq6ghlqd2X3J6wFqZPJU=";
+ };
+ }))
+ (fmodex.overrideAttrs (_: super: let
+ opname = super.pname;
+ in rec {
+ pname = "${opname}-runfix";
+ inherit (super) version;
+ installPhase = let
+ libPath = makeLibraryPath [
+ alsa-lib
+ libpulseaudio
+ stdenv.cc.cc
+ ];
+ in ''
+ install -Dm755 api/lib/libfmodex64-${version}.so $out/lib/libfmodex64.so
+ patchelf --set-rpath ${libPath} $out/lib/libfmodex64.so
+ '';
+ }))
+ ]
+ ++ optionals cryptOfTheNecrodancer [
+ (import (builtins.fetchTarball {
+ url = "https://github.com/NixOS/nixpkgs/archive/d1c3fea7ecbed758168787fe4e4a3157e52bc808.tar.gz";
+ sha256 = "0ykm15a690v8lcqf2j899za3j6hak1rm3xixdxsx33nz7n3swsyy";
+ }) {inherit (config.nixpkgs) config localSystem;})
+ .flac
+ ];
+ })
+ .run
+ ];
+ };
+}
diff --git a/modules/nixos/games/steam.nix b/modules/nixos/games/steam.nix
new file mode 100644
index 0000000..8dfa72c
--- /dev/null
+++ b/modules/nixos/games/steam.nix
@@ -0,0 +1,25 @@
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
+with lib; let
+ cfg = config.nixfiles.modules.games.steam;
+in {
+ options.nixfiles.modules.games.steam.enable =
+ mkEnableOption "Steam runtime";
+
+ config = mkIf cfg.enable {
+ nixfiles.modules = {
+ common.nix.allowedUnfreePackages = ["steam" "steam-original"];
+
+ games = {
+ enable32BitSupport = true;
+ gamemode.enable = true;
+ };
+ };
+
+ hm.home.packages = with pkgs; [steam];
+ };
+}