This guide details how to run Steam on nixos-apple-silicon using Distrobox.
Tested on:
- MacBook Pro M2 Max
- NixOS channel 25.11 (
unstablechannel, at the time of writing) - OpenGL core profile version string: 4.6 (Core Profile) Mesa 25.2.4
- Wayland / Sway / SDDM
- Kernel: 6.16.8-asahi
- NixOS Apple Silicon:
github:tpwrules/nixos-apple-silicon/24ab28e47b586f741910b3a2f0428f3523a0fff3
Create a directory for your Distrobox container:
mkdir -p ~/Distrobox/steam
cd ~/Distrobox/steam
vim Dockerfile
Insert the following in the Dockerfile:
# Start with the minimal Fedora 42 image
FROM quay.io/fedora/fedora-minimal:42
WORKDIR /
# Install COPR plugin and enable Asahi repositories
RUN dnf install -y 'dnf5-command(copr)' && \
dnf copr enable -y @asahi/mesa && \
dnf copr enable -y @asahi/fedora-remix-scripts
# Add architecture-specific repositories for FEX mesa overlays
# i386 Repository
RUN echo '[copr:copr.fedorainfracloud.org:group_asahi:mesa-i386]' > /etc/yum.repos.d/group_asahi-mesa-i386.repo && \
echo 'name=Copr repo for mesa owned by @asahi (i386)' >> /etc/yum.repos.d/group_asahi-mesa-i386.repo && \
echo 'baseurl=https://download.copr.fedorainfracloud.org/results/@asahi/mesa/fedora-$releasever-i386/' >> /etc/yum.repos.d/group_asahi-mesa-i386.repo && \
echo 'type=rpm-md' >> /etc/yum.repos.d/group_asahi-mesa-i386.repo && \
echo 'skip_if_unavailable=True' >> /etc/yum.repos.d/group_asahi-mesa-i386.repo && \
echo 'gpgcheck=1' >> /etc/yum.repos.d/group_asahi-mesa-i386.repo && \
echo 'gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-group_asahi-mesa' >> /etc/yum.repos.d/group_asahi-mesa-i386.repo && \
echo 'repo_gpgcheck=0' >> /etc/yum.repos.d/group_asahi-mesa-i386.repo && \
echo 'enabled=1' >> /etc/yum.repos.d/group_asahi-mesa-i386.repo && \
echo 'enabled_metadata=1' >> /etc/yum.repos.d/group_asahi-mesa-i386.repo && \
echo 'priority=5' >> /etc/yum.repos.d/group_asahi-mesa-i386.repo && \
echo 'includepkgs=mesa-fex-emu-overlay-i386*' >> /etc/yum.repos.d/group_asahi-mesa-i386.repo
# x86_64 Repository
RUN echo '[copr:copr.fedorainfracloud.org:group_asahi:mesa-x86_64]' > /etc/yum.repos.d/group_asahi-mesa-x86_64.repo && \
echo 'name=Copr repo for mesa owned by @asahi (x86_64)' >> /etc/yum.repos.d/group_asahi-mesa-x86_64.repo && \
echo 'baseurl=https://download.copr.fedorainfracloud.org/results/@asahi/mesa/fedora-$releasever-x86_64/' >> /etc/yum.repos.d/group_asahi-mesa-x86_64.repo && \
echo 'type=rpm-md' >> /etc/yum.repos.d/group_asahi-mesa-x86_64.repo && \
echo 'skip_if_unavailable=True' >> /etc/yum.repos.d/group_asahi-mesa-x86_64.repo && \
echo 'gpgcheck=1' >> /etc/yum.repos.d/group_asahi-mesa-x86_64.repo && \
echo 'gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-group_asahi-mesa' >> /etc/yum.repos.d/group_asahi-mesa-x86_64.repo && \
echo 'repo_gpgcheck=0' >> /etc/yum.repos.d/group_asahi-mesa-x86_64.repo && \
echo 'enabled=1' >> /etc/yum.repos.d/group_asahi-mesa-x86_64.repo && \
echo 'enabled_metadata=1' >> /etc/yum.repos.d/group_asahi-mesa-x86_64.repo && \
echo 'priority=5' >> /etc/yum.repos.d/group_asahi-mesa-x86_64.repo && \
echo 'includepkgs=mesa-fex-emu-overlay-x86_64*' >> /etc/yum.repos.d/group_asahi-mesa-x86_64.repo
# Clean DNF cache before installing packages
RUN dnf clean all
RUN dnf upgrade --refresh -y
# Install the Asahi platform metapackage
RUN dnf install -y asahi-platform-metapackage-fex
# Install the rest of the required packages
RUN dnf install -y \
fontconfig \
dejavu-sans-fonts \
dejavu-serif-fonts \
dejavu-sans-mono-fonts \
sudo \
xz \
ps \
vim \
xterm \
ar \
tar \
bash \
coreutils \
util-linux \
procps-ng \
findutils \
grep \
sed \
gawk \
gzip \
which \
less \
nano \
passwd \
shadow-utils \
systemd \
iproute \
iputils \
curl \
wget \
mesa-libGLU \
ca-certificates \
alsa-utils
# Enable the Asahi Steam COPR and install Steam
RUN dnf copr enable -y @asahi/steam && \
dnf install -y steam
# Final cleanup to reduce image size
RUN dnf clean all && \
rm -rf /var/cache/dnf/* /tmp/* /var/tmp/*
CMD ["/bin/bash"]
Build the Docker image locally:
docker build . --tag steam:latest
Create the Distrobox container:
distrobox-create --name steam --image steam:latest --home ~/Distrobox/steam
Enter the Distrobox container and start Steam:
distrobox enter steam
steam
That's it! Steam should start up and you should be able to install and run games right from Steam as you would on standard Asahi Linux.
Hey @stevesoltys, I'm trying this guide on my M1 Max (NixOS/Asahi) and having trouble. Native games like Terraria run perfectly, but Proton games crash.
Terraria (Native) - WORKS Even though it shows pressure-vessel-wrap logs, it successfully launches and runs using OpenGL:
Age of Empires IV (Proton Experimental 10.0) - CRASHES This fails with a vm.max_map_count warning and a page fault, even though my host and container are set to 1048576.
Age of Empires IV (Proton 8.0-5) - ALSO CRASHES When I switch to Proton 8.0-5, the vm.max_map_count warning disappears, but it still crashes with the exact same page fault.
Disabling pressure-vessel fails, Launch options like stopping the sandbox are ignored. The pressure-vessel-wrap messages still appear.
If I rename the pressure-vessel-wrap binary, Steam just re-downloads it:
It seems like pressure-vessel is the common link for all these crashes, but I can't get rid of it. Has anyone seen this or know what could be causing the page fault even when the max_map_count is correct?
Not even sure if that is the issue but not sure what to do or try to get this working.