a653735c

By: ananjiani <ananjiani@noreply.codeberg.org>

fix(steammachine): keep the WiFi radio off so it stops competing with Bluetooth (#351)

## Why

The Steam Machine is **wired and has no use for WiFi**, but its radio shares an antenna with the Bluetooth adapter. NetworkManager scans for networks even while disconnected (`wlp6s0` was `DOWN`/`NO-CARRIER` the whole time), and that 2.4 GHz traffic competes with the controller link — which is already fighting a congested band.

Evidence that the radio was live despite being disconnected: it saw **18 access points** at signal 90-95.

## Measured

With a Pro Controller connected, dropping the radio:

```
                       before      after radio off
  dropped IMU reports   3.2/min     1.5/min
  report gap (delta)    78-105 ms   65-79 ms
  avg_delta             15 ms       11 ms
```

Roughly halves the loss, and the report stream gets denser.

## Ceiling — read this before expecting a fix

This does **not** eliminate the problem. The remainder is neighbouring congestion:

```
ch  1   1 AP   strongest 70
ch  4   3 APs  strongest 82   <- this house's own 2.4 GHz SSIDs
ch  6   3 APs  strongest 95
ch 11   3 APs  strongest 92
```

`hfcl`/neighbour APs on channels 6 and 11 at signal 92-95 are not ours to change. Eliminating the rest needs physical separation: a USB Bluetooth dongle on an extension cable clear of the chassis and TV.

## Change

Adds a oneshot that runs `rfkill block wifi` after `NetworkManager.service`. It is an `rfkill` block rather than just a NetworkManager disconnect, so the phy cannot be woken by a scan.

## Verification

Confirmed safe on the running host before making it declarative: with the WiFi phy soft-blocked, Bluetooth kept working and improved, and `enp5s0` stayed connected.

Co-authored-by: Ammar <ammar.nanjiani@gmail.com>
Reviewed-on: https://codeberg.org/ananjiani/infra/pulls/351

Total

17m45s

Time to Start Worker time Duration Time to finish Idle
Config 1m13s 1s 1s 1m14s 1m13s
Eval 1m14s 8m57s 8m57s 10m12s 0s
Build 10m12s 8m17s 8m46s 18m59s 4m15s
Suite 1m13s 17m16s 17m45s 18m59s 5m29s

Timeline

Config Eval Build Compressed gap
0s2m3m4m5m6m7m8m9m10m15m16m17m18m