User:Pongo1231/Arch on Steam Deck

From ArchWiki

Valve's custom repositories

The Deck uses some specialized drivers that must be installed from Valve's holo and jupiter repositories. These can be added to any installation by appending the repositories in pacman's configuration:

/etc/pacman.conf
...
[jupiter]
Server = https://steamdeck-packages.steamos.cloud/archlinux-mirror/$repo/os/$arch
SigLevel = Never

[holo]
Server = https://steamdeck-packages.steamos.cloud/archlinux-mirror/$repo/os/$arch
SigLevel = Never

It's also possible to install packages from the beta repositories by appending either -beta or -staging to the repository names.

Running the Steam Deck UI

You need to set up Valve's custom repositories for this.

Preferably add all packages installed from either the jupiter or holo repositories to your IgnorePkg to prevent them from being overridden by the main repositories as they will often times include special configuration tailored for the Steam Deck.

Install jupiter-hw-support, jupiter-legacy-support, jupiter/gamescope and jupiter/sddm-wayland and enable sddm.service.

You will need to replace /usr/bin/steamos-update with this stub, otherwise you will receive an error message on first startup or when updating.

(Optionally) remove /usr/bin/steamos-select-branch and add it to your NoExtract to prevent the Beta participation option in the System settings from mentioning SteamOS (and replace it with Steam Client beta channels). Note that this is only visual and will not affect any actual behaviour.

FPS Limiter is broken

Either install jupiter/mesa or compile mesa with this patch applied.

Performance overlay does not show up

Install jupiter/mangohud and jupiter/lib32-mangohud.

Fan Controls

Enable jupiter-fan-control.service. You will need the jupiter platform drivers, otherwise the service will fail (see below).

Device Drivers

As of kernel version 5.19, the following will not work on the mainline kernel:

  • Fan controls
  • Audio (speaker or headphones, drivers were upstreamed for 6.0)
  • Ambient light sensor
  • Likely a bunch of other stuff

Install the linux-neptune kernel along with linux-neptune-headers and linux-firmware-neptune. Alternatively I host the patches I use to get those working on the mainline 5.19 kernel.

If you use the mainline kernel with the linked patches, to get the audio working properly (with the same volume levels and working headphone / speaker switching) download the ucm.zip from here, drag and drop the .conf files into /usr/share/alsa/ucm2/conf.d/acp5x (replacing the existing ones if necessary) and copy the following files (provided by linux-firmware-neptune)

/usr/lib/firmware/cs35l41-dsp1-spk-cali.bin
/usr/lib/firmware/cs35l41-dsp1-spk-cali.wmfw
/usr/lib/firmware/cs35l41-dsp1-spk-prot.bin
/usr/lib/firmware/cs35l41-dsp1-spk-prot.wmfw

to /usr/lib/firmware/cirrus/.

Btrfs

You may want to consider setting up the Btrfs file system for use on your Steam Deck to make use of transparent compression and deduplication.

Here are the stats on my Steam Deck with zstd (level 6) compression applied on my game library for instance:

# compsize -x /run/media/mmcblk0p1/
Processed 186895 files, 2454891 regular extents (2728341 refs), 85721 inline.
Type       Perc     Disk Usage   Uncompressed Referenced  
TOTAL       83%      416G         501G         539G       
none       100%      279G         279G         286G       
zstd        61%      137G         221G         252G       
prealloc   100%      2.2M         2.2M         696K 

As you can see, depending on your game library this can lead to significant savings.

To make the Deck UI format sd cards using Btrfs and mount those, head over to the steamos-btrfs project's repository and apply the files/usr/lib/hwsupport/format-sdcard.sh.patch and files/usr/lib/hwsupport/sdcard-mount.sh.patch patches to the corresponding files on your Steam Deck's filesystem. Copy files/etc/default/steamos-btrfs to /etc/default/steamos-btrfs and make changes to the default mount options as needed (personally I use STEAMOS_BTRFS_SDCARD_BTRFS_MOUNT_OPTS="rw,noatime,compress-force=zstd:6,ssd,space_cache=v2").

SteamOS KDE Plasma Themes

Install jupiter/steamdeck-kde-presets.

Steam On-Screen Keyboard in Desktop Session

Install jupiter/steam-jupiter-stable and jupiter/steam-im-modules.