User:Pongo1231/Arch on Steam Deck
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
.