<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.nixos.org/w/index.php?action=history&amp;feed=atom&amp;title=Steam_Frame</id>
	<title>Steam Frame - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.nixos.org/w/index.php?action=history&amp;feed=atom&amp;title=Steam_Frame"/>
	<link rel="alternate" type="text/html" href="https://wiki.nixos.org/w/index.php?title=Steam_Frame&amp;action=history"/>
	<updated>2026-10-07T07:07:50Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://wiki.nixos.org/w/index.php?title=Steam_Frame&amp;diff=34835&amp;oldid=prev</id>
		<title>RJ at 02:10, 1 October 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.nixos.org/w/index.php?title=Steam_Frame&amp;diff=34835&amp;oldid=prev"/>
		<updated>2026-10-01T02:10:02Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw-interface=&quot;&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 02:10, 1 October 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l44&quot;&gt;Line 44:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 44:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;$ journalctl -k -g rtw89}}&amp;lt;code&amp;gt;lsusb -d 28de:2432&amp;lt;/code&amp;gt; should show a Realtek &amp;quot;802.11ax WLAN Adapter&amp;quot;, and the kernel log should show &amp;lt;code&amp;gt;rtw89_8852cu&amp;lt;/code&amp;gt; loading &amp;lt;code&amp;gt;rtw89/rtw8852c_fw-2.bin&amp;lt;/code&amp;gt;. A line about 2.4 GHz preferring a USB 2 port is a stock hint about USB 3 interference on that band. It does not mean the 6 GHz link failed. With a country code set, the phy lists 6 GHz and the interface can scan.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;$ journalctl -k -g rtw89}}&amp;lt;code&amp;gt;lsusb -d 28de:2432&amp;lt;/code&amp;gt; should show a Realtek &amp;quot;802.11ax WLAN Adapter&amp;quot;, and the kernel log should show &amp;lt;code&amp;gt;rtw89_8852cu&amp;lt;/code&amp;gt; loading &amp;lt;code&amp;gt;rtw89/rtw8852c_fw-2.bin&amp;lt;/code&amp;gt;. A line about 2.4 GHz preferring a USB 2 port is a stock hint about USB 3 interference on that band. It does not mean the 6 GHz link failed. With a country code set, the phy lists 6 GHz and the interface can scan.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Users must also be added to the &amp;lt;code&amp;gt;networkmanager&amp;lt;/code&amp;gt; group for Steam to manage the wireless adapter. &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{file|/etc/nixos/configuration.nix|nix|3=users.users.&amp;lt;name&amp;gt;.extraGroups = [ &quot;networkmanager&quot; ];}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Troubleshooting ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Troubleshooting ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Headset does not see the PC ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Headset does not see the PC ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key mediawiki:diff:1.41:old-34797:rev-34835:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>RJ</name></author>
	</entry>
	<entry>
		<id>https://wiki.nixos.org/w/index.php?title=Steam_Frame&amp;diff=34797&amp;oldid=prev</id>
		<title>MarkusZoppelt at 15:55, 27 September 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.nixos.org/w/index.php?title=Steam_Frame&amp;diff=34797&amp;oldid=prev"/>
		<updated>2026-09-27T15:55:44Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw-interface=&quot;&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 15:55, 27 September 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Steam Frame&amp;#039;&amp;#039;&amp;#039; is a standalone virtual reality headset from Valve, released on September 18, 2026. It runs SteamOS. Games installed on the headset need no NixOS configuration. This page covers streaming PC VR from a NixOS host, which uses [[Steam]] and [[VR#SteamVR|SteamVR]].&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Steam Frame&amp;#039;&amp;#039;&amp;#039; is a standalone virtual reality headset from Valve, released on September 18, 2026. It runs SteamOS. Games installed on the headset need no NixOS configuration. This page covers streaming PC VR from a NixOS host, which uses [[Steam]] and [[VR#SteamVR|SteamVR]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The headset reaches the PC through SteamVR&#039;s Steam Link driver (&amp;lt;code&amp;gt;vrlink&amp;lt;/code&amp;gt;), either over the home network or over the bundled 6 GHz wireless adapter. Home Wi-Fi streaming works on the NixOS default kernel. The adapter does not.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The headset reaches the PC through SteamVR&#039;s Steam Link driver (&amp;lt;code&amp;gt;vrlink&amp;lt;/code&amp;gt;), either over the home network or over the bundled 6 GHz wireless adapter. Home Wi-Fi streaming works on the NixOS default kernel. The adapter does not.{{Note|Wi-Fi streaming &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;works &lt;/ins&gt;on &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;the &lt;/ins&gt;NixOS &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;default &lt;/ins&gt;kernel. The bundled adapter &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;does &lt;/ins&gt;not&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;; it needs &lt;/ins&gt;Linux 7.2. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;See [[#Wireless adapter]]&lt;/ins&gt;.}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Note|&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Home &lt;/del&gt;Wi-Fi streaming &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;was tested in September 2026 &lt;/del&gt;on NixOS &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;26.05, Linux 6.18, SteamVR 2.17.10, a Wayland session, and an NVIDIA RTX 3080 using the open &lt;/del&gt;kernel &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;module&lt;/del&gt;. The bundled &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;wireless &lt;/del&gt;adapter &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;has &lt;/del&gt;not &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;been tested on NixOS. It has been reported working on other distributions with the in-tree &amp;lt;code&amp;gt;rtw89_8852cu&amp;lt;/code&amp;gt; driver.&amp;lt;ref name=&quot;steamvr-962&quot;&amp;gt;[https://github.com/ValveSoftware/SteamVR-for-&lt;/del&gt;Linux&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;/issues/962 ValveSoftware/SteamVR-for-Linux issue 962], including the comment from September 26, 2026 (Linux Mint, kernel 7.0, firmware 0.27.125.0) and the original report (Arch Linux, kernel &lt;/del&gt;7.2.&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;2, firmware 0.27.129.4, link on 6135 MHz)&lt;/del&gt;.&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/ref&amp;gt;&lt;/del&gt;}}&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Installation ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Installation ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Enable Steam. This also enables {{Nixos:option|hardware.steam-hardware.enable}}, which loads the &amp;lt;code&amp;gt;uinput&amp;lt;/code&amp;gt; module and installs udev rules for Valve USB and Bluetooth devices (vendor ID &amp;lt;code&amp;gt;28de&amp;lt;/code&amp;gt;). No extra udev rules are required for the headset, its controllers, or the wireless adapter.{{file|/etc/nixos/configuration.nix|nix|3=programs.steam = {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Enable Steam. This also enables {{Nixos:option|hardware.steam-hardware.enable}}, which loads the &amp;lt;code&amp;gt;uinput&amp;lt;/code&amp;gt; module and installs udev rules for Valve USB and Bluetooth devices (vendor ID &amp;lt;code&amp;gt;28de&amp;lt;/code&amp;gt;). No extra udev rules are required for the headset, its controllers, or the wireless adapter.&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{file|/etc/nixos/configuration.nix|nix|3=programs.steam = {&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   enable = true;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   enable = true;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   remotePlay.openFirewall = true;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   remotePlay.openFirewall = true;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;};}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;};}}Then install SteamVR from the Steam library. It is not a Nixpkgs package.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Then install SteamVR from the Steam library. It is not a Nixpkgs package.&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;code&amp;gt;remotePlay.openFirewall&amp;lt;/code&amp;gt; is required. Without it the headset cannot discover the PC. The option opens the ports Valve documents for Remote Play and Steam Link:&amp;lt;ref name=&amp;quot;steam-ports&amp;quot;&amp;gt;Valve, [https://help.steampowered.com/en/faqs/view/2EA8-4D75-DA21-31EB Required Ports for Steam] and [https://help.steampowered.com/en/faqs/view/3E3D-BE6B-787D-A5D2 SteamVR ports]. The NixOS option follows those lists in [https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/programs/steam.nix &amp;lt;code&amp;gt;nixos/modules/programs/steam.nix&amp;lt;/code&amp;gt;].&amp;lt;/ref&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;code&amp;gt;remotePlay.openFirewall&amp;lt;/code&amp;gt; is required. Without it the headset cannot discover the PC. The option opens the ports Valve documents for Remote Play and Steam Link:&amp;lt;ref name=&amp;quot;steam-ports&amp;quot;&amp;gt;Valve, [https://help.steampowered.com/en/faqs/view/2EA8-4D75-DA21-31EB Required Ports for Steam] and [https://help.steampowered.com/en/faqs/view/3E3D-BE6B-787D-A5D2 SteamVR ports]. The NixOS option follows those lists in [https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/programs/steam.nix &amp;lt;code&amp;gt;nixos/modules/programs/steam.nix&amp;lt;/code&amp;gt;].&amp;lt;/ref&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l26&quot;&gt;Line 26:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 19:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Pairing ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Pairing ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Sign the headset and the PC into the same Steam account, and put them on the same LAN. The headset announces itself with a UDP broadcast to port 27036; it does not cross a router.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Sign the headset and the PC into the same Steam account, and put them on the same LAN. The headset announces itself with a UDP broadcast to port 27036; it does not cross a router.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l38&quot;&gt;Line 38:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 30:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Wireless adapter ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Wireless adapter ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The headset has two radios. One joins the home network. The other stands up a dedicated 6 GHz Wi-Fi 6E link. The USB adapter in the box is what the PC uses to join that link. It is optional: streaming over home Wi-Fi does not need it.&amp;lt;ref name=&amp;quot;frame-faq&amp;quot;&amp;gt;Valve, [https://help.steampowered.com/en/faqs/view/2668-0B6E-79E0-A85B Steam Frame - Feature and Troubleshooting Guide].&amp;lt;/ref&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The headset has two radios. One joins the home network. The other stands up a dedicated 6 GHz Wi-Fi 6E link. The USB adapter in the box is what the PC uses to join that link. It is optional: streaming over home Wi-Fi does not need it.&amp;lt;ref name=&amp;quot;frame-faq&amp;quot;&amp;gt;Valve, [https://help.steampowered.com/en/faqs/view/2668-0B6E-79E0-A85B Steam Frame - Feature and Troubleshooting Guide].&amp;lt;/ref&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The adapter is a Realtek RTL8852CU (also called RTL8832CU) with USB ID &amp;lt;code&amp;gt;28de:2432&amp;lt;/code&amp;gt;. Linux drives it with the in-tree module &amp;lt;code&amp;gt;rtw89_8852cu&amp;lt;/code&amp;gt;. Valve&#039;s USB ID was added in Linux 7.0.&amp;lt;ref name=&quot;rtw89-id&quot;&amp;gt;Shin-Yi Lin, [https://github.com/torvalds/linux/commit/5f65ebf9aaf00c7443252136066138435ec03958 wifi: rtw89: Add default ID 28de:2432 for RTL8832CU], commit &amp;lt;code&amp;gt;5f65ebf&amp;lt;/code&amp;gt;, merged for Linux 7.0 (January 2026). The ID is not present in Linux 6.19 or earlier, and &amp;lt;code&amp;gt;rtw8852cu.c&amp;lt;/code&amp;gt; itself is absent from Linux 6.18.&amp;lt;/ref&amp;gt; Linux 7.2 additionally exposes the adapter&#039;s serial number and UUID under sysfs, which Steam asked for so it can identify the device without debugfs. Reports show the link itself working on kernel 7.0, so that sysfs interface is not a hard requirement.&amp;lt;ref name=&quot;steamvr-962&quot; &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;/&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The adapter is a Realtek RTL8852CU (also called RTL8832CU) with USB ID &amp;lt;code&amp;gt;28de:2432&amp;lt;/code&amp;gt;. Linux drives it with the in-tree module &amp;lt;code&amp;gt;rtw89_8852cu&amp;lt;/code&amp;gt;. Valve&#039;s USB ID was added in Linux 7.0.&amp;lt;ref name=&quot;rtw89-id&quot;&amp;gt;Shin-Yi Lin, [https://github.com/torvalds/linux/commit/5f65ebf9aaf00c7443252136066138435ec03958 wifi: rtw89: Add default ID 28de:2432 for RTL8832CU], commit &amp;lt;code&amp;gt;5f65ebf&amp;lt;/code&amp;gt;, merged for Linux 7.0 (January 2026). The ID is not present in Linux 6.19 or earlier, and &amp;lt;code&amp;gt;rtw8852cu.c&amp;lt;/code&amp;gt; itself is absent from Linux 6.18.&amp;lt;/ref&amp;gt; Linux 7.2 additionally exposes the adapter&#039;s serial number and UUID under sysfs, which Steam asked for so it can identify the device without debugfs. Reports show the link itself working on kernel 7.0, so that sysfs interface is not a hard requirement.&amp;lt;ref name=&quot;steamvr-962&quot;&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[https&lt;/ins&gt;:&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;//github&lt;/ins&gt;.&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;com/ValveSoftware&lt;/ins&gt;/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;SteamVR-for-&lt;/ins&gt;Linux/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;issues&lt;/ins&gt;/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;962 ValveSoftware&lt;/ins&gt;/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;SteamVR-for-Linux issue 962]&amp;lt;/ref&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;NixOS 26.05 defaults to Linux 6.18, which does not have this driver. Linux 7.0 and 7.1 have been removed from Nixpkgs after reaching end of life upstream. As of September 2026, the kernel to use is {{Nixos&lt;/del&gt;:&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;option|boot&lt;/del&gt;.&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;kernelPackages}} &amp;lt;code&amp;gt;pkgs.linuxPackages_latest&amp;lt;&lt;/del&gt;/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;code&amp;gt;, which is &lt;/del&gt;Linux &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;7.2:&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{file|&lt;/del&gt;/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;etc&lt;/del&gt;/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nixos&lt;/del&gt;/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;configuration.nix|nix|3=boot.kernelPackages = pkgs.linuxPackages_latest;}}&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A stock NixOS kernel builds drivers that are not pinned in the common config as modules, so &amp;lt;code&amp;gt;rtw89_8852cu&amp;lt;/code&amp;gt; should be present. The driver loads &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;firmware from &lt;/del&gt;&amp;lt;code&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;linux&lt;/del&gt;-&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;firmware&lt;/del&gt;&amp;lt;/code&amp;gt; &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;(&lt;/del&gt;&amp;lt;code&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;rtw89/rtw8852c_fw.bin&lt;/del&gt;&amp;lt;/code&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;)&lt;/del&gt;. {{Nixos:option|hardware.enableRedistributableFirmware}} installs that firmware and is enabled by a generated &amp;lt;code&amp;gt;hardware-configuration.nix&amp;lt;/code&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;NixOS 26.05 defaults to Linux 6.18, which does not have this driver. Linux 7.0 and 7.1 have been removed from Nixpkgs after reaching end of life upstream. As of September 2026, the kernel to use is {{Nixos:option|boot.kernelPackages}} &amp;lt;code&amp;gt;pkgs.linuxPackages_latest&amp;lt;/code&amp;gt;, which is Linux 7.2:{{file|/etc/nixos/configuration.nix|nix|3=boot.kernelPackages = pkgs.linuxPackages_latest;}}&lt;/ins&gt;A stock NixOS kernel builds drivers that are not pinned in the common config as modules, so &amp;lt;code&amp;gt;rtw89_8852cu&amp;lt;/code&amp;gt; should be present. The driver loads &amp;lt;code&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;rtw89/rtw8852c_fw&lt;/ins&gt;-&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;2.bin&lt;/ins&gt;&amp;lt;/code&amp;gt; &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;from &lt;/ins&gt;&amp;lt;code&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;linux-firmware&lt;/ins&gt;&amp;lt;/code&amp;gt;. {{Nixos:option|hardware.enableRedistributableFirmware}} installs that firmware and is enabled by a generated &amp;lt;code&amp;gt;hardware-configuration.nix&amp;lt;/code&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The driver installer the Steam client offers for this adapter is the Windows driver. It does not apply on Linux.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The driver installer the Steam client offers for this adapter is the Windows driver. It does not apply on Linux.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;6 GHz &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;depends on &lt;/del&gt;the regulatory domain. {{Nixos:option|hardware.wirelessRegulatoryDatabase}} is &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;enabled by default when redistributable firmware &lt;/del&gt;is &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;allowed&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;If &lt;/del&gt;the &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;interface only associates on 5 GHz, check &lt;/del&gt;&amp;lt;code&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;iw reg get&lt;/del&gt;&amp;lt;/code&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;6 GHz &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;is disabled under &lt;/ins&gt;the &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;world &lt;/ins&gt;regulatory domain &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;(country &amp;lt;code&amp;gt;00&amp;lt;/code&amp;gt;)&lt;/ins&gt;. {{Nixos:option|hardware.wirelessRegulatoryDatabase}} &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;only installs &amp;lt;code&amp;gt;regulatory.db&amp;lt;/code&amp;gt;; it does not select a country. Without one, the phy does not list 5945–6425 MHz. &amp;lt;code&amp;gt;cfg80211&amp;lt;/code&amp;gt; &lt;/ins&gt;is &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;a module, so a kernel command-line parameter &lt;/ins&gt;is &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;applied too early&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Set &lt;/ins&gt;the &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;country in modprobe config (replace &lt;/ins&gt;&amp;lt;code&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;DE&lt;/ins&gt;&amp;lt;/code&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;):{{file|/etc/nixos/configuration&lt;/ins&gt;.&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;nix|nix|3=boot.extraModprobeConfig = &#039;&#039;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;  options cfg80211 ieee80211_regdom=DE&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;After rebooting into the new kernel, plug the adapter into a USB 3 port and confirm the driver bound:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&#039;&#039;;}}&lt;/ins&gt;After rebooting into the new kernel, plug the adapter into a USB 3 port and confirm the driver bound:{{Commands|$ lsusb -d 28de:2432&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Commands|&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;$ lsusb -d 28de:2432&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;$ modinfo rtw89_8852cu&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;$ modinfo rtw89_8852cu&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;$ journalctl -k -g rtw89&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;$ journalctl -k -g rtw89}}&amp;lt;code&amp;gt;lsusb &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-d 28de:2432&lt;/ins&gt;&amp;lt;/code&amp;gt; should &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;show a Realtek &quot;802.11ax WLAN Adapter&quot;, and the kernel log should show &lt;/ins&gt;&amp;lt;code&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;rtw89_8852cu&lt;/ins&gt;&amp;lt;/code&amp;gt; &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;loading &lt;/ins&gt;&amp;lt;code&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;rtw89&lt;/ins&gt;/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;rtw8852c_fw-2&lt;/ins&gt;.&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;bin&lt;/ins&gt;&amp;lt;/code&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;. A line about 2.4 GHz preferring a USB 2 port is a stock hint about USB 3 interference on that band. It does &lt;/ins&gt;not &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;mean the 6 GHz link &lt;/ins&gt;failed. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;With a country code set, the phy lists 6 GHz and &lt;/ins&gt;the &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;interface can scan&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}}&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;code&amp;gt;lsusb&amp;lt;/code&amp;gt; should &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;list vendor &lt;/del&gt;&amp;lt;code&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;28de&lt;/del&gt;&amp;lt;/code&amp;gt; &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;and product &lt;/del&gt;&amp;lt;code&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;2432&amp;lt;&lt;/del&gt;/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;code&amp;gt;&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;The kernel log should show &amp;lt;code&amp;gt;rtw89_8852cu&lt;/del&gt;&amp;lt;/code&amp;gt; &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;requesting firmware, &lt;/del&gt;not &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot;&lt;/del&gt;failed &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;to request firmware&quot; or an unbound USB device&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Pairing then follows &lt;/del&gt;the &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;same flow as Wi-Fi. This boot path has not been confirmed on NixOS&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Troubleshooting ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Troubleshooting ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Headset does not see the PC ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Headset does not see the PC ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l72&quot;&gt;Line 72:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 52:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Asynchronous reprojection ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Asynchronous reprojection ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;On first launch, SteamVR asks for elevated permissions so it can set &amp;lt;code&amp;gt;CAP_SYS_NICE&amp;lt;/code&amp;gt; on &amp;lt;code&amp;gt;vrcompositor-launcher&amp;lt;/code&amp;gt;. That capability is what asynchronous reprojection needs. Streaming works without it.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;On first launch, SteamVR asks for elevated permissions so it can set &amp;lt;code&amp;gt;CAP_SYS_NICE&amp;lt;/code&amp;gt; on &amp;lt;code&amp;gt;vrcompositor-launcher&amp;lt;/code&amp;gt;. That capability is what asynchronous reprojection needs. Streaming works without it.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l78&quot;&gt;Line 78:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 57:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== VR game opens as a flat window ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== VR game opens as a flat window ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;On a Linux host, launching a VR game from the headset does not start SteamVR. The game comes up as a flat window, the headset sits on &amp;quot;opening game&amp;quot;, and Steam logs &amp;lt;code&amp;gt;CRemoteClientJobStartStream timed out k_ERemoteClientWaitVRConnectionReady&amp;lt;/code&amp;gt;. Valve confirmed the bug on September 25, 2026, and the workaround is to start SteamVR on the PC before selecting the game in the headset.&amp;lt;ref name=&amp;quot;valve-workaround&amp;quot;&amp;gt;danwillm, [https://github.com/ValveSoftware/SteamVR-for-Linux/issues/962#issuecomment-5833677943 comment on SteamVR-for-Linux issue 962], September 25, 2026. The issue was closed on September 27, 2026 with the fix still unreleased.&amp;lt;/ref&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;On a Linux host, launching a VR game from the headset does not start SteamVR. The game comes up as a flat window, the headset sits on &amp;quot;opening game&amp;quot;, and Steam logs &amp;lt;code&amp;gt;CRemoteClientJobStartStream timed out k_ERemoteClientWaitVRConnectionReady&amp;lt;/code&amp;gt;. Valve confirmed the bug on September 25, 2026, and the workaround is to start SteamVR on the PC before selecting the game in the headset.&amp;lt;ref name=&amp;quot;valve-workaround&amp;quot;&amp;gt;danwillm, [https://github.com/ValveSoftware/SteamVR-for-Linux/issues/962#issuecomment-5833677943 comment on SteamVR-for-Linux issue 962], September 25, 2026. The issue was closed on September 27, 2026 with the fix still unreleased.&amp;lt;/ref&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l91&quot;&gt;Line 91:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 69:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== References ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== References ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;references /&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;references /&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Hardware]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Hardware]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Gaming]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Gaming]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key mediawiki:diff:1.41:old-34794:rev-34797:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>MarkusZoppelt</name></author>
	</entry>
	<entry>
		<id>https://wiki.nixos.org/w/index.php?title=Steam_Frame&amp;diff=34794&amp;oldid=prev</id>
		<title>MarkusZoppelt: Setting up and connecting Valve&#039;s Steam Frame to a NixOS host</title>
		<link rel="alternate" type="text/html" href="https://wiki.nixos.org/w/index.php?title=Steam_Frame&amp;diff=34794&amp;oldid=prev"/>
		<updated>2026-09-27T15:33:10Z</updated>

		<summary type="html">&lt;p&gt;Setting up and connecting Valve&amp;#039;s Steam Frame to a NixOS host&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Steam Frame&amp;#039;&amp;#039;&amp;#039; is a standalone virtual reality headset from Valve, released on September 18, 2026. It runs SteamOS. Games installed on the headset need no NixOS configuration. This page covers streaming PC VR from a NixOS host, which uses [[Steam]] and [[VR#SteamVR|SteamVR]].&lt;br /&gt;
