Steam: Difference between revisions

imported>Kevincox
Removed HiDPI section, steam has had good support for a while now.
imported>Artturin
use steam module and clean up
Line 1: Line 1:
{{unfree}}
This page is intended to explain how to run Steam, Steam games as well as proprietary DRM-free games under NixOS. A dedicated [[Games]] page lists games and reports on their successful execution on NixOS.  
This page is intended to explain how to run Steam, Steam games as well as proprietary DRM-free games under NixOS. A dedicated [[Games]] page lists games and reports on their successful execution on NixOS.  


== Prerequisites ==
If you are using 64-bit system and plan to also run 32-bit code (some games are 32-bit only) - add <syntaxhighlight lang="nix" inline>hardware.opengl.driSupport32Bit = true</syntaxhighlight> and <syntaxhighlight lang="nix" inline>hardware.pulseaudio.support32Bit = true</syntaxhighlight> (in case you are using pulseaudio) to your configuration.
Example snippet of <code>configuration.nix</code>:
<syntaxHighlight lang=nix>
  ...
  hardware.opengl.driSupport32Bit = true;
  hardware.opengl.extraPackages32 = with pkgs.pkgsi686Linux; [ libva ];
  hardware.pulseaudio.support32Bit = true;
  ...
</syntaxHighlight>
See the relevant section of the manual: https://nixos.org/manual/nixpkgs/stable/#sec-steam-play. A possible error when not enabling 32bit support is an error message "glXChooseVisual failed".


== Installation ==
== Installation ==
Several installation options exist.  
Several installation options exist.  


=== Pure steam client ===
== Normal install ==
If you need Steam client, install it with<syntaxhighlight lang="nix" inline>steam</syntaxhighlight> package.
 
Example snippet of <code>configuration.nix</code>:
<syntaxhighlight lang="nix">
<syntaxHighlight lang=nix>
  programs.steam.enable = true;
  environment.systemPackages = with pkgs; [
</syntaxhighlight>
  ...
  steam
  ];
  ...
</syntaxHighlight>


=== Native steam client ===
=== Native steam client ===
Line 33: Line 17:
Example snippet of <code>configuration.nix</code>:
Example snippet of <code>configuration.nix</code>:
<syntaxHighlight lang=nix>
<syntaxHighlight lang=nix>
   environment.systemPackages = with pkgs; [
   nixpkgs.config.packageOverrides = pkgs: {
  ...
    steam = pkgs.steam.override {
  (steam.override { nativeOnly = true; })
      nativeOnly = true;
];
    };
   ...
  };
   programs.steam.enable = true;
</syntaxHighlight>
</syntaxHighlight>


Line 47: Line 32:
Example snippet of <code>configuration.nix</code>:
Example snippet of <code>configuration.nix</code>:
<syntaxHighlight lang=nix>
<syntaxHighlight lang=nix>
  ...
   environment.systemPackages = with pkgs; [
   environment.systemPackages = with pkgs; [
  ...
   steam-run-native
   steam-run-native
   ];
   ];
  ...
</syntaxHighlight>
</syntaxHighlight>


unfree
Other option, in case you need more flexibility, is to directly reference to the part of steam metapackage instead. In fact, <code>steam-run-native</code> above is just a wrapper linking to <code>steam.run</code>.
Other option, in case you need more flexibility, is to directly reference to the part of steam metapackage instead. In fact, <code>steam-run-native</code> above is just a wrapper linking to <code>steam.run</code>.


Example snippet of <code>configuration.nix</code>:
Example snippet of <code>configuration.nix</code>:
<syntaxHighlight lang=nix>
<syntaxHighlight lang=nix>
  ...
   environment.systemPackages = with pkgs; [
   environment.systemPackages = with pkgs; [
  ...
   (steam.override { nativeOnly = true; }).run
   (steam.override { nativeOnly = true; }).run
   ];
   ];
  ...
</syntaxHighlight>
</syntaxHighlight>
This builds same result as <code>steam-run-native</code> above.
This builds same result as <code>steam-run-native</code> above.
Line 72: Line 52:
== Adding missing dependencies ==
== Adding missing dependencies ==


This can be done this way:
may also need <code>nativeOnly = true;</code> but i have not tested
<syntaxHighlight lang=nix>
<syntaxHighlight lang=nix>
   ...
   nixpkgs.config.packageOverrides = pkgs: {
  environment.systemPackages = with pkgs; [
    steam = pkgs.steam.override {
  ...
      extraPkgs = pkgs: [
  (steam.override { extraPkgs = pkgs: [ mono gtk3 gtk3-x11 libgdiplus zlib ]; nativeOnly = true; }).run
        libgdiplus
   ];
      ];
...
    };
   };
</syntaxHighlight>
</syntaxHighlight>


=== Bumblebee and Primus ===
=== Bumblebee and Primus ===
This can be done this way:
<syntaxHighlight lang=nix>
<syntaxHighlight lang=nix>
  ...
   environment.systemPackages = with pkgs; [
   environment.systemPackages = with pkgs; [
  ...
   (steam.override { withPrimus = true; extraPkgs = pkgs: [ bumblebee glxinfo ]; nativeOnly = true; }).run
   (steam.override { withPrimus = true; extraPkgs = pkgs: [ bumblebee glxinfo ]; nativeOnly = true; }).run
   ];
   ];
...
</syntaxHighlight>
</syntaxHighlight>


=== Java ===
=== Java ===
Example snippet of <code>configuration.nix</code>:
<syntaxHighlight lang=nix>
<syntaxHighlight lang=nix>
   ...
   programs.java.enable = true;  
programs.java.enable = true;  
    environment.systemPackages = with pkgs; [
environment.systemPackages = with pkgs; [
   (steam.override { withJava = true; })
   ...
  ];
(steam.override { withJava = true; })
];
  ...
</syntaxHighlight>
</syntaxHighlight>


Line 108: Line 81:


== Limit user access ==
== Limit user access ==
Example snippet of <code>configuration.nix</code>:
<syntaxHighlight lang=nix>
<syntaxHighlight lang=nix>
  ...
   users.users.<your-username>.packages = [
   users.users.<your-username>.packages = [
     pkgs.steam
     pkgs.steam
   ];
   ];
...
</syntaxHighlight>
</syntaxHighlight>


Line 146: Line 116:
If you are using a Steam Controller or a Valve Index, you will want to add <code>hardware.steam-hardware.enable = true;</code> to your configurations.
If you are using a Steam Controller or a Valve Index, you will want to add <code>hardware.steam-hardware.enable = true;</code> to your configurations.


[[Category:Guide]]
[[Category:Applications]]