This is based on Steam Proton version 3.7 as of November 2018
  1. What is Steam Proton?
  2. Where did this come from?
  3. How do I use it?
  4. How do I troubleshoot issues?
    1. Setting environment variables per-game
    2. Logs
    3. Using winetricks
    4. User configuration
  5. Using pre-existing Windows Steam directory

What is Steam Proton?

Steam Proton (github) is an awesome initiative by Valve which brings multiple open source projects together to help facilitate cross-platform gaming, particularly for Linux. It integrates the open-source projects Wine and DXVK (Vulkan) directly into Steam, allowing you to launch Windows based games directly.

There's even a nice WineHQ equivalent made available here:
https://www.protondb.com/

Previously, you would have had to run the Windows Steam Client via Wine to launch games, and this never worked that well. Typically, you'd be better off re-buying the GOG copy of the game which removes DRM and is usually patched well.

Steam Proton does deviate from base Wine, however all improvements made are being back ported - see their fork here:
https://github.com/ValveSoftware/wine/tree/proton_3.7

Where did this come from?

Valve took a huge gamble in 2013 when they released the Linux based gaming operating system, SteamOS. This was designed to be the platform used for 3rd party gaming consoles, PCs, etc. Everything points toward this being a response to the Windows 8 walled-garden app market,

“We want to make it as easy as possible for the 2,500 games on Steam to run on Linux as well. It’s a hedging strategy. I think Windows 8 is a catastrophe for everyone in the PC space. We’ll lose some of the top-tier PC/OEMs, who will exit the market. I think margins will be destroyed for a bunch of people. … It will be good to have alternatives to hedge against that eventuality.”
– Gabe Newell of Valve in 2012

From a commercial perspective, SteamOS hasn't exactly been a success. It's definitely no Android of the gaming market. Despite that, Valve has maintained its support for open-source platforms.

More recently they hired the DXVK developer, Philip Rebohle, in February 2018.
In August of the same year, they released Steam Proton.
Please read the release post here for more details:
https://steamcommunity.com/games/221410/announcements/detail/1696055855739350561

How do I use it?

It's very simple to install, as long as you have the native Linux Steam Client installed already. There's only 2 requirements:

Proton provides wine, DXVK libraries, etc all seamlessly.
In the Steam Client, navigate to:
Library > Tools (select in search dropdown) > install Proton 3.7

Once installed, navigate to:
Settings > Steam Play > Check "Enable Steam Play for all Titles"

You should now see every Windows game in your library available to install and play (or attempt to play at least).

Steam Play Settings
Example game using Steam Play

How do I troubleshoot issues?

While this is a huge step forward for the community, it's still not perfect. There will always be some issues - please check for and report issues on GitHub here: https://github.com/ValveSoftware/Proton/issues

Setting environment variables per-game

Set any relevant environment variables in the "Launch Options" for the game:
For example, PULSE_LATENCY_MSEC=30 %command% has helped fix stuttering/popping audio in Skyrim for me.
steam_play_skyrim_cmd

Using winetricks

Proton installs a unique Wine prefix per-game, which is stored in
~/.steam/steam/SteamApps/compatdata/<appid>/pfx - this is another improvement over typical Wine installations which might have dependency conflicts between games/applications.

You can configure these using the typical winecfg or winetricks as such:

$ WINEPREFIX=~/.steam/steam/SteamApps/compatdata/22380/pfx winecfg

Install some missing dependencies (xact fixes a lot of sound issues):

WINEPREFIX=~/.steam/steam/steamapps/compatdata/22380/pfx winetricks xact devenum quartz d3dx9 glsl-enable gdiplus
User configuration

Note: This is required for the logging seen in the next section
Find user_settings.sample.py in your Steam directory (~/.steam normally):
Use the quotes here because of whitespace.

$ find ~/.steam/steam/ -iname "*user_setting*"
/home/user/.steam/steam/SteamApps/common/Proton 3.7/user_settings.sample.py

$ cp "~/.steam/steam/SteamApps/common/Proton 3.7/user_settings.sample.py" "~/.steam/steam/SteamApps/common/Proton 3.7/user_settings.py"

$ cat "~/.steam/steam/SteamApps/common/Proton 3.7/user_settings.py"
#to enable these settings, name this file "user_settings.py"

user_settings = {
    #logs are saved to $HOME/steam-$STEAM_APP_ID.log, overwriting any previous log with that name
    # Default:
    "WINEDEBUG": "+timestamp,+pid,+tid,+seh,+debugstr,+module",
    # Less verbose:
    # "WINEDEBUG": "+timestamp,+warn",

    "DXVK_LOG_LEVEL": "info",

    #Enable DXVK's HUD
#    "DXVK_HUD": "devinfo,fps",

    #Use wined3d for d3d11 instead of dxvk
#    "PROTON_USE_WINED3D11": "1",

    #Disable d3d11 entirely
#    "PROTON_NO_D3D11": "1",

    #Disable in-process synchronization primitives
#    "PROTON_NO_ESYNC": "1",
}
Logs

Proton logs to ~/steam-<appid>.log by default.
It's probably easiest to follow all the possible logs when attempting to play the games:

$ tail -F ~/steam-*.log

Using pre-existing Windows Steam directory

You can mount any secondary Windows drive on Linux using ntfs-3g fuse-based filesystem driver. It'll need to be mounted with ownership uid/gid of the user trying to access:

# parted -l | grep -B6 ntfs
Disk /dev/nvme0n1: 512GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End    Size   Type     File system  Flags
 1      1049kB  525MB  524MB  primary  ntfs         boot
 2      525MB   512GB  512GB  primary  ntfs

# mount -t ntfs -o uid=1000,gid=1000 /dev/nvme0n1p2 /mnt/win

Now you can import the relevant Steam path under Settings > Downloads > Steam Library Folders > Add Library Folder
Any games run from this will have their WINEPREFIX (as seen above) created relative to that.

Note: Some games might experience performance issues running from a mounted Windows filesystem - unfortunately this will require Uninstalling/Re-installing to the proper library location.