{ pkgs, lib, inputs, username, ... }: { hm.home.packages = (with pkgs; [ # steam-tui steamcmd steam-run xwayland-satellite # wineWow64Packages.waylandFull bottles glfw3-minecraft prismlauncher openspades # zeroad superTuxKart wine64Packages.waylandFull (pkgs.writeShellScriptBin "rungame" ''export __NV_PRIME_RENDER_OFFLOAD=1 export __NV_PRIME_RENDER_OFFLOAD_PROVIDER=NVIDIA-G0 export __GLX_VENDOR_LIBRARY_NAME=nvidia export __VK_LAYER_NV_optimus=NVIDIA_only exec "${pkgs.gamemode}/bin/gamemoderun" "$@"'' ) ]) ++ ( let mkNixPak = inputs.nixpak.lib.nixpak { inherit pkgs; inherit lib; }; mkGameRunner' = name: rw': exe: network: mkNixPak { config = { sloth, ... }: let runfile = pkgs.writeScriptBin name '' ${exe} ''; in { dbus.enable = false; gpu.enable = true; gpu.provider = "nixos"; bubblewrap = { inherit network; sockets.pulse = true; sockets.wayland = true; bind.rw = rw'; bind.ro = [ "/etc" "/sys" "/lib64" "${runfile}" "/bin" ]; tmpfs = [ "/tmp" ]; bind.dev = [ "/dev/nvidia0" "/dev/nvidiactl" "/dev/nvidia-modeset" ]; }; app.package = runfile; }; }; mkWineGameRunner' = name: workdir: exe: network: (mkGameRunner' name [workdir] ''WINEPREFIX="${workdir}/wineprefix" ${lib.getExe pkgs.wine64Packages.waylandFull} ${workdir}/${exe}'' network); mkSteamrunGameRunner' = name: workdir: exe: network: (mkGameRunner' name [workdir] ''DISPLAY=:0 ${lib.getExe pkgs.steam-run} ${workdir}/${exe}'' network); mkWineGameRunner = name: workdir: exe: [ ((mkWineGameRunner' "${name}-run" workdir exe false).config.script) ((mkWineGameRunner' "${name}-run-inet" workdir exe true).config.script) ]; mkSteamrunGameRunner = name: workdir: exe: [ (mkSteamrunGameRunner' "${name}-run" workdir exe false).config.script (mkSteamrunGameRunner' "${name}-run-inet" workdir exe true).config.script ]; dirs = ["/home/${username}/Games" "/mnt/gd" "/home/${username}/.wine"]; in (mkWineGameRunner "littlenighmares" "/home/${username}/Games/LittleNightmares/1" "game_info/data/Atlas/Binaries/Win64/LittleNightmares.exe") # (mkGameRunner' "wine-basic-run" dirs "${lib.getExe pkgs.wine64Packages.waylandFull} $@" false ).config.script # (mkGameRunner' "wine-basic-run-inet" dirs "${lib.getExe pkgs.wine64Packages.waylandFull} $@" true ).config.script ); programs = { steam = { enable = true; remotePlay.openFirewall = false; # Open ports in the firewall for Steam Remote Play # extest.enable = true; }; gamemode = { enable = true; settings = { }; }; }; boot.kernel.sysctl."kernel.unprivileged_userns_clone" = true; imp.home.dirs = [ ".local/share/Steam" ".steam" ".local/share/bottles" ".local/share/PrismLauncher" ".local/share/Paradox Interactive" ".local/share/openspades" ]; n.misc.unfreePackages = [ "steam" "steam-unwrapped" "steamcmd" "steam-run" ]; }