summary refs log blame commit diff
path: root/pkgs/games/steam/default.nix
blob: 0bb73d5f6c917fd9644db0a5ed9d1900ae0e7b4a (plain) (tree)
1
2
3
4
5
6
7
8
9
                                                                


                                                                
                                       

                    
                                    
             
 
                                     
 
                            



                            











                                                                                                
 
                                     









                                                                      

                                                                 
 

                                             

                     
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                          
                                    
                            
                          

                                    
                                       

                                          

                                          
                                        
                                         
                                            



                                               
                                                                                           







                                                                                         




                                                                          
                                                                             

                                     

                                                                                     
                                   

                                               
                                                                         
                                            
        
                                  

                                  

       
                           







                                                    
{ stdenv, fetchurl, dpkg, makeWrapper, xz, libX11, gcc, glibc215
, libselinux, libXrandr, pango, freetype, fontconfig, glib, gtk
, gdk_pixbuf, cairo, libXi, alsaLib, libXrender, nss, nspr, zlib
, dbus, libpng12, libXfixes, cups, libgcrypt, openal, pulseaudio
, libxcb, libXau, libXdmcp, flashplayer
, SDL # World of Goo
, libvorbis # Osmos
, curl, mesa # Superbrothers: S&S EP
, patchelf }:

assert stdenv.system == "i686-linux";

let version = "1.0.0.28"; in

stdenv.mkDerivation rec {
  name = "steam-${version}";

  src =
    if stdenv.system == "i686-linux" then 
      fetchurl {
        url = "http://repo.steampowered.com/steam/archive/precise/steam_${version}_i386.deb";
        sha256 = "0c0n1v9rnn6jj2wrvbmi77j9v93f3ndw039z9db6092yqls1amqk";
      }
    else if stdenv.system == "x86_64-linux" then 
      fetchurl {
        url = "http://repo.steampowered.com/steam/archive/precise/steam64_${version}_amd64.deb";
        sha256 = "1dr2b9s036w8r46az1f9cjddrjaf8a9k564g65j288y6w9pcdb2w";
      }
    else throw "Steam not supported on this platform.";

  buildInputs = [ dpkg makeWrapper ];

  phases = "installPhase";

  installPhase = ''
    mkdir -p $out
    dpkg-deb -x $src $out
    mv $out/usr/* $out/
    rmdir $out/usr
    substituteInPlace "$out/bin/steam" --replace "/bin/bash" "/bin/sh"
    substituteInPlace "$out/bin/steam" --replace "/usr/" "$out/"
    sed -i 's,STEAMPACKAGE=.*,STEAMPACKAGE=steam,' $out/bin/steam
    sed -i '/STEAMSCRIPT/d' $out/bin/steam

    mv $out/bin/steam $out/bin/.steam-wrapped
    cat > $out/bin/steam << EOF
    #!${stdenv.shell}

    export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:${libX11}/lib:${gcc.gcc}/lib:${glibc215}/lib:${libselinux}/lib:${libXrandr}/lib:${pango}/lib:${freetype}/lib:${fontconfig}/lib:${glib}/lib:${gtk}/lib:${gdk_pixbuf}/lib:${cairo}/lib:${libXi}/lib:${alsaLib}/lib:${libXrender}/lib:${nss}/lib:${nspr}/lib:${zlib}/lib:${dbus}/lib:${libpng12}/lib:${libXfixes}/lib:${cups}/lib:${libgcrypt}/lib:${openal}/lib:${pulseaudio}/lib:${libxcb}/lib:${libXau}/lib:${libXdmcp}/lib:${SDL}/lib:${libvorbis}/lib:${curl}/lib
    STEAMBOOTSTRAP=~/.steam/steam/steam.sh
    if [ -f \$STEAMBOOTSTRAP ]; then
      PLATFORM32=ubuntu12_32
      STEAMCONFIG=~/.steam
      STEAMROOT=~/.local/share/Steam
      STEAMDATA="\$STEAMROOT"
      PIDFILE="\$STEAMCONFIG/steam.pid"
      STEAMBIN32LINK="\$STEAMCONFIG/bin32"
      STEAMBIN64LINK="\$STEAMCONFIG/bin64"
      STEAMSDK32LINK="\$STEAMCONFIG/sdk32"
      STEAMSDK64LINK="\$STEAMCONFIG/sdk64"
      STEAMROOTLINK="\$STEAMCONFIG/root"
      STEAMDATALINK="\$STEAMCONFIG/steam"
      STEAMSTARTING="\$STEAMCONFIG/starting"
      # Create symbolic links for the Steam API
      if [ ! -e "\$STEAMCONFIG" ]; then
          mkdir "\$STEAMCONFIG"
      fi
      if [ "\$STEAMROOT" != "\$STEAMROOTLINK" -a "\$STEAMROOT" != "\$STEAMDATALINK" ]; then
          rm -f "\$STEAMBIN32LINK" && ln -s "\$STEAMROOT/\$PLATFORM32" "\$STEAMBIN32LINK"
          rm -f "\$STEAMBIN64LINK" && ln -s "\$STEAMROOT/\$PLATFORM64" "\$STEAMBIN64LINK"
          rm -f "\$STEAMSDK32LINK" && ln -s "\$STEAMROOT/linux32" "\$STEAMSDK32LINK"
          rm -f "\$STEAMSDK64LINK" && ln -s "\$STEAMROOT/linux64" "\$STEAMSDK64LINK"
          rm -f "\$STEAMROOTLINK" && ln -s "\$STEAMROOT" "\$STEAMROOTLINK"
          if [ "\$STEAMDATALINK" ]; then
              rm -f "\$STEAMDATALINK" && ln -s "\$STEAMDATA" "\$STEAMDATALINK"
          fi
      fi
      # Temporary bandaid until everyone has the new libsteam_api.so
      rm -f ~/.steampath && ln -s "\$STEAMCONFIG/bin32/steam" ~/.steampath
      rm -f ~/.steampid && ln -s "\$PIDFILE" ~/.steampid
      rm -f ~/.steam/bin && ln -s "\$STEAMBIN32LINK" ~/.steam/bin
      export LD_LIBRARY_PATH="\$STEAMBIN32LINK:\$LD_LIBRARY_PATH:${mesa}/lib"
      export SDL_VIDEO_X11_DGAMOUSE=0
      cd "\$STEAMROOT"
      FLASHLINK="\$STEAMCONFIG/bin32/plugins"
      rm -f "\$FLASHLINK" && ln -s "${flashplayer}/lib/mozilla/plugins" "\$FLASHLINK"
      LDSO="\$STEAMBIN32LINK/ld.so"
      cp ${glibc215}/lib/ld-linux.so.2 "\$LDSO"
      chmod u+w "\$LDSO"
      echo \$\$ > "\$PIDFILE" # pid of the shell will become pid of steam
      exec "\$LDSO" "\$STEAMBIN32LINK/steam"
    else
      export PATH=${xz}/bin:\$PATH
      exec $out/bin/.steam-wrapped
    fi
    EOF

    chmod +x $out/bin/steam
  '';

  meta = {
    description = "A digital distribution platform";
    homepage = http://store.steampowered.com/;
    license = "unfree";
  };
}