Refactor gaming config to use play flake
• Updates flake to use unstable nixpkgs for gaming packages • Replaces custom gamescope setup with play flake integration • Adds wrappers for Steam, Heroic, and Lutris desktop entries • Simplifies host gaming configuration by delegating to play • Remove proton-cachyos, handled by play now
This commit is contained in:
parent
93dc3db7a5
commit
531897e287
6 changed files with 83 additions and 366 deletions
17
flake.nix
17
flake.nix
|
@ -34,15 +34,20 @@
|
||||||
|
|
||||||
stylix.url = "github:danth/stylix";
|
stylix.url = "github:danth/stylix";
|
||||||
|
|
||||||
## Misc Packages ##
|
## Gaming Packages ##
|
||||||
|
|
||||||
nix-gaming = {
|
nix-gaming = {
|
||||||
url = "github:fufexan/nix-gaming";
|
url = "github:fufexan/nix-gaming";
|
||||||
inputs = {
|
inputs.nixpkgs.follows = "nixpkgs-unstable";
|
||||||
nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
play = {
|
||||||
|
url = "github:tophc7/play.nix";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs-unstable";
|
||||||
|
};
|
||||||
|
|
||||||
|
## Misc Packages ##
|
||||||
|
|
||||||
# nixcord.url = "github:kaylorben/nixcord";
|
# nixcord.url = "github:kaylorben/nixcord";
|
||||||
# spicetify-nix = {
|
# spicetify-nix = {
|
||||||
# url = "github:Gerg-L/spicetify-nix";
|
# url = "github:Gerg-L/spicetify-nix";
|
||||||
|
@ -57,7 +62,7 @@
|
||||||
snapraid-aio = {
|
snapraid-aio = {
|
||||||
# url = "git+https://git.ryot.foo/toph/snapraid-aio.nix.git";
|
# url = "git+https://git.ryot.foo/toph/snapraid-aio.nix.git";
|
||||||
url = "git+https://git.ryot.foo/toph/snapraid-aio.nix.git";
|
url = "git+https://git.ryot.foo/toph/snapraid-aio.nix.git";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs-unstable";
|
||||||
};
|
};
|
||||||
|
|
||||||
vscode-server = {
|
vscode-server = {
|
||||||
|
@ -67,7 +72,7 @@
|
||||||
|
|
||||||
yay = {
|
yay = {
|
||||||
url = "git+https://git.ryot.foo/toph/yay.nix.git";
|
url = "git+https://git.ryot.foo/toph/yay.nix.git";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs-unstable";
|
||||||
};
|
};
|
||||||
|
|
||||||
zen-browser = {
|
zen-browser = {
|
||||||
|
|
|
@ -1,170 +1,69 @@
|
||||||
## NOTE:
|
|
||||||
## This is only configured for AMD GPUs; Nvidia might require additional configuration.
|
|
||||||
## For example host (PC) configuration using this module go to home/hosts/rune
|
|
||||||
{
|
{
|
||||||
config,
|
config,
|
||||||
lib,
|
|
||||||
osConfig,
|
osConfig,
|
||||||
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
|
inputs,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
let
|
|
||||||
primaryMonitor = lib.custom.getPrimaryMonitor (config.monitors or [ ]);
|
|
||||||
WIDTH = primaryMonitor.width or 1980;
|
|
||||||
HEIGHT = primaryMonitor.height or 1080;
|
|
||||||
REFRESH_RATE = primaryMonitor.refreshRate or 60;
|
|
||||||
VRR = primaryMonitor.vrr or false;
|
|
||||||
HDR = primaryMonitor.hdr or false;
|
|
||||||
|
|
||||||
cursorTheme = config.home.pointerCursor.name or "Adwaita";
|
|
||||||
cursorPackage = config.home.pointerCursor.package or pkgs.gnome.adwaita-icon-theme;
|
|
||||||
|
|
||||||
# INFO: Example working commands for running games in steam-session
|
|
||||||
## Rivals ##
|
|
||||||
# SteamDeck=1 LD_PRELOAD="" PROTON_ENABLE_NVAPI=1 PROTON_ENABLE_WAYLAND=1 VKD3D_DISABLE_EXTENSIONS=VK_KHR_present_wait gamemoderun %command% -PSOCompileMode=1 -dx12
|
|
||||||
## Stats Overlay ##
|
|
||||||
# gamemoderun mangohud %command%
|
|
||||||
|
|
||||||
gamescope-env = ''
|
|
||||||
set -x DXVK_HDR 1
|
|
||||||
set -x ENABLE_GAMESCOPE_WSI 1
|
|
||||||
set -x ENABLE_HDR_WSI 1
|
|
||||||
set -x AMD_VULKAN_ICD RADV
|
|
||||||
set -x RADV_PERFTEST aco
|
|
||||||
set -x SDL_VIDEODRIVER wayland
|
|
||||||
set -x XCURSOR_THEME '${cursorTheme}'
|
|
||||||
set -x XCURSOR_PATH '${cursorPackage}/share/icons'
|
|
||||||
|
|
||||||
# Wayland specific environment variables
|
|
||||||
# set -x PROTON_USE_SDL 1
|
|
||||||
set -x PROTON_USE_WAYLAND 1
|
|
||||||
set -x PROTON_ENABLE_HDR 1
|
|
||||||
|
|
||||||
# Gamescope display identifier
|
|
||||||
set -x GAMESCOPE_WAYLAND_DISPLAY "gamescope-0"
|
|
||||||
|
|
||||||
# Steam specific environment variables
|
|
||||||
set -x STEAM_FORCE_DESKTOPUI_SCALING 1
|
|
||||||
set -x STEAM_GAMEPADUI 1
|
|
||||||
set -x STEAM_GAMESCOPE_CLIENT 1
|
|
||||||
|
|
||||||
# Lutris specific environment variables
|
|
||||||
set -x LUTRIS_SKIP_INIT 1
|
|
||||||
set -x DISABLE_LAYER_AMD_SWITCHABLE_GRAPHICS_1 1
|
|
||||||
set -x DISABLE_LAYER_NV_OPTIMUS_1 1
|
|
||||||
|
|
||||||
'';
|
|
||||||
|
|
||||||
# Base gamescope options
|
|
||||||
gamescope-base-opts =
|
|
||||||
[
|
|
||||||
"--fade-out-duration"
|
|
||||||
"200"
|
|
||||||
"-w"
|
|
||||||
"${toString WIDTH}"
|
|
||||||
"-h"
|
|
||||||
"${toString HEIGHT}"
|
|
||||||
"-r"
|
|
||||||
"${toString REFRESH_RATE}"
|
|
||||||
"-f"
|
|
||||||
"--backend"
|
|
||||||
"sdl"
|
|
||||||
"--rt"
|
|
||||||
"--immediate-flips"
|
|
||||||
]
|
|
||||||
++ lib.optionals HDR [
|
|
||||||
"--hdr-enabled"
|
|
||||||
"--hdr-debug-force-output"
|
|
||||||
"--hdr-itm-enable"
|
|
||||||
]
|
|
||||||
++ lib.optionals VRR [
|
|
||||||
"--adaptive-sync"
|
|
||||||
];
|
|
||||||
|
|
||||||
# Run gamescope with a set working environment
|
|
||||||
gamescope-run = pkgs.writeScriptBin "gamescope-run" ''
|
|
||||||
#!${lib.getExe pkgs.fish}
|
|
||||||
|
|
||||||
# Check if we're already inside a Gamescope session
|
|
||||||
if set -q GAMESCOPE_WAYLAND_DISPLAY
|
|
||||||
echo "Already inside Gamescope session ($GAMESCOPE_WAYLAND_DISPLAY), running command directly..."
|
|
||||||
# Skip gamescope and run the command directly
|
|
||||||
exec $argv
|
|
||||||
end
|
|
||||||
|
|
||||||
# Session Environment
|
|
||||||
${gamescope-env}
|
|
||||||
|
|
||||||
# Define and parse arguments using fish's built-in argparse
|
|
||||||
argparse -i 'x/extra-args=' -- $argv
|
|
||||||
if test $status -ne 0
|
|
||||||
exit 1
|
|
||||||
end
|
|
||||||
|
|
||||||
# The remaining arguments ($argv) are the command to be run
|
|
||||||
if test (count $argv) -eq 0
|
|
||||||
echo "Usage: gamescope-run [-x|--extra-args \"<options>\"] <command> [args...]"
|
|
||||||
echo ""
|
|
||||||
echo "Examples:"
|
|
||||||
echo " gamescope-run heroic"
|
|
||||||
echo " gamescope-run -x \"--fsr-upscaling-sharpness 5\" steam"
|
|
||||||
echo " GAMESCOPE_EXTRA_OPTS=\"--fsr\" gamescope-run steam (legacy)"
|
|
||||||
exit 1
|
|
||||||
end
|
|
||||||
|
|
||||||
# Combine base args, extra args from CLI, and extra args from env (for legacy)
|
|
||||||
set -l final_args ${lib.escapeShellArgs gamescope-base-opts}
|
|
||||||
|
|
||||||
# Add args from -x/--extra-args flag, splitting the string into a list
|
|
||||||
if set -q _flag_extra_args
|
|
||||||
set -a final_args (string split ' ' -- $_flag_extra_args)
|
|
||||||
end
|
|
||||||
|
|
||||||
# For legacy support, add args from GAMESCOPE_EXTRA_OPTS if it exists
|
|
||||||
if set -q GAMESCOPE_EXTRA_OPTS
|
|
||||||
set -a final_args (string split ' ' -- $GAMESCOPE_EXTRA_OPTS)
|
|
||||||
end
|
|
||||||
|
|
||||||
# Show the command being executed
|
|
||||||
echo -e "\033[1;36m[gamescope-run]\033[0m Running: \033[1;34m${lib.getExe pkgs.gamescope_git}\033[0m $final_args \033[1;32m--\033[0m $argv"
|
|
||||||
|
|
||||||
# Execute gamescope with the final arguments and the command
|
|
||||||
exec ${lib.getExe pkgs.gamescope_git} $final_args -- $argv
|
|
||||||
'';
|
|
||||||
|
|
||||||
## Effectively forces gamescope-run to be the default way to use Steam
|
|
||||||
## Why? Because , .desktops created by Steam would not run under gamescope-run otherwise
|
|
||||||
## !!! do not use 'pkgs.steam', it will not be configured correctly
|
|
||||||
steam-wrapper = pkgs.writeScriptBin "steam" ''
|
|
||||||
#!${lib.getExe pkgs.fish}
|
|
||||||
# This script wraps the original steam command to launch it
|
|
||||||
# with gamescope-run in a big picture mode.
|
|
||||||
# All arguments passed to this script are forwarded.
|
|
||||||
exec ${lib.getExe gamescope-run} -x "-e" ${lib.getExe osConfig.programs.steam.package} -tenfoot $argv
|
|
||||||
'';
|
|
||||||
|
|
||||||
## Ensures that all Lutris game launches go through Gamescope
|
|
||||||
## !!! This breaks the Lutris GUI, so use the overridden .desktop entry for opening Lutris itself
|
|
||||||
lutris-wrapper = pkgs.writeScriptBin "lutris" ''
|
|
||||||
#!${lib.getExe pkgs.fish}
|
|
||||||
# This script wraps the original lutris command to launch it
|
|
||||||
# with gamescope-run. All arguments passed to this script are forwarded.
|
|
||||||
exec ${lib.getExe gamescope-run} -x "--force-windows-fullscreen" ${lib.getExe pkgs.lutris} $argv
|
|
||||||
'';
|
|
||||||
in
|
|
||||||
{
|
{
|
||||||
home.packages = with pkgs; [
|
imports = [
|
||||||
steam-run
|
inputs.play.homeManagerModules.play
|
||||||
steam-wrapper
|
|
||||||
gamescope-run
|
|
||||||
lutris-wrapper
|
|
||||||
];
|
];
|
||||||
|
|
||||||
|
play = {
|
||||||
|
monitors = config.monitors; # I use the same module as in play.nix
|
||||||
|
gamescoperun = {
|
||||||
|
enable = true;
|
||||||
|
useGit = true;
|
||||||
|
|
||||||
|
# Extra environment variables
|
||||||
|
environment = {
|
||||||
|
XCURSOR_THEME = config.home.pointerCursor.name or "Adwaita";
|
||||||
|
XCURSOR_PATH = "${config.home.pointerCursor.package or pkgs.adwaita-icon-theme}/share/icons";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
wrappers = {
|
||||||
|
steam = {
|
||||||
|
enable = true;
|
||||||
|
package = osConfig.programs.steam.package;
|
||||||
|
extraOptions = {
|
||||||
|
"steam" = true; # equivalent to --steam flag
|
||||||
|
};
|
||||||
|
environment = {
|
||||||
|
STEAM_FORCE_DESKTOPUI_SCALING = 1;
|
||||||
|
STEAM_GAMEPADUI = 1;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
heroic = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.heroic; # No special package configured by play.nix
|
||||||
|
extraOptions = {
|
||||||
|
"force-windows-fullscreen" = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
lutris = {
|
||||||
|
enable = true;
|
||||||
|
package = osConfig.play.lutris.package;
|
||||||
|
extraOptions = {
|
||||||
|
"force-windows-fullscreen" = true;
|
||||||
|
};
|
||||||
|
environment = {
|
||||||
|
LUTRIS_SKIP_INIT = 1;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Override default desktop entries to use gamescope wrappers
|
||||||
xdg.desktopEntries = {
|
xdg.desktopEntries = {
|
||||||
steam = {
|
steam = {
|
||||||
name = "Steam";
|
name = "Steam";
|
||||||
comment = "Steam Big Picture in Gamescope Session";
|
comment = "Steam Big Picture in Gamescope Session";
|
||||||
exec = "${lib.getExe steam-wrapper}";
|
exec = "${lib.getExe config.play.wrappers.steam.wrappedPackage} -bigpicture -tenfoot";
|
||||||
icon = "steam";
|
icon = "steam";
|
||||||
type = "Application";
|
type = "Application";
|
||||||
terminal = false;
|
terminal = false;
|
||||||
|
@ -183,7 +82,7 @@ in
|
||||||
actions = {
|
actions = {
|
||||||
bigpicture = {
|
bigpicture = {
|
||||||
name = "Steam Client (No Gamescope)";
|
name = "Steam Client (No Gamescope)";
|
||||||
exec = "${lib.getExe pkgs.steam}";
|
exec = "${lib.getExe (config.play.steam.package or pkgs.steam)}";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -191,7 +90,7 @@ in
|
||||||
"com.heroicgameslauncher.hgl" = {
|
"com.heroicgameslauncher.hgl" = {
|
||||||
name = "Heroic Games Launcher";
|
name = "Heroic Games Launcher";
|
||||||
comment = "Heroic in Gamescope Session";
|
comment = "Heroic in Gamescope Session";
|
||||||
exec = ''${lib.getExe gamescope-run} -x "--force-windows-fullscreen" ${lib.getExe pkgs.heroic}'';
|
exec = "${lib.getExe config.play.wrappers.heroic.wrappedPackage}";
|
||||||
icon = "com.heroicgameslauncher.hgl";
|
icon = "com.heroicgameslauncher.hgl";
|
||||||
type = "Application";
|
type = "Application";
|
||||||
terminal = false;
|
terminal = false;
|
||||||
|
@ -207,7 +106,7 @@ in
|
||||||
"net.lutris.Lutris" = {
|
"net.lutris.Lutris" = {
|
||||||
name = "Lutris";
|
name = "Lutris";
|
||||||
comment = "Video Game Preservation Platform";
|
comment = "Video Game Preservation Platform";
|
||||||
exec = "${lib.getExe pkgs.lutris} %U";
|
exec = "${lib.getExe (config.play.lutris.package or pkgs.lutris)} %U";
|
||||||
icon = "net.lutris.Lutris";
|
icon = "net.lutris.Lutris";
|
||||||
type = "Application";
|
type = "Application";
|
||||||
terminal = false;
|
terminal = false;
|
||||||
|
@ -222,12 +121,14 @@ in
|
||||||
actions = {
|
actions = {
|
||||||
broken = {
|
broken = {
|
||||||
name = "Lutris (Gamescope BROKEN)";
|
name = "Lutris (Gamescope BROKEN)";
|
||||||
exec = ''${lib.getExe gamescope-run} -x "--force-windows-fullscreen" ${lib.getExe pkgs.lutris}'';
|
exec = "${lib.getExe config.play.wrappers.lutris.wrappedPackage}";
|
||||||
};
|
};
|
||||||
|
|
||||||
broken-exposed = {
|
broken-exposed = {
|
||||||
name = "Lutris (Gamescope BROKEN; Exposed Wayland)";
|
name = "Lutris (Gamescope BROKEN; Exposed Wayland)";
|
||||||
exec = ''${lib.getExe gamescope-run} -x "--force-windows-fullscreen --expose-wayland" ${lib.getExe pkgs.lutris}'';
|
exec = ''${lib.getExe config.play.gamescoperun.package} -x "--force-windows-fullscreen --expose-wayland" ${
|
||||||
|
lib.getExe (config.play.lutris.package or pkgs.lutris)
|
||||||
|
}'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,6 +1,3 @@
|
||||||
## NOTE:
|
|
||||||
## This is only configured for AMD GPUs; Nvidia might require additional configuration.
|
|
||||||
## For example host (PC) configuration using this module go to hosts/x86/rune
|
|
||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
lib,
|
lib,
|
||||||
|
@ -9,106 +6,27 @@
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
hardware.graphics = {
|
imports = [
|
||||||
enable = true;
|
inputs.play.nixosModules.play
|
||||||
enable32Bit = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
lact # AMDgpu tool
|
|
||||||
heroic
|
|
||||||
gamescope_git
|
|
||||||
gamescope-wsi_git
|
|
||||||
(pkgs.lutris.override {
|
|
||||||
extraPkgs = pkgs: [
|
|
||||||
pkgs.wineWowPackages.waylandFull
|
|
||||||
pkgs.winetricks
|
|
||||||
vulkan-tools
|
|
||||||
xterm
|
|
||||||
];
|
|
||||||
})
|
|
||||||
];
|
];
|
||||||
|
|
||||||
systemd = {
|
play = {
|
||||||
packages = with pkgs; [ lact ];
|
amd.enable = true;
|
||||||
services.lactd.wantedBy = [ "multi-user.target" ];
|
ananicy.enable = true;
|
||||||
};
|
gamemode.enable = true;
|
||||||
|
|
||||||
# Instead of set -x CAP_SYS_NICE eip
|
|
||||||
services.ananicy = {
|
|
||||||
enable = true;
|
|
||||||
package = pkgs.ananicy-cpp;
|
|
||||||
rulesProvider = pkgs.ananicy-cpp;
|
|
||||||
extraRules = [
|
|
||||||
{
|
|
||||||
"name" = "gamescope";
|
|
||||||
"nice" = -20;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
programs = {
|
|
||||||
steam = {
|
steam = {
|
||||||
enable = true;
|
enable = true;
|
||||||
remotePlay.openFirewall = true;
|
|
||||||
dedicatedServer.openFirewall = true;
|
|
||||||
protontricks = {
|
|
||||||
enable = true;
|
|
||||||
package = pkgs.protontricks;
|
|
||||||
};
|
|
||||||
|
|
||||||
package = pkgs.steam.override {
|
|
||||||
extraPkgs =
|
|
||||||
pkgs:
|
|
||||||
(builtins.attrValues {
|
|
||||||
inherit (pkgs.xorg)
|
|
||||||
libXcursor
|
|
||||||
libXi
|
|
||||||
libXinerama
|
|
||||||
libXScrnSaver
|
|
||||||
;
|
|
||||||
|
|
||||||
inherit (pkgs.stdenv.cc.cc)
|
|
||||||
lib
|
|
||||||
;
|
|
||||||
|
|
||||||
inherit (pkgs)
|
|
||||||
gamemode
|
|
||||||
gperftools
|
|
||||||
keyutils
|
|
||||||
libkrb5
|
|
||||||
libpng
|
|
||||||
libpulseaudio
|
|
||||||
libvorbis
|
|
||||||
mangohud
|
|
||||||
;
|
|
||||||
});
|
|
||||||
};
|
|
||||||
extraCompatPackages = with pkgs; [
|
extraCompatPackages = with pkgs; [
|
||||||
proton-ge-bin
|
proton-ge-bin
|
||||||
proton-ge-custom
|
|
||||||
proton-cachyos
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
gamemode = {
|
lutris.enable = true;
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
general = {
|
|
||||||
softrealtime = "auto";
|
|
||||||
inhibit_screensaver = 1;
|
|
||||||
renice = 15;
|
|
||||||
};
|
|
||||||
gpu = {
|
|
||||||
apply_gpu_optimisations = "accept-responsibility";
|
|
||||||
gpu_device = 1; # The DRM device number on the system (usually 0), ie. the number in /sys/class/drm/card0/
|
|
||||||
amd_performance_level = "high";
|
|
||||||
};
|
|
||||||
custom = {
|
|
||||||
start = "${pkgs.libnotify}/bin/notify-send 'GameMode started'";
|
|
||||||
end = "${pkgs.libnotify}/bin/notify-send 'GameMode ended'";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# Additional packages not covered by play.nix
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
heroic
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,47 +0,0 @@
|
||||||
{
|
|
||||||
callPackage,
|
|
||||||
stdenv,
|
|
||||||
lib,
|
|
||||||
fetchurl,
|
|
||||||
}:
|
|
||||||
let
|
|
||||||
protonGeTitle = "Proton-CachyOS";
|
|
||||||
protonGeVersions = lib.importJSON ./versions.json;
|
|
||||||
in
|
|
||||||
stdenv.mkDerivation {
|
|
||||||
name = "proton-cachyos";
|
|
||||||
version = "${protonGeVersions.base}.${protonGeVersions.release}";
|
|
||||||
|
|
||||||
src =
|
|
||||||
let
|
|
||||||
tagName = "cachyos-${protonGeVersions.base}-${protonGeVersions.release}-slr";
|
|
||||||
fileName = "proton-cachyos-${protonGeVersions.base}-${protonGeVersions.release}-slr-x86_64.tar.xz";
|
|
||||||
in
|
|
||||||
fetchurl {
|
|
||||||
url = "https://github.com/CachyOS/proton-cachyos/releases/download/${tagName}/${fileName}";
|
|
||||||
inherit (protonGeVersions) hash;
|
|
||||||
};
|
|
||||||
|
|
||||||
buildCommand =
|
|
||||||
''
|
|
||||||
mkdir -p $out/bin
|
|
||||||
tar -C $out/bin --strip=1 -x -f $src
|
|
||||||
''
|
|
||||||
# Replace the internal name and display name
|
|
||||||
+ lib.strings.optionalString (protonGeTitle != null) ''
|
|
||||||
sed -i -r 's|"proton-cachyos-[^"]*"|"${protonGeTitle}"|g' $out/bin/compatibilitytool.vdf
|
|
||||||
sed -i -r 's|"display_name"[[:space:]]*"[^"]*"|"display_name" "${protonGeTitle}"|' $out/bin/compatibilitytool.vdf
|
|
||||||
'';
|
|
||||||
|
|
||||||
passthru.updateScript = callPackage ./update.nix { };
|
|
||||||
|
|
||||||
meta = with lib; {
|
|
||||||
description = "Compatibility tool for Steam Play based on Wine and additional components. CachyOS fork.";
|
|
||||||
homepage = "https://github.com/CachyOS/proton-cachyos";
|
|
||||||
license = licenses.bsd3;
|
|
||||||
platforms = [ "x86_64-linux" ];
|
|
||||||
maintainers = with maintainers; [
|
|
||||||
tophc7
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,55 +0,0 @@
|
||||||
{
|
|
||||||
writeShellScript,
|
|
||||||
lib,
|
|
||||||
coreutils,
|
|
||||||
findutils,
|
|
||||||
gnugrep,
|
|
||||||
curl,
|
|
||||||
jq,
|
|
||||||
git,
|
|
||||||
nix,
|
|
||||||
nix-prefetch-git,
|
|
||||||
moreutils,
|
|
||||||
yq,
|
|
||||||
}:
|
|
||||||
let
|
|
||||||
path = lib.makeBinPath [
|
|
||||||
coreutils
|
|
||||||
curl
|
|
||||||
findutils
|
|
||||||
gnugrep
|
|
||||||
jq
|
|
||||||
moreutils
|
|
||||||
git
|
|
||||||
nix-prefetch-git
|
|
||||||
nix
|
|
||||||
yq
|
|
||||||
];
|
|
||||||
in
|
|
||||||
writeShellScript "update-proton-cachyos" ''
|
|
||||||
set -euo pipefail
|
|
||||||
PATH=${path}
|
|
||||||
|
|
||||||
srcJson=pkgs/proton-cachyos/versions.json
|
|
||||||
localBase=$(jq -r .base < $srcJson)
|
|
||||||
localRelease=$(jq -r .release < $srcJson)
|
|
||||||
|
|
||||||
latestVer=$(curl 'https://github.com/GloriousEggroll/proton-cachyos/tags.atom' | xq -r '.feed.entry[0].link."@href"' | grep -Po '(?<=/)[^/]+$')
|
|
||||||
|
|
||||||
if [ "GE-Proton''${localBase}-''${localRelease}" == "$latestVer" ]; then
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
latestBase=$(echo $latestVer | grep -Po '(?<=GE-Proton)[^-]+')
|
|
||||||
latestRelease=$(echo $latestVer | grep -Po '(?<=-)[^-]+$')
|
|
||||||
latestSha256=$(nix-prefetch-url --type sha256 "https://github.com/CachyOS/proton-cachyos/releases/download/''${latestVer}/''${latestVer}.tar.gz")
|
|
||||||
latestHash=$(nix-hash --to-sri --type sha256 $latestSha256)
|
|
||||||
|
|
||||||
jq \
|
|
||||||
--arg latestBase "$latestBase" --arg latestRelease "$latestRelease" --arg latestHash "$latestHash" \
|
|
||||||
'.base = $latestBase | .release = $latestRelease | .hash = $latestHash' \
|
|
||||||
"$srcJson" | sponge "$srcJson"
|
|
||||||
|
|
||||||
git add $srcJson
|
|
||||||
git commit -m "proton-cachyos: ''${localBase}.''${localRelease} -> ''${latestBase}.''${latestRelease}"
|
|
||||||
''
|
|
|
@ -1,5 +0,0 @@
|
||||||
{
|
|
||||||
"base": "10.0",
|
|
||||||
"release": "20250623",
|
|
||||||
"hash": "sha256-HLWWR2h+AdGfqt3Aay9Xyz7Q06NRoi3/Mp5vJtoqLlg="
|
|
||||||
}
|
|
Loading…
Add table
Reference in a new issue