ARG BASE_IMAGE_NAME="${BASE_IMAGE_NAME:-kinoite}" ARG IMAGE_FLAVOR="${IMAGE_FLAVOR:-main}" ARG SOURCE_IMAGE="${SOURCE_IMAGE:-$BASE_IMAGE_NAME-$IMAGE_FLAVOR}" ARG BASE_IMAGE="ghcr.io/ublue-os/${SOURCE_IMAGE}" ARG FEDORA_MAJOR_VERSION="${FEDORA_MAJOR_VERSION:-38}" FROM ${BASE_IMAGE}:${FEDORA_MAJOR_VERSION} AS bazzite ARG IMAGE_NAME="${IMAGE_NAME}" ARG BASE_IMAGE_NAME="${BASE_IMAGE_NAME}" ARG IMAGE_FLAVOR="${IMAGE_FLAVOR}" ARG FEDORA_MAJOR_VERSION="${FEDORA_MAJOR_VERSION}" COPY system_files/desktop/shared / COPY system_files/desktop/${BASE_IMAGE_NAME} / # Add ublue packages, add needed negativo17 repo and then immediately disable due to incompatibility with RPMFusion COPY --from=ghcr.io/ublue-os/akmods:${FEDORA_MAJOR_VERSION} /rpms /tmp/akmods-rpms COPY --from=ghcr.io/ublue-os/ublue-update:latest /rpms/ublue-update.noarch.rpm /tmp/rpms/ublue-update.noarch.rpm COPY --from=ghcr.io/ublue-os/bling:latest /rpms/ublue-os-wallpapers-*.noarch.rpm /tmp/rpms/ublue-os-wallpapers.rpm RUN sed -i 's@enabled=0@enabled=1@g' /etc/yum.repos.d/_copr_ublue-os-akmods.repo && \ wget https://negativo17.org/repos/fedora-multimedia.repo -O /etc/yum.repos.d/negativo17-fedora-multimedia.repo && \ rpm-ostree install \ /tmp/akmods-rpms/kmods/*gcadapter_oc*.rpm \ /tmp/akmods-rpms/kmods/*openrgb*.rpm \ /tmp/akmods-rpms/kmods/*evdi*.rpm \ /tmp/rpms/ublue-update.noarch.rpm \ /tmp/rpms/ublue-os-wallpapers.rpm && \ sed -i 's@enabled=1@enabled=0@g' /etc/yum.repos.d/negativo17-fedora-multimedia.repo # Setup Copr repos RUN wget https://copr.fedorainfracloud.org/coprs/kylegospo/bazzite/repo/fedora-$(rpm -E %fedora)/kylegospo-bazzite-fedora-$(rpm -E %fedora).repo -O /etc/yum.repos.d/_copr_kylegospo-bazzite.repo && \ wget https://copr.fedorainfracloud.org/coprs/kylegospo/system76-scheduler/repo/fedora-$(rpm -E %fedora)/kylegospo-system76-scheduler-fedora-$(rpm -E %fedora).repo -O /etc/yum.repos.d/_copr_kylegospo-system76-scheduler.repo && \ wget https://copr.fedorainfracloud.org/coprs/kylegospo/hl2linux-selinux/repo/fedora-$(rpm -E %fedora)/kylegospo-hl2linux-selinux-fedora-$(rpm -E %fedora).repo -O /etc/yum.repos.d/_copr_kylegospo-hl2linux-selinux.repo && \ wget https://copr.fedorainfracloud.org/coprs/kylegospo/obs-vkcapture/repo/fedora-$(rpm -E %fedora)/kylegospo-obs-vkcapture-fedora-$(rpm -E %fedora).repo?arch=x86_64 -O /etc/yum.repos.d/_copr_kylegospo-obs-vkcapture.repo && \ wget https://copr.fedorainfracloud.org/coprs/kylegospo/wallpaper-engine-kde-plugin/repo/fedora-$(rpm -E %fedora)/kylegospo-wallpaper-engine-kde-plugin-fedora-$(rpm -E %fedora).repo -O /etc/yum.repos.d/_copr_kylegospo-wallpaper-engine-kde-plugin.repo && \ wget https://copr.fedorainfracloud.org/coprs/kylegospo/gnome-vrr/repo/fedora-$(rpm -E %fedora)/kylegospo-gnome-vrr-fedora-$(rpm -E %fedora).repo -O /etc/yum.repos.d/_copr_kylegospo-gnome-vrr.repo && \ wget https://copr.fedorainfracloud.org/coprs/ycollet/audinux/repo/fedora-$(rpm -E %fedora)/ycollet-audinux-fedora-$(rpm -E %fedora).repo -O /etc/yum.repos.d/_copr_ycollet-audinux.repo && \ wget https://copr.fedorainfracloud.org/coprs/lyessaadi/gradience/repo/fedora-$(rpm -E %fedora)/lyessaadi-gradience-fedora-$(rpm -E %fedora).repo -O /etc/yum.repos.d/_copr_lyessaadi-gradience.repo # Remove unneeded packages RUN rpm-ostree override remove \ ublue-os-update-services \ firefox \ firefox-langpacks \ toolbox \ htop # Install new packages RUN rpm-ostree install \ python3-pip \ libadwaita \ sddm-sugar-steamOS \ distrobox \ duperemove \ rmlint \ compsize \ ddccontrol \ ddccontrol-gtk \ input-remapper \ system76-scheduler \ hl2linux-selinux \ libobs_glcapture \ libobs_vkcapture \ obs-vkcapture \ ladspa-noise-suppression-for-voice \ btop \ neofetch \ fish \ xdotool \ yad # Configure KDE & GNOME RUN if grep -qv "gnome" <<< "${IMAGE_NAME}"; then \ rpm-ostree override remove \ plasma-welcome \ qt5-qdbusviewer && \ rpm-ostree install \ steamdeck-kde-presets-desktop \ wallpaper-engine-kde-plugin \ kdeconnectd \ ; else \ rpm-ostree override replace \ --experimental \ --from repo=copr:copr.fedorainfracloud.org:kylegospo:gnome-vrr \ mutter \ gnome-control-center \ gnome-control-center-filesystem && \ rpm-ostree install \ sddm \ steamdeck-backgrounds \ gradience \ adw-gtk3-theme \ gnome-tweaks \ gnome-shell-extension-user-theme \ gnome-shell-extension-appindicator \ gnome-shell-extension-gsconnect \ gnome-shell-extension-system76-scheduler \ openssh-askpass && \ rpm-ostree override remove \ gnome-tour \ yelp \ ; fi # Install ROCM and Waydroid on non-Nvidia images RUN if grep -qv "nvidia" <<< "${IMAGE_NAME}"; then \ rpm-ostree install \ rocm-hip \ rocm-opencl \ waydroid \ lzip \ weston \ ; fi # Cleanup & Finalize RUN rm /usr/share/applications/shredder.desktop && \ rm /usr/share/vulkan/icd.d/lvp_icd.*.json && \ mkdir -p "/usr/etc/profile.d/" && \ ln -s "/usr/share/ublue-os/firstboot/launcher/login-profile.sh" \ "/usr/etc/profile.d/ublue-firstboot.sh" && \ pip install --prefix=/usr yafti && \ sed -i 's@enabled=1@enabled=0@g' /etc/yum.repos.d/_copr_ublue-os-akmods.repo && \ sed -i 's@enabled=1@enabled=0@g' /etc/yum.repos.d/_copr_kylegospo-bazzite.repo && \ sed -i 's@enabled=1@enabled=0@g' /etc/yum.repos.d/_copr_kylegospo-system76-scheduler.repo && \ sed -i 's@enabled=1@enabled=0@g' /etc/yum.repos.d/_copr_kylegospo-hl2linux-selinux.repo && \ sed -i 's@enabled=1@enabled=0@g' /etc/yum.repos.d/_copr_kylegospo-obs-vkcapture.repo && \ sed -i 's@enabled=1@enabled=0@g' /etc/yum.repos.d/_copr_kylegospo-wallpaper-engine-kde-plugin.repo && \ sed -i 's@enabled=1@enabled=0@g' /etc/yum.repos.d/_copr_kylegospo-gnome-vrr.repo && \ sed -i 's@enabled=1@enabled=0@g' /etc/yum.repos.d/_copr_ycollet-audinux.repo && \ sed -i 's@enabled=1@enabled=0@g' /etc/yum.repos.d/_copr_lyessaadi-gradience.repo && \ sed -i 's/#DefaultTimeoutStopSec.*/DefaultTimeoutStopSec=15s/' /etc/systemd/user.conf && \ sed -i 's/#DefaultTimeoutStopSec.*/DefaultTimeoutStopSec=15s/' /etc/systemd/system.conf && \ mkdir -p /etc/flatpak/remotes.d && \ wget -q https://dl.flathub.org/repo/flathub.flatpakrepo -P /etc/flatpak/remotes.d && \ cat /etc/flatpak/install | while read line; do flatpak install --system --noninteractive --no-deploy flathub $line; done && \ cat /etc/flatpak/deck | while read line; do flatpak install --system --noninteractive --no-deploy flathub $line; done && \ mkdir -p /etc/flatpak/{flathub,objects} && \ cp -r /var/lib/flatpak/repo/refs/remotes/flathub/* /etc/flatpak/flathub && \ cp -r /var/lib/flatpak/repo/objects/* /etc/flatpak/objects && \ systemctl unmask flatpak-system-install.service && \ systemctl enable flatpak-system-install.service && \ systemctl disable rpm-ostreed-automatic.timer && \ systemctl --global enable ublue-update.timer && \ systemctl enable displaylink.service && \ systemctl enable input-remapper.service && \ if grep -q "gnome" <<< "${IMAGE_NAME}"; then \ systemctl disable gdm.service && \ systemctl enable sddm.service && \ rm /usr/share/applications/yad-icon-browser.desktop \ ; fi && \ echo -e "IMAGE_NAME=${IMAGE_NAME}\nBASE_IMAGE_NAME=${BASE_IMAGE_NAME}\nIMAGE_FLAVOR=${IMAGE_FLAVOR}\nFEDORA_MAJOR_VERSION=${FEDORA_MAJOR_VERSION}" >> /etc/default/bazzite && \ rm -rf \ /tmp/* \ /var/* && \ mkdir -p /var/tmp && \ chmod -R 1777 /var/tmp && \ mkdir -p /var/lib/duperemove && \ ostree container commit FROM bazzite as bazzite-deck ARG IMAGE_NAME="${IMAGE_NAME}" ARG BASE_IMAGE_NAME="${BASE_IMAGE_NAME}" ARG IMAGE_FLAVOR="${IMAGE_FLAVOR}" ARG FEDORA_MAJOR_VERSION="${FEDORA_MAJOR_VERSION}" COPY system_files/deck/shared / COPY system_files/deck/${BASE_IMAGE_NAME} / # Setup Copr repos RUN wget https://copr.fedorainfracloud.org/coprs/kylegospo/bazzite-multilib/repo/fedora-$(rpm -E %fedora)/kylegospo-bazzite-multilib-fedora-$(rpm -E %fedora).repo?arch=x86_64 -O /etc/yum.repos.d/_copr_kylegospo-bazzite-multilib.repo && \ wget https://copr.fedorainfracloud.org/coprs/kylegospo/LatencyFleX/repo/fedora-$(rpm -E %fedora)/kylegospo-LatencyFleX-fedora-$(rpm -E %fedora).repo -O /etc/yum.repos.d/_copr_kylegospo-latencyflex.repo && \ sed -i 's@enabled=0@enabled=1@g' /etc/yum.repos.d/_copr_ublue-os-akmods.repo && \ sed -i 's@enabled=0@enabled=1@g' /etc/yum.repos.d/_copr_kylegospo-bazzite.repo && \ sed -i 's@enabled=0@enabled=1@g' /etc/yum.repos.d/_copr_kylegospo-hl2linux-selinux.repo && \ sed -i 's@enabled=0@enabled=1@g' /etc/yum.repos.d/_copr_kylegospo-obs-vkcapture.repo && \ sed -i 's@enabled=0@enabled=1@g' /etc/yum.repos.d/_copr_kylegospo-wallpaper-engine-kde-plugin.repo && \ sed -i 's@enabled=0@enabled=1@g' /etc/yum.repos.d/_copr_ycollet-audinux.repo # Install Valve's Steam Deck drivers as kmods COPY --from=ghcr.io/ublue-os/akmods:${FEDORA_MAJOR_VERSION} /rpms /tmp/akmods-rpms RUN rpm-ostree install \ /tmp/akmods-rpms/kmods/*steamdeck*.rpm # Remove unneeded packages RUN rpm-ostree override remove \ ddccontrol \ ddccontrol-gtk && \ if grep -qv "gnome" <<< "${IMAGE_NAME}"; then \ rpm-ostree override remove \ steamdeck-kde-presets-desktop \ ; fi # Install gamescope-limiter patched Mesa and patched udisks2 (Needed for SteamOS SD card mounting) RUN rpm-ostree override replace \ --experimental \ --from repo=copr:copr.fedorainfracloud.org:kylegospo:bazzite-multilib \ mesa-dri-drivers \ mesa-libEGL \ mesa-libgbm \ mesa-libGL \ mesa-libglapi \ mesa-vulkan-drivers && \ rpm-ostree override replace \ --experimental \ --from repo=copr:copr.fedorainfracloud.org:kylegospo:bazzite \ udisks2 # Configure KDE & GNOME RUN if grep -qv "gnome" <<< "${IMAGE_NAME}"; then \ rpm-ostree override remove \ krfb \ krfb-libs && \ rpm-ostree install \ steamdeck-kde-presets \ ; else \ rpm-ostree install \ gnome-shell-extension-bazzite-menu \ ; fi # Install new packages & dock updater - done manually due to proprietary parts preventing it from being on Copr RUN rpm-ostree install \ mesa-va-drivers \ jupiter-fan-control \ jupiter-hw-support-btrfs \ vpower \ ds-inhibit \ steam_notif_daemon \ ryzenadj \ latencyflex-vulkan-layer \ vkBasalt \ mangohud \ sdgyrodsu \ winetricks \ python-vdf \ python-crcmod && \ git clone https://gitlab.com/evlaV/jupiter-dock-updater-bin.git --depth 1 /tmp/jupiter-dock-updater-bin && \ mv -v /tmp/jupiter-dock-updater-bin/packaged/usr/lib/jupiter-dock-updater /usr/lib/jupiter-dock-updater # Install Steam and Lutris into their own OCI layer RUN rpm-ostree install \ steam \ lutris \ gamescope \ gamescope-session # Cleanup & Finalize RUN rm /usr/share/applications/winetricks.desktop && \ ln -s /usr/bin/steamos-logger /usr/bin/steamos-info && \ ln -s /usr/bin/steamos-logger /usr/bin/steamos-notice && \ ln -s /usr/bin/steamos-logger /usr/bin/steamos-warning && \ sed -i 's/#HandlePowerKey=poweroff/HandlePowerKey=suspend/g' /etc/systemd/logind.conf && \ sed -i 's@enabled=1@enabled=0@g' /etc/yum.repos.d/_copr_ublue-os-akmods.repo && \ sed -i 's@enabled=1@enabled=0@g' /etc/yum.repos.d/_copr_kylegospo-bazzite.repo && \ sed -i 's@enabled=1@enabled=0@g' /etc/yum.repos.d/_copr_kylegospo-bazzite-multilib.repo && \ sed -i 's@enabled=1@enabled=0@g' /etc/yum.repos.d/_copr_kylegospo-latencyflex.repo && \ sed -i 's@enabled=1@enabled=0@g' /etc/yum.repos.d/_copr_kylegospo-hl2linux-selinux.repo && \ sed -i 's@enabled=1@enabled=0@g' /etc/yum.repos.d/_copr_kylegospo-obs-vkcapture.repo && \ sed -i 's@enabled=1@enabled=0@g' /etc/yum.repos.d/_copr_kylegospo-wallpaper-engine-kde-plugin.repo && \ sed -i 's@enabled=1@enabled=0@g' /etc/yum.repos.d/_copr_ycollet-audinux.repo && \ mv /etc/sddm.conf /etc/sddm.conf.d/steamos.conf && \ if grep -q "gnome" <<< "${IMAGE_NAME}"; then \ systemctl enable gnome-autologin.service \ ; fi && \ if grep -qv "gnome" <<< "${IMAGE_NAME}"; then \ systemctl enable plasma-autologin.service \ ; fi && \ systemctl enable jupiter-fan-control.service && \ systemctl enable vpower.service && \ systemctl enable ds-inhibit.service && \ systemctl disable input-remapper.service && \ systemctl --global disable ublue-update.timer && \ rm -f /usr/etc/sddm.conf && \ rm -f /etc/default/bazzite && \ echo -e "IMAGE_NAME=${IMAGE_NAME}\nBASE_IMAGE_NAME=${BASE_IMAGE_NAME}\nIMAGE_FLAVOR=${IMAGE_FLAVOR}\nFEDORA_MAJOR_VERSION=${FEDORA_MAJOR_VERSION}" >> /etc/default/bazzite && \ rm -rf \ /tmp/* \ /var/* && \ mkdir -p /var/tmp && \ chmod -R 1777 /var/tmp && \ mkdir -p /var/lib/duperemove && \ mkdir -p /var/lib/bluetooth && \ ostree container commit