packages: Add a patched buildFHSUserEnvBubblewrap
This commit is contained in:
47
packages/games/steam/build-wrapped.sh
Normal file
47
packages/games/steam/build-wrapped.sh
Normal file
@@ -0,0 +1,47 @@
|
||||
source $stdenv/setup
|
||||
|
||||
outp=$out/lib/steam-runtime
|
||||
|
||||
buildDir() {
|
||||
paths="$1"
|
||||
pkgs="$2"
|
||||
|
||||
for pkg in $pkgs; do
|
||||
echo "adding package $pkg"
|
||||
for path in $paths; do
|
||||
if [ -d $pkg/$path ]; then
|
||||
cd $pkg/$path
|
||||
for file in *; do
|
||||
found=""
|
||||
for i in $paths; do
|
||||
if [ -e "$outp/$i/$file" ]; then
|
||||
found=1
|
||||
break
|
||||
fi
|
||||
done
|
||||
if [ -z "$found" ]; then
|
||||
mkdir -p $outp/$path
|
||||
ln -s "$pkg/$path/$file" $outp/$path
|
||||
sovers=$(echo $file | perl -ne 'print if s/.*?\.so\.(.*)/\1/')
|
||||
if [ ! -z "$sovers" ]; then
|
||||
fname=''${file%.''${sovers}}
|
||||
for ver in ''${sovers//./ }; do
|
||||
found=""
|
||||
for i in $paths; do
|
||||
if [ -e "$outp/$i/$fname" ]; then
|
||||
found=1
|
||||
break
|
||||
fi
|
||||
done
|
||||
[ -n "$found" ] || ln -s "$pkg/$path/$file" "$outp/$path/$fname"
|
||||
fname="$fname.$ver"
|
||||
done
|
||||
fi
|
||||
fi
|
||||
done
|
||||
fi
|
||||
done
|
||||
done
|
||||
}
|
||||
|
||||
eval "$installPhase"
|
||||
26
packages/games/steam/default.nix
Normal file
26
packages/games/steam/default.nix
Normal file
@@ -0,0 +1,26 @@
|
||||
{ pkgs, newScope, buildFHSUserEnv }:
|
||||
|
||||
let
|
||||
callPackage = newScope self;
|
||||
|
||||
self = rec {
|
||||
steamArch = if pkgs.stdenv.hostPlatform.system == "x86_64-linux" then "amd64"
|
||||
else if pkgs.stdenv.hostPlatform.system == "i686-linux" then "i386"
|
||||
else throw "Unsupported platform: ${pkgs.stdenv.hostPlatform.system}";
|
||||
|
||||
steam-runtime = callPackage ./runtime.nix { };
|
||||
steam-runtime-wrapped = callPackage ./runtime-wrapped.nix { };
|
||||
steam = callPackage ./steam.nix { };
|
||||
steam-fonts = callPackage ./fonts.nix { };
|
||||
steam-fhsenv = callPackage ./fhsenv.nix {
|
||||
glxinfo-i686 = pkgs.pkgsi686Linux.glxinfo;
|
||||
steam-runtime-wrapped-i686 =
|
||||
if steamArch == "amd64"
|
||||
then pkgs.pkgsi686Linux.steamPackages.steam-runtime-wrapped
|
||||
else null;
|
||||
inherit buildFHSUserEnv;
|
||||
};
|
||||
steamcmd = callPackage ./steamcmd.nix { };
|
||||
};
|
||||
|
||||
in self
|
||||
360
packages/games/steam/fhsenv.nix
Normal file
360
packages/games/steam/fhsenv.nix
Normal file
@@ -0,0 +1,360 @@
|
||||
{ config, lib, writeScript, buildFHSUserEnv, steam, glxinfo-i686
|
||||
, steam-runtime-wrapped, steam-runtime-wrapped-i686 ? null
|
||||
, extraPkgs ? pkgs: [ ] # extra packages to add to targetPkgs
|
||||
, extraLibraries ? pkgs: [ ] # extra packages to add to multiPkgs
|
||||
, extraProfile ? "" # string to append to profile
|
||||
, nativeOnly ? false
|
||||
, runtimeOnly ? false
|
||||
, runtimeShell
|
||||
, stdenv
|
||||
|
||||
# DEPRECATED
|
||||
, withJava ? config.steam.java or false
|
||||
, withPrimus ? config.steam.primus or false
|
||||
}:
|
||||
|
||||
let
|
||||
commonTargetPkgs = pkgs: with pkgs;
|
||||
[
|
||||
steamPackages.steam-fonts
|
||||
# Needed for operating system detection until
|
||||
# https://github.com/ValveSoftware/steam-for-linux/issues/5909 is resolved
|
||||
lsb-release
|
||||
# Errors in output without those
|
||||
pciutils
|
||||
python2
|
||||
# Games' dependencies
|
||||
xorg.xrandr
|
||||
which
|
||||
# Needed by gdialog, including in the steam-runtime
|
||||
perl
|
||||
# Open URLs
|
||||
xdg-utils
|
||||
iana-etc
|
||||
# Steam Play / Proton
|
||||
python3
|
||||
# Steam VR
|
||||
procps
|
||||
usbutils
|
||||
|
||||
# electron based launchers need newer versions of these libraries than what runtime provides
|
||||
mesa
|
||||
sqlite
|
||||
|
||||
# TODO: Remove
|
||||
gamemode
|
||||
] ++ lib.optional withJava jdk8 # TODO: upgrade https://github.com/NixOS/nixpkgs/pull/89731
|
||||
++ lib.optional withPrimus primus
|
||||
++ extraPkgs pkgs;
|
||||
|
||||
ldPath = lib.optionals stdenv.is64bit [ "/lib64" ]
|
||||
++ [ "/lib32" ]
|
||||
++ map (x: "/steamrt/${steam-runtime-wrapped.arch}/" + x) steam-runtime-wrapped.libs
|
||||
++ lib.optionals (steam-runtime-wrapped-i686 != null) (map (x: "/steamrt/${steam-runtime-wrapped-i686.arch}/" + x) steam-runtime-wrapped-i686.libs);
|
||||
|
||||
# Zachtronics and a few other studios expect STEAM_LD_LIBRARY_PATH to be present
|
||||
exportLDPath = ''
|
||||
export LD_LIBRARY_PATH=${lib.concatStringsSep ":" ldPath}''${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH
|
||||
export STEAM_LD_LIBRARY_PATH="$STEAM_LD_LIBRARY_PATH''${STEAM_LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH"
|
||||
'';
|
||||
|
||||
# bootstrap.tar.xz has 444 permissions, which means that simple deletes fail
|
||||
# and steam will not be able to start
|
||||
fixBootstrap = ''
|
||||
if [ -r $HOME/.local/share/Steam/bootstrap.tar.xz ]; then
|
||||
chmod +w $HOME/.local/share/Steam/bootstrap.tar.xz
|
||||
fi
|
||||
'';
|
||||
|
||||
setupSh = writeScript "setup.sh" ''
|
||||
#!${runtimeShell}
|
||||
'';
|
||||
|
||||
runSh = writeScript "run.sh" ''
|
||||
#!${runtimeShell}
|
||||
runtime_paths="${lib.concatStringsSep ":" ldPath}"
|
||||
if [ "$1" == "--print-steam-runtime-library-paths" ]; then
|
||||
echo "$runtime_paths''${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH"
|
||||
exit 0
|
||||
fi
|
||||
export LD_LIBRARY_PATH="$runtime_paths''${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH"
|
||||
export STEAM_LD_LIBRARY_PATH="$STEAM_LD_LIBRARY_PATH''${STEAM_LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH"
|
||||
exec "$@"
|
||||
'';
|
||||
|
||||
in buildFHSUserEnv rec {
|
||||
name = "steam";
|
||||
|
||||
targetPkgs = pkgs: with pkgs; [
|
||||
steamPackages.steam
|
||||
# License agreement
|
||||
gnome.zenity
|
||||
] ++ commonTargetPkgs pkgs;
|
||||
|
||||
multiPkgs = pkgs: with pkgs; [
|
||||
# These are required by steam with proper errors
|
||||
xorg.libXcomposite
|
||||
xorg.libXtst
|
||||
xorg.libXrandr
|
||||
xorg.libXext
|
||||
xorg.libX11
|
||||
xorg.libXfixes
|
||||
libGL
|
||||
libva
|
||||
pipewire.lib
|
||||
|
||||
# Not formally in runtime but needed by some games
|
||||
at-spi2-atk
|
||||
at-spi2-core # CrossCode
|
||||
gst_all_1.gstreamer
|
||||
gst_all_1.gst-plugins-ugly
|
||||
gst_all_1.gst-plugins-base
|
||||
json-glib # paradox launcher (Stellaris)
|
||||
libdrm
|
||||
libxkbcommon # paradox launcher
|
||||
mono
|
||||
xorg.xkeyboardconfig
|
||||
xorg.libpciaccess
|
||||
udev # shadow of the tomb raider
|
||||
|
||||
## screeps dependencies
|
||||
gtk3
|
||||
dbus
|
||||
zlib
|
||||
glib
|
||||
atk
|
||||
cairo
|
||||
freetype
|
||||
gdk-pixbuf
|
||||
pango
|
||||
fontconfig
|
||||
|
||||
# friends options won't display "Launch Game" without it
|
||||
lsof
|
||||
|
||||
# called by steam's setup.sh
|
||||
file
|
||||
|
||||
# Prison Architect
|
||||
libGLU
|
||||
libuuid
|
||||
libbsd
|
||||
#alsa-lib
|
||||
|
||||
# Loop Hero
|
||||
libidn2
|
||||
libpsl
|
||||
nghttp2.lib
|
||||
openssl_1_1
|
||||
rtmpdump
|
||||
|
||||
# needed by getcap for vr startup
|
||||
libcap
|
||||
|
||||
# dependencies for mesa drivers, needed inside pressure-vessel
|
||||
mesa.drivers
|
||||
mesa.llvmPackages.llvm.lib
|
||||
vulkan-loader
|
||||
expat
|
||||
wayland
|
||||
xorg.libxcb
|
||||
xorg.libXdamage
|
||||
xorg.libxshmfence
|
||||
xorg.libXxf86vm
|
||||
libelf
|
||||
] ++ (if (!nativeOnly) then [
|
||||
(steamPackages.steam-runtime-wrapped.override {
|
||||
inherit runtimeOnly;
|
||||
})
|
||||
] else [
|
||||
# Required
|
||||
glib
|
||||
gtk2
|
||||
bzip2
|
||||
zlib
|
||||
gdk-pixbuf
|
||||
|
||||
# Without these it silently fails
|
||||
xorg.libXinerama
|
||||
xorg.libXdamage
|
||||
xorg.libXcursor
|
||||
xorg.libXrender
|
||||
xorg.libXScrnSaver
|
||||
xorg.libXxf86vm
|
||||
xorg.libXi
|
||||
xorg.libSM
|
||||
xorg.libICE
|
||||
gnome2.GConf
|
||||
freetype
|
||||
(curl.override { gnutlsSupport = true; sslSupport = false; })
|
||||
nspr
|
||||
nss
|
||||
fontconfig
|
||||
cairo
|
||||
pango
|
||||
expat
|
||||
dbus
|
||||
cups
|
||||
libcap
|
||||
SDL2
|
||||
libusb1
|
||||
dbus-glib
|
||||
ffmpeg
|
||||
atk
|
||||
# Only libraries are needed from those two
|
||||
libudev0-shim
|
||||
networkmanager098
|
||||
|
||||
# Verified games requirements
|
||||
xorg.libXt
|
||||
xorg.libXmu
|
||||
xorg.libxcb
|
||||
libogg
|
||||
libvorbis
|
||||
SDL
|
||||
SDL2_image
|
||||
glew110
|
||||
libidn
|
||||
tbb
|
||||
wayland
|
||||
|
||||
# Other things from runtime
|
||||
flac
|
||||
freeglut
|
||||
libjpeg
|
||||
libpng12
|
||||
libsamplerate
|
||||
libmikmod
|
||||
libtheora
|
||||
libtiff
|
||||
pixman
|
||||
speex
|
||||
SDL_image
|
||||
SDL_ttf
|
||||
SDL_mixer
|
||||
SDL2_ttf
|
||||
SDL2_mixer
|
||||
libappindicator-gtk2
|
||||
libcaca
|
||||
libcanberra
|
||||
libgcrypt
|
||||
libvpx
|
||||
librsvg
|
||||
xorg.libXft
|
||||
libvdpau
|
||||
] ++ steamPackages.steam-runtime-wrapped.overridePkgs) ++ extraLibraries pkgs;
|
||||
|
||||
extraBuildCommands = ''
|
||||
if [ -f $out/usr/share/vulkan/icd.d/nvidia_icd.json ]; then
|
||||
cp $out/usr/share/vulkan/icd.d/nvidia_icd{,32}.json
|
||||
nvidia32Lib=$(realpath $out/lib32/libGLX_nvidia.so.0 | cut -d'/' -f-4)
|
||||
escapedNvidia32Lib="''${nvidia32Lib//\//\\\/}"
|
||||
sed -i "s/\/nix\/store\/.*\/lib\/libGLX_nvidia\.so\.0/$escapedNvidia32Lib\/lib\/libGLX_nvidia\.so\.0/g" $out/usr/share/vulkan/icd.d/nvidia_icd32.json
|
||||
fi
|
||||
'' + (if (!nativeOnly) then ''
|
||||
mkdir -p steamrt
|
||||
ln -s ../lib/steam-runtime steamrt/${steam-runtime-wrapped.arch}
|
||||
${lib.optionalString (steam-runtime-wrapped-i686 != null) ''
|
||||
ln -s ../lib32/steam-runtime steamrt/${steam-runtime-wrapped-i686.arch}
|
||||
''}
|
||||
ln -s ${runSh} steamrt/run.sh
|
||||
ln -s ${setupSh} steamrt/setup.sh
|
||||
'' else ''
|
||||
ln -s /usr/lib/libbz2.so usr/lib/libbz2.so.1.0
|
||||
${lib.optionalString (steam-runtime-wrapped-i686 != null) ''
|
||||
ln -s /usr/lib32/libbz2.so usr/lib32/libbz2.so.1.0
|
||||
''}
|
||||
'');
|
||||
|
||||
extraInstallCommands = ''
|
||||
mkdir -p $out/share/applications
|
||||
ln -s ${steam}/share/icons $out/share
|
||||
ln -s ${steam}/share/pixmaps $out/share
|
||||
ln -s ${steam}/share/applications/steam.desktop $out/share/applications/steam.desktop
|
||||
'';
|
||||
|
||||
profile = ''
|
||||
# Workaround for issue #44254 (Steam cannot connect to friends network)
|
||||
# https://github.com/NixOS/nixpkgs/issues/44254
|
||||
if [ -z ''${TZ+x} ]; then
|
||||
new_TZ="$(readlink -f /etc/localtime | grep -P -o '(?<=/zoneinfo/).*$')"
|
||||
if [ $? -eq 0 ]; then
|
||||
export TZ="$new_TZ"
|
||||
fi
|
||||
fi
|
||||
|
||||
export STEAM_RUNTIME=${if nativeOnly then "0" else "/steamrt"}
|
||||
|
||||
export VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/intel_icd.x86_64.json:/usr/share/vulkan/icd.d/intel_icd.i686.json:/usr/share/vulkan/icd.d/lvp_icd.x86_64.json:/usr/share/vulkan/icd.d/lvp_icd.i686.json:/usr/share/vulkan/icd.d/nvidia_icd.json:/usr/share/vulkan/icd.d/nvidia_icd32.json:/usr/share/vulkan/icd.d/radeon_icd.x86_64.json:/usr/share/vulkan/icd.d/radeon_icd.i686.json
|
||||
'' + extraProfile;
|
||||
|
||||
runScript = writeScript "steam-wrapper.sh" ''
|
||||
#!${runtimeShell}
|
||||
if [ -f /host/etc/NIXOS ]; then # Check only useful on NixOS
|
||||
${glxinfo-i686}/bin/glxinfo >/dev/null 2>&1
|
||||
# If there was an error running glxinfo, we know something is wrong with the configuration
|
||||
if [ $? -ne 0 ]; then
|
||||
cat <<EOF > /dev/stderr
|
||||
**
|
||||
WARNING: Steam is not set up. Add the following options to /etc/nixos/configuration.nix
|
||||
and then run \`sudo nixos-rebuild switch\`:
|
||||
{
|
||||
hardware.opengl.driSupport32Bit = true;
|
||||
hardware.pulseaudio.support32Bit = true;
|
||||
}
|
||||
**
|
||||
EOF
|
||||
fi
|
||||
fi
|
||||
${lib.optionalString (!nativeOnly) exportLDPath}
|
||||
${fixBootstrap}
|
||||
exec steam "$@"
|
||||
'';
|
||||
|
||||
meta = steam.meta // {
|
||||
broken = nativeOnly;
|
||||
};
|
||||
|
||||
# allows for some gui applications to share IPC
|
||||
# this fixes certain issues where they don't render correctly
|
||||
unshareIpc = false;
|
||||
|
||||
# Some applications such as Natron need access to MIT-SHM or other
|
||||
# shared memory mechanisms. Unsharing the pid namespace
|
||||
# breaks the ability for application to reference shared memory.
|
||||
unsharePid = false;
|
||||
|
||||
specifyHomeDirs = true;
|
||||
mountInHome = [
|
||||
".steam"
|
||||
".local/share/Steam"
|
||||
];
|
||||
chdirTo = "/home/$USER";
|
||||
additionalBlacklist = [ "/mnt" ];
|
||||
additionalMounts = [ "/mnt/Storage/Games/SteamLibrary" ];
|
||||
extraEnv = {
|
||||
DRI_PRIME = "1";
|
||||
};
|
||||
|
||||
passthru.run = buildFHSUserEnv {
|
||||
name = "steam-run";
|
||||
|
||||
targetPkgs = commonTargetPkgs;
|
||||
inherit multiPkgs extraBuildCommands;
|
||||
|
||||
inherit unshareIpc unsharePid;
|
||||
|
||||
runScript = writeScript "steam-run" ''
|
||||
#!${runtimeShell}
|
||||
run="$1"
|
||||
if [ "$run" = "" ]; then
|
||||
echo "Usage: steam-run command-to-run args..." >&2
|
||||
exit 1
|
||||
fi
|
||||
shift
|
||||
${lib.optionalString (!nativeOnly) exportLDPath}
|
||||
${fixBootstrap}
|
||||
exec -- "$run" "$@"
|
||||
'';
|
||||
};
|
||||
}
|
||||
20
packages/games/steam/fonts.nix
Normal file
20
packages/games/steam/fonts.nix
Normal file
@@ -0,0 +1,20 @@
|
||||
{ stdenv, fetchurl, unzip }:
|
||||
|
||||
stdenv.mkDerivation {
|
||||
pname = "steam-fonts";
|
||||
version = "1";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://support.steampowered.com/downloads/1974-YFKL-4947/SteamFonts.zip";
|
||||
sha256 = "1cgygmwich5f1jhhbmbkkpnzasjl8gy36xln76n6r2gjh6awqfx0";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ unzip ];
|
||||
|
||||
sourceRoot = ".";
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/fonts/truetype
|
||||
cp -r *.TTF *.ttf $out/share/fonts/truetype
|
||||
'';
|
||||
}
|
||||
45
packages/games/steam/runtime-wrapped.nix
Normal file
45
packages/games/steam/runtime-wrapped.nix
Normal file
@@ -0,0 +1,45 @@
|
||||
{ stdenv, steamArch, lib, perl, pkgs, steam-runtime
|
||||
, runtimeOnly ? false
|
||||
}:
|
||||
|
||||
let
|
||||
overridePkgs = lib.optionals (!runtimeOnly) (with pkgs; [
|
||||
libgpgerror
|
||||
libpulseaudio
|
||||
#alsa-lib
|
||||
openalSoft
|
||||
libva1
|
||||
libvdpau
|
||||
vulkan-loader
|
||||
gcc.cc.lib
|
||||
nss
|
||||
nspr
|
||||
xorg.libxcb
|
||||
]);
|
||||
|
||||
allPkgs = overridePkgs ++ [ steam-runtime ];
|
||||
|
||||
gnuArch = if steamArch == "amd64" then "x86_64-linux-gnu"
|
||||
else if steamArch == "i386" then "i386-linux-gnu"
|
||||
else abort "Unsupported architecture";
|
||||
|
||||
libs = [ "lib/${gnuArch}" "lib" "usr/lib/${gnuArch}" "usr/lib" ];
|
||||
bins = [ "bin" "usr/bin" ];
|
||||
|
||||
in stdenv.mkDerivation {
|
||||
name = "steam-runtime-wrapped";
|
||||
|
||||
nativeBuildInputs = [ perl ];
|
||||
|
||||
builder = ./build-wrapped.sh;
|
||||
|
||||
passthru = {
|
||||
inherit gnuArch libs bins overridePkgs;
|
||||
arch = steamArch;
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
buildDir "${toString libs}" "${toString (map lib.getLib allPkgs)}"
|
||||
buildDir "${toString bins}" "${toString (map lib.getBin allPkgs)}"
|
||||
'';
|
||||
}
|
||||
37
packages/games/steam/runtime.nix
Normal file
37
packages/games/steam/runtime.nix
Normal file
@@ -0,0 +1,37 @@
|
||||
{ lib, stdenv, fetchurl
|
||||
|
||||
# for update script
|
||||
, writeShellScript, curl, nix-update
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
|
||||
pname = "steam-runtime";
|
||||
# from https://repo.steampowered.com/steamrt-images-scout/snapshots/
|
||||
version = "0.20210630.0";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://repo.steampowered.com/steamrt-images-scout/snapshots/${version}/steam-runtime.tar.xz";
|
||||
sha256 = "sha256-vwSgk3hEaI/RO9uvehAx3+ZBynpqjwGDzuyeyGCnu18=";
|
||||
name = "scout-runtime-${version}.tar.gz";
|
||||
};
|
||||
|
||||
buildCommand = ''
|
||||
mkdir -p $out
|
||||
tar -C $out --strip=1 -x -f $src
|
||||
'';
|
||||
|
||||
passthru = {
|
||||
updateScript = writeShellScript "update.sh" ''
|
||||
version=$(${curl}/bin/curl https://repo.steampowered.com/steamrt-images-scout/snapshots/latest-steam-client-general-availability/VERSION.txt)
|
||||
${nix-update}/bin/nix-update --version "$version" steamPackages.steam-runtime
|
||||
'';
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
description = "The official runtime used by Steam";
|
||||
homepage = "https://github.com/ValveSoftware/steam-runtime";
|
||||
license = licenses.unfreeRedistributable; # Includes NVIDIA CG toolkit
|
||||
maintainers = with maintainers; [ hrdinka abbradar ];
|
||||
};
|
||||
}
|
||||
47
packages/games/steam/steam.nix
Normal file
47
packages/games/steam/steam.nix
Normal file
@@ -0,0 +1,47 @@
|
||||
{ lib, stdenv, fetchurl, runtimeShell, traceDeps ? false, bash }:
|
||||
|
||||
let
|
||||
traceLog = "/tmp/steam-trace-dependencies.log";
|
||||
version = "1.0.0.70";
|
||||
|
||||
in stdenv.mkDerivation {
|
||||
pname = "steam-original";
|
||||
inherit version;
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://repo.steampowered.com/steam/archive/stable/steam_${version}.tar.gz";
|
||||
sha256 = "sha256-n/iKV3jHsA77GPMk1M0MKC1fQ42tEgG8Ppgi4/9qLf8=";
|
||||
};
|
||||
|
||||
makeFlags = [ "DESTDIR=$(out)" "PREFIX=" ];
|
||||
|
||||
postInstall = ''
|
||||
rm $out/bin/steamdeps
|
||||
${lib.optionalString traceDeps ''
|
||||
cat > $out/bin/steamdeps <<EOF
|
||||
#!${runtimeShell}
|
||||
echo \$1 >> ${traceLog}
|
||||
cat \$1 >> ${traceLog}
|
||||
echo >> ${traceLog}
|
||||
EOF
|
||||
chmod +x $out/bin/steamdeps
|
||||
''}
|
||||
|
||||
# install udev rules
|
||||
mkdir -p $out/etc/udev/rules.d/
|
||||
cp ./subprojects/steam-devices/*.rules $out/etc/udev/rules.d/
|
||||
substituteInPlace $out/etc/udev/rules.d/60-steam-input.rules \
|
||||
--replace "/bin/sh" "${bash}/bin/bash"
|
||||
|
||||
# this just installs a link, "steam.desktop -> /lib/steam/steam.desktop"
|
||||
rm $out/share/applications/steam.desktop
|
||||
sed -e 's,/usr/bin/steam,steam,g' steam.desktop > $out/share/applications/steam.desktop
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "A digital distribution platform";
|
||||
homepage = "http://store.steampowered.com/";
|
||||
license = licenses.unfreeRedistributable;
|
||||
maintainers = with maintainers; [ jagajaga jonringer ];
|
||||
};
|
||||
}
|
||||
46
packages/games/steam/steamcmd.nix
Normal file
46
packages/games/steam/steamcmd.nix
Normal file
@@ -0,0 +1,46 @@
|
||||
{ lib, stdenv, fetchurl, steam-run, bash, coreutils
|
||||
, steamRoot ? "~/.local/share/Steam"
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation {
|
||||
pname = "steamcmd";
|
||||
version = "20180104"; # According to steamcmd_linux.tar.gz mtime
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz";
|
||||
sha256 = "0z0y0zqvhydmfc9y9vg5am0vz7m3gbj4l2dwlrfz936hpx301gyf";
|
||||
};
|
||||
|
||||
# The source tarball does not have a single top-level directory.
|
||||
preUnpack = ''
|
||||
mkdir $name
|
||||
cd $name
|
||||
sourceRoot=.
|
||||
'';
|
||||
|
||||
buildInputs = [ bash steam-run ];
|
||||
|
||||
dontBuild = true;
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/steamcmd/linux32
|
||||
install -Dm755 steamcmd.sh $out/share/steamcmd/steamcmd.sh
|
||||
install -Dm755 linux32/* $out/share/steamcmd/linux32
|
||||
|
||||
mkdir -p $out/bin
|
||||
substitute ${./steamcmd.sh} $out/bin/steamcmd \
|
||||
--subst-var out \
|
||||
--subst-var-by coreutils ${coreutils} \
|
||||
--subst-var-by steamRoot "${steamRoot}" \
|
||||
--subst-var-by steamRun ${steam-run}
|
||||
chmod 0755 $out/bin/steamcmd
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Steam command-line tools";
|
||||
homepage = "https://developer.valvesoftware.com/wiki/SteamCMD";
|
||||
platforms = platforms.linux;
|
||||
license = licenses.unfreeRedistributable;
|
||||
maintainers = with maintainers; [ tadfisher ];
|
||||
};
|
||||
}
|
||||
27
packages/games/steam/steamcmd.sh
Normal file
27
packages/games/steam/steamcmd.sh
Normal file
@@ -0,0 +1,27 @@
|
||||
#!@bash@/bin/bash -e
|
||||
|
||||
# Always run steamcmd in the user's Steam root.
|
||||
STEAMROOT=@steamRoot@
|
||||
|
||||
# Add coreutils to PATH for mkdir, ln and cp used below
|
||||
PATH=$PATH${PATH:+:}@coreutils@/bin
|
||||
|
||||
# Create a facsimile Steam root if it doesn't exist.
|
||||
if [ ! -e "$STEAMROOT" ]; then
|
||||
mkdir -p "$STEAMROOT"/{appcache,config,logs,Steamapps/common}
|
||||
mkdir -p ~/.steam
|
||||
ln -sf "$STEAMROOT" ~/.steam/root
|
||||
ln -sf "$STEAMROOT" ~/.steam/steam
|
||||
fi
|
||||
|
||||
# Copy the system steamcmd install to the Steam root. If we don't do
|
||||
# this, steamcmd assumes the path to `steamcmd` is the Steam root.
|
||||
# Note that symlinks don't work here.
|
||||
if [ ! -e "$STEAMROOT/steamcmd.sh" ]; then
|
||||
mkdir -p "$STEAMROOT/linux32"
|
||||
# steamcmd.sh will replace these on first use
|
||||
cp @out@/share/steamcmd/steamcmd.sh "$STEAMROOT/."
|
||||
cp @out@/share/steamcmd/linux32/* "$STEAMROOT/linux32/."
|
||||
fi
|
||||
|
||||
@steamRun@/bin/steam-run "$STEAMROOT/steamcmd.sh" "$@"
|
||||
Reference in New Issue
Block a user