diff --git a/doc/package-notes.xml b/doc/package-notes.xml
index f0015a7f9ace..de148ec5739f 100644
--- a/doc/package-notes.xml
+++ b/doc/package-notes.xml
@@ -382,4 +382,141 @@ it. Place the resulting package.nix file into
+
+
+Steam
+
+
+
+Steam in Nix
+
+
+ Steam is distributed as a .deb file, for now only
+ as an i686 package (the amd64 package only has documentation).
+ When unpacked, it has a script called steam that
+ in ubuntu (their target distro) would go to /usr/bin
+ . When run for the first time, this script copies some
+ files to the user's home, which include another script that is the
+ ultimate responsible for launching the steam binary, which is also
+ in $HOME.
+
+
+ Nix problems and constraints:
+
+ We don't have /bin/bash and many
+ scripts point there. Similarly for /usr/bin/python
+ .
+ We don't have the dynamic loader in /lib
+ .
+ The steam.sh script in $HOME can
+ not be patched, as it is checked and rewritten by steam.
+ The steam binary cannot be patched, it's also checked.
+
+
+
+ The current approach to deploy Steam in NixOS is composing a FHS-compatible
+ chroot environment, as documented
+ here.
+ This allows us to have binaries in the expected paths without disrupting the system,
+ and to avoid patching them.
+
+
+
+
+
+
+How to play
+
+
+ For 64-bit systems it's important to have
+ hardware.opengl.driSupport32Bit = true;
+ in your /etc/nixos/configuration.nix. You'll also need
+ hardware.pulseaudio.support32Bit = true;
+ if you are using PulseAudio - this will enable 32bit ALSA apps integration.
+ To use the Steam controller, you need to add
+ services.udev.extraRules = ''
+ SUBSYSTEM=="usb", ATTRS{idVendor}=="28de", MODE="0666"
+ KERNEL=="uinput", MODE="0660", GROUP="users", OPTIONS+="static_node=uinput"
+ '';
+ to your configuration.
+
+
+
+
+
+
+Troubleshooting
+
+
+
+
+
+ Steam fails to start. What do I do?
+ Try to run
+ strace steam
+ to see what is causing steam to fail.
+
+
+
+ Game X fails to start
+ Games may fail to start because they lack
+ dependencies (this should be added to the script, for now),
+ or because they cannot be patched.The steps to launch a game
+ directly are:
+
+ Patch the script/binary if you can.
+ Add a file named steam_appid.txt in
+ the binary folder, with the appid as contents (it can be found in the
+ stdout from steam).
+ Using the LD_LIBRARY_PATH from the nix/store steam script,
+ with some additions, launch the game binary:
+ LD_LIBRARY_PATH=~/.steam/bin32:$LD_LIBRARY_PATH:/nix/store/pfsa... blabla ...curl-7.29.0/lib:. ./Osmos.bin3
+ (if you could not patchelf the game, call ld.so directly
+ with the binary as param). With this technique, I can play many games
+ directly from steam. Others, like Team Fortress, cannot be patched
+ so I only managed to run them from the cmd line.
+
+
+
+
+
+
+
+ Using the FOSS Radeon drivers
+
+ The open source radeon drivers need a newer libc++ than is provided
+ by the default runtime, which leads to a crash on launch. Use
+ environment.systemPackages = [(pkgs.steam.override { newStdcpp = true; })];
+ in your config if you get an error like
+
+libGL error: unable to load driver: radeonsi_dri.so
+libGL error: driver pointer missing
+libGL error: failed to load driver: radeonsi
+libGL error: unable to load driver: swrast_dri.so
+libGL error: failed to load driver: swrast
+
+ Steam ships statically linked with a version of libcrypto that
+ conflics with the one dynamically loaded by radeonsi_dri.so.
+ If you get the error
+ steam.sh: line 713: 7842 Segmentation fault (core dumped)
+ have a look at this pull request.
+
+
+
+
+ Known issues
+
+
+ No java in steam chrootenv. Games affected: Towns:
+ /home/foo/.local/share/Steam/SteamApps/common/towns/towns.sh: line 1: java: command not found
+
+
+
+
+
+
+
+
+
+