&lt;br /&gt;
The headset reaches the PC through SteamVR&amp;#039;s Steam Link driver (&amp;lt;code&amp;gt;vrlink&amp;lt;/code&amp;gt;), either over the home network or over the bundled 6 GHz wireless adapter. Home Wi-Fi streaming works on the NixOS default kernel. The adapter does not.&lt;br /&gt;
&lt;br /&gt;
{{Note|Home Wi-Fi streaming was tested in September 2026 on NixOS 26.05, Linux 6.18, SteamVR 2.17.10, a Wayland session, and an NVIDIA RTX 3080 using the open kernel module. The bundled wireless adapter has not been tested on NixOS. It has been reported working on other distributions with the in-tree &amp;lt;code&amp;gt;rtw89_8852cu&amp;lt;/code&amp;gt; driver.&amp;lt;ref name=&amp;quot;steamvr-962&amp;quot;&amp;gt;[https://github.com/ValveSoftware/SteamVR-for-Linux/issues/962 ValveSoftware/SteamVR-for-Linux issue 962], including the comment from September 26, 2026 (Linux Mint, kernel 7.0, firmware 0.27.125.0) and the original report (Arch Linux, kernel 7.2.2, firmware 0.27.129.4, link on 6135 MHz).&amp;lt;/ref&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Enable Steam. This also enables {{Nixos:option|hardware.steam-hardware.enable}}, which loads the &amp;lt;code&amp;gt;uinput&amp;lt;/code&amp;gt; module and installs udev rules for Valve USB and Bluetooth devices (vendor ID &amp;lt;code&amp;gt;28de&amp;lt;/code&amp;gt;). No extra udev rules are required for the headset, its controllers, or the wireless adapter.&lt;br /&gt;
&lt;br /&gt;
{{file|/etc/nixos/configuration.nix|nix|3=programs.steam = {&lt;br /&gt;
  enable = true;&lt;br /&gt;
  remotePlay.openFirewall = true;&lt;br /&gt;
};}}&lt;br /&gt;
&lt;br /&gt;
Then install SteamVR from the Steam library. It is not a Nixpkgs package.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;remotePlay.openFirewall&amp;lt;/code&amp;gt; is required. Without it the headset cannot discover the PC. The option opens the ports Valve documents for Remote Play and Steam Link:&amp;lt;ref name=&amp;quot;steam-ports&amp;quot;&amp;gt;Valve, [https://help.steampowered.com/en/faqs/view/2EA8-4D75-DA21-31EB Required Ports for Steam] and [https://help.steampowered.com/en/faqs/view/3E3D-BE6B-787D-A5D2 SteamVR ports]. The NixOS option follows those lists in [https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/programs/steam.nix &amp;lt;code&amp;gt;nixos/modules/programs/steam.nix&amp;lt;/code&amp;gt;].&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* UDP 27036, for discovery broadcasts&lt;br /&gt;
* TCP 27036 and 27037&lt;br /&gt;
* UDP 10400 and 10401, for the Steam Link video path (&amp;lt;code&amp;gt;vrlink&amp;lt;/code&amp;gt; binds UDP 10400)&lt;br /&gt;
* UDP 27031–27035&lt;br /&gt;
&lt;br /&gt;
The option does nothing if {{Nixos:option|networking.firewall.enable}} is false. &amp;lt;code&amp;gt;vrlink&amp;lt;/code&amp;gt; binds UDP 10400 on every local address, including VPN interfaces, so a hand-written ruleset has to allow that port on the interface the headset actually uses.&lt;br /&gt;
&lt;br /&gt;
== Pairing ==&lt;br /&gt;
&lt;br /&gt;
Sign the headset and the PC into the same Steam account, and put them on the same LAN. The headset announces itself with a UDP broadcast to port 27036; it does not cross a router.&lt;br /&gt;
&lt;br /&gt;
# Rebuild and switch, then start Steam on the PC.&lt;br /&gt;
# On the headset, open the Steam menu. The PC should appear by name.&lt;br /&gt;
# Connect, and accept the authorization prompt on the PC.&lt;br /&gt;
&lt;br /&gt;
A successful pair shows up in &amp;lt;code&amp;gt;~/.local/share/Steam/logs/remote_connections.txt&amp;lt;/code&amp;gt; as a broadcast from a client named &amp;lt;code&amp;gt;frame&amp;lt;/code&amp;gt;, followed by &amp;lt;code&amp;gt;k_ERemoteDeviceAuthorizationSuccess&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Flat games can be started from the headset. For VR games, start SteamVR on the PC first. See [[#VR game opens as a flat window]].&lt;br /&gt;
&lt;br /&gt;
== Wireless adapter ==&lt;br /&gt;
&lt;br /&gt;
The headset has two radios. One joins the home network. The other stands up a dedicated 6 GHz Wi-Fi 6E link. The USB adapter in the box is what the PC uses to join that link. It is optional: streaming over home Wi-Fi does not need it.&amp;lt;ref name=&amp;quot;frame-faq&amp;quot;&amp;gt;Valve, [https://help.steampowered.com/en/faqs/view/2668-0B6E-79E0-A85B Steam Frame - Feature and Troubleshooting Guide].&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The adapter is a Realtek RTL8852CU (also called RTL8832CU) with USB ID &amp;lt;code&amp;gt;28de:2432&amp;lt;/code&amp;gt;. Linux drives it with the in-tree module &amp;lt;code&amp;gt;rtw89_8852cu&amp;lt;/code&amp;gt;. Valve&amp;#039;s USB ID was added in Linux 7.0.&amp;lt;ref name=&amp;quot;rtw89-id&amp;quot;&amp;gt;Shin-Yi Lin, [https://github.com/torvalds/linux/commit/5f65ebf9aaf00c7443252136066138435ec03958 wifi: rtw89: Add default ID 28de:2432 for RTL8832CU], commit &amp;lt;code&amp;gt;5f65ebf&amp;lt;/code&amp;gt;, merged for Linux 7.0 (January 2026). The ID is not present in Linux 6.19 or earlier, and &amp;lt;code&amp;gt;rtw8852cu.c&amp;lt;/code&amp;gt; itself is absent from Linux 6.18.&amp;lt;/ref&amp;gt; Linux 7.2 additionally exposes the adapter&amp;#039;s serial number and UUID under sysfs, which Steam asked for so it can identify the device without debugfs. Reports show the link itself working on kernel 7.0, so that sysfs interface is not a hard requirement.&amp;lt;ref name=&amp;quot;steamvr-962&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NixOS 26.05 defaults to Linux 6.18, which does not have this driver. Linux 7.0 and 7.1 have been removed from Nixpkgs after reaching end of life upstream. As of September 2026, the kernel to use is {{Nixos:option|boot.kernelPackages}} &amp;lt;code&amp;gt;pkgs.linuxPackages_latest&amp;lt;/code&amp;gt;, which is Linux 7.2:&lt;br /&gt;
&lt;br /&gt;
{{file|/etc/nixos/configuration.nix|nix|3=boot.kernelPackages = pkgs.linuxPackages_latest;}}&lt;br /&gt;
&lt;br /&gt;
A stock NixOS kernel builds drivers that are not pinned in the common config as modules, so &amp;lt;code&amp;gt;rtw89_8852cu&amp;lt;/code&amp;gt; should be present. The driver loads firmware from &amp;lt;code&amp;gt;linux-firmware&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;rtw89/rtw8852c_fw.bin&amp;lt;/code&amp;gt;). {{Nixos:option|hardware.enableRedistributableFirmware}} installs that firmware and is enabled by a generated &amp;lt;code&amp;gt;hardware-configuration.nix&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The driver installer the Steam client offers for this adapter is the Windows driver. It does not apply on Linux.&lt;br /&gt;
&lt;br /&gt;
6 GHz depends on the regulatory domain. {{Nixos:option|hardware.wirelessRegulatoryDatabase}} is enabled by default when redistributable firmware is allowed. If the interface only associates on 5 GHz, check &amp;lt;code&amp;gt;iw reg get&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
After rebooting into the new kernel, plug the adapter into a USB 3 port and confirm the driver bound:&lt;br /&gt;
&lt;br /&gt;
{{Commands|&lt;br /&gt;
$ lsusb -d 28de:2432&lt;br /&gt;
$ modinfo rtw89_8852cu&lt;br /&gt;
$ journalctl -k -g rtw89&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;lsusb&amp;lt;/code&amp;gt; should list vendor &amp;lt;code&amp;gt;28de&amp;lt;/code&amp;gt; and product &amp;lt;code&amp;gt;2432&amp;lt;/code&amp;gt;. The kernel log should show &amp;lt;code&amp;gt;rtw89_8852cu&amp;lt;/code&amp;gt; requesting firmware, not &amp;quot;failed to request firmware&amp;quot; or an unbound USB device. Pairing then follows the same flow as Wi-Fi. This boot path has not been confirmed on NixOS.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== Headset does not see the PC ===&lt;br /&gt;
&lt;br /&gt;
* Confirm {{Nixos:option|programs.steam.remotePlay.openFirewall}} is &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; and the firewall service is enabled. Discovery is a broadcast to UDP 27036. A host firewall that drops broadcasts, or a headset on another subnet, looks the same: the PC never appears.&lt;br /&gt;
* Steam must be running on the PC, on the same account as the headset.&lt;br /&gt;
* In &amp;lt;code&amp;gt;~/.local/share/Steam/logs/remote_connections.txt&amp;lt;/code&amp;gt;, a line &amp;lt;code&amp;gt;Received broadcast message from client … (frame)&amp;lt;/code&amp;gt; means the packet arrived and the problem is later (authorization, SteamVR, or the stream). No such line means the broadcast never reached Steam.&lt;br /&gt;
&lt;br /&gt;
=== Asynchronous reprojection ===&lt;br /&gt;
&lt;br /&gt;
On first launch, SteamVR asks for elevated permissions so it can set &amp;lt;code&amp;gt;CAP_SYS_NICE&amp;lt;/code&amp;gt; on &amp;lt;code&amp;gt;vrcompositor-launcher&amp;lt;/code&amp;gt;. That capability is what asynchronous reprojection needs. Streaming works without it.&lt;br /&gt;
&lt;br /&gt;
On NixOS the usual &amp;lt;code&amp;gt;setcap&amp;lt;/code&amp;gt; command has no effect. Steam runs in a bubblewrap user namespace, which cannot hold file capabilities. The workarounds and their security tradeoffs are documented in [[VR#SteamVR]]. Do not copy the one-line &amp;lt;code&amp;gt;setcap&amp;lt;/code&amp;gt; from the [[Steam]] page and expect it to stick.&lt;br /&gt;
&lt;br /&gt;
=== VR game opens as a flat window ===&lt;br /&gt;
&lt;br /&gt;
On a Linux host, launching a VR game from the headset does not start SteamVR. The game comes up as a flat window, the headset sits on &amp;quot;opening game&amp;quot;, and Steam logs &amp;lt;code&amp;gt;CRemoteClientJobStartStream timed out k_ERemoteClientWaitVRConnectionReady&amp;lt;/code&amp;gt;. Valve confirmed the bug on September 25, 2026, and the workaround is to start SteamVR on the PC before selecting the game in the headset.&amp;lt;ref name=&amp;quot;valve-workaround&amp;quot;&amp;gt;danwillm, [https://github.com/ValveSoftware/SteamVR-for-Linux/issues/962#issuecomment-5833677943 comment on SteamVR-for-Linux issue 962], September 25, 2026. The issue was closed on September 27, 2026 with the fix still unreleased.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The underlying gap is that SteamVR ships &amp;lt;code&amp;gt;driver_vrlink.so&amp;lt;/code&amp;gt; only as a 64-bit library, so Steam&amp;#039;s 32-bit watchdog cannot load it and never calls StartSteamVR. Proton will not start &amp;lt;code&amp;gt;vrserver&amp;lt;/code&amp;gt; either. Flat streaming over the same link is unaffected. The report was filed on Arch Linux; the missing 32-bit driver is not specific to NixOS.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[VR]]&lt;br /&gt;
* [[Steam]]&lt;br /&gt;
* [https://lvra.gitlab.io Linux VR Adventures Wiki]&lt;br /&gt;
* [https://help.steampowered.com/en/faqs/view/2668-0B6E-79E0-A85B Steam Frame feature and troubleshooting guide]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware]]&lt;br /&gt;
[[Category:Gaming]]&lt;/div&gt;</summary>
		<author><name>MarkusZoppelt</name></author>
	</entry>
</feed>