From 3b029d0324b67bf365d1b54bdd44d1f6f896c06a Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Fri, 12 Jan 2024 10:52:40 -0800 Subject: [PATCH 01/48] chore(readme): Mention secure boot documentation below rebase steps --- README.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c896b0dc69..b029017d2f 100644 --- a/README.md +++ b/README.md @@ -87,7 +87,7 @@ or for devices with Nvidia GPUs: rpm-ostree rebase ostree-unverified-registry:ghcr.io/ublue-os/bazzite-nvidia:latest ``` -**For users with Secure Boot enabled:** Run `ujust enroll-secure-boot-key` and enter the password `ublue-os` if prompted to enroll the required key. +**For users with Secure Boot enabled:** Follow our [secure boot documentation](https://github.com/ublue-os/bazzite#secure-boot) prior to rebasing. ### Steam Deck/Home Theater PCs (HTPCs) > [!IMPORTANT] @@ -172,6 +172,8 @@ To rebase an existing ostree system to the **Steam Deck/HTPC** release: rpm-ostree rebase ostree-unverified-registry:ghcr.io/ublue-os/bazzite-deck-gnome:latest ``` +**For users with Secure Boot enabled:** Follow our [secure boot documentation](https://github.com/ublue-os/bazzite#secure-boot) prior to rebasing. + ### Features from Upstream #### Universal Blue @@ -298,12 +300,17 @@ cosign verify --key cosign.pub ghcr.io/ublue-os/bazzite ## Secure Boot Secure boot is supported with our custom key. The pub key can be found in the root of this repository [here](https://github.com/ublue-os/bazzite/blob/main/secure_boot_key.der). -If you'd like to enroll this key prior to installation, download the key and run the following: +If you'd like to enroll this key prior to installation or rebase, download the key and run the following: ```bash +sudo mokutil --timeout -1 sudo mokutil --import secure_boot_key.der ``` +For users already on a Universal Blue image, you may instead run `ujust enroll-secure-boot-key`. + +If asked for a password, use `ublue-os`. + ### Contributor Metrics ![Bazzite](https://repobeats.axiom.co/api/embed/86b500d79c613015ad16f56df76c8e13f3fd98ae.svg "Repobeats analytics image") From 3ed5972f5910e5fc5daada7628289827f6516b39 Mon Sep 17 00:00:00 2001 From: dreamyuki <49896401+sekalengrengginang@users.noreply.github.com> Date: Sat, 13 Jan 2024 03:18:29 +0700 Subject: [PATCH 02/48] docs: fix README-ID.md (#678) * docs: fix README-ID.md * minor fix --- README-ID.md | 79 ++++++++++++++++++++++++++-------------------------- 1 file changed, 39 insertions(+), 40 deletions(-) diff --git a/README-ID.md b/README-ID.md index e858c68e2e..a80f47f5c3 100644 --- a/README-ID.md +++ b/README-ID.md @@ -6,19 +6,19 @@ --- # Daftar Isi -- [Fitur untuk **SEMUA** Image Bazzite](https://github.com/ublue-os/bazzite#about--features) - - [Fitur untuk Image **Desktop** ](https://github.com/ublue-os/bazzite#desktop) - - [Fitur untuk Image **Steam Deck / HTPC**](https://github.com/ublue-os/bazzite#steam-deckhome-theater-pcs-htpcs) - - [Fitur untuk Image **GNOME** ](https://github.com/ublue-os/bazzite#gnome) - - [Fitur dari upstream](https://github.com/ublue-os/bazzite#features-from-upstream) -- [Alasan](https://github.com/ublue-os/bazzite#why) -- [Showcase](https://github.com/ublue-os/bazzite#showcase) -- [Dokumentasi & Buletin](https://github.com/ublue-os/bazzite#documentation--newsletters) -- [Paket Kustom](https://github.com/ublue-os/bazzite#custom-packages) -- [Verifikasi & Metrik](https://github.com/ublue-os/bazzite#verification) -- [Ucapan Terimakasih](https://github.com/ublue-os/bazzite#special-thanks) -- [Membuat Image Anda Sendiri](https://github.com/ublue-os/bazzite#build-your-own) -- [Komunitas](https://github.com/ublue-os/bazzite#join-the-community) +- [Fitur untuk **SEMUA** Image Bazzite](https://github.com/ublue-os/bazzite/blob/main/README-ID.md#tentang--fitur) + - [Fitur untuk Image **Desktop** ](https://github.com/ublue-os/bazzite/blob/main/README-ID.md#desktop) + - [Fitur untuk Image **Steam Deck / HTPC**](https://github.com/ublue-os/bazzite/blob/main/README-ID.md#steam-deckhome-theater-pcs-htpcs) + - [Fitur untuk Image **GNOME** ](https://github.com/ublue-os/bazzite/blob/main/README-ID.md#gnome) + - [Fitur dari upstream](https://github.com/ublue-os/bazzite/blob/main/README-ID.md#fitur-dari-upstream) +- [Alasan](https://github.com/ublue-os/bazzite/blob/main/README-ID.md#alasan) +- [Pameran](https://github.com/ublue-os/bazzite/blob/main/README-ID.md#pameran) +- [Dokumentasi & Buletin](https://github.com/ublue-os/bazzite/blob/main/README-ID.md#dokumentasi--buletin) +- [Paket Kustom](https://github.com/ublue-os/bazzite/blob/main/README-ID.md#paket-kustom) +- [Verifikasi & Metrik](https://github.com/ublue-os/bazzite/blob/main/README-ID.md#paket-kustom) +- [Ucapan Terimakasih](https://github.com/ublue-os/bazzite/blob/main/README-ID.md#ucapan-terimakasih) +- [Membuat Image Anda Sendiri](https://github.com/ublue-os/bazzite/blob/main/README-ID.md#membuat-image-anda-sendiri) +- [Komunitas](https://github.com/ublue-os/bazzite/blob/main/README-ID.md#bergabung-dengan-komunitas) --- ## Tentang & Fitur @@ -35,13 +35,13 @@ Bazzite dibentuk dari [ublue-os/main](https://github.com/ublue-os/main) and [ubl - Dukungan untuk [Wallpaper Engine](https://www.wallpaperengine.io/en). (Hanya ada di KDE) - Disediakan [Ekstensi shell untuk ROM Properties Page ](https://github.com/GerbilSoft/rom-properties). - Dukungan penuh untuk [Winesync/Fastsync/NTsync](https://github.com/Frogging-Family/wine-tkg-git/issues/936). -- Pra-install [Distrobox](https://github.com/89luca89/distrobox) preinstalled dengan update otomatis untuk kontainer yang dibuat. -- Otomatisasi layanan `duperemove` dan `rmlint`untuk mengurangi penggunaan penyimpanan yang digunakan untuk konten prefix wine. +- Pra-install [Distrobox](https://github.com/89luca89/distrobox) dengan update otomatis untuk kontainer yang dibuat. +- Otomatisasi layanan `duperemove` dan `rmlint`untuk mengurangi penggunaan penyimpanan yang digunakan prefix wine. - Dukungan untuk HDMI CEC dengan [libCEC](https://libcec.pulse-eight.com/). -- Pra-install [System76-Scheduler](https://github.com/pop-os/system76-scheduler), menyediakan otomatisasi providing automatic process priority tweaks to your focused application and keeping CPU time for background processes to a minimum. +- Pra-install [System76-Scheduler](https://github.com/pop-os/system76-scheduler), menyediakan otomatisasi dan oprekan untuk proses yang berjalan dilatar belakang, serta meminimalkan CPU untuk proses latar belakang. - Menkustomisasi konfigurasi System76-Scheduler dengan aturan tambahan. - Menggunakan [Google's BBR TCP congestion control](https://github.com/google/bbr) secara bawaan. -- Pra-install[Input Remapper](https://github.com/sezanzeb/input-remapper) dan diaktifkan secara bawaan. (Dimatikan secara bawaan di varian Deck tapi tersedia dan dapat diaktifkan dengan `ujust enable-input-remapper`) +- Pra-install [Input Remapper](https://github.com/sezanzeb/input-remapper) dan diaktifkan secara bawaan. (Dinonaktifkan secara bawaan di varian Deck tapi tersedia dan dapat diaktifkan dengan `ujust enable-input-remapper`) - Portal Bazzite menyediakan cara mudah untuk menginstall berbagai macam aplikasi dan oprekan, termasuk menginstall [LACT](https://github.com/ilya-zlobintsev/LACT) dan [GreenWithEnvy](https://gitlab.com/leinardi/gwe). - Manajemen paket [Nix](https://nixos.org/) dengan [Fleek](https://getfleek.dev/) tersedia secara optional dan dapat diinstall dengan `ujust`. - Manajemen paket [Brew](https://brew.sh/) tersedia secara optional dan dapat diinstall dengan Portal Bazzite. @@ -49,13 +49,13 @@ Bazzite dibentuk dari [ublue-os/main](https://github.com/ublue-os/main) and [ubl - Mengatur aplikasi dengan [Flatseal](https://github.com/tchx84/Flatseal), [Warehouse](https://github.com/flattool/warehouse), dan [Gear Lever](https://github.com/mijorus/gearlever). - [OpenRGB](https://gitlab.com/CalcProgrammer1/OpenRGB) driver i2c-piix4 dan i2c-nct6775 untuk mengatur RGB di beberapa jenis motherboard. - Disediakan secara bawaan driver [OpenRazer](https://openrazer.github.io), Pilih OpenRazer di portal bazzite atau jalankan perintah `ujust install-openrazer` diterminal untuk menggunakannya. -- Disediakan secara bawaan [OpenTabletDriver](https://opentabletdriver.net/) udev rules , dengan perangkat lunaknya yang dapat diinstall dengan portal bazzite atau dengan mengetikkan `ujust install-opentabletdriver` di terminal. -- Driver [GCAdapter_OC](https://github.com/hannesmann/gcadapter-oc-kmod) untuk men-overclocking Kontroller Gamecube Nintendo sampai dengan 1000hz polling. +- Disediakan secara bawaan [OpenTabletDriver](https://opentabletdriver.net/) udev rules, dengan perangkat lunaknya yang dapat dipasang dengan portal bazzite atau dengan mengetikkan `ujust install-opentabletdriver` di terminal. +- Driver [GCAdapter_OC](https://github.com/hannesmann/gcadapter-oc-kmod) untuk men-overclocking Kontroller Nintendo Gamecube sampai dengan 1000hz polling. - Dukungan untuk keyboard [Wooting](https://wooting.io/). -- Dukungan untuk kartu grafis Southern Islands (HD 7000) and Sea Islands (HD 8000) AMD GPUs dengan driver `amdgpu`. +- Dukungan untuk kartu grafis Southern Islands (HD 7000) and Sea Islands (HD 8000) dengan driver `amdgpu`. - Memperbaiki masalah untuk [game yang menggunakan engine Source 1 (Contoh: TF2)](https://github.com/ValveSoftware/Source-1-Games/issues/5043) yang membuat game-nya crash saat dijalankan `ujust patch-source1-tcmalloc` - [XwaylandVideoBridge](https://invent.kde.org/system/xwaylandvideobridge) untuk Discord screensharing di Wayland. -- [Webapp Manager](https://github.com/linuxmint/webapp-manager) tersedia untuk membuat aplikasi dari situs web dengan berbagai macam peramban, termasuk Firefox. +- [Webapp Manager](https://github.com/linuxmint/webapp-manager) tersedia untuk membuat aplikasi dari situs web dengan berbagai macam peramban, termasuk Firefox. ### Desktop @@ -86,28 +86,28 @@ Perangkat yang bukan Steam Deck masih bisa menggunakan image bazzite-deck, tetap Varian `bazzite-deck` ini didesain untuk digunakan sebagai alternatif untuk SteamOS di perangkat Steam Deck dan HTPC dengan pengalaman seperti konsol: - Langsung boot ke Gamemode seperti SteamOS. -- **Automatic `duperemove` greatly trims the size of compatdata.** -- **Latest version of Mesa creates smaller shader caches and does not require them to prevent stutter.** -- **Able to be booted even if the drive is full.** -- **Support for every language supported by upstream Fedora.** +- **`duperemove` secara otomatis yang berguna untuk mengurangi ukuran folder compatdata.** +- **Versi terbaru dari Mesa yang menghasilkan ukuran shaders cache yang lebih kecil dan tidak diperlukan lagi untuk mencegah stutter.** +- **Langsung bisa booting walaupun diska penuh.** +- **Dukungan untuk setiap bahasa yang disupport oleh Fedora.** - **Menggunakan Wayland di desktop dengan [dukungan untuk Steam input](https://github.com/Supreeeme/extest).** - Fitur yang diporting dari SteamOS meliputi driver, pembaruan perangkat tegar, dan pengatur kecepatan kipas [dari repositori evlaV ](https://gitlab.com/evlaV). - Mesa yang dipatch untuk mengatur framerate di Gamescope. - Hadir dengan patch dari [SteamOS BTRFS](https://gitlab.com/popsulfr/steamos-btrfs) untuk dukungan BTRFS di SD Card secara bawaan. - [SDGyroDSU](https://github.com/kmicki/SteamDeckGyroDSU) tersedia dan diaktifkan secara bawaan. - Pilihan untuk menginstall [Decky Loader](https://github.com/SteamDeckHomebrew/decky-loader), [EmuDeck](https://www.emudeck.com/), [RetroDECK](https://retrodeck.net/), dan [ProtonUp-Qt](https://davidotek.github.io/protonup-qt/), serta berbagai macam paket/aplikasi yang berguna selama pemasangan. -- Sistem pembaruan kustom memungkinkan Sistem Operasi,Flatpal,Paket Nix(dengan fleek), dan Distrobox image untuk diupdate dari Gamemode UI. +- Sistem pembaruan kustom memungkinkan Sistem Operasi,Flatpak,Paket Nix(dengan fleek), dan Distrobox image untuk diupdate dari Gamemode UI. - Dukungan untuk dual-boot dengan Windows karena GRUB dari Fedora. -- Pembaruan merusak sesuatu? tinggal rollback ke versi sebelumnya berkat fitur rollback`rpm-ostree`. Anda bisa memilih versi image sebelumnya di boot menuY. +- Pembaruan merusak sesuatu? tinggal rollback ke versi sebelumnya berkat fitur rollback `rpm-ostree`. Anda bisa memilih versi image sebelumnya di boot menu. - Pra-install Steam dan Lutris sebagai paket sistem. -- Pra-install [Discover Overlay](https://github.com/trigg/Discover) untuk Discord dan otomatis diluncurkan di Gamemode,dan di desktop jika Discord terinstall. [Lihat dokumentasinya disini](https://trigg.github.io/Discover/bazzite). +- Pra-install [Discover Overlay](https://github.com/trigg/Discover) untuk Discord dan otomatis diluncurkan di Gamemode,dan di desktop jika Discord terinstall, [Lihat dokumentasinya disini](https://trigg.github.io/Discover/bazzite). - Menggunakan ZRAM(4GB) dengan kompresi ZSTD secara bawaan dengan opsi untuk menggunakan 1GB swap file dan bisa diatur sesuai kebutuhan. -- Penjadwal I/O untuk mencegah I/O starvation ketika memasang game atau ketika proses latar belakang `duperemove` dan `rmlint`. +- Penjadwal I/O untuk mencegah I/O starvation ketika memasang game atau ketika proses latar belakang `duperemove` dan `rmlint` bekerja. - Mengaplikasikan parameter kernel dari SteamOS. - Kalibrasi Warna Layar untuk layar matte dan reflektif Steam Deck. - Fitur-fitur pengguna advance yang tidak diaktifkan secara bawaan seperti: - - Service untuk undervolting Steam Deck yang beresiko rendah dengan [RyzenAdj](https://github.com/FlyGoat/RyzenAdj) dan [Ryzen SMU](https://gitlab.com/leogx9r/ryzen_smu), anda bisa mencek `ryzenadj.service` dan `/etc/default/ryzenadj`. - - Service untuk membatasi kapasitas maksimal saat mengisi ulang, anda bisa mencek `batterylimit.service` dan `/etc/default/batterylimit`. (Bekerja walaupun perangkat dalam posisi non aktif) + - Service untuk undervolting Steam Deck yang beresiko rendah dengan [RyzenAdj](https://github.com/FlyGoat/RyzenAdj) dan [Ryzen SMU](https://gitlab.com/leogx9r/ryzen_smu), anda bisa mengecek `ryzenadj.service` dan `/etc/default/ryzenadj`. + - Service untuk membatasi kapasitas maksimal saat mengisi ulang, anda bisa mengeceknya di `batterylimit.service` dan `/etc/default/batterylimit`. (Bekerja walaupun perangkat dalam posisi non aktif) - Dukungan bawaan untuk overclocking layar. Contohnya seperti ini, anda menambahkan `GAMESCOPE_OVERRIDE_REFRESH_RATE=40,70` di `/etc/environment`. - Anda bisa menggunakan X11 jika diperlukan dengan mengedit `/etc/default/desktop-wayland`. - Lu punya RAM 32 GB? anda bisa memakai 2x lipat VRAM yang diaplikasikan secara otomatis!. (Coba bagikan skill ngesolder lu dong) @@ -128,7 +128,7 @@ rpm-ostree rebase ostree-unverified-registry:ghcr.io/ublue-os/bazzite-deck:lates ### GNOME -Varian desktop GNOME tersedia dalam versi desktop dan GNOME.varian ini memiliki beberapa fitur tambahan seperti : +Varian desktop GNOME tersedia dalam versi desktop dan deck.varian ini memiliki beberapa fitur tambahan seperti : - [Dukungan untuk Variable refresh rate dan fractional scaling di sesi wayland secara bawaan](https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1154). - Menu kustom di bar atas untuk kembali ke game mode, meluncurkan Steam, dan membuka berbagai macam peralatan yang berguna. @@ -178,19 +178,18 @@ rpm-ostree rebase ostree-unverified-registry:ghcr.io/ublue-os/bazzite-deck-gnome - Paket sistem yang terbarukan. - Layer paket fedora tanpa perlu takut paket tersebut hilang saat memperbarui sistem. - Pra-install [SELinux](https://github.com/SELinuxProject/selinux) untuk keamanan dan telah dikonfigurasi secara bawaan. -- The ability to rebase to different Fedora libostree images, if desired, without losing user data. -- Bisa rebase ke image Fedora ostree yang lain jika mau, tanpa kehilangan data pengguna. -- Dukungan printing berkat [CUPS](https://www.cups.org/) yang terinstall secara bawaan +- Bisa rebase ke image Fedora ostree yang lain jika mau,tanpa kehilangan data pengguna. +- Dukungan printing berkat [CUPS](https://www.cups.org/) yang terinstall secara bawaan. ## Alasan Bazzite dimulai sebagai proyek untuk menyelesaikan berbagai masalah yang ada di SteamOS, terutama paket-paket yang tidak terbarukan (walaupun menggunakan ArchLinux sebagai base) dan tidak ada manajemen paket yang fungsional. -Walaupun proyek ini juga menggunakan image. anda masih bisa menginstall berbagai macam paket Fedora dari perintah shell. Paket-paket ini akan tetap bertahan setelah pembaruan (Jadi anda bisa install aplikasi VPN yang anda g bisa install di SteamOS). +Walaupun proyek ini juga menggunakan image. anda masih bisa menginstall berbagai macam paket Fedora dari perintah shell. Paket-paket ini akan tetap bertahan setelah pembaruan (Jadi anda bisa install aplikasi VPN yang anda g bisa install di SteamOS). Sebagai tambahan, Bazzite sering diupdate beberapa kali dalam satu minggu dengan paket-paket dari upstream Fedora, memberikan anda performa terbaik dan fitur-fitur terbaru di base yang stabil. Bazzite hadir dengan versi Linux kernel yang terbaru dan SELinux diaktifkan secara bawaan dengan dukungan penuh untuk secure boot (Jalankan `ujust enroll-secure-boot-key` dan masukan password `ublue-os` jika diperintahkan untuk menroll key dari kita) -dan enkripsi disk membuat ini aman dan sempurna untuk komputasi general. (Yes, lu bisa ngeprint dari Bazzite!). +dan enkripsi disk membuat ini aman dan sempurna untuk komputasi general. (Yes, anda bisa ngeprint dari Bazzite!). Baca [FAQ](https://universal-blue.discourse.group/docs?topic=33) untuk tahu apa saja yang membuat Bazzite beda dari Sistem Operasi Linux yang lain. @@ -214,7 +213,7 @@ Baca [FAQ](https://universal-blue.discourse.group/docs?topic=33) untuk tahu apa Temukan dokumentasi tambahan project ini [disini](https://universal-blue.discourse.group/docs). -Cek [buletin](https://universal-blue.discourse.group/tag/bazzite-buzz) kami yang selalu update secara regular tentang project ini. +Cek [buletin](https://universal-blue.discourse.group/tag/bazzite-buzz) kami yang selalu update secara regular tentang proyek ini. ## Paket Kustom Paket-paket ini diporting dari SteamOS dan ChimeraOS, dan digunakan oleh Bazzite dan dibuat di Copr [bazzite](https://copr.fedorainfracloud.org/coprs/kylegospo/bazzite/) and [bazzite-multilib](https://copr.fedorainfracloud.org/coprs/kylegospo/bazzite-multilib/). @@ -282,7 +281,7 @@ Sebagai tambahan, paket-paket berikut ini digunakan dari repository Copr: ## Verifikasi -Image berikut ini telah disigned oleh sigstore's [cosign](https://docs.sigstore.dev/cosign/overview/).Anda bisa menverifikasi signature dengan mengunduh key `cosign.pub` dari repo ini dan menjalankan perintah ini: +Image berikut ini telah disigned oleh sigstore's [cosign](https://docs.sigstore.dev/cosign/overview/). Anda bisa menverifikasi signature dengan mengunduh key `cosign.pub` dari repo ini dan menjalankan perintah ini: ```bash cosign verify --key cosign.pub ghcr.io/ublue-os/bazzite @@ -290,7 +289,7 @@ cosign verify --key cosign.pub ghcr.io/ublue-os/bazzite ## Secure Boot -Secure boot didukung dengan key dari kami. Pub key dapat ditemukan di root repositori ini[disini bro](https://github.com/ublue-os/bazzite/blob/main/secure_boot_key.der). +Secure boot didukung dengan key dari kami. Pub key dapat ditemukan di root repositori [ini](https://github.com/ublue-os/bazzite/blob/main/secure_boot_key.der). Jika anda ingin menenroll key ini sebelum instalasi, unduh key ini dan jalankan: ```bash From 6ba3563cd1ab2a51affce8e77358004e9948a0e3 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Fri, 12 Jan 2024 15:10:10 -0800 Subject: [PATCH 03/48] chore: Replace KDE splash screen logo Fixes #672 --- .../steamdeck-kde-presets/bazzite_logo.patch | 24 ++++++++++++++++++ .../steamdeck-kde-presets/bazzite_logo.svgz | Bin 0 -> 1180 bytes .../steamdeck-kde-presets-desktop.spec | 6 +++++ .../steamdeck-kde-presets.spec | 6 +++++ 4 files changed, 36 insertions(+) create mode 100644 spec_files/steamdeck-kde-presets/bazzite_logo.patch create mode 100644 spec_files/steamdeck-kde-presets/bazzite_logo.svgz diff --git a/spec_files/steamdeck-kde-presets/bazzite_logo.patch b/spec_files/steamdeck-kde-presets/bazzite_logo.patch new file mode 100644 index 0000000000..0f5b39af02 --- /dev/null +++ b/spec_files/steamdeck-kde-presets/bazzite_logo.patch @@ -0,0 +1,24 @@ +diff -Naur a/usr/share/plasma/look-and-feel/com.valve.vapor.desktop/contents/splash/Splash.qml b/usr/share/plasma/look-and-feel/com.valve.vapor.desktop/contents/splash/Splash.qml +--- a/usr/share/plasma/look-and-feel/com.valve.vapor.desktop/contents/splash/Splash.qml ++++ b/usr/share/plasma/look-and-feel/com.valve.vapor.desktop/contents/splash/Splash.qml +@@ -42,7 +42,7 @@ + + anchors.centerIn: parent + +- source: "images/deck_logo.svgz" ++ source: "images/bazzite_logo.svgz" + + sourceSize.width: 128 + sourceSize.height: 128 +diff -Naur a/usr/share/plasma/look-and-feel/com.valve.vgui.desktop/contents/splash/Splash.qml b/usr/share/plasma/look-and-feel/com.valve.vgui.desktop/contents/splash/Splash.qml +--- a/usr/share/plasma/look-and-feel/com.valve.vgui.desktop/contents/splash/Splash.qml ++++ b/usr/share/plasma/look-and-feel/com.valve.vgui.desktop/contents/splash/Splash.qml +@@ -42,7 +42,7 @@ + + anchors.centerIn: parent + +- source: "images/deck_logo.svgz" ++ source: "images/bazzite_logo.svgz" + + sourceSize.width: 128 + sourceSize.height: 128 diff --git a/spec_files/steamdeck-kde-presets/bazzite_logo.svgz b/spec_files/steamdeck-kde-presets/bazzite_logo.svgz new file mode 100644 index 0000000000000000000000000000000000000000..94510627dae6c96b6f57355ac4542b6bddb97010 GIT binary patch literal 1180 zcmV;N1Y`RjiwFn_#i3;Y17cx%dTDfJUug5i5WVMD5LyIC0Ey6ukKO@>r8Y z(e+i^EF(@?M2cqJZmMRtj2^!HnwW_6`&F}9)ooKOqo$2M-d`>H!|sX@a;!G{av5nB zp;Q*tuH1X^P!-2t+LvX-2qPLlgL(?at)kj2BRJ1k0n%yuWmN9>PxIOAcs$ahq;0pG z3C7qA%qFWjNdIYh52lMvvF*`ih=Y=_8?aSZO|j~J>sFhpX!e8AU^eUw`Qo!1Z62Cx z57|BUMfc~^YF+%%JoJUPdf^^BKCh?ZivTg)K9gOHFWsu?w{73#_Rbo%0Iu4<&iP$%lC2Z$@`%j7n@Fa(;NrV^Xhk{CQhgosl$umzD!q=4p}5lG zhtd%~oyF|5qPG4sEV*6nrZ(uGyDgNDyH0po?aQmvM7LF4&!4;c=EK+ww|A&Yy63u> zH*ND)bS-4pwf|ai>H;|acLK1|EKl>83#!SdNe0q$pxqF+h}{-J(@FYF1Ukx;YL*!; zrX8iJk%CDcb4gV$xG{kaye7eWhv&Fm2oMPVtU%|pp3d!R`481dv7mWr>fFxRXiZjt+Eh7dl4%bjPH*VKV>m(R`dJ z#-a`ck648FKTScL0FHAV;DoLx zcszN;$N2`^I_&gs^^N+;zTy9?VN%MJu$OrTjm&Vm0Rt6TCKX_Yx?<~x8m$dXKBi0& znkF^k%&^c5(b^^$?bUPwsPGbjALwZo%E(-1X%v*fP&pc52QNQ?g;ek!O;M$J4i^+T zcfLfTeh(6XI%Cs_J)Hvw1N7LDhpK_S6P0BV+RO4dP-w3oeR7DWl#C3<1B1kI;N+5o zG>#m?@s7LL(K&ezj+Z!0--*Ma{ou`%>kQw}nEe@eNj!t0YGTk6IP!O114Uc|j-Zn> z63UY1MTNI39baJ umK$d$`C&epWk1TEy4a6$a^`x8LNijhnC;+C8vY5ozxoPy`kF}N4FCXjtVZep literal 0 HcmV?d00001 diff --git a/spec_files/steamdeck-kde-presets/steamdeck-kde-presets-desktop.spec b/spec_files/steamdeck-kde-presets/steamdeck-kde-presets-desktop.spec index 782f58a735..9dedec1271 100644 --- a/spec_files/steamdeck-kde-presets/steamdeck-kde-presets-desktop.spec +++ b/spec_files/steamdeck-kde-presets/steamdeck-kde-presets-desktop.spec @@ -8,8 +8,10 @@ URL: https://github.com/ublue-os/bazzite Source0: https://gitlab.com/evlaV/steamdeck-kde-presets/-/archive/master/steamdeck-kde-presets-master.tar.gz Source1: kdeglobals-desktop Source2: steamdeck-le.svg +Source3: bazzite_logo.svgz Patch0: multiuser.patch Patch1: lockscreen.patch +Patch2: bazzite_logo.patch BuildArch: noarch @@ -61,6 +63,10 @@ rm %{buildroot}%{_sysconfdir}/xdg/baloofilerc rm %{buildroot}%{_sysconfdir}/xdg/kdeglobals rm %{buildroot}%{_sysconfdir}/xdg/kcm-about-distrorc cp %{SOURCE1} %{buildroot}%{_sysconfdir}/xdg/kdeglobals +rm %{buildroot}%{_datadir}/plasma/look-and-feel/com.valve.vapor.desktop/contents/splash/images/deck_logo.svgz +rm %{buildroot}%{_datadir}/plasma/look-and-feel/com.valve.vgui.desktop/contents/splash/images/deck_logo.svgz +cp %{SOURCE3} %{buildroot}%{_datadir}/plasma/look-and-feel/com.valve.vapor.desktop/contents/splash/images/bazzite_logo.svgz +cp %{SOURCE3} %{buildroot}%{_datadir}/plasma/look-and-feel/com.valve.vgui.desktop/contents/splash/images/bazzite_logo.svgz # Do post-installation %post diff --git a/spec_files/steamdeck-kde-presets/steamdeck-kde-presets.spec b/spec_files/steamdeck-kde-presets/steamdeck-kde-presets.spec index 03b7f8a52b..fc62fb3e3f 100644 --- a/spec_files/steamdeck-kde-presets/steamdeck-kde-presets.spec +++ b/spec_files/steamdeck-kde-presets/steamdeck-kde-presets.spec @@ -7,10 +7,12 @@ URL: https://github.com/ublue-os/bazzite Source0: https://gitlab.com/evlaV/%{name}/-/archive/master/%{name}-master.tar.gz Source1: steamdeck-le.svg +Source2: bazzite_logo.svgz BuildArch: noarch Patch0: fedora.patch Patch1: nested-desktop-resolution.patch Patch2: kdeglobals.patch +Patch3: bazzite_logo.patch Requires: kde-filesystem @@ -47,6 +49,10 @@ rm %{buildroot}%{_datadir}/applications/org.mozilla.firefox.desktop rm %{buildroot}%{_sysconfdir}/profile.d/kde.sh rm %{buildroot}%{_sysconfdir}/xdg/kcm-about-distrorc rm %{buildroot}%{_sysconfdir}/X11/Xsession.d/50rotate-screen +rm %{buildroot}%{_datadir}/plasma/look-and-feel/com.valve.vapor.desktop/contents/splash/images/deck_logo.svgz +rm %{buildroot}%{_datadir}/plasma/look-and-feel/com.valve.vgui.desktop/contents/splash/images/deck_logo.svgz +cp %{SOURCE2} %{buildroot}%{_datadir}/plasma/look-and-feel/com.valve.vapor.desktop/contents/splash/images/bazzite_logo.svgz +cp %{SOURCE2} %{buildroot}%{_datadir}/plasma/look-and-feel/com.valve.vgui.desktop/contents/splash/images/bazzite_logo.svgz # Do post-installation %post From 9f6edde1fc099615e82c059009a3665ccfe1afff Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Fri, 12 Jan 2024 21:47:12 -0800 Subject: [PATCH 04/48] feat: Add a just command and default-enabled option to the Bazzite portal to fix download speeds under Steam for Linux. --- .../deck/shared/usr/share/ublue-os/firstboot/yafti.yml | 7 ++++++- .../deck/shared/usr/share/ublue-os/just/60-custom.just | 6 ++++++ .../desktop/shared/usr/share/ublue-os/firstboot/yafti.yml | 5 +++++ .../desktop/shared/usr/share/ublue-os/just/60-custom.just | 6 ++++++ 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/system_files/deck/shared/usr/share/ublue-os/firstboot/yafti.yml b/system_files/deck/shared/usr/share/ublue-os/firstboot/yafti.yml index 7f6d1ce3e0..bb3dafbdaf 100644 --- a/system_files/deck/shared/usr/share/ublue-os/firstboot/yafti.yml +++ b/system_files/deck/shared/usr/share/ublue-os/firstboot/yafti.yml @@ -23,7 +23,7 @@ screens: packages: - Set input group: sudo -A ujust add-user-to-input-group Add Nested Desktop to Steam: - description: Adds a nested desktop environment to Steam gamemode. + description: Adds a nested desktop environment to Steam game mode. default: true packages: - Add to steam: ujust add-nested-desktop-to-steam @@ -60,6 +60,11 @@ screens: default: true packages: - Install Video: ujust install-gamemode-video + Fix Steam Download Speed: + description: Adds a config file that fixes download speed under Steam for Linux. + default: true + packages: + - Fix Download Speed: ujust fix-steam-download-speed Legacy Memory Configuration (Not recommended): description: Disable ZRAM and enable adjustable swap file, defaults to 1GB. default: false diff --git a/system_files/deck/shared/usr/share/ublue-os/just/60-custom.just b/system_files/deck/shared/usr/share/ublue-os/just/60-custom.just index 78f2d3ea4c..676e9c10b6 100644 --- a/system_files/deck/shared/usr/share/ublue-os/just/60-custom.just +++ b/system_files/deck/shared/usr/share/ublue-os/just/60-custom.just @@ -14,6 +14,12 @@ install-gamemode-video: rm -f $HOME/.local/share/Steam/config/uioverrides/movies/deck_startup.webm ln -s /usr/share/ublue-os/bazzite/bazzite.webm $HOME/.local/share/Steam/config/uioverrides/movies/deck_startup.webm +# Fix the default Steam config to improve download speeds +fix-steam-download-speed: + mkdir -p $HOME/.local/share/Steam + rm -f $HOME/.local/share/Steam/steam_dev.cfg + bash -c 'printf "@nClientDownloadEnableHTTP2PlatformLinux 0\n@fDownloadRateImprovementToAddAnotherConnection 1.0\n" > $HOME/.local/share/Steam/steam_dev.cfg' + # Restore the default Terminal restore-original-terminal: #!/usr/bin/bash diff --git a/system_files/desktop/shared/usr/share/ublue-os/firstboot/yafti.yml b/system_files/desktop/shared/usr/share/ublue-os/firstboot/yafti.yml index 260620f387..848142ded5 100644 --- a/system_files/desktop/shared/usr/share/ublue-os/firstboot/yafti.yml +++ b/system_files/desktop/shared/usr/share/ublue-os/firstboot/yafti.yml @@ -22,6 +22,11 @@ screens: default: true packages: - Set input group: sudo -A ujust add-user-to-input-group + Fix Steam Download Speed: + description: Adds a config file that fixes download speed under Steam for Linux. + default: true + packages: + - Fix Download Speed: ujust fix-steam-download-speed Sunshine: description: A self-hosted game stream host for Moonlight default: false diff --git a/system_files/desktop/shared/usr/share/ublue-os/just/60-custom.just b/system_files/desktop/shared/usr/share/ublue-os/just/60-custom.just index f5e56a8877..7c3fe0828b 100644 --- a/system_files/desktop/shared/usr/share/ublue-os/just/60-custom.just +++ b/system_files/desktop/shared/usr/share/ublue-os/just/60-custom.just @@ -1,5 +1,11 @@ # vim: set ft=make : +# Fix the default Steam config to improve download speeds +fix-steam-download-speed: + mkdir -p $HOME/.local/share/Steam + rm -f $HOME/.local/share/Steam/steam_dev.cfg + bash -c 'printf "@nClientDownloadEnableHTTP2PlatformLinux 0\n@fDownloadRateImprovementToAddAnotherConnection 1.0\n" > $HOME/.local/share/Steam/steam_dev.cfg' + # Restore the default Terminal restore-original-terminal: #!/usr/bin/bash From f812d435f9b1cc309899cb3bc13ad88fc0cd2ceb Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Fri, 12 Jan 2024 22:25:38 -0800 Subject: [PATCH 05/48] chore(readme): Add flags to select other languages --- README-ID.md | 3 +++ README-SPA.md | 2 ++ README.md | 3 +++ 3 files changed, 8 insertions(+) diff --git a/README-ID.md b/README-ID.md index e858c68e2e..13b20e63ce 100644 --- a/README-ID.md +++ b/README-ID.md @@ -4,7 +4,10 @@ [![build-bazzite](https://github.com/ublue-os/bazzite/actions/workflows/build.yml/badge.svg)](https://github.com/ublue-os/bazzite/actions/workflows/build.yml) +[🇺🇸](https://github.com/ublue-os/bazzite/blob/main/README.md) [🇪🇸](https://github.com/ublue-os/bazzite/blob/main/README-SPA.md) [🇮🇩](https://github.com/ublue-os/bazzite/blob/main/README-ID.md) + --- + # Daftar Isi - [Fitur untuk **SEMUA** Image Bazzite](https://github.com/ublue-os/bazzite#about--features) - [Fitur untuk Image **Desktop** ](https://github.com/ublue-os/bazzite#desktop) diff --git a/README-SPA.md b/README-SPA.md index 8a63d77d4d..ac01d12ae2 100644 --- a/README-SPA.md +++ b/README-SPA.md @@ -4,6 +4,8 @@ ![build-bazzite](https://github.com/ublue-os/bazzite/actions/workflows/build.yml/badge.svg) +[🇺🇸](https://github.com/ublue-os/bazzite/blob/main/README.md) [🇪🇸](https://github.com/ublue-os/bazzite/blob/main/README-SPA.md) [🇮🇩](https://github.com/ublue-os/bazzite/blob/main/README-ID.md) + --- # Tabla de Contenidos diff --git a/README.md b/README.md index b029017d2f..959dccc8c1 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,10 @@ [![build-bazzite](https://github.com/ublue-os/bazzite/actions/workflows/build.yml/badge.svg)](https://github.com/ublue-os/bazzite/actions/workflows/build.yml) +[🇺🇸](https://github.com/ublue-os/bazzite/blob/main/README.md) [🇪🇸](https://github.com/ublue-os/bazzite/blob/main/README-SPA.md) [🇮🇩](https://github.com/ublue-os/bazzite/blob/main/README-ID.md) + --- + # Table of Contents - [Features for **All** Bazzite Images](https://github.com/ublue-os/bazzite#about--features) - [Features for **Desktop** Images](https://github.com/ublue-os/bazzite#desktop) From 228d8579b32921dba0eac52e843564dc17865fe4 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sat, 13 Jan 2024 00:38:21 -0800 Subject: [PATCH 06/48] chore(gnome): Move tuned-gui into utilities folder --- .../silverblue/usr/etc/dconf/db/local.d/04-bazzite-folders | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system_files/desktop/silverblue/usr/etc/dconf/db/local.d/04-bazzite-folders b/system_files/desktop/silverblue/usr/etc/dconf/db/local.d/04-bazzite-folders index 0e9f27bf28..7ef2da1fa4 100644 --- a/system_files/desktop/silverblue/usr/etc/dconf/db/local.d/04-bazzite-folders +++ b/system_files/desktop/silverblue/usr/etc/dconf/db/local.d/04-bazzite-folders @@ -12,7 +12,7 @@ name='X-Pardus-Apps.directory' translate=true [org/gnome/desktop/app-folders/folders/Utilities] -apps=['yafti.desktop', 'webapp-manager.desktop', 'fish.desktop', 'tuned-gui.desktop', 'nvtop.desktop', 'yelp.desktop', 'btop.desktop', 'com.github.tchx84.Flatseal.desktop', 'io.github.flattool.Warehouse.desktop', 'it.mijorus.gearlever.desktop', 'com.mattjakeman.ExtensionManager.desktop', 'org.gnome.tweaks.desktop', 'com.github.GradienceTeam.Gradience', 'io.github.fastrizwaan.WineZGUI.desktop'] +apps=['yafti.desktop', 'webapp-manager.desktop', 'tuned-gui.desktop', 'fish.desktop', 'tuned-gui.desktop', 'nvtop.desktop', 'yelp.desktop', 'btop.desktop', 'com.github.tchx84.Flatseal.desktop', 'io.github.flattool.Warehouse.desktop', 'it.mijorus.gearlever.desktop', 'com.mattjakeman.ExtensionManager.desktop', 'org.gnome.tweaks.desktop', 'com.github.GradienceTeam.Gradience', 'io.github.fastrizwaan.WineZGUI.desktop'] categories=['X-GNOME-Utilities'] name='X-GNOME-Utilities.directory' translate=true From 39c9a911782b7296d6f8ce49b559f0978ed60f38 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sat, 13 Jan 2024 01:53:01 -0800 Subject: [PATCH 07/48] chore(readme): embiggen flags --- README-ID.md | 2 +- README-SPA.md | 2 +- README.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README-ID.md b/README-ID.md index 13b20e63ce..c34f477260 100644 --- a/README-ID.md +++ b/README-ID.md @@ -4,7 +4,7 @@ [![build-bazzite](https://github.com/ublue-os/bazzite/actions/workflows/build.yml/badge.svg)](https://github.com/ublue-os/bazzite/actions/workflows/build.yml) -[🇺🇸](https://github.com/ublue-os/bazzite/blob/main/README.md) [🇪🇸](https://github.com/ublue-os/bazzite/blob/main/README-SPA.md) [🇮🇩](https://github.com/ublue-os/bazzite/blob/main/README-ID.md) +# [🇺🇸](https://github.com/ublue-os/bazzite/blob/main/README.md) [🇪🇸](https://github.com/ublue-os/bazzite/blob/main/README-SPA.md) [🇮🇩](https://github.com/ublue-os/bazzite/blob/main/README-ID.md) --- diff --git a/README-SPA.md b/README-SPA.md index ac01d12ae2..19813321c9 100644 --- a/README-SPA.md +++ b/README-SPA.md @@ -4,7 +4,7 @@ ![build-bazzite](https://github.com/ublue-os/bazzite/actions/workflows/build.yml/badge.svg) -[🇺🇸](https://github.com/ublue-os/bazzite/blob/main/README.md) [🇪🇸](https://github.com/ublue-os/bazzite/blob/main/README-SPA.md) [🇮🇩](https://github.com/ublue-os/bazzite/blob/main/README-ID.md) +# [🇺🇸](https://github.com/ublue-os/bazzite/blob/main/README.md) [🇪🇸](https://github.com/ublue-os/bazzite/blob/main/README-SPA.md) [🇮🇩](https://github.com/ublue-os/bazzite/blob/main/README-ID.md) --- diff --git a/README.md b/README.md index 959dccc8c1..856289871f 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ [![build-bazzite](https://github.com/ublue-os/bazzite/actions/workflows/build.yml/badge.svg)](https://github.com/ublue-os/bazzite/actions/workflows/build.yml) -[🇺🇸](https://github.com/ublue-os/bazzite/blob/main/README.md) [🇪🇸](https://github.com/ublue-os/bazzite/blob/main/README-SPA.md) [🇮🇩](https://github.com/ublue-os/bazzite/blob/main/README-ID.md) +# [🇺🇸](https://github.com/ublue-os/bazzite/blob/main/README.md) [🇪🇸](https://github.com/ublue-os/bazzite/blob/main/README-SPA.md) [🇮🇩](https://github.com/ublue-os/bazzite/blob/main/README-ID.md) --- From 414cce0b73d0409bdad7370c26db5ee41dc03db6 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sat, 13 Jan 2024 11:37:17 -0800 Subject: [PATCH 08/48] chore: Add bazzite logo to plymouth, this will be used for hardware other than the Valve Steam Deck to prevent the steam deck logo from appearing. --- spec_files/jupiter-hw-support/bazzite.png | Bin 0 -> 19626 bytes .../jupiter-hw-support-btrfs.spec | 2 ++ 2 files changed, 2 insertions(+) create mode 100644 spec_files/jupiter-hw-support/bazzite.png diff --git a/spec_files/jupiter-hw-support/bazzite.png b/spec_files/jupiter-hw-support/bazzite.png new file mode 100644 index 0000000000000000000000000000000000000000..8674610f31280ad2cffad59b71a9bf83cb3ac26e GIT binary patch literal 19626 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 Date: Sat, 13 Jan 2024 13:36:42 -0800 Subject: [PATCH 09/48] chore(readme): Minor updates --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 856289871f..923d274ff8 100644 --- a/README.md +++ b/README.md @@ -33,8 +33,7 @@ Bazzite is an OCI image that serves as an alternative operating system for the [ Bazzite is built from [ublue-os/main](https://github.com/ublue-os/main) and [ublue-os/nvidia](https://github.com/ublue-os/nvidia) using [Fedora](https://fedoraproject.org/) technology, which means expanded hardware support and built in drivers are included. Additionally, Bazzite adds the following features: - Uses the [fsync kernel](https://copr.fedorainfracloud.org/coprs/sentry/kernel-fsync/) to achieve HDR and expanded hardware support, among numerous other included patches. -- HDR available in Gamescope Session. -- Proprietary Nvidia drivers pre-installed. +- HDR available in Game mode. - NVK available on non-Nvidia builds. - Full hardware accelerated codec support for H264 decoding. - Full support for AMD's ROCM OpenCL/HIP run-times. @@ -98,7 +97,7 @@ Devices that are NOT the Steam Deck can still use the bazzite-deck images, but m Variant designed for usage as an alternative to SteamOS on the Steam Deck, and for a console-like experience on HTPCs, available as `bazzite-deck`: -- Directly boots to Gamemode matching SteamOS's behavior. +- Directly boots to Game mode matching SteamOS's behavior. - **Automatic `duperemove` greatly trims the size of compatdata.** - **Latest version of Mesa creates smaller shader caches and does not require them to prevent stutter.** - **Able to be booted even if the drive is full.** @@ -110,11 +109,11 @@ Variant designed for usage as an alternative to SteamOS on the Steam Deck, and f - Comes with patches from [SteamOS BTRFS](https://gitlab.com/popsulfr/steamos-btrfs) for full BTRFS support for the SD card by default. - Ships with a ported copy of [SDGyroDSU](https://github.com/kmicki/SteamDeckGyroDSU), enabled by default. - Option to install [Decky Loader](https://github.com/SteamDeckHomebrew/decky-loader), [EmuDeck](https://www.emudeck.com/), [RetroDECK](https://retrodeck.net/), and [ProtonUp-Qt](https://davidotek.github.io/protonup-qt/), among numerous other useful packages on installation. -- Custom update system allows for the OS, Flatpaks, Nix packages (Via Fleek), and Distrobox images to be updated directly from the Gamemode UI. +- Custom update system allows for the OS, Flatpaks, Nix packages (Via Fleek), and Distrobox images to be updated directly from the Game mode UI. - Built in support for Windows dual-boot thanks to Fedora's installation of GRUB being left intact. - Update break something? Easily roll back to the previous version of Bazzite thanks to `rpm-ostree`'s rollback functionality. You can even select previous images at boot. - Steam and Lutris preinstalled on the image as layered packages. -- [Discover Overlay](https://github.com/trigg/Discover) for Discord pre-installed and automatically launches in both Gamemode and on the Desktop if Discord is installed. [View the official documentation here](https://trigg.github.io/Discover/bazzite). +- [Discover Overlay](https://github.com/trigg/Discover) for Discord pre-installed and automatically launches in both Game mode and on the Desktop if Discord is installed. [View the official documentation here](https://trigg.github.io/Discover/bazzite). - Uses ZRAM(4GB) with the ZSTD compression algorithm by default with the option to switch back to a 1GB swap file and set a custom size for it if desired. - Kyber I/O scheduler to prevent I/O starvation when installing games or during background `duperemove` and `rmlint` processes. - Applies SteamOS's kernel parameters. @@ -181,6 +180,7 @@ rpm-ostree rebase ostree-unverified-registry:ghcr.io/ublue-os/bazzite-deck-gnome #### Universal Blue +- Proprietary Nvidia drivers pre-installed. - Flathub is enabled by default. - [`ujust`](https://github.com/casey/just) commands for convenience. - Multi-media codecs out of the box. From 69a0b62b04bf882ca3aaec68db1a7672b10e3bf0 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sat, 13 Jan 2024 14:32:59 -0800 Subject: [PATCH 10/48] chore: Update to Mesa 23.3.3 --- ...er-fix-release-build-unused-variable.patch | 28 ------------- ...eemit-boolean-resolve-for-inverted-i.patch | 42 ------------------- .../mesa/disable-zink-egl-fallback.patch | 26 ------------ spec_files/mesa/mesa-meson-c99.patch | 42 +++++++++++++++++++ spec_files/mesa/mesa.spec | 7 ++-- ...nk-fix-resizable-bar-detection-logic.patch | 39 +++++++++++++++++ 6 files changed, 84 insertions(+), 100 deletions(-) delete mode 100644 spec_files/mesa/0001-intel-compiler-fix-release-build-unused-variable.patch delete mode 100644 spec_files/mesa/0001-intel-compiler-reemit-boolean-resolve-for-inverted-i.patch delete mode 100644 spec_files/mesa/disable-zink-egl-fallback.patch create mode 100644 spec_files/mesa/mesa-meson-c99.patch create mode 100644 spec_files/mesa/zink-fix-resizable-bar-detection-logic.patch diff --git a/spec_files/mesa/0001-intel-compiler-fix-release-build-unused-variable.patch b/spec_files/mesa/0001-intel-compiler-fix-release-build-unused-variable.patch deleted file mode 100644 index 7cce8273e7..0000000000 --- a/spec_files/mesa/0001-intel-compiler-fix-release-build-unused-variable.patch +++ /dev/null @@ -1,28 +0,0 @@ -From b32d3c9251e18c77b4d58db61b43797ffb7b05cf Mon Sep 17 00:00:00 2001 -From: Dave Airlie -Date: Wed, 3 Jan 2024 16:31:23 +1000 -Subject: [PATCH] intel/compiler: fix release build unused variable. - -This is only used in an assert. - -Fixes: 158ac265dfd0 ("intel/fs: Make helpers for saving/restoring instruction order") ---- - src/intel/compiler/brw_fs.cpp | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/intel/compiler/brw_fs.cpp b/src/intel/compiler/brw_fs.cpp -index 696b5db8d9d..aa01a2241ce 100644 ---- a/src/intel/compiler/brw_fs.cpp -+++ b/src/intel/compiler/brw_fs.cpp -@@ -6834,7 +6834,7 @@ save_instruction_order(const struct cfg_t *cfg) - static void - restore_instruction_order(struct cfg_t *cfg, fs_inst **inst_arr) - { -- int num_insts = cfg->last_block()->end_ip + 1; -+ ASSERTED int num_insts = cfg->last_block()->end_ip + 1; - - int ip = 0; - foreach_block (block, cfg) { --- -2.43.0 - diff --git a/spec_files/mesa/0001-intel-compiler-reemit-boolean-resolve-for-inverted-i.patch b/spec_files/mesa/0001-intel-compiler-reemit-boolean-resolve-for-inverted-i.patch deleted file mode 100644 index dd7a9b540f..0000000000 --- a/spec_files/mesa/0001-intel-compiler-reemit-boolean-resolve-for-inverted-i.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 56a72e014fcda3c52cf119115cb71fce2fad86d8 Mon Sep 17 00:00:00 2001 -From: Dave Airlie -Date: Thu, 21 Dec 2023 10:39:08 +1000 -Subject: [PATCH] intel/compiler: reemit boolean resolve for inverted if on - gen5 - -Gen5 adds some boolean conversion instructions after nir emits, -but that nir srcs don't line up with them, so reemit the boolean -conversion if we reemit the inot. - -Reviewed-by: Lionel Landwerlin -Fixes: 31b5f5a51f3a ("nir/opt_if: Simplify if's with general conditions") -Part-of: ---- - src/intel/compiler/brw_fs_nir.cpp | 11 +++++++++++ - 1 file changed, 11 insertions(+) - -diff --git a/src/intel/compiler/brw_fs_nir.cpp b/src/intel/compiler/brw_fs_nir.cpp -index 33f2a4046b2..ccdd0fe7db8 100644 ---- a/src/intel/compiler/brw_fs_nir.cpp -+++ b/src/intel/compiler/brw_fs_nir.cpp -@@ -422,6 +422,17 @@ fs_visitor::nir_emit_if(nir_if *if_stmt) - invert = true; - cond_reg = get_nir_src(cond->src[0].src); - cond_reg = offset(cond_reg, bld, cond->src[0].swizzle[0]); -+ -+ if (devinfo->ver <= 5 && -+ (cond->instr.pass_flags & BRW_NIR_BOOLEAN_MASK) == BRW_NIR_BOOLEAN_NEEDS_RESOLVE) { -+ /* redo boolean resolve on gen5 */ -+ fs_reg masked = bld.vgrf(BRW_REGISTER_TYPE_D); -+ bld.AND(masked, cond_reg, brw_imm_d(1)); -+ masked.negate = true; -+ fs_reg tmp = bld.vgrf(cond_reg.type); -+ bld.MOV(retype(tmp, BRW_REGISTER_TYPE_D), masked); -+ cond_reg = tmp; -+ } - } else { - invert = false; - cond_reg = get_nir_src(if_stmt->condition); --- -2.43.0 - diff --git a/spec_files/mesa/disable-zink-egl-fallback.patch b/spec_files/mesa/disable-zink-egl-fallback.patch deleted file mode 100644 index c036acead2..0000000000 --- a/spec_files/mesa/disable-zink-egl-fallback.patch +++ /dev/null @@ -1,26 +0,0 @@ -diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c -index d50be23e871..e3697622635 100644 ---- a/src/egl/main/eglapi.c -+++ b/src/egl/main/eglapi.c -@@ -695,17 +695,21 @@ eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor) - if (disp->Options.ForceSoftware) - RETURN_EGL_ERROR(disp, EGL_NOT_INITIALIZED, EGL_FALSE); - else { -+#if 0 - bool success = false; - if (!disp->Options.Zink && !getenv("GALLIUM_DRIVER")) { - disp->Options.Zink = EGL_TRUE; - success = _eglDriver.Initialize(disp); - } - if (!success) { -+#endif - disp->Options.Zink = EGL_FALSE; - disp->Options.ForceSoftware = EGL_TRUE; - if (!_eglDriver.Initialize(disp)) - RETURN_EGL_ERROR(disp, EGL_NOT_INITIALIZED, EGL_FALSE); -+#if 0 - } -+#endif - } - } - diff --git a/spec_files/mesa/mesa-meson-c99.patch b/spec_files/mesa/mesa-meson-c99.patch new file mode 100644 index 0000000000..6cbb053621 --- /dev/null +++ b/spec_files/mesa/mesa-meson-c99.patch @@ -0,0 +1,42 @@ +meson: C type error in strtod_l/strtof_l probe + +Future compilers will fail compilation due to the C type error: + +…/testfile.c: In function 'main': +…/testfile.c:12:30: error: passing argument 2 of 'strtod_l' from incompatible pointer type + 12 | double d = strtod_l(s, end, loc); + | ^~~ + | | + | char * +/usr/include/stdlib.h:416:43: note: expected 'char ** restrict' but argument is of type 'char *' + 416 | char **__restrict __endptr, locale_t __loc) + | ~~~~~~~~~~~~~~~~~~^~~~~~~~ +…/testfile.c:13:29: error: passing argument 2 of 'strtof_l' from incompatible pointer type + 13 | float f = strtof_l(s, end, loc); + | ^~~ + | | + | char * +/usr/include/stdlib.h:420:42: note: expected 'char ** restrict' but argument is of type 'char *' + 420 | char **__restrict __endptr, locale_t __loc) + | ~~~~~~~~~~~~~~~~~~^~~~~~~~ + +This means that the probe no longer tests is objective and always +fails. + +Submitted upstream: + +diff --git a/meson.build b/meson.build +index 35cc5f1cd5fd9079..1a5d2ba492be0b31 100644 +--- a/meson.build ++++ b/meson.build +@@ -1425,8 +1425,8 @@ if cc.links(''' + locale_t loc = newlocale(LC_CTYPE_MASK, "C", NULL); + const char *s = "1.0"; + char *end; +- double d = strtod_l(s, end, loc); +- float f = strtof_l(s, end, loc); ++ double d = strtod_l(s, &end, loc); ++ float f = strtof_l(s, &end, loc); + freelocale(loc); + return 0; + }''', diff --git a/spec_files/mesa/mesa.spec b/spec_files/mesa/mesa.spec index 3eeb61545e..5d3971e335 100644 --- a/spec_files/mesa/mesa.spec +++ b/spec_files/mesa/mesa.spec @@ -61,7 +61,7 @@ Name: mesa Summary: Mesa graphics libraries -%global ver 23.3.2 +%global ver 23.3.3 Version: %{lua:ver = string.gsub(rpm.expand("%{ver}"), "-", "~"); print(ver)} Release: 100.bazzite.{{{ git_dir_version }}} License: MIT AND BSD-3-Clause AND SGI-B-2.0 @@ -74,9 +74,8 @@ Source0: https://archive.mesa3d.org/mesa-%{ver}.tar.xz Source1: Mesa-MLAA-License-Clarification-Email.txt Patch10: gnome-shell-glthread-disable.patch -Patch11: 0001-intel-compiler-reemit-boolean-resolve-for-inverted-i.patch -Patch12: 0001-intel-compiler-fix-release-build-unused-variable.patch -Patch13: disable-zink-egl-fallback.patch +Patch11: zink-fix-resizable-bar-detection-logic.patch +Patch12: mesa-meson-c99.patch # https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26105/ Patch30: 26105.patch diff --git a/spec_files/mesa/zink-fix-resizable-bar-detection-logic.patch b/spec_files/mesa/zink-fix-resizable-bar-detection-logic.patch new file mode 100644 index 0000000000..4a5e916d52 --- /dev/null +++ b/spec_files/mesa/zink-fix-resizable-bar-detection-logic.patch @@ -0,0 +1,39 @@ +From a077c14f150f1c4f670dce381ac2eb548f1a4ac2 Mon Sep 17 00:00:00 2001 +From: Alessandro Astone +Date: Wed, 10 Jan 2024 17:24:30 +0100 +Subject: [PATCH] zink: Fix resizable BAR detection logic + +This was broken in two ways: +* When looking for the MAX biggest_ram it was actually comparing + a candidate against biggest_vis_ram + +* mem_props.memoryTypes[] should be accessed with the memory type + index as found in heap_map + +Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/10341 +Cc: 23.3 +Part-of: +--- + src/gallium/drivers/zink/zink_screen.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c +index 5a6d17cb4fa3..6697d7ab938c 100644 +--- a/src/gallium/drivers/zink/zink_screen.c ++++ b/src/gallium/drivers/zink/zink_screen.c +@@ -3258,10 +3258,10 @@ zink_internal_create_screen(const struct pipe_screen_config *config, int64_t dev + { + uint64_t biggest_vis_vram = 0; + for (unsigned i = 0; i < screen->heap_count[ZINK_HEAP_DEVICE_LOCAL_VISIBLE]; i++) +- biggest_vis_vram = MAX2(biggest_vis_vram, screen->info.mem_props.memoryHeaps[screen->info.mem_props.memoryTypes[i].heapIndex].size); ++ biggest_vis_vram = MAX2(biggest_vis_vram, screen->info.mem_props.memoryHeaps[screen->info.mem_props.memoryTypes[screen->heap_map[ZINK_HEAP_DEVICE_LOCAL_VISIBLE][i]].heapIndex].size); + uint64_t biggest_vram = 0; + for (unsigned i = 0; i < screen->heap_count[ZINK_HEAP_DEVICE_LOCAL]; i++) +- biggest_vram = MAX2(biggest_vis_vram, screen->info.mem_props.memoryHeaps[screen->info.mem_props.memoryTypes[i].heapIndex].size); ++ biggest_vram = MAX2(biggest_vram, screen->info.mem_props.memoryHeaps[screen->info.mem_props.memoryTypes[screen->heap_map[ZINK_HEAP_DEVICE_LOCAL][i]].heapIndex].size); + /* determine if vis vram is roughly equal to total vram */ + if (biggest_vis_vram > biggest_vram * 0.9) + screen->resizable_bar = true; +-- +GitLab + From 6073c849b98b4e049e8c97b941850dcdcdae48b8 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sat, 13 Jan 2024 14:44:23 -0800 Subject: [PATCH 11/48] feat: Include nerd-fonts, this will automatically be used as a fallback for the default Fira Code font when an unknown symbol is requested --- Containerfile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Containerfile b/Containerfile index ff0c8ae864..03fcecddd5 100644 --- a/Containerfile +++ b/Containerfile @@ -38,6 +38,7 @@ RUN wget https://copr.fedorainfracloud.org/coprs/kylegospo/bazzite/repo/fedora-$ wget https://copr.fedorainfracloud.org/coprs/kylegospo/VTFLib/repo/fedora-$(rpm -E %fedora)/kylegospo-VTFLib-fedora-$(rpm -E %fedora).repo -O /etc/yum.repos.d/_copr_kylegospo-VTFLib.repo && \ wget https://copr.fedorainfracloud.org/coprs/kylegospo/webapp-manager/repo/fedora-$(rpm -E %fedora)/kylegospo-webapp-manager-fedora-$(rpm -E %fedora).repo -O /etc/yum.repos.d/_copr_kylegospo-webapp-manager.repo && \ wget https://copr.fedorainfracloud.org/coprs/hhd-dev/hhd/repo/fedora-$(rpm -E %fedora)/hhd-dev-hhd-fedora-$(rpm -E %fedora).repo -O /etc/yum.repos.d/_copr_hhd-dev-hhd.repo && \ + wget https://copr.fedorainfracloud.org/coprs/che/nerd-fonts/repo/fedora-$(rpm -E %fedora)/che-nerd-fonts-fedora-$(rpm -E %fedora).repo -O /etc/yum.repos.d/_copr_che-nerd-fonts.repo && \ wget https://pkgs.tailscale.com/stable/fedora/tailscale.repo -O /etc/yum.repos.d/tailscale.repo && \ sed -i 's@gpgcheck=1@gpgcheck=0@g' /etc/yum.repos.d/tailscale.repo @@ -222,6 +223,7 @@ RUN rpm-ostree install \ google-noto-sans-cjk-fonts \ lato-fonts \ fira-code-fonts \ + nerd-fonts \ glow \ gum \ setools \ @@ -428,6 +430,7 @@ RUN /tmp/image-info.sh && \ sed -i 's@enabled=1@enabled=0@g' /etc/yum.repos.d/_copr_kylegospo-VTFLib.repo && \ sed -i 's@enabled=1@enabled=0@g' /etc/yum.repos.d/_copr_kylegospo-webapp-manager.repo && \ sed -i 's@enabled=1@enabled=0@g' /etc/yum.repos.d/_copr_hhd-dev-hhd.repo && \ + sed -i 's@enabled=1@enabled=0@g' /etc/yum.repos.d/_copr_che-nerd-fonts.repo && \ sed -i 's@enabled=1@enabled=0@g' /etc/yum.repos.d/tailscale.repo && \ sed -i 's@enabled=1@enabled=0@g' /etc/yum.repos.d/charm.repo && \ sed -i 's/#DefaultTimeoutStopSec.*/DefaultTimeoutStopSec=15s/' /etc/systemd/user.conf && \ From d7ab7cbb80b6f8a1da9f87b47c2e26a96939b1b7 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sat, 13 Jan 2024 14:50:02 -0800 Subject: [PATCH 12/48] chore(readme): Add contributor action & readme changes --- .github/workflows/contributors.yml | 22 ++++++++++++++++++++++ README.md | 3 +++ 2 files changed, 25 insertions(+) create mode 100644 .github/workflows/contributors.yml diff --git a/.github/workflows/contributors.yml b/.github/workflows/contributors.yml new file mode 100644 index 0000000000..2ee8ffe3a2 --- /dev/null +++ b/.github/workflows/contributors.yml @@ -0,0 +1,22 @@ +name: Update Contributors + +on: + schedule: + - cron: '0 0 * * *' # Every day at midnight + push: + branches: + - main + +jobs: + update: + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + steps: + - name: Checkout + uses: actions/checkout@v4 + + - uses: akhilmhdh/contributors-readme-action@v2.3.6 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/README.md b/README.md index c5925dc72d..7a8587fbc9 100644 --- a/README.md +++ b/README.md @@ -301,6 +301,9 @@ sudo mokutil --import secure_boot_key.der ![Bazzite](https://repobeats.axiom.co/api/embed/86b500d79c613015ad16f56df76c8e13f3fd98ae.svg "Repobeats analytics image") + + + ## Special Thanks Bazzite is a community effort and wouldn't exist without everyone's support. Below are some of the people who've helped us along the way: From f1634d0c3f7e4b6cfd3f399d299269ba18d092a1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 13 Jan 2024 14:52:38 -0800 Subject: [PATCH 13/48] docs(contributor): contrib-readme-action has updated readme (#682) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- README.md | 189 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 189 insertions(+) diff --git a/README.md b/README.md index 7a8587fbc9..8be3fc1982 100644 --- a/README.md +++ b/README.md @@ -302,6 +302,195 @@ sudo mokutil --import secure_boot_key.der ![Bazzite](https://repobeats.axiom.co/api/embed/86b500d79c613015ad16f56df76c8e13f3fd98ae.svg "Repobeats analytics image") + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + KyleGospo +
+ Kyle Gospodnetich +
+
+ + EyeCantCU +
+ RJ Trujillo +
+
+ + nicknamenamenick +
+ Pat Connors +
+
+ + HikariKnight +
+ HikariKnight +
+
+ + castrojo +
+ Jorge O. Castro +
+
+ + RodoMa92 +
+ Marco Rodolfi +
+
+ + dnkmmr69420 +
+ Dnkmmr +
+
+ + fiftydinar +
+ Null +
+
+ + Gecked-Deck +
+ Null +
+
+ + tulilirockz +
+ Tulili +
+
+ + sekalengrengginang +
+ Dreamyuki +
+
+ + Zindswini +
+ Bailey +
+
+ + CharlieBros +
+ Null +
+
+ + noelmiller +
+ Noel Miller +
+
+ + drokath +
+ Null +
+
+ + bobslept +
+ Null +
+
+ + ArtikusHG +
+ Null +
+
+ + duhow +
+ David Girón +
+
+ + badlydrawnface +
+ David Marrero +
+
+ + eltociear +
+ Ikko Eltociear Ashimine +
+
+ + ashylily +
+ Lily +
+
+ + gerblesh +
+ Null +
+
+ + h7io +
+ Null +
+
+ + karajan9 +
+ Null +
+
+ + leechgrrl +
+ Null +
+
+ + zelikos +
+ Patrick Csikos +
+
## Special Thanks From 66936d2fe3f5ac4b0f17973a568881d1ab07a19f Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sat, 13 Jan 2024 14:59:45 -0800 Subject: [PATCH 14/48] chore(readme): Add nerd-fonts status --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 8be3fc1982..cf01a5d5ba 100644 --- a/README.md +++ b/README.md @@ -270,6 +270,7 @@ Additionally, the following packages are used from other Copr repos: | [joycond](https://copr.fedorainfracloud.org/coprs/kylegospo/joycond/) | ![Build Status](https://copr.fedorainfracloud.org/coprs/kylegospo/joycond/package/joycond/status_image/last_build.png?) | | [kernel-fsync](https://copr.fedorainfracloud.org/coprs/sentry/kernel-fsync/) | ![Build Status](https://copr.fedorainfracloud.org/coprs/sentry/kernel-fsync/package/kernel/status_image/last_build.png?) | | [latencyflex-vulkan-layer](https://copr.fedorainfracloud.org/coprs/kylegospo/LatencyFleX/) | ![Build Status](https://copr.fedorainfracloud.org/coprs/kylegospo/LatencyFleX/package/latencyflex-vulkan-layer/status_image/last_build.png?) | +| [nerd-fonts](https://copr.fedorainfracloud.org/coprs/che/nerd-fonts/) | ![Build Status](https://copr.fedorainfracloud.org/coprs/che/nerd-fonts/package/nerd-fonts/status_image/last_build.png?) | | [noise-suppression-for-voice](https://copr.fedorainfracloud.org/coprs/ycollet/audinux/) | ![Build Status](https://copr.fedorainfracloud.org/coprs/ycollet/audinux/package/noise-suppression-for-voice/status_image/last_build.png?) | | [obs-vkcapture](https://copr.fedorainfracloud.org/coprs/kylegospo/obs-vkcapture/) | ![Build Status](https://copr.fedorainfracloud.org/coprs/kylegospo/obs-vkcapture/package/obs-vkcapture/status_image/last_build.png?) | | [prompt](https://gitlab.gnome.org/chergert/prompt) | ![Build Status](https://copr.fedorainfracloud.org/coprs/kylegospo/prompt/package/prompt/status_image/last_build.png?) | From f361db762226d94f7015f09e277514e5b11e623e Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sat, 13 Jan 2024 16:32:54 -0800 Subject: [PATCH 15/48] chore(ci): Use username for contributors --- .github/workflows/contributors.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/contributors.yml b/.github/workflows/contributors.yml index 2ee8ffe3a2..2dd3e154c9 100644 --- a/.github/workflows/contributors.yml +++ b/.github/workflows/contributors.yml @@ -17,6 +17,9 @@ jobs: - name: Checkout uses: actions/checkout@v4 - - uses: akhilmhdh/contributors-readme-action@v2.3.6 + - name: Contribute List + uses: akhilmhdh/contributors-readme-action@v2.3.6 + with: + use_username: true env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From c413d0f2a8a781bd85bbd577757aea3c8a79cf0e Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sat, 13 Jan 2024 16:35:27 -0800 Subject: [PATCH 16/48] chore: Minor whitespace fix --- spec_files/jupiter-hw-support/jupiter-hw-support-btrfs.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec_files/jupiter-hw-support/jupiter-hw-support-btrfs.spec b/spec_files/jupiter-hw-support/jupiter-hw-support-btrfs.spec index e5a355541e..aae12f1752 100644 --- a/spec_files/jupiter-hw-support/jupiter-hw-support-btrfs.spec +++ b/spec_files/jupiter-hw-support/jupiter-hw-support-btrfs.spec @@ -10,10 +10,10 @@ License: GPLv3 URL: https://github.com/ublue-os/bazzite Source: https://gitlab.com/evlaV/%{packagename}/-/archive/%{packagever}/%{packagename}-%{packagever}.tar.gz -Source2: bazzite.png +Source2: bazzite.png Patch0: fedora.patch Patch1: selinux.patch -Patch2: btrfs-automount.patch +Patch2: btrfs-automount.patch Patch3: btrfs-format.patch Patch4: user.patch Patch5: bazzite-btrfs.patch From 78567e67abaa8ef94e02daf0d2326b12c1961abc Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 13 Jan 2024 16:36:20 -0800 Subject: [PATCH 17/48] docs(contributor): contrib-readme-action has updated readme (#684) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- README.md | 50 +++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index cf01a5d5ba..2466562fe8 100644 --- a/README.md +++ b/README.md @@ -309,21 +309,21 @@ sudo mokutil --import secure_boot_key.der KyleGospo
- Kyle Gospodnetich + KyleGospo
EyeCantCU
- RJ Trujillo + EyeCantCU
nicknamenamenick
- Pat Connors + nicknamenamenick
@@ -337,14 +337,14 @@ sudo mokutil --import secure_boot_key.der castrojo
- Jorge O. Castro + castrojo
RodoMa92
- Marco Rodolfi + RodoMa92
@@ -352,42 +352,42 @@ sudo mokutil --import secure_boot_key.der dnkmmr69420
- Dnkmmr + dnkmmr69420
fiftydinar
- Null + fiftydinar
Gecked-Deck
- Null + Gecked-Deck
tulilirockz
- Tulili + tulilirockz
sekalengrengginang
- Dreamyuki + sekalengrengginang
Zindswini
- Bailey + Zindswini
@@ -395,42 +395,42 @@ sudo mokutil --import secure_boot_key.der CharlieBros
- Null + CharlieBros
noelmiller
- Noel Miller + noelmiller
drokath
- Null + drokath
bobslept
- Null + bobslept
ArtikusHG
- Null + ArtikusHG
duhow
- David Girón + duhow
@@ -438,42 +438,42 @@ sudo mokutil --import secure_boot_key.der badlydrawnface
- David Marrero + badlydrawnface
eltociear
- Ikko Eltociear Ashimine + eltociear
ashylily
- Lily + ashylily
gerblesh
- Null + gerblesh
h7io
- Null + h7io
karajan9
- Null + karajan9
@@ -481,14 +481,14 @@ sudo mokutil --import secure_boot_key.der leechgrrl
- Null + leechgrrl
zelikos
- Patrick Csikos + zelikos
From 9ebd1c47f889aadb8646c8c66224ffd065dcf49b Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sat, 13 Jan 2024 22:48:11 -0800 Subject: [PATCH 18/48] fix: Switch to 70-bazzite.just for custom just scripts, frees up 60-custom.just for downstream fixes #679 --- Containerfile | 1 + .../share/ublue-os/just/{60-custom.just => 70-bazzite.just} | 4 ---- .../share/ublue-os/just/{60-custom.just => 70-bazzite.just} | 4 ---- 3 files changed, 1 insertion(+), 8 deletions(-) rename system_files/deck/shared/usr/share/ublue-os/just/{60-custom.just => 70-bazzite.just} (99%) rename system_files/desktop/shared/usr/share/ublue-os/just/{60-custom.just => 70-bazzite.just} (99%) diff --git a/Containerfile b/Containerfile index 03fcecddd5..04051617ca 100644 --- a/Containerfile +++ b/Containerfile @@ -408,6 +408,7 @@ RUN /tmp/image-info.sh && \ sed -i 's@Exec=discover-overlay@Exec=/usr/bin/bazzite-discover-overlay@g' /usr/etc/xdg/autostart/discover_overlay.desktop && \ sed -i 's@\[Desktop Entry\]@\[Desktop Entry\]\nNoDisplay=true@g' /usr/share/applications/discover_overlay.desktop && \ cp "/usr/share/ublue-os/firstboot/yafti.yml" "/etc/yafti.yml" && \ + echo "import \"/usr/share/ublue-os/just/70-bazzite.just\"" >> /usr/share/ublue-os/justfile" && \ pip install --prefix=/usr yafti && \ pip install --prefix=/usr hyfetch && \ sed -i 's/stage/none/g' /etc/rpm-ostreed.conf && \ diff --git a/system_files/deck/shared/usr/share/ublue-os/just/60-custom.just b/system_files/deck/shared/usr/share/ublue-os/just/70-bazzite.just similarity index 99% rename from system_files/deck/shared/usr/share/ublue-os/just/60-custom.just rename to system_files/deck/shared/usr/share/ublue-os/just/70-bazzite.just index 676e9c10b6..310fd38f39 100644 --- a/system_files/deck/shared/usr/share/ublue-os/just/60-custom.just +++ b/system_files/deck/shared/usr/share/ublue-os/just/70-bazzite.just @@ -405,10 +405,6 @@ _toggle_wayland: enable-flatpak-theming: flatpak override --user --filesystem=xdg-config/gtk-4.0:ro --filesystem=xdg-config/gtk-3.0:ro --filesystem=~/.icons:ro --filesystem=~/.themes:ro -# Enable XwaylandVideoBridge for screensharing under Wayland -fix-screenshare: - cp /usr/share/applications/org.kde.xwaylandvideobridge.desktop $HOME/.config/autostart/ - # Add user to "input" group required by certain controller drivers add-user-to-input-group: #!/usr/bin/bash diff --git a/system_files/desktop/shared/usr/share/ublue-os/just/60-custom.just b/system_files/desktop/shared/usr/share/ublue-os/just/70-bazzite.just similarity index 99% rename from system_files/desktop/shared/usr/share/ublue-os/just/60-custom.just rename to system_files/desktop/shared/usr/share/ublue-os/just/70-bazzite.just index 7c3fe0828b..0a13112f71 100644 --- a/system_files/desktop/shared/usr/share/ublue-os/just/60-custom.just +++ b/system_files/desktop/shared/usr/share/ublue-os/just/70-bazzite.just @@ -182,10 +182,6 @@ unhide-grub: enable-flatpak-theming: flatpak override --user --filesystem=xdg-config/gtk-4.0:ro --filesystem=xdg-config/gtk-3.0:ro --filesystem=~/.icons:ro --filesystem=~/.themes:ro -# Enable XwaylandVideoBridge for screensharing under Wayland -fix-screenshare: - cp /usr/share/applications/org.kde.xwaylandvideobridge.desktop $HOME/.config/autostart/ - # Add user to "input" group required by certain controller drivers add-user-to-input-group: #!/usr/bin/bash From 3e8450eb91f6a41d93c050cf53e8d4638d90524a Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sat, 13 Jan 2024 22:56:40 -0800 Subject: [PATCH 19/48] chore: Minor syntax fix --- Containerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Containerfile b/Containerfile index 04051617ca..0bad73b242 100644 --- a/Containerfile +++ b/Containerfile @@ -408,7 +408,7 @@ RUN /tmp/image-info.sh && \ sed -i 's@Exec=discover-overlay@Exec=/usr/bin/bazzite-discover-overlay@g' /usr/etc/xdg/autostart/discover_overlay.desktop && \ sed -i 's@\[Desktop Entry\]@\[Desktop Entry\]\nNoDisplay=true@g' /usr/share/applications/discover_overlay.desktop && \ cp "/usr/share/ublue-os/firstboot/yafti.yml" "/etc/yafti.yml" && \ - echo "import \"/usr/share/ublue-os/just/70-bazzite.just\"" >> /usr/share/ublue-os/justfile" && \ + echo "import \"/usr/share/ublue-os/just/70-bazzite.just\"" >> "/usr/share/ublue-os/justfile" && \ pip install --prefix=/usr yafti && \ pip install --prefix=/usr hyfetch && \ sed -i 's/stage/none/g' /etc/rpm-ostreed.conf && \ From 0509bb36ae6372c378a1d7172bf2ca989ed59757 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sun, 14 Jan 2024 00:29:49 -0800 Subject: [PATCH 20/48] chore: Update wireplumber --- .../{steamdeck.patch => valve.patch} | 1865 ++++++++++++++--- spec_files/wireplumber/wireplumber.spec | 14 +- 2 files changed, 1595 insertions(+), 284 deletions(-) rename spec_files/wireplumber/{steamdeck.patch => valve.patch} (54%) diff --git a/spec_files/wireplumber/steamdeck.patch b/spec_files/wireplumber/valve.patch similarity index 54% rename from spec_files/wireplumber/steamdeck.patch rename to spec_files/wireplumber/valve.patch index dcd8e7c5a3..707d738ce7 100644 --- a/spec_files/wireplumber/steamdeck.patch +++ b/spec_files/wireplumber/valve.patch @@ -1,25 +1,14 @@ -diff --git a/modules/meson.build b/modules/meson.build -index 4930bfae..4a337017 100644 ---- a/modules/meson.build -+++ b/modules/meson.build -@@ -159,6 +159,17 @@ shared_library( - dependencies : [wp_dep, pipewire_dep], - ) - -+shared_library( -+ 'wireplumber-module-filters-api', -+ [ -+ 'module-filters-api.c', -+ ], -+ c_args : [common_c_args, '-DG_LOG_DOMAIN="m-filters-api"'], -+ install : true, -+ install_dir : wireplumber_module_dir, -+ dependencies : [wp_dep, pipewire_dep], -+) -+ - if libsystemd_dep.found() or libelogind_dep.found() - shared_library( - 'wireplumber-module-logind', +From 9911c8532eb9072d93eb39b02aa94699f0a735a1 Mon Sep 17 00:00:00 2001 +From: Julian Bouzas +Date: Tue, 21 Mar 2023 09:18:30 -0400 +Subject: [PATCH 01/12] m-default-nodes: remove echo-cancel configuration + +This will be possible to do with the new module-filters-api. +--- + modules/module-default-nodes.c | 75 -------------------- + src/config/main.lua.d/40-device-defaults.lua | 9 --- + 2 files changed, 84 deletions(-) + diff --git a/modules/module-default-nodes.c b/modules/module-default-nodes.c index aaf29389..3bb93f00 100644 --- a/modules/module-default-nodes.c @@ -178,12 +167,84 @@ index aaf29389..3bb93f00 100644 NULL)); return TRUE; } +diff --git a/src/config/main.lua.d/40-device-defaults.lua b/src/config/main.lua.d/40-device-defaults.lua +index 19202914..91c4e189 100644 +--- a/src/config/main.lua.d/40-device-defaults.lua ++++ b/src/config/main.lua.d/40-device-defaults.lua +@@ -10,15 +10,6 @@ device_defaults.properties = { + -- the default volumes to apply to ACP device nodes, in the linear scale + --["default-volume"] = 0.064, + --["default-input-volume"] = 1.0, +- +- -- Whether to auto-switch to echo cancel sink and source nodes or not +- ["auto-echo-cancel"] = true, +- +- -- Sets the default echo-cancel-sink node name to automatically switch to +- ["echo-cancel-sink-name"] = "echo-cancel-sink", +- +- -- Sets the default echo-cancel-source node name to automatically switch to +- ["echo-cancel-source-name"] = "echo-cancel-source", + } + + -- Sets persistent device profiles that should never change when wireplumber is +-- +2.42.0 + + +From a9b6f3bcb4c525c1e257873875feb6223fa6b660 Mon Sep 17 00:00:00 2001 +From: Julian Bouzas +Date: Fri, 17 Mar 2023 11:06:11 -0400 +Subject: [PATCH 02/12] modules: add new module-filters-api to enable smart + filter policy + +This module provides an API to link filter nodes using the logic configured in +'policy.lua.d/30-filters-config.lua'. This configuration file allows grouping +filters together (sorted by priority) to use a common target node. A node is +considered a filter node if it has the node.link-group property. + +This is disabled by default. You can enable smart filters policy in the +'10-default-policy.lya' configuration file. +--- + modules/meson.build | 11 + + modules/module-filters-api.c | 905 ++++++++++++++++++ + modules/module-lua-scripting/api/json.c | 2 +- + src/config/policy.lua.d/10-default-policy.lua | 9 + + src/config/policy.lua.d/30-filters-config.lua | 73 ++ + src/scripts/filters-metadata.lua | 39 + + src/scripts/policy-node.lua | 120 ++- + 7 files changed, 1156 insertions(+), 3 deletions(-) + create mode 100644 modules/module-filters-api.c + create mode 100644 src/config/policy.lua.d/30-filters-config.lua + create mode 100644 src/scripts/filters-metadata.lua + +diff --git a/modules/meson.build b/modules/meson.build +index 4930bfae..4a337017 100644 +--- a/modules/meson.build ++++ b/modules/meson.build +@@ -159,6 +159,17 @@ shared_library( + dependencies : [wp_dep, pipewire_dep], + ) + ++shared_library( ++ 'wireplumber-module-filters-api', ++ [ ++ 'module-filters-api.c', ++ ], ++ c_args : [common_c_args, '-DG_LOG_DOMAIN="m-filters-api"'], ++ install : true, ++ install_dir : wireplumber_module_dir, ++ dependencies : [wp_dep, pipewire_dep], ++) ++ + if libsystemd_dep.found() or libelogind_dep.found() + shared_library( + 'wireplumber-module-logind', diff --git a/modules/module-filters-api.c b/modules/module-filters-api.c new file mode 100644 -index 00000000..8852a6c5 +index 00000000..32c67c85 --- /dev/null +++ b/modules/module-filters-api.c -@@ -0,0 +1,920 @@ +@@ -0,0 +1,905 @@ +/* WirePlumber + * + * Copyright © 2023 Collabora Ltd. @@ -235,12 +296,6 @@ index 00000000..8852a6c5 +}; +typedef struct _Filter Filter; + -+struct _Target { -+ gboolean exclusive; -+ WpNode *node; -+}; -+typedef struct _Target Target; -+ +static guint +get_filter_priority (const gchar *link_group) +{ @@ -279,22 +334,6 @@ index 00000000..8852a6c5 + g_free (f); +} + -+static Target * -+target_new (gboolean exclusive, WpNode *node) -+{ -+ Target *t = g_malloc0 (sizeof (Target)); -+ t->exclusive = exclusive; -+ t->node = node ? g_object_ref (node) : NULL; -+ return t; -+} -+ -+static void -+target_free (Target *t) -+{ -+ g_clear_object (&t->node); -+ g_free (t); -+} -+ +static gint +filter_equal_func (const Filter *f, const gchar *link_group) +{ @@ -341,18 +380,16 @@ index 00000000..8852a6c5 + return found->enabled; +} + -+static WpSpaJson * ++static gint +wp_filters_api_get_filter_target (WpFiltersApi * self, const gchar *direction, + const gchar *link_group) +{ + WpDirection dir = WP_DIRECTION_INPUT; + GList *filters; + Filter *found; -+ g_autoptr (WpSpaJson) res = wp_spa_json_new_object ( -+ "exclusive", "b", FALSE, "bound_id", "i", -1, NULL); + -+ g_return_val_if_fail (direction, g_steal_pointer (&res)); -+ g_return_val_if_fail (link_group, g_steal_pointer (&res)); ++ g_return_val_if_fail (direction, -1); ++ g_return_val_if_fail (link_group, -1); + + /* Get the filters for the given direction */ + if (g_str_equal (direction, "output") || g_str_equal (direction, "Output")) @@ -363,10 +400,10 @@ index 00000000..8852a6c5 + filters = g_list_find_custom (filters, link_group, + (GCompareFunc) filter_equal_func); + if (!filters) -+ return g_steal_pointer (&res); ++ return -1; + found = filters->data; + if (!found->enabled) -+ return g_steal_pointer (&res); ++ return -1; + + /* Return the previous filter with matching target that is enabled */ + while ((filters = g_list_previous (filters))) { @@ -374,27 +411,18 @@ index 00000000..8852a6c5 + if ((prev->target == found->target || + (prev->target && found->target && + g_str_equal (prev->target, found->target))) && -+ prev->enabled) { -+ return wp_spa_json_new_object ( -+ "exclusive", "b", FALSE, -+ "bound_id", "i", wp_proxy_get_bound_id (WP_PROXY (prev->node)), -+ NULL); -+ } ++ prev->enabled) ++ return wp_proxy_get_bound_id (WP_PROXY (prev->node)); + } + + /* Find the target */ + if (found->target) { -+ Target *t = g_hash_table_lookup (self->targets, found->target); -+ if (t) { -+ return wp_spa_json_new_object ( -+ "exclusive", "b", t->exclusive, -+ "bound_id", "i", -+ t->node ? (gint)wp_proxy_get_bound_id (WP_PROXY (t->node)) : -1, -+ NULL); -+ } ++ WpNode *node = g_hash_table_lookup (self->targets, found->target); ++ if (node) ++ return wp_proxy_get_bound_id (WP_PROXY (node)); + } + -+ return g_steal_pointer (&res); ++ return -1; +} + +static gint @@ -417,17 +445,12 @@ index 00000000..8852a6c5 + /* Find the first target matching target_id */ + while (filters) { + Filter *f = (Filter *) filters->data; -+ if (f->enabled) { -+ gint f_target_id; -+ g_autoptr (WpSpaJson) f_target = wp_filters_api_get_filter_target (self, -+ direction, f->link_group); -+ if (f_target && wp_spa_json_is_object (f_target) && -+ wp_spa_json_object_get (f_target, "bound_id", "i", &f_target_id, NULL) -+ && f_target_id == target_id) { -+ target = f->target; -+ found = TRUE; -+ break; -+ } ++ gint f_target_id = wp_filters_api_get_filter_target (self, direction, ++ f->link_group); ++ if (f_target_id == target_id && f->enabled) { ++ target = f->target; ++ found = TRUE; ++ break; + } + + /* Advance */ @@ -454,6 +477,33 @@ index 00000000..8852a6c5 + return res; +} + ++static gint ++wp_filters_api_get_default_filter (WpFiltersApi * self, const gchar *direction) ++{ ++ WpDirection dir = WP_DIRECTION_INPUT; ++ GList *filters; ++ ++ g_return_val_if_fail (direction, -1); ++ ++ /* Get the filters for the given direction */ ++ if (g_str_equal (direction, "output") || g_str_equal (direction, "Output")) ++ dir = WP_DIRECTION_OUTPUT; ++ filters = self->filters[dir]; ++ ++ /* The default filter is the highest priority filter without target, this is ++ * the first filer that is enabled because the list is sorted by priority */ ++ while (filters) { ++ Filter *f = (Filter *) filters->data; ++ if (f->enabled && !f->target) ++ return wp_proxy_get_bound_id (WP_PROXY (f->node)); ++ ++ /* Advance */ ++ filters = g_list_next (filters); ++ } ++ ++ return -1; ++} ++ +static void +sync_changed (WpCore * core, GAsyncResult * res, WpFiltersApi * self) +{ @@ -547,11 +597,9 @@ index 00000000..8852a6c5 + for (; wp_iterator_next (it, &item); g_value_unset (&item)) { + WpSpaJson *j = g_value_get_boxed (&item); + g_autofree gchar *key = NULL; -+ WpSpaJson *value; -+ gboolean exclusive = FALSE; -+ g_autoptr (WpSpaJson) props = NULL; -+ g_autoptr (WpNode) target_node = NULL; -+ Target *curr_target; ++ WpSpaJson *props; ++ g_autoptr (WpNode) target = NULL; ++ WpNode *curr_target; + + key = wp_spa_json_parse_string (j); + g_value_unset (&item); @@ -560,36 +608,27 @@ index 00000000..8852a6c5 + "Could not get valid key-value pairs from target object"); + break; + } -+ value = g_value_get_boxed (&item); -+ if (!value || !wp_spa_json_is_object (value)) { -+ wp_warning_object (self, "Target value must be a JSON object"); -+ break; -+ } -+ -+ /* Get exclusive */ -+ wp_spa_json_object_get (value, "exclusive", "b", &exclusive, NULL); -+ -+ /* Get target node */ -+ wp_spa_json_object_get (value, "props", "J", &props, NULL); -+ if (props) -+ target_node = find_target_node (self, props); ++ props = g_value_get_boxed (&item); + -+ /* Update values if target exists in the table, otherwise add new target */ ++ /* Get current target */ + curr_target = g_hash_table_lookup (self->targets, key); -+ if (curr_target) { -+ if (curr_target->exclusive != exclusive) { -+ curr_target->exclusive = exclusive; -+ changed = TRUE; -+ } -+ if (curr_target->node != target_node) { -+ g_clear_object (&curr_target->node); -+ curr_target->node = g_steal_pointer (&target_node); -+ changed = TRUE; ++ ++ /* Find the node and insert it into the table if found */ ++ target = find_target_node (self, props); ++ if (target) { ++ /* Check if the target changed */ ++ if (curr_target) { ++ guint32 target_bound_id = wp_proxy_get_bound_id (WP_PROXY (target)); ++ guint32 curr_bound_id = wp_proxy_get_bound_id (WP_PROXY (curr_target)); ++ if (target_bound_id != curr_bound_id) ++ changed = TRUE; + } -+ } else { ++ + g_hash_table_insert (self->targets, g_strdup (key), -+ target_new (exclusive, target_node)); -+ changed = TRUE; ++ g_steal_pointer (&target)); ++ } else { ++ if (curr_target) ++ changed = TRUE; + } + } + @@ -1025,7 +1064,7 @@ index 00000000..8852a6c5 + g_autoptr (WpCore) core = wp_object_get_core (WP_OBJECT (self)); + + self->targets = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, -+ (GDestroyNotify) target_free); ++ g_object_unref); + + /* Create the metadata object manager */ + self->metadata_om = wp_object_manager_new (); @@ -1080,7 +1119,7 @@ index 00000000..8852a6c5 + G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, + (GCallback) wp_filters_api_get_filter_target, + NULL, NULL, NULL, -+ WP_TYPE_SPA_JSON, 2, G_TYPE_STRING, G_TYPE_STRING); ++ G_TYPE_INT, 2, G_TYPE_STRING, G_TYPE_STRING); + + signals[ACTION_GET_FILTER_FROM_TARGET] = g_signal_new_class_handler ( + "get-filter-from-target", G_TYPE_FROM_CLASS (klass), @@ -1089,6 +1128,13 @@ index 00000000..8852a6c5 + NULL, NULL, NULL, + G_TYPE_INT, 2, G_TYPE_STRING, G_TYPE_INT); + ++ signals[ACTION_GET_DEFAULT_FILTER] = g_signal_new_class_handler ( ++ "get-default-filter", G_TYPE_FROM_CLASS (klass), ++ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, ++ (GCallback) wp_filters_api_get_default_filter, ++ NULL, NULL, NULL, ++ G_TYPE_INT, 1, G_TYPE_STRING); ++ + signals[SIGNAL_CHANGED] = g_signal_new ( + "changed", G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL, @@ -1117,62 +1163,8 @@ index 2883a021..3d486be8 100644 lua_typename(L, lua_type(L, -1))); break; } -diff --git a/src/config/main.lua.d/40-device-defaults.lua b/src/config/main.lua.d/40-device-defaults.lua -index 19202914..b87eec51 100644 ---- a/src/config/main.lua.d/40-device-defaults.lua -+++ b/src/config/main.lua.d/40-device-defaults.lua -@@ -10,15 +10,6 @@ device_defaults.properties = { - -- the default volumes to apply to ACP device nodes, in the linear scale - --["default-volume"] = 0.064, - --["default-input-volume"] = 1.0, -- -- -- Whether to auto-switch to echo cancel sink and source nodes or not -- ["auto-echo-cancel"] = true, -- -- -- Sets the default echo-cancel-sink node name to automatically switch to -- ["echo-cancel-sink-name"] = "echo-cancel-sink", -- -- -- Sets the default echo-cancel-source node name to automatically switch to -- ["echo-cancel-source-name"] = "echo-cancel-source", - } - - -- Sets persistent device profiles that should never change when wireplumber is -@@ -48,13 +39,13 @@ device_defaults.profile_priorities = { - }, - -- lower the index higher the priority - priorities = { -- -- "a2dp-sink-sbc", -- -- "a2dp-sink-aptx_ll", -- -- "a2dp-sink-aptx", -- -- "a2dp-sink-aptx_hd", -- -- "a2dp-sink-ldac", -- -- "a2dp-sink-aac", -- -- "a2dp-sink-sbc_xq", -+ "a2dp-sink-aptx_ll", -+ "a2dp-sink-aptx", -+ "a2dp-sink-aptx_hd", -+ "a2dp-sink-ldac", -+ "a2dp-sink-aac", -+ "a2dp-sink-sbc", -+ "a2dp-sink-sbc_xq", - } - }, - } -diff --git a/src/config/main.lua.d/40-stream-defaults.lua b/src/config/main.lua.d/40-stream-defaults.lua -index b869099b..d25aab0d 100644 ---- a/src/config/main.lua.d/40-stream-defaults.lua -+++ b/src/config/main.lua.d/40-stream-defaults.lua -@@ -6,7 +6,7 @@ stream_defaults.properties = { - ["restore-props"] = true, - - -- whether to restore the last stream target or not -- ["restore-target"] = true, -+ ["restore-target"] = false, - - -- the default channel volume for new streams whose props were never saved - -- previously. This is only used if "restore-props" is set to true. diff --git a/src/config/policy.lua.d/10-default-policy.lua b/src/config/policy.lua.d/10-default-policy.lua -index 83d0a3b2..412d47a8 100644 +index 83d0a3b2..d3621a73 100644 --- a/src/config/policy.lua.d/10-default-policy.lua +++ b/src/config/policy.lua.d/10-default-policy.lua @@ -12,6 +12,9 @@ default_policy.policy = { @@ -1180,7 +1172,7 @@ index 83d0a3b2..412d47a8 100644 ["filter.forward-format"] = false, + -- Whether to enable smart filter policy or not (experimental feature) -+ ["filter.smart"] = true, ++ ["filter.smart"] = false, + -- Set to 'true' to disable channel splitting & merging on nodes and enable -- passthrough of audio in the same format as the format of the device. @@ -1200,10 +1192,10 @@ index 83d0a3b2..412d47a8 100644 diff --git a/src/config/policy.lua.d/30-filters-config.lua b/src/config/policy.lua.d/30-filters-config.lua new file mode 100644 -index 00000000..8e8725fc +index 00000000..76aecad0 --- /dev/null +++ b/src/config/policy.lua.d/30-filters-config.lua -@@ -0,0 +1,80 @@ +@@ -0,0 +1,73 @@ +-- The smart filter policy configuration. +-- You need to enable "filter.smart" in 10-default-policy.lua +-- @@ -1265,31 +1257,24 @@ index 00000000..8e8725fc + } + }, + -+ -- The filter targets ++ -- The target node properties (any node properties can be defined) + ["targets"] = { + ["speakers"] = { -+ ["exclusive"] = false, -+ ["props"] = { -+ ["media.class"] = "Audio/Sink", -+ ["alsa.card_name"] = "sof-nau8821-max", -+ ["device.profile.description"] = "Speaker", -+ } ++ ["media.class"] = "Audio/Sink", ++ ["alsa.card_name"] = "my-speakers-card-name", + }, + ["microphone"] = { -+ ["exclusive"] = false, -+ ["props"] = { -+ ["media.class"] = "Audio/Source", -+ ["alsa.card_name"] = "sof-nau8821-max", -+ } ++ ["media.class"] = "Audio/Source", ++ ["alsa.card_name"] = "my-microphone-card-name", + } + } +} diff --git a/src/scripts/filters-metadata.lua b/src/scripts/filters-metadata.lua new file mode 100644 -index 00000000..49b4d0e8 +index 00000000..04e3e6c6 --- /dev/null +++ b/src/scripts/filters-metadata.lua -@@ -0,0 +1,42 @@ +@@ -0,0 +1,39 @@ +-- WirePlumber +-- +-- Copyright © 2023 Collabora Ltd. @@ -1322,87 +1307,15 @@ index 00000000..49b4d0e8 + + -- Set targets metadata + local targets = {} -+ for name, value in pairs(config["targets"]) do -+ targets[name] = Json.Object { -+ exclusive = value.exclusive and true or false, -+ props = Json.Object (value.props) -+ } ++ for name, props in pairs(config["targets"]) do ++ targets[name] = Json.Object (props) + end + local targets_json = Json.Object (targets) + m:set (0, "filters.configured.targets", "Spa:String:JSON", + targets_json:to_string()) +end) -diff --git a/src/scripts/policy-device-profile.lua b/src/scripts/policy-device-profile.lua -index af10f9b7..8d3a6d7e 100644 ---- a/src/scripts/policy-device-profile.lua -+++ b/src/scripts/policy-device-profile.lua -@@ -34,12 +34,12 @@ createIntrestObjects(self.config.persistent) - createIntrestObjects(self.config.priorities) - - -- Checks whether a device profile is persistent or not --function isProfilePersistent(device_props, profile_name) -- for _, p in ipairs(self.config.persistent or {}) do -+function isProfilePersistent (device_props, profile_name) -+ for _, p in ipairs (self.config.persistent or {}) do - if p.profile_names then -- for _, interest in ipairs(p.interests) do -- if interest:matches(device_props) then -- for _, pn in ipairs(p.profile_names) do -+ for _, interest in ipairs (p.interests) do -+ if interest:matches (device_props) then -+ for _, pn in ipairs (p.profile_names) do - if pn == profile_name then - return true - end -@@ -72,7 +72,7 @@ function setDeviceProfile (device, dev_id, dev_name, profile) - index = profile.index, - } - Log.info ("Setting profile " .. profile.name .. " on " .. dev_name) -- device:set_param("Profile", param) -+ device:set_param ("Profile", param) - end - - function findDefaultProfile (device) -@@ -85,8 +85,8 @@ function findDefaultProfile (device) - return nil - end - -- for p in device:iterate_params("EnumProfile") do -- local profile = parseParam(p, "EnumProfile") -+ for p in device:iterate_params ("EnumProfile") do -+ local profile = parseParam (p, "EnumProfile") - if profile.name == def_name then - return profile - end -@@ -189,7 +189,7 @@ function handleProfiles (device, new_device) - isProfilePersistent (device.properties, self.active_profiles[dev_id].name) and - def_profile ~= nil and - self.active_profiles[dev_id].name == def_profile.name -- then -+ then - local active_profile = self.active_profiles[dev_id].name - Log.info ("Device profile " .. active_profile .. " is persistent for " .. dev_name) - return -@@ -233,14 +233,14 @@ self.om = ObjectManager { - } - } - --self.om:connect("object-added", function (_, device) -+self.om:connect ("object-added", function(_, device) - device:connect ("params-changed", onDeviceParamsChanged) - handleProfiles (device, true) - end) - --self.om:connect("object-removed", function (_, device) -+self.om:connect ("object-removed", function(_, device) - local dev_id = device["bound-id"] - self.active_profiles[dev_id] = nil - end) - --self.om:activate() -+self.om:activate () diff --git a/src/scripts/policy-node.lua b/src/scripts/policy-node.lua -index 99ad8473..035c3006 100644 +index 99ad8473..f249f343 100644 --- a/src/scripts/policy-node.lua +++ b/src/scripts/policy-node.lua @@ -18,6 +18,7 @@ self.scanning = false @@ -1523,42 +1436,45 @@ index 99ad8473..035c3006 100644 -- Determine if we can handle item by this policy if endpoints_om:get_n_objects () > 0 and si_props["item.factory.name"] == "si-audio-adapter" then -@@ -652,6 +718,34 @@ function checkFollowDefault (si, si_target, has_node_defined_target) +@@ -652,6 +718,37 @@ function checkFollowDefault (si, si_target, has_node_defined_target) end end +function findFilterTarget (si) ++ local node = si:get_associated_proxy ("node") ++ local direction = getTargetDirection (si.properties) ++ local link_group = node.properties["node.link-group"] ++ local target_id = -1 ++ + -- always return nil if filters API is not loaded + if self.filters_api == nil then -+ return nil, false ++ return nil + end + -+ -- always return nil if this is not a filter -+ local node = si:get_associated_proxy ("node") -+ local link_group = node.properties["node.link-group"] + if link_group == nil then -+ return nil, false ++ -- if this is a client stream that is not a filter, link it to the highest ++ -- priority filter that does not have a group, if any. ++ target_id = self.filters_api:call("get-default-filter", direction) ++ else ++ -- if this is a filter, get its target ++ target_id = self.filters_api:call("get-filter-target", ++ direction, link_group) + end + -+ -- get the filter target -+ local direction = getTargetDirection (si.properties) -+ local target_json = self.filters_api:call("get-filter-target", direction, link_group) -+ if target_json == nil then -+ return nil, false ++ if (target_id == -1) then ++ return nil + end -+ target = target_json:parse() + -+ Log.info (".. filter target ID is " .. tostring(target.bound_id) .. -+ " (" .. tostring (target.exclusive) .. ")") ++ Log.info (".. filter target ID is " .. tostring(target_id)) + return linkables_om:lookup { -+ Constraint { "node.id", "=", tostring(target.bound_id) } -+ }, target.exclusive ++ Constraint { "node.id", "=", tostring(target_id) } ++ } +end + function handleLinkable (si) if checkPending () then return -@@ -683,11 +777,23 @@ function handleLinkable (si) +@@ -683,11 +780,19 @@ function handleLinkable (si) local si_target, has_defined_target, has_node_defined_target = findDefinedTarget(si_props) local can_passthrough = si_target and canPassthrough(si, si_target) @@ -1569,11 +1485,7 @@ index 99ad8473..035c3006 100644 + -- find filter target (always returns nil for non filters) + if si_target == nil then -+ si_target, exclusive = findFilterTarget(si) -+ -- don't fallback if filter target is not found and exclusive is true -+ if si_target == nil and exclusive then -+ return -+ end ++ si_target = findFilterTarget(si) + local can_passthrough = si_target and canPassthrough(si, si_target) + if si_target and si_must_passthrough and not can_passthrough then + si_target = nil @@ -1583,7 +1495,7 @@ index 99ad8473..035c3006 100644 -- if the client has seen a target that we haven't yet prepared, schedule -- a rescan one more time and hope for the best local si_id = si.id -@@ -876,6 +982,17 @@ if config.follow and default_nodes ~= nil then +@@ -876,6 +981,17 @@ if config.follow and default_nodes ~= nil then end) end @@ -1601,3 +1513,1392 @@ index 99ad8473..035c3006 100644 -- listen for target.node metadata changes if config.move is enabled if config.move then metadata_om:connect("object-added", function (om, metadata) +-- +2.42.0 + + +From bea7195a12ba1014f62e40f80c0f2e127a1aaa2e Mon Sep 17 00:00:00 2001 +From: Julian Bouzas +Date: Thu, 23 Mar 2023 09:26:45 -0400 +Subject: [PATCH 03/12] config: do not restore stream target by default + +--- + src/config/main.lua.d/40-stream-defaults.lua | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/config/main.lua.d/40-stream-defaults.lua b/src/config/main.lua.d/40-stream-defaults.lua +index b869099b..d25aab0d 100644 +--- a/src/config/main.lua.d/40-stream-defaults.lua ++++ b/src/config/main.lua.d/40-stream-defaults.lua +@@ -6,7 +6,7 @@ stream_defaults.properties = { + ["restore-props"] = true, + + -- whether to restore the last stream target or not +- ["restore-target"] = true, ++ ["restore-target"] = false, + + -- the default channel volume for new streams whose props were never saved + -- previously. This is only used if "restore-props" is set to true. +-- +2.42.0 + + +From f4d88774670d561b3a2d37c0d6534b204cdcb14f Mon Sep 17 00:00:00 2001 +From: Julian Bouzas +Date: Thu, 23 Mar 2023 09:41:23 -0400 +Subject: [PATCH 04/12] config: enable smart filter policy + +--- + src/config/policy.lua.d/10-default-policy.lua | 2 +- + src/config/policy.lua.d/30-filters-config.lua | 5 +++-- + 2 files changed, 4 insertions(+), 3 deletions(-) + +diff --git a/src/config/policy.lua.d/10-default-policy.lua b/src/config/policy.lua.d/10-default-policy.lua +index d3621a73..412d47a8 100644 +--- a/src/config/policy.lua.d/10-default-policy.lua ++++ b/src/config/policy.lua.d/10-default-policy.lua +@@ -13,7 +13,7 @@ default_policy.policy = { + ["filter.forward-format"] = false, + + -- Whether to enable smart filter policy or not (experimental feature) +- ["filter.smart"] = false, ++ ["filter.smart"] = true, + + -- Set to 'true' to disable channel splitting & merging on nodes and enable + -- passthrough of audio in the same format as the format of the device. +diff --git a/src/config/policy.lua.d/30-filters-config.lua b/src/config/policy.lua.d/30-filters-config.lua +index 76aecad0..8d919fb7 100644 +--- a/src/config/policy.lua.d/30-filters-config.lua ++++ b/src/config/policy.lua.d/30-filters-config.lua +@@ -63,11 +63,12 @@ default_policy.filters_metadata = { + ["targets"] = { + ["speakers"] = { + ["media.class"] = "Audio/Sink", +- ["alsa.card_name"] = "my-speakers-card-name", ++ ["alsa.card_name"] = "acp5x", ++ ["device.profile.description"] = "Speaker", + }, + ["microphone"] = { + ["media.class"] = "Audio/Source", +- ["alsa.card_name"] = "my-microphone-card-name", ++ ["alsa.card_name"] = "acp5x", + } + } + } +-- +2.42.0 + + +From c736d19638aed46fc3cb7381a75a5d699bb41299 Mon Sep 17 00:00:00 2001 +From: Ashok Sidipotu +Date: Wed, 12 Jul 2023 09:54:46 +0530 +Subject: [PATCH 05/12] policy-device-profile.lua: align style + +--- + src/scripts/policy-device-profile.lua | 26 +++++++++++++------------- + 1 file changed, 13 insertions(+), 13 deletions(-) + +diff --git a/src/scripts/policy-device-profile.lua b/src/scripts/policy-device-profile.lua +index af10f9b7..ddd86fee 100644 +--- a/src/scripts/policy-device-profile.lua ++++ b/src/scripts/policy-device-profile.lua +@@ -10,7 +10,7 @@ self.config = ... or {} + self.config.persistent = self.config.persistent or {} + self.config.priorities = self.config.priorities or {} + self.active_profiles = {} +-self.default_profile_plugin = Plugin.find("default-profile") ++self.default_profile_plugin = Plugin.find ("default-profile") + + function createIntrestObjects(t) + for _, p in ipairs(t or {}) do +@@ -34,12 +34,12 @@ createIntrestObjects(self.config.persistent) + createIntrestObjects(self.config.priorities) + + -- Checks whether a device profile is persistent or not +-function isProfilePersistent(device_props, profile_name) +- for _, p in ipairs(self.config.persistent or {}) do ++function isProfilePersistent (device_props, profile_name) ++ for _, p in ipairs (self.config.persistent or {}) do + if p.profile_names then +- for _, interest in ipairs(p.interests) do +- if interest:matches(device_props) then +- for _, pn in ipairs(p.profile_names) do ++ for _, interest in ipairs (p.interests) do ++ if interest:matches (device_props) then ++ for _, pn in ipairs (p.profile_names) do + if pn == profile_name then + return true + end +@@ -72,7 +72,7 @@ function setDeviceProfile (device, dev_id, dev_name, profile) + index = profile.index, + } + Log.info ("Setting profile " .. profile.name .. " on " .. dev_name) +- device:set_param("Profile", param) ++ device:set_param ("Profile", param) + end + + function findDefaultProfile (device) +@@ -85,8 +85,8 @@ function findDefaultProfile (device) + return nil + end + +- for p in device:iterate_params("EnumProfile") do +- local profile = parseParam(p, "EnumProfile") ++ for p in device:iterate_params ("EnumProfile") do ++ local profile = parseParam (p, "EnumProfile") + if profile.name == def_name then + return profile + end +@@ -189,7 +189,7 @@ function handleProfiles (device, new_device) + isProfilePersistent (device.properties, self.active_profiles[dev_id].name) and + def_profile ~= nil and + self.active_profiles[dev_id].name == def_profile.name +- then ++ then + local active_profile = self.active_profiles[dev_id].name + Log.info ("Device profile " .. active_profile .. " is persistent for " .. dev_name) + return +@@ -233,14 +233,14 @@ self.om = ObjectManager { + } + } + +-self.om:connect("object-added", function (_, device) ++self.om:connect ("object-added", function(_, device) + device:connect ("params-changed", onDeviceParamsChanged) + handleProfiles (device, true) + end) + +-self.om:connect("object-removed", function (_, device) ++self.om:connect ("object-removed", function(_, device) + local dev_id = device["bound-id"] + self.active_profiles[dev_id] = nil + end) + +-self.om:activate() ++self.om:activate () +-- +2.42.0 + + +From 8d805bd8be1b542a3880a95b5182cf8bc50e765d Mon Sep 17 00:00:00 2001 +From: Ashok Sidipotu +Date: Wed, 12 Jul 2023 10:17:37 +0530 +Subject: [PATCH 06/12] policy-device-profile.lua: introduce user profile + priority list + +--- + src/config/main.lua.d/40-device-defaults.lua | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +diff --git a/src/config/main.lua.d/40-device-defaults.lua b/src/config/main.lua.d/40-device-defaults.lua +index 91c4e189..b87eec51 100644 +--- a/src/config/main.lua.d/40-device-defaults.lua ++++ b/src/config/main.lua.d/40-device-defaults.lua +@@ -39,13 +39,13 @@ device_defaults.profile_priorities = { + }, + -- lower the index higher the priority + priorities = { +- -- "a2dp-sink-sbc", +- -- "a2dp-sink-aptx_ll", +- -- "a2dp-sink-aptx", +- -- "a2dp-sink-aptx_hd", +- -- "a2dp-sink-ldac", +- -- "a2dp-sink-aac", +- -- "a2dp-sink-sbc_xq", ++ "a2dp-sink-aptx_ll", ++ "a2dp-sink-aptx", ++ "a2dp-sink-aptx_hd", ++ "a2dp-sink-ldac", ++ "a2dp-sink-aac", ++ "a2dp-sink-sbc", ++ "a2dp-sink-sbc_xq", + } + }, + } +-- +2.42.0 + + +From 08f90a7ace0a059280ec4c974d0a9c1a19a7589a Mon Sep 17 00:00:00 2001 +From: Julian Bouzas +Date: Fri, 3 Nov 2023 09:24:59 -0400 +Subject: [PATCH 07/12] m-filters-api: remove get-default-filter API + +This was redundant as you can get the default filter by calling +'get-filter-from-target' using the default target. The policy logic +should not change. +--- + modules/module-filters-api.c | 34 ---------------------------------- + src/scripts/policy-node.lua | 17 +++++++---------- + 2 files changed, 7 insertions(+), 44 deletions(-) + +diff --git a/modules/module-filters-api.c b/modules/module-filters-api.c +index 32c67c85..d7dc781a 100644 +--- a/modules/module-filters-api.c ++++ b/modules/module-filters-api.c +@@ -230,33 +230,6 @@ wp_filters_api_get_filter_from_target (WpFiltersApi * self, + return res; + } + +-static gint +-wp_filters_api_get_default_filter (WpFiltersApi * self, const gchar *direction) +-{ +- WpDirection dir = WP_DIRECTION_INPUT; +- GList *filters; +- +- g_return_val_if_fail (direction, -1); +- +- /* Get the filters for the given direction */ +- if (g_str_equal (direction, "output") || g_str_equal (direction, "Output")) +- dir = WP_DIRECTION_OUTPUT; +- filters = self->filters[dir]; +- +- /* The default filter is the highest priority filter without target, this is +- * the first filer that is enabled because the list is sorted by priority */ +- while (filters) { +- Filter *f = (Filter *) filters->data; +- if (f->enabled && !f->target) +- return wp_proxy_get_bound_id (WP_PROXY (f->node)); +- +- /* Advance */ +- filters = g_list_next (filters); +- } +- +- return -1; +-} +- + static void + sync_changed (WpCore * core, GAsyncResult * res, WpFiltersApi * self) + { +@@ -881,13 +854,6 @@ wp_filters_api_class_init (WpFiltersApiClass * klass) + NULL, NULL, NULL, + G_TYPE_INT, 2, G_TYPE_STRING, G_TYPE_INT); + +- signals[ACTION_GET_DEFAULT_FILTER] = g_signal_new_class_handler ( +- "get-default-filter", G_TYPE_FROM_CLASS (klass), +- G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, +- (GCallback) wp_filters_api_get_default_filter, +- NULL, NULL, NULL, +- G_TYPE_INT, 1, G_TYPE_STRING); +- + signals[SIGNAL_CHANGED] = g_signal_new ( + "changed", G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL, +diff --git a/src/scripts/policy-node.lua b/src/scripts/policy-node.lua +index f249f343..c5a15ec6 100644 +--- a/src/scripts/policy-node.lua ++++ b/src/scripts/policy-node.lua +@@ -719,9 +719,6 @@ function checkFollowDefault (si, si_target, has_node_defined_target) + end + + function findFilterTarget (si) +- local node = si:get_associated_proxy ("node") +- local direction = getTargetDirection (si.properties) +- local link_group = node.properties["node.link-group"] + local target_id = -1 + + -- always return nil if filters API is not loaded +@@ -729,16 +726,16 @@ function findFilterTarget (si) + return nil + end + ++ -- always return nil if this is not a filter ++ local node = si:get_associated_proxy ("node") ++ local link_group = node.properties["node.link-group"] + if link_group == nil then +- -- if this is a client stream that is not a filter, link it to the highest +- -- priority filter that does not have a group, if any. +- target_id = self.filters_api:call("get-default-filter", direction) +- else +- -- if this is a filter, get its target +- target_id = self.filters_api:call("get-filter-target", +- direction, link_group) ++ return nil + end + ++ -- get the filter target ++ local direction = getTargetDirection (si.properties) ++ target_id = self.filters_api:call("get-filter-target", direction, link_group) + if (target_id == -1) then + return nil + end +-- +2.42.0 + + +From c36b75303296d206041c0de856e51267aa56b1be Mon Sep 17 00:00:00 2001 +From: Julian Bouzas +Date: Fri, 3 Nov 2023 11:44:57 -0400 +Subject: [PATCH 08/12] m-filters-api: add support for exclusive targets + +Filters whose target are exclusive won't be linked to the default device if the +target does not exist. +--- + modules/module-filters-api.c | 127 ++++++++++++------ + src/config/policy.lua.d/30-filters-config.lua | 18 ++- + src/scripts/filters-metadata.lua | 7 +- + src/scripts/policy-node.lua | 26 ++-- + 4 files changed, 120 insertions(+), 58 deletions(-) + +diff --git a/modules/module-filters-api.c b/modules/module-filters-api.c +index d7dc781a..8852a6c5 100644 +--- a/modules/module-filters-api.c ++++ b/modules/module-filters-api.c +@@ -49,6 +49,12 @@ struct _Filter { + }; + typedef struct _Filter Filter; + ++struct _Target { ++ gboolean exclusive; ++ WpNode *node; ++}; ++typedef struct _Target Target; ++ + static guint + get_filter_priority (const gchar *link_group) + { +@@ -87,6 +93,22 @@ filter_free (Filter *f) + g_free (f); + } + ++static Target * ++target_new (gboolean exclusive, WpNode *node) ++{ ++ Target *t = g_malloc0 (sizeof (Target)); ++ t->exclusive = exclusive; ++ t->node = node ? g_object_ref (node) : NULL; ++ return t; ++} ++ ++static void ++target_free (Target *t) ++{ ++ g_clear_object (&t->node); ++ g_free (t); ++} ++ + static gint + filter_equal_func (const Filter *f, const gchar *link_group) + { +@@ -133,16 +155,18 @@ wp_filters_api_is_filter_enabled (WpFiltersApi * self, const gchar *direction, + return found->enabled; + } + +-static gint ++static WpSpaJson * + wp_filters_api_get_filter_target (WpFiltersApi * self, const gchar *direction, + const gchar *link_group) + { + WpDirection dir = WP_DIRECTION_INPUT; + GList *filters; + Filter *found; ++ g_autoptr (WpSpaJson) res = wp_spa_json_new_object ( ++ "exclusive", "b", FALSE, "bound_id", "i", -1, NULL); + +- g_return_val_if_fail (direction, -1); +- g_return_val_if_fail (link_group, -1); ++ g_return_val_if_fail (direction, g_steal_pointer (&res)); ++ g_return_val_if_fail (link_group, g_steal_pointer (&res)); + + /* Get the filters for the given direction */ + if (g_str_equal (direction, "output") || g_str_equal (direction, "Output")) +@@ -153,10 +177,10 @@ wp_filters_api_get_filter_target (WpFiltersApi * self, const gchar *direction, + filters = g_list_find_custom (filters, link_group, + (GCompareFunc) filter_equal_func); + if (!filters) +- return -1; ++ return g_steal_pointer (&res); + found = filters->data; + if (!found->enabled) +- return -1; ++ return g_steal_pointer (&res); + + /* Return the previous filter with matching target that is enabled */ + while ((filters = g_list_previous (filters))) { +@@ -164,18 +188,27 @@ wp_filters_api_get_filter_target (WpFiltersApi * self, const gchar *direction, + if ((prev->target == found->target || + (prev->target && found->target && + g_str_equal (prev->target, found->target))) && +- prev->enabled) +- return wp_proxy_get_bound_id (WP_PROXY (prev->node)); ++ prev->enabled) { ++ return wp_spa_json_new_object ( ++ "exclusive", "b", FALSE, ++ "bound_id", "i", wp_proxy_get_bound_id (WP_PROXY (prev->node)), ++ NULL); ++ } + } + + /* Find the target */ + if (found->target) { +- WpNode *node = g_hash_table_lookup (self->targets, found->target); +- if (node) +- return wp_proxy_get_bound_id (WP_PROXY (node)); ++ Target *t = g_hash_table_lookup (self->targets, found->target); ++ if (t) { ++ return wp_spa_json_new_object ( ++ "exclusive", "b", t->exclusive, ++ "bound_id", "i", ++ t->node ? (gint)wp_proxy_get_bound_id (WP_PROXY (t->node)) : -1, ++ NULL); ++ } + } + +- return -1; ++ return g_steal_pointer (&res); + } + + static gint +@@ -198,12 +231,17 @@ wp_filters_api_get_filter_from_target (WpFiltersApi * self, + /* Find the first target matching target_id */ + while (filters) { + Filter *f = (Filter *) filters->data; +- gint f_target_id = wp_filters_api_get_filter_target (self, direction, +- f->link_group); +- if (f_target_id == target_id && f->enabled) { +- target = f->target; +- found = TRUE; +- break; ++ if (f->enabled) { ++ gint f_target_id; ++ g_autoptr (WpSpaJson) f_target = wp_filters_api_get_filter_target (self, ++ direction, f->link_group); ++ if (f_target && wp_spa_json_is_object (f_target) && ++ wp_spa_json_object_get (f_target, "bound_id", "i", &f_target_id, NULL) ++ && f_target_id == target_id) { ++ target = f->target; ++ found = TRUE; ++ break; ++ } + } + + /* Advance */ +@@ -323,9 +361,11 @@ reevaluate_targets (WpFiltersApi *self) + for (; wp_iterator_next (it, &item); g_value_unset (&item)) { + WpSpaJson *j = g_value_get_boxed (&item); + g_autofree gchar *key = NULL; +- WpSpaJson *props; +- g_autoptr (WpNode) target = NULL; +- WpNode *curr_target; ++ WpSpaJson *value; ++ gboolean exclusive = FALSE; ++ g_autoptr (WpSpaJson) props = NULL; ++ g_autoptr (WpNode) target_node = NULL; ++ Target *curr_target; + + key = wp_spa_json_parse_string (j); + g_value_unset (&item); +@@ -334,27 +374,36 @@ reevaluate_targets (WpFiltersApi *self) + "Could not get valid key-value pairs from target object"); + break; + } +- props = g_value_get_boxed (&item); ++ value = g_value_get_boxed (&item); ++ if (!value || !wp_spa_json_is_object (value)) { ++ wp_warning_object (self, "Target value must be a JSON object"); ++ break; ++ } + +- /* Get current target */ +- curr_target = g_hash_table_lookup (self->targets, key); ++ /* Get exclusive */ ++ wp_spa_json_object_get (value, "exclusive", "b", &exclusive, NULL); + +- /* Find the node and insert it into the table if found */ +- target = find_target_node (self, props); +- if (target) { +- /* Check if the target changed */ +- if (curr_target) { +- guint32 target_bound_id = wp_proxy_get_bound_id (WP_PROXY (target)); +- guint32 curr_bound_id = wp_proxy_get_bound_id (WP_PROXY (curr_target)); +- if (target_bound_id != curr_bound_id) +- changed = TRUE; +- } ++ /* Get target node */ ++ wp_spa_json_object_get (value, "props", "J", &props, NULL); ++ if (props) ++ target_node = find_target_node (self, props); + +- g_hash_table_insert (self->targets, g_strdup (key), +- g_steal_pointer (&target)); +- } else { +- if (curr_target) ++ /* Update values if target exists in the table, otherwise add new target */ ++ curr_target = g_hash_table_lookup (self->targets, key); ++ if (curr_target) { ++ if (curr_target->exclusive != exclusive) { ++ curr_target->exclusive = exclusive; ++ changed = TRUE; ++ } ++ if (curr_target->node != target_node) { ++ g_clear_object (&curr_target->node); ++ curr_target->node = g_steal_pointer (&target_node); + changed = TRUE; ++ } ++ } else { ++ g_hash_table_insert (self->targets, g_strdup (key), ++ target_new (exclusive, target_node)); ++ changed = TRUE; + } + } + +@@ -790,7 +839,7 @@ wp_filters_api_enable (WpPlugin * plugin, WpTransition * transition) + g_autoptr (WpCore) core = wp_object_get_core (WP_OBJECT (self)); + + self->targets = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, +- g_object_unref); ++ (GDestroyNotify) target_free); + + /* Create the metadata object manager */ + self->metadata_om = wp_object_manager_new (); +@@ -845,7 +894,7 @@ wp_filters_api_class_init (WpFiltersApiClass * klass) + G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, + (GCallback) wp_filters_api_get_filter_target, + NULL, NULL, NULL, +- G_TYPE_INT, 2, G_TYPE_STRING, G_TYPE_STRING); ++ WP_TYPE_SPA_JSON, 2, G_TYPE_STRING, G_TYPE_STRING); + + signals[ACTION_GET_FILTER_FROM_TARGET] = g_signal_new_class_handler ( + "get-filter-from-target", G_TYPE_FROM_CLASS (klass), +diff --git a/src/config/policy.lua.d/30-filters-config.lua b/src/config/policy.lua.d/30-filters-config.lua +index 8d919fb7..bf4b8d75 100644 +--- a/src/config/policy.lua.d/30-filters-config.lua ++++ b/src/config/policy.lua.d/30-filters-config.lua +@@ -59,16 +59,22 @@ default_policy.filters_metadata = { + } + }, + +- -- The target node properties (any node properties can be defined) ++ -- The filter targets + ["targets"] = { + ["speakers"] = { +- ["media.class"] = "Audio/Sink", +- ["alsa.card_name"] = "acp5x", +- ["device.profile.description"] = "Speaker", ++ ["exclusive"] = false, ++ ["props"] = { ++ ["media.class"] = "Audio/Sink", ++ ["alsa.card_name"] = "acp5x", ++ ["device.profile.description"] = "Speaker", ++ } + }, + ["microphone"] = { +- ["media.class"] = "Audio/Source", +- ["alsa.card_name"] = "acp5x", ++ ["exclusive"] = false, ++ ["props"] = { ++ ["media.class"] = "Audio/Source", ++ ["alsa.card_name"] = "acp5x", ++ } + } + } + } +diff --git a/src/scripts/filters-metadata.lua b/src/scripts/filters-metadata.lua +index 04e3e6c6..49b4d0e8 100644 +--- a/src/scripts/filters-metadata.lua ++++ b/src/scripts/filters-metadata.lua +@@ -30,8 +30,11 @@ f_metadata:activate(Features.ALL, function (m, e) + + -- Set targets metadata + local targets = {} +- for name, props in pairs(config["targets"]) do +- targets[name] = Json.Object (props) ++ for name, value in pairs(config["targets"]) do ++ targets[name] = Json.Object { ++ exclusive = value.exclusive and true or false, ++ props = Json.Object (value.props) ++ } + end + local targets_json = Json.Object (targets) + m:set (0, "filters.configured.targets", "Spa:String:JSON", +diff --git a/src/scripts/policy-node.lua b/src/scripts/policy-node.lua +index c5a15ec6..035c3006 100644 +--- a/src/scripts/policy-node.lua ++++ b/src/scripts/policy-node.lua +@@ -719,31 +719,31 @@ function checkFollowDefault (si, si_target, has_node_defined_target) + end + + function findFilterTarget (si) +- local target_id = -1 +- + -- always return nil if filters API is not loaded + if self.filters_api == nil then +- return nil ++ return nil, false + end + + -- always return nil if this is not a filter + local node = si:get_associated_proxy ("node") + local link_group = node.properties["node.link-group"] + if link_group == nil then +- return nil ++ return nil, false + end + + -- get the filter target + local direction = getTargetDirection (si.properties) +- target_id = self.filters_api:call("get-filter-target", direction, link_group) +- if (target_id == -1) then +- return nil ++ local target_json = self.filters_api:call("get-filter-target", direction, link_group) ++ if target_json == nil then ++ return nil, false + end ++ target = target_json:parse() + +- Log.info (".. filter target ID is " .. tostring(target_id)) ++ Log.info (".. filter target ID is " .. tostring(target.bound_id) .. ++ " (" .. tostring (target.exclusive) .. ")") + return linkables_om:lookup { +- Constraint { "node.id", "=", tostring(target_id) } +- } ++ Constraint { "node.id", "=", tostring(target.bound_id) } ++ }, target.exclusive + end + + function handleLinkable (si) +@@ -783,7 +783,11 @@ function handleLinkable (si) + + -- find filter target (always returns nil for non filters) + if si_target == nil then +- si_target = findFilterTarget(si) ++ si_target, exclusive = findFilterTarget(si) ++ -- don't fallback if filter target is not found and exclusive is true ++ if si_target == nil and exclusive then ++ return ++ end + local can_passthrough = si_target and canPassthrough(si, si_target) + if si_target and si_must_passthrough and not can_passthrough then + si_target = nil +-- +2.42.0 + + +From 1bc1cc43aeaff5834972820f934e70db0167c8db Mon Sep 17 00:00:00 2001 +From: Julian Bouzas +Date: Mon, 6 Nov 2023 14:33:34 -0500 +Subject: [PATCH 09/12] policy-bluetooth: remove application names array and + use BT loopback filter + +Uses a BT loopback filter to know when an application wants to capture audio +from the current BT device. If the BT loopback filter is used, wireplumber will +automatically switch the device to HSP/HFP profile, otherwise the BT device +profile is always set to A2DP. +--- + src/config/policy.lua.d/10-default-policy.lua | 10 -- + src/config/policy.lua.d/30-filters-config.lua | 17 ++- + src/config/wireplumber.conf | 20 +++ + src/scripts/policy-bluetooth.lua | 139 ++++++++++-------- + 4 files changed, 110 insertions(+), 76 deletions(-) + +diff --git a/src/config/policy.lua.d/10-default-policy.lua b/src/config/policy.lua.d/10-default-policy.lua +index 412d47a8..7d4ea77c 100644 +--- a/src/config/policy.lua.d/10-default-policy.lua ++++ b/src/config/policy.lua.d/10-default-policy.lua +@@ -33,16 +33,6 @@ bluetooth_policy.policy = { + + -- Whether to use headset profile in the presence of an input stream. + ["media-role.use-headset-profile"] = true, +- +- -- Application names correspond to application.name in stream properties. +- -- Applications which do not set media.role but which should be considered +- -- for role based profile switching can be specified here. +- ["media-role.applications"] = { +- "Firefox", "Chromium input", "Google Chrome input", "Brave input", +- "Microsoft Edge input", "Vivaldi input", "ZOOM VoiceEngine", +- "Telegram Desktop", "telegram-desktop", "linphone", "Mumble", +- "WEBRTC VoiceEngine", "Skype", "Firefox Developer Edition", +- }, + } + + dsp_policy = {} +diff --git a/src/config/policy.lua.d/30-filters-config.lua b/src/config/policy.lua.d/30-filters-config.lua +index bf4b8d75..88429cdc 100644 +--- a/src/config/policy.lua.d/30-filters-config.lua ++++ b/src/config/policy.lua.d/30-filters-config.lua +@@ -33,11 +33,19 @@ default_policy.filters_metadata = { + }, + + -- Output filters (meant to be linked with Audio/Source device nodes) ++ { ++ ["stream-name"] = "virtual-bluetooth-source-in", -- loopback bluetooth capture ++ ["node-name"] = "virtual-bluetooth-source-out", -- loopback bluetooth source ++ ["direction"] = "output", -- can only be 'input' or 'output' ++ ["target"] = "bluetooth-source", -- if nil, the default node will be used as target ++ ["mode"] = "always", -- can be 'always', 'never', 'playback-only' or 'capture-only' ++ ["priority"] = 30, ++ }, + { + ["stream-name"] = "input.virtual-source", -- loopback capture + ["node-name"] = "output.virtual-source", -- loopback source + ["direction"] = "output", -- can only be 'input' or 'output' +- ["target"] = nil, -- if nil, the default node will be used as target ++ ["target"] = "microphone", -- if nil, the default node will be used as target + ["mode"] = "always", -- can be 'always', 'never', 'playback-only' or 'capture-only' + ["priority"] = 30, + }, +@@ -75,6 +83,13 @@ default_policy.filters_metadata = { + ["media.class"] = "Audio/Source", + ["alsa.card_name"] = "acp5x", + } ++ }, ++ ["bluetooth-source"] = { ++ ["exclusive"] = true, ++ ["props"] = { ++ ["media.class"] = "Audio/Source", ++ ["device.api"] = "bluez5" ++ } + } + } + } +diff --git a/src/config/wireplumber.conf b/src/config/wireplumber.conf +index 85d7be12..4c9dd568 100644 +--- a/src/config/wireplumber.conf ++++ b/src/config/wireplumber.conf +@@ -77,6 +77,26 @@ context.modules = [ + + # Provides factories to make SPA node objects. + { name = libpipewire-module-spa-node-factory } ++ ++ # Virtual Bluetooth Source ++ { ++ name = libpipewire-module-loopback ++ args = { ++ capture.props = { ++ node.name = virtual-bluetooth-source-in ++ node.description = "Virtual Bluetooth Source In" ++ audio.position = [ MONO ] ++ stream.dont-remix = true ++ node.passive = true ++ } ++ playback.props = { ++ node.name = virtual-bluetooth-source-out ++ node.description = "Virtual Bluetooth Source Out" ++ audio.position = [ MONO ] ++ media.class = Audio/Source ++ } ++ } ++ } + ] + + wireplumber.components = [ +diff --git a/src/scripts/policy-bluetooth.lua b/src/scripts/policy-bluetooth.lua +index f8f69a14..7aecb8b0 100644 +--- a/src/scripts/policy-bluetooth.lua ++++ b/src/scripts/policy-bluetooth.lua +@@ -26,7 +26,6 @@ + + local config = ... + local use_persistent_storage = config["use-persistent-storage"] or false +-local applications = {} + local use_headset_profile = config["media-role.use-headset-profile"] or false + local profile_restore_timeout_msec = 2000 + +@@ -41,17 +40,6 @@ local last_profiles = {} + local active_streams = {} + local previous_streams = {} + +-for _, value in ipairs(config["media-role.applications"] or {}) do +- applications[value] = true +-end +- +-metadata_om = ObjectManager { +- Interest { +- type = "metadata", +- Constraint { "metadata.name", "=", "default" }, +- } +-} +- + devices_om = ObjectManager { + Interest { + type = "device", +@@ -68,6 +56,16 @@ streams_om = ObjectManager { + } + } + ++nodes_om = ObjectManager { ++ Interest { ++ type = "node", ++ Constraint { "node.name", "=", "virtual-bluetooth-source-out", type = "pw-global" }, ++ Constraint { "media.class", "matches", "Audio/Source", type = "pw-global" }, ++ } ++} ++ ++links_om = ObjectManager { Interest { type = "link" } } ++ + local function parseParam(param_to_parse, id) + local param = param_to_parse:parse() + if param.pod_type == "Object" and param.object_id == id then +@@ -117,19 +115,6 @@ local function isSwitched(device) + return getSavedLastProfile(device) ~= nil + end + +-local function isBluez5AudioSink(sink_name) +- if sink_name and string.find(sink_name, "bluez_output.") ~= nil then +- return true +- end +- return false +-end +- +-local function isBluez5DefaultAudioSink() +- local metadata = metadata_om:lookup() +- local default_audio_sink = metadata:find(0, "default.audio.sink") +- return isBluez5AudioSink(default_audio_sink) +-end +- + local function findProfile(device, index, name) + for p in device:iterate_params("EnumProfile") do + local profile = parseParam(p, "EnumProfile") +@@ -228,7 +213,6 @@ local function switchProfile() + end + + local cur_profile_name = getCurrentProfile(device) +- saveLastProfile(device, cur_profile_name) + + _, index, name = findProfile(device, nil, cur_profile_name) + if hasProfileInputRoute(device, index) then +@@ -251,6 +235,8 @@ local function switchProfile() + index = index + } + ++ saveLastProfile(device, cur_profile_name) ++ + Log.info("Setting profile of '" + .. device.properties["device.description"] + .. "' from: " .. cur_profile_name +@@ -270,8 +256,6 @@ local function restoreProfile() + local profile_name = getSavedLastProfile(device) + local cur_profile_name = getCurrentProfile(device) + +- saveLastProfile(device, nil) +- + if cur_profile_name then + Log.info("Setting saved headset profile to: " .. cur_profile_name) + saveHeadsetProfile(device, cur_profile_name) +@@ -286,6 +270,8 @@ local function restoreProfile() + index = index + } + ++ saveLastProfile(device, nil) ++ + Log.info("Restoring profile of '" + .. device.properties["device.description"] + .. "' from: " .. cur_profile_name +@@ -312,18 +298,14 @@ local function triggerRestoreProfile() + end) + end + +--- We consider a Stream of interest to have role Communication if it has +--- media.role set to Communication in props or it is in our list of +--- applications as these applications do not set media.role correctly or at +--- all. +-local function checkStreamStatus(stream) +- local app_name = stream.properties["application.name"] +- local stream_role = stream.properties["media.role"] ++function parseBool(var) ++ return var and (var:lower() == "true" or var == "1") ++end + +- if not (stream_role == "Communication" or applications[app_name]) then +- return false +- end +- if not isBluez5DefaultAudioSink() then ++local function checkStreamStatus (stream) ++ -- Ignore monitor streams ++ local is_monitor = parseBool (stream.properties["stream.monitor"]) ++ if is_monitor then + return false + end + +@@ -334,7 +316,25 @@ local function checkStreamStatus(stream) + return false + end + +- return true ++ -- Make sure the virtual BT filter node exists ++ local node = nodes_om:lookup () ++ if node == nil then ++ return false ++ end ++ ++ -- Check if the stream is linked to the bluetooth loopback filter ++ local stream_id = tonumber(stream["bound-id"]) ++ local bt_out_id = tonumber(node["bound-id"]) ++ for l in links_om:iterate() do ++ local p = l.properties ++ local out_id = tonumber(p["link.output.node"]) ++ local in_id = tonumber(p["link.input.node"]) ++ if in_id == stream_id and out_id == bt_out_id then ++ return true ++ end ++ end ++ ++ return false + end + + local function handleStream(stream) +@@ -361,38 +361,47 @@ local function handleAllStreams() + end + end + +-streams_om:connect("object-added", function (_, stream) +- stream:connect("state-changed", function (stream, old_state, cur_state) +- handleStream(stream) +- end) +- stream:connect("params-changed", handleStream) +- handleStream(stream) +-end) +- +-streams_om:connect("object-removed", function (_, stream) +- active_streams[stream["bound-id"]] = nil +- previous_streams[stream["bound-id"]] = nil +- triggerRestoreProfile() +-end) +- + devices_om:connect("object-added", function (_, device) + -- Devices are unswitched initially +- if isSwitched(device) then +- saveLastProfile(device, nil) +- end ++ saveLastProfile(device, nil) + handleAllStreams() + end) + +-metadata_om:connect("object-added", function (_, metadata) +- metadata:connect("changed", function (m, subject, key, t, value) +- if (use_headset_profile and subject == 0 and key == "default.audio.sink" +- and isBluez5AudioSink(value)) then +- -- If bluez sink is set as default, rescan for active input streams +- handleAllStreams() ++links_om:connect("object-added", function (_, link) ++ if handleAllStreams then ++ local p = link.properties ++ for stream in streams_om:iterate { ++ Constraint { "media.class", "matches", "Stream/Input/Audio", type = "pw-global" }, ++ Constraint { "stream.monitor", "!", "true" } ++ } do ++ local in_id = tonumber(p["link.input.node"]) ++ local stream_id = tonumber(stream["bound-id"]) ++ if in_id == stream_id then ++ handleStream(stream) ++ end + end +- end) ++ end ++end) ++ ++links_om:connect("object-removed", function (_, link) ++ if handleAllStreams then ++ local p = link.properties ++ for stream in streams_om:iterate { ++ Constraint { "media.class", "matches", "Stream/Input/Audio", type = "pw-global" }, ++ Constraint { "stream.monitor", "!", "true" } ++ } do ++ local in_id = tonumber(p["link.input.node"]) ++ local stream_id = tonumber(stream["bound-id"]) ++ if in_id == stream_id then ++ active_streams[stream["bound-id"]] = nil ++ previous_streams[stream["bound-id"]] = nil ++ triggerRestoreProfile() ++ end ++ end ++ end + end) + +-metadata_om:activate() + devices_om:activate() + streams_om:activate() ++nodes_om:activate() ++links_om:activate() +-- +2.42.0 + + +From 0d21bae817420a077cb3177f4d434bd2095a0ede Mon Sep 17 00:00:00 2001 +From: Ethan Geller +Date: Mon, 13 Nov 2023 22:10:05 -0800 +Subject: [PATCH 10/12] fix speaker tunings for galileo + +--- + src/config/policy.lua.d/30-filters-config.lua | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/config/policy.lua.d/30-filters-config.lua b/src/config/policy.lua.d/30-filters-config.lua +index 88429cdc..a4b617d8 100644 +--- a/src/config/policy.lua.d/30-filters-config.lua ++++ b/src/config/policy.lua.d/30-filters-config.lua +@@ -73,7 +73,7 @@ default_policy.filters_metadata = { + ["exclusive"] = false, + ["props"] = { + ["media.class"] = "Audio/Sink", +- ["alsa.card_name"] = "acp5x", ++ ["alsa.card_name"] = "sof-nau8821-max", + ["device.profile.description"] = "Speaker", + } + }, +-- +2.42.0 + + +From 0d1869297e857f59dfc460d4476d4426a30e4de1 Mon Sep 17 00:00:00 2001 +From: Ethan Geller +Date: Wed, 15 Nov 2023 14:32:56 -0800 +Subject: [PATCH 11/12] Revert "policy-bluetooth: remove application names + array and use BT loopback filter" + +This reverts commit 5a760629b6e81268383f32406119fbb4ac3a42b0. +--- + src/config/policy.lua.d/10-default-policy.lua | 10 ++ + src/config/policy.lua.d/30-filters-config.lua | 17 +-- + src/config/wireplumber.conf | 20 --- + src/scripts/policy-bluetooth.lua | 139 ++++++++---------- + 4 files changed, 76 insertions(+), 110 deletions(-) + +diff --git a/src/config/policy.lua.d/10-default-policy.lua b/src/config/policy.lua.d/10-default-policy.lua +index 7d4ea77c..412d47a8 100644 +--- a/src/config/policy.lua.d/10-default-policy.lua ++++ b/src/config/policy.lua.d/10-default-policy.lua +@@ -33,6 +33,16 @@ bluetooth_policy.policy = { + + -- Whether to use headset profile in the presence of an input stream. + ["media-role.use-headset-profile"] = true, ++ ++ -- Application names correspond to application.name in stream properties. ++ -- Applications which do not set media.role but which should be considered ++ -- for role based profile switching can be specified here. ++ ["media-role.applications"] = { ++ "Firefox", "Chromium input", "Google Chrome input", "Brave input", ++ "Microsoft Edge input", "Vivaldi input", "ZOOM VoiceEngine", ++ "Telegram Desktop", "telegram-desktop", "linphone", "Mumble", ++ "WEBRTC VoiceEngine", "Skype", "Firefox Developer Edition", ++ }, + } + + dsp_policy = {} +diff --git a/src/config/policy.lua.d/30-filters-config.lua b/src/config/policy.lua.d/30-filters-config.lua +index a4b617d8..37badd80 100644 +--- a/src/config/policy.lua.d/30-filters-config.lua ++++ b/src/config/policy.lua.d/30-filters-config.lua +@@ -33,19 +33,11 @@ default_policy.filters_metadata = { + }, + + -- Output filters (meant to be linked with Audio/Source device nodes) +- { +- ["stream-name"] = "virtual-bluetooth-source-in", -- loopback bluetooth capture +- ["node-name"] = "virtual-bluetooth-source-out", -- loopback bluetooth source +- ["direction"] = "output", -- can only be 'input' or 'output' +- ["target"] = "bluetooth-source", -- if nil, the default node will be used as target +- ["mode"] = "always", -- can be 'always', 'never', 'playback-only' or 'capture-only' +- ["priority"] = 30, +- }, + { + ["stream-name"] = "input.virtual-source", -- loopback capture + ["node-name"] = "output.virtual-source", -- loopback source + ["direction"] = "output", -- can only be 'input' or 'output' +- ["target"] = "microphone", -- if nil, the default node will be used as target ++ ["target"] = nil, -- if nil, the default node will be used as target + ["mode"] = "always", -- can be 'always', 'never', 'playback-only' or 'capture-only' + ["priority"] = 30, + }, +@@ -83,13 +75,6 @@ default_policy.filters_metadata = { + ["media.class"] = "Audio/Source", + ["alsa.card_name"] = "acp5x", + } +- }, +- ["bluetooth-source"] = { +- ["exclusive"] = true, +- ["props"] = { +- ["media.class"] = "Audio/Source", +- ["device.api"] = "bluez5" +- } + } + } + } +diff --git a/src/config/wireplumber.conf b/src/config/wireplumber.conf +index 4c9dd568..85d7be12 100644 +--- a/src/config/wireplumber.conf ++++ b/src/config/wireplumber.conf +@@ -77,26 +77,6 @@ context.modules = [ + + # Provides factories to make SPA node objects. + { name = libpipewire-module-spa-node-factory } +- +- # Virtual Bluetooth Source +- { +- name = libpipewire-module-loopback +- args = { +- capture.props = { +- node.name = virtual-bluetooth-source-in +- node.description = "Virtual Bluetooth Source In" +- audio.position = [ MONO ] +- stream.dont-remix = true +- node.passive = true +- } +- playback.props = { +- node.name = virtual-bluetooth-source-out +- node.description = "Virtual Bluetooth Source Out" +- audio.position = [ MONO ] +- media.class = Audio/Source +- } +- } +- } + ] + + wireplumber.components = [ +diff --git a/src/scripts/policy-bluetooth.lua b/src/scripts/policy-bluetooth.lua +index 7aecb8b0..f8f69a14 100644 +--- a/src/scripts/policy-bluetooth.lua ++++ b/src/scripts/policy-bluetooth.lua +@@ -26,6 +26,7 @@ + + local config = ... + local use_persistent_storage = config["use-persistent-storage"] or false ++local applications = {} + local use_headset_profile = config["media-role.use-headset-profile"] or false + local profile_restore_timeout_msec = 2000 + +@@ -40,6 +41,17 @@ local last_profiles = {} + local active_streams = {} + local previous_streams = {} + ++for _, value in ipairs(config["media-role.applications"] or {}) do ++ applications[value] = true ++end ++ ++metadata_om = ObjectManager { ++ Interest { ++ type = "metadata", ++ Constraint { "metadata.name", "=", "default" }, ++ } ++} ++ + devices_om = ObjectManager { + Interest { + type = "device", +@@ -56,16 +68,6 @@ streams_om = ObjectManager { + } + } + +-nodes_om = ObjectManager { +- Interest { +- type = "node", +- Constraint { "node.name", "=", "virtual-bluetooth-source-out", type = "pw-global" }, +- Constraint { "media.class", "matches", "Audio/Source", type = "pw-global" }, +- } +-} +- +-links_om = ObjectManager { Interest { type = "link" } } +- + local function parseParam(param_to_parse, id) + local param = param_to_parse:parse() + if param.pod_type == "Object" and param.object_id == id then +@@ -115,6 +117,19 @@ local function isSwitched(device) + return getSavedLastProfile(device) ~= nil + end + ++local function isBluez5AudioSink(sink_name) ++ if sink_name and string.find(sink_name, "bluez_output.") ~= nil then ++ return true ++ end ++ return false ++end ++ ++local function isBluez5DefaultAudioSink() ++ local metadata = metadata_om:lookup() ++ local default_audio_sink = metadata:find(0, "default.audio.sink") ++ return isBluez5AudioSink(default_audio_sink) ++end ++ + local function findProfile(device, index, name) + for p in device:iterate_params("EnumProfile") do + local profile = parseParam(p, "EnumProfile") +@@ -213,6 +228,7 @@ local function switchProfile() + end + + local cur_profile_name = getCurrentProfile(device) ++ saveLastProfile(device, cur_profile_name) + + _, index, name = findProfile(device, nil, cur_profile_name) + if hasProfileInputRoute(device, index) then +@@ -235,8 +251,6 @@ local function switchProfile() + index = index + } + +- saveLastProfile(device, cur_profile_name) +- + Log.info("Setting profile of '" + .. device.properties["device.description"] + .. "' from: " .. cur_profile_name +@@ -256,6 +270,8 @@ local function restoreProfile() + local profile_name = getSavedLastProfile(device) + local cur_profile_name = getCurrentProfile(device) + ++ saveLastProfile(device, nil) ++ + if cur_profile_name then + Log.info("Setting saved headset profile to: " .. cur_profile_name) + saveHeadsetProfile(device, cur_profile_name) +@@ -270,8 +286,6 @@ local function restoreProfile() + index = index + } + +- saveLastProfile(device, nil) +- + Log.info("Restoring profile of '" + .. device.properties["device.description"] + .. "' from: " .. cur_profile_name +@@ -298,14 +312,18 @@ local function triggerRestoreProfile() + end) + end + +-function parseBool(var) +- return var and (var:lower() == "true" or var == "1") +-end ++-- We consider a Stream of interest to have role Communication if it has ++-- media.role set to Communication in props or it is in our list of ++-- applications as these applications do not set media.role correctly or at ++-- all. ++local function checkStreamStatus(stream) ++ local app_name = stream.properties["application.name"] ++ local stream_role = stream.properties["media.role"] + +-local function checkStreamStatus (stream) +- -- Ignore monitor streams +- local is_monitor = parseBool (stream.properties["stream.monitor"]) +- if is_monitor then ++ if not (stream_role == "Communication" or applications[app_name]) then ++ return false ++ end ++ if not isBluez5DefaultAudioSink() then + return false + end + +@@ -316,25 +334,7 @@ local function checkStreamStatus (stream) + return false + end + +- -- Make sure the virtual BT filter node exists +- local node = nodes_om:lookup () +- if node == nil then +- return false +- end +- +- -- Check if the stream is linked to the bluetooth loopback filter +- local stream_id = tonumber(stream["bound-id"]) +- local bt_out_id = tonumber(node["bound-id"]) +- for l in links_om:iterate() do +- local p = l.properties +- local out_id = tonumber(p["link.output.node"]) +- local in_id = tonumber(p["link.input.node"]) +- if in_id == stream_id and out_id == bt_out_id then +- return true +- end +- end +- +- return false ++ return true + end + + local function handleStream(stream) +@@ -361,47 +361,38 @@ local function handleAllStreams() + end + end + +-devices_om:connect("object-added", function (_, device) +- -- Devices are unswitched initially +- saveLastProfile(device, nil) +- handleAllStreams() ++streams_om:connect("object-added", function (_, stream) ++ stream:connect("state-changed", function (stream, old_state, cur_state) ++ handleStream(stream) ++ end) ++ stream:connect("params-changed", handleStream) ++ handleStream(stream) + end) + +-links_om:connect("object-added", function (_, link) +- if handleAllStreams then +- local p = link.properties +- for stream in streams_om:iterate { +- Constraint { "media.class", "matches", "Stream/Input/Audio", type = "pw-global" }, +- Constraint { "stream.monitor", "!", "true" } +- } do +- local in_id = tonumber(p["link.input.node"]) +- local stream_id = tonumber(stream["bound-id"]) +- if in_id == stream_id then +- handleStream(stream) +- end +- end ++streams_om:connect("object-removed", function (_, stream) ++ active_streams[stream["bound-id"]] = nil ++ previous_streams[stream["bound-id"]] = nil ++ triggerRestoreProfile() ++end) ++ ++devices_om:connect("object-added", function (_, device) ++ -- Devices are unswitched initially ++ if isSwitched(device) then ++ saveLastProfile(device, nil) + end ++ handleAllStreams() + end) + +-links_om:connect("object-removed", function (_, link) +- if handleAllStreams then +- local p = link.properties +- for stream in streams_om:iterate { +- Constraint { "media.class", "matches", "Stream/Input/Audio", type = "pw-global" }, +- Constraint { "stream.monitor", "!", "true" } +- } do +- local in_id = tonumber(p["link.input.node"]) +- local stream_id = tonumber(stream["bound-id"]) +- if in_id == stream_id then +- active_streams[stream["bound-id"]] = nil +- previous_streams[stream["bound-id"]] = nil +- triggerRestoreProfile() +- end ++metadata_om:connect("object-added", function (_, metadata) ++ metadata:connect("changed", function (m, subject, key, t, value) ++ if (use_headset_profile and subject == 0 and key == "default.audio.sink" ++ and isBluez5AudioSink(value)) then ++ -- If bluez sink is set as default, rescan for active input streams ++ handleAllStreams() + end +- end ++ end) + end) + ++metadata_om:activate() + devices_om:activate() + streams_om:activate() +-nodes_om:activate() +-links_om:activate() +-- +2.42.0 + + +From a9f4a5f6bbbbf88004be9bb19afcb3ca0e51dd3a Mon Sep 17 00:00:00 2001 +From: Ethan Geller +Date: Wed, 15 Nov 2023 14:35:00 -0800 +Subject: [PATCH 12/12] fix filter chain targeting for mic. + +--- + src/config/policy.lua.d/30-filters-config.lua | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/config/policy.lua.d/30-filters-config.lua b/src/config/policy.lua.d/30-filters-config.lua +index 37badd80..8e8725fc 100644 +--- a/src/config/policy.lua.d/30-filters-config.lua ++++ b/src/config/policy.lua.d/30-filters-config.lua +@@ -73,7 +73,7 @@ default_policy.filters_metadata = { + ["exclusive"] = false, + ["props"] = { + ["media.class"] = "Audio/Source", +- ["alsa.card_name"] = "acp5x", ++ ["alsa.card_name"] = "sof-nau8821-max", + } + } + } +-- +2.42.0 + diff --git a/spec_files/wireplumber/wireplumber.spec b/spec_files/wireplumber/wireplumber.spec index c7b30f446b..4bbbb0379f 100644 --- a/spec_files/wireplumber/wireplumber.spec +++ b/spec_files/wireplumber/wireplumber.spec @@ -1,5 +1,5 @@ Name: wireplumber -Version: 0.4.16 +Version: 0.4.17 Release: 1%{?dist}.bazzite.{{{ git_dir_version }}} Summary: A modular session/policy manager for PipeWire @@ -8,7 +8,7 @@ URL: https://pipewire.pages.freedesktop.org/wireplumber/ Source0: https://gitlab.freedesktop.org/pipewire/%{name}/-/archive/%{version}/%{name}-%{version}.tar.bz2 ## upstream patches -Patch0: steamdeck.patch +Patch0: valve.patch ## upstreamable patches @@ -80,6 +80,9 @@ managing PipeWire. # Create local config skeleton mkdir -p %{buildroot}%{_sysconfdir}/wireplumber/{bluetooth.lua.d,common,main.lua.d,policy.lua.d} +# Create missing empty system config dirs for other packages to drop files in +mkdir -p %{buildroot}%{_datadir}/wireplumber/wireplumber.conf.d + %find_lang %{name} %posttrans @@ -105,6 +108,7 @@ fi %dir %{_sysconfdir}/wireplumber/main.lua.d %dir %{_sysconfdir}/wireplumber/policy.lua.d %{_datadir}/wireplumber/ +%dir %{_datadir}/wireplumber/wireplumber.conf.d %{_datadir}/zsh/site-functions/_wpctl %{_userunitdir}/wireplumber.service %{_userunitdir}/wireplumber@.service @@ -123,6 +127,12 @@ fi %{_datadir}/gir-1.0/Wp-0.4.gir %changelog +* Mon Dec 4 2023 Wim Taymans - 0.4.17-1 +- wireplumber 0.4.17 + +* Mon Dec 4 2023 Hector Martin - 0.4.16-2 +- Create and own /usr/share/wireplumber/wireplumber.conf.d + * Thu Nov 23 2023 Wim Taymans - 0.4.16-1 - wireplumber 0.4.16 From 48c21b5ec37c287246509c44b9ed3ed9a56b5b24 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sun, 14 Jan 2024 00:33:50 -0800 Subject: [PATCH 21/48] chore: Update pipewire --- spec_files/pipewire/pipewire.spec | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/spec_files/pipewire/pipewire.spec b/spec_files/pipewire/pipewire.spec index d941963c56..9e231d3daf 100644 --- a/spec_files/pipewire/pipewire.spec +++ b/spec_files/pipewire/pipewire.spec @@ -1,6 +1,6 @@ %global majorversion 1 %global minorversion 0 -%global microversion 0 +%global microversion 1 %global apiversion 0.3 %global spaversion 0.2 @@ -818,6 +818,12 @@ systemctl --no-reload preset --global pipewire.socket >/dev/null 2>&1 || : %endif %changelog +* Thu Jan 11 2024 Wim Taymans - 1.0.1-1 +- Update version to 1.0.1 + +* Thu Dec 14 2023 Wim Taymans - 1.0.0-2 +- Add patch to avoid crash in deviceprovider. + * Sun Nov 26 2023 Wim Taymans - 1.0.0-1 - Update version to 1.0.0 - Disable ROC until updated in Fedora. From dfaca940240306f25c50a13e44f9878212cf677e Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sun, 14 Jan 2024 00:37:02 -0800 Subject: [PATCH 22/48] chore(readme): Fix deck hardware-specific section --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 98e29d7e30..f4a1e84709 100644 --- a/README.md +++ b/README.md @@ -124,7 +124,7 @@ Variant designed for usage as an alternative to SteamOS on the Steam Deck, and f - Built in support for display overclocking. For example, add `GAMESCOPE_OVERRIDE_REFRESH_RATE=40,70` to `/etc/environment`. - Ability to use X11 on the desktop if desired by editing `/etc/default/desktop-wayland`. - 32GB RAM mod your Steam Deck? Enjoy double the maximum VRAM amount, automatically applied. (Can you share your soldering skills?) -- Steam Deck hardware-specific services can be disabled by running `ujust disable-deck-services` in the terminal, useful for trying this image on other handhelds or for use on HTPCs. +- Steam Deck hardware-specific services can be disabled by running `ujust disable-bios-updates` and `ujust disable-firmware-updates` in the terminal. These are automatically disabled on non-Deck hardware, and on Decks with DeckHD displays or 32GB RAM mods. - More information can be found [here](https://universal-blue.discourse.group/docs?topic=37) on the Bazzite Steam Deck images. > [!WARNING] From 3666afbee2f9fa4fbcb111f8a745d4df3e3c4791 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sun, 14 Jan 2024 00:46:33 -0800 Subject: [PATCH 23/48] chore: Simplify wireplumber patch slightly --- spec_files/wireplumber/valve.patch | 127 ++++------------------------- 1 file changed, 18 insertions(+), 109 deletions(-) diff --git a/spec_files/wireplumber/valve.patch b/spec_files/wireplumber/valve.patch index 707d738ce7..f0e97df8ba 100644 --- a/spec_files/wireplumber/valve.patch +++ b/spec_files/wireplumber/valve.patch @@ -1,7 +1,7 @@ From 9911c8532eb9072d93eb39b02aa94699f0a735a1 Mon Sep 17 00:00:00 2001 From: Julian Bouzas Date: Tue, 21 Mar 2023 09:18:30 -0400 -Subject: [PATCH 01/12] m-default-nodes: remove echo-cancel configuration +Subject: [PATCH 01/11] m-default-nodes: remove echo-cancel configuration This will be possible to do with the new module-filters-api. --- @@ -194,7 +194,7 @@ index 19202914..91c4e189 100644 From a9b6f3bcb4c525c1e257873875feb6223fa6b660 Mon Sep 17 00:00:00 2001 From: Julian Bouzas Date: Fri, 17 Mar 2023 11:06:11 -0400 -Subject: [PATCH 02/12] modules: add new module-filters-api to enable smart +Subject: [PATCH 02/11] modules: add new module-filters-api to enable smart filter policy This module provides an API to link filter nodes using the logic configured in @@ -1520,7 +1520,7 @@ index 99ad8473..f249f343 100644 From bea7195a12ba1014f62e40f80c0f2e127a1aaa2e Mon Sep 17 00:00:00 2001 From: Julian Bouzas Date: Thu, 23 Mar 2023 09:26:45 -0400 -Subject: [PATCH 03/12] config: do not restore stream target by default +Subject: [PATCH 03/11] config: do not restore stream target by default --- src/config/main.lua.d/40-stream-defaults.lua | 2 +- @@ -1546,7 +1546,7 @@ index b869099b..d25aab0d 100644 From f4d88774670d561b3a2d37c0d6534b204cdcb14f Mon Sep 17 00:00:00 2001 From: Julian Bouzas Date: Thu, 23 Mar 2023 09:41:23 -0400 -Subject: [PATCH 04/12] config: enable smart filter policy +Subject: [PATCH 04/11] config: enable smart filter policy --- src/config/policy.lua.d/10-default-policy.lua | 2 +- @@ -1589,101 +1589,10 @@ index 76aecad0..8d919fb7 100644 2.42.0 -From c736d19638aed46fc3cb7381a75a5d699bb41299 Mon Sep 17 00:00:00 2001 -From: Ashok Sidipotu -Date: Wed, 12 Jul 2023 09:54:46 +0530 -Subject: [PATCH 05/12] policy-device-profile.lua: align style - ---- - src/scripts/policy-device-profile.lua | 26 +++++++++++++------------- - 1 file changed, 13 insertions(+), 13 deletions(-) - -diff --git a/src/scripts/policy-device-profile.lua b/src/scripts/policy-device-profile.lua -index af10f9b7..ddd86fee 100644 ---- a/src/scripts/policy-device-profile.lua -+++ b/src/scripts/policy-device-profile.lua -@@ -10,7 +10,7 @@ self.config = ... or {} - self.config.persistent = self.config.persistent or {} - self.config.priorities = self.config.priorities or {} - self.active_profiles = {} --self.default_profile_plugin = Plugin.find("default-profile") -+self.default_profile_plugin = Plugin.find ("default-profile") - - function createIntrestObjects(t) - for _, p in ipairs(t or {}) do -@@ -34,12 +34,12 @@ createIntrestObjects(self.config.persistent) - createIntrestObjects(self.config.priorities) - - -- Checks whether a device profile is persistent or not --function isProfilePersistent(device_props, profile_name) -- for _, p in ipairs(self.config.persistent or {}) do -+function isProfilePersistent (device_props, profile_name) -+ for _, p in ipairs (self.config.persistent or {}) do - if p.profile_names then -- for _, interest in ipairs(p.interests) do -- if interest:matches(device_props) then -- for _, pn in ipairs(p.profile_names) do -+ for _, interest in ipairs (p.interests) do -+ if interest:matches (device_props) then -+ for _, pn in ipairs (p.profile_names) do - if pn == profile_name then - return true - end -@@ -72,7 +72,7 @@ function setDeviceProfile (device, dev_id, dev_name, profile) - index = profile.index, - } - Log.info ("Setting profile " .. profile.name .. " on " .. dev_name) -- device:set_param("Profile", param) -+ device:set_param ("Profile", param) - end - - function findDefaultProfile (device) -@@ -85,8 +85,8 @@ function findDefaultProfile (device) - return nil - end - -- for p in device:iterate_params("EnumProfile") do -- local profile = parseParam(p, "EnumProfile") -+ for p in device:iterate_params ("EnumProfile") do -+ local profile = parseParam (p, "EnumProfile") - if profile.name == def_name then - return profile - end -@@ -189,7 +189,7 @@ function handleProfiles (device, new_device) - isProfilePersistent (device.properties, self.active_profiles[dev_id].name) and - def_profile ~= nil and - self.active_profiles[dev_id].name == def_profile.name -- then -+ then - local active_profile = self.active_profiles[dev_id].name - Log.info ("Device profile " .. active_profile .. " is persistent for " .. dev_name) - return -@@ -233,14 +233,14 @@ self.om = ObjectManager { - } - } - --self.om:connect("object-added", function (_, device) -+self.om:connect ("object-added", function(_, device) - device:connect ("params-changed", onDeviceParamsChanged) - handleProfiles (device, true) - end) - --self.om:connect("object-removed", function (_, device) -+self.om:connect ("object-removed", function(_, device) - local dev_id = device["bound-id"] - self.active_profiles[dev_id] = nil - end) - --self.om:activate() -+self.om:activate () --- -2.42.0 - - -From 8d805bd8be1b542a3880a95b5182cf8bc50e765d Mon Sep 17 00:00:00 2001 +From 30d26697a83ce11c4a2343c0ad4ddb113e64f72b Mon Sep 17 00:00:00 2001 From: Ashok Sidipotu Date: Wed, 12 Jul 2023 10:17:37 +0530 -Subject: [PATCH 06/12] policy-device-profile.lua: introduce user profile +Subject: [PATCH 05/11] policy-device-profile.lua: introduce user profile priority list --- @@ -1719,10 +1628,10 @@ index 91c4e189..b87eec51 100644 2.42.0 -From 08f90a7ace0a059280ec4c974d0a9c1a19a7589a Mon Sep 17 00:00:00 2001 +From 4c6762c41a0d8f6298e2f35cea42a86ea3ef8ff9 Mon Sep 17 00:00:00 2001 From: Julian Bouzas Date: Fri, 3 Nov 2023 09:24:59 -0400 -Subject: [PATCH 07/12] m-filters-api: remove get-default-filter API +Subject: [PATCH 06/11] m-filters-api: remove get-default-filter API This was redundant as you can get the default filter by calling 'get-filter-from-target' using the default target. The policy logic @@ -1826,10 +1735,10 @@ index f249f343..c5a15ec6 100644 2.42.0 -From c36b75303296d206041c0de856e51267aa56b1be Mon Sep 17 00:00:00 2001 +From 1acb97e5606dfd842a71c9a2de520ee665f17fd0 Mon Sep 17 00:00:00 2001 From: Julian Bouzas Date: Fri, 3 Nov 2023 11:44:57 -0400 -Subject: [PATCH 08/12] m-filters-api: add support for exclusive targets +Subject: [PATCH 07/11] m-filters-api: add support for exclusive targets Filters whose target are exclusive won't be linked to the default device if the target does not exist. @@ -2174,10 +2083,10 @@ index c5a15ec6..035c3006 100644 2.42.0 -From 1bc1cc43aeaff5834972820f934e70db0167c8db Mon Sep 17 00:00:00 2001 +From 0010f03fafa2841f7618dad4b609466b6dad11c7 Mon Sep 17 00:00:00 2001 From: Julian Bouzas Date: Mon, 6 Nov 2023 14:33:34 -0500 -Subject: [PATCH 09/12] policy-bluetooth: remove application names array and +Subject: [PATCH 08/11] policy-bluetooth: remove application names array and use BT loopback filter Uses a BT loopback filter to know when an application wants to capture audio @@ -2514,10 +2423,10 @@ index f8f69a14..7aecb8b0 100644 2.42.0 -From 0d21bae817420a077cb3177f4d434bd2095a0ede Mon Sep 17 00:00:00 2001 +From ae7cde6dd7c7660da5bbd07f27fe18a624c8c67d Mon Sep 17 00:00:00 2001 From: Ethan Geller Date: Mon, 13 Nov 2023 22:10:05 -0800 -Subject: [PATCH 10/12] fix speaker tunings for galileo +Subject: [PATCH 09/11] fix speaker tunings for galileo --- src/config/policy.lua.d/30-filters-config.lua | 2 +- @@ -2540,10 +2449,10 @@ index 88429cdc..a4b617d8 100644 2.42.0 -From 0d1869297e857f59dfc460d4476d4426a30e4de1 Mon Sep 17 00:00:00 2001 +From 0ed6dc783bcb4033fb82c0f9b3e2c26977c3e19e Mon Sep 17 00:00:00 2001 From: Ethan Geller Date: Wed, 15 Nov 2023 14:32:56 -0800 -Subject: [PATCH 11/12] Revert "policy-bluetooth: remove application names +Subject: [PATCH 10/11] Revert "policy-bluetooth: remove application names array and use BT loopback filter" This reverts commit 5a760629b6e81268383f32406119fbb4ac3a42b0. @@ -2877,10 +2786,10 @@ index 7aecb8b0..f8f69a14 100644 2.42.0 -From a9f4a5f6bbbbf88004be9bb19afcb3ca0e51dd3a Mon Sep 17 00:00:00 2001 +From 043390080937c05df74a48eaff5a9713ff0ea12f Mon Sep 17 00:00:00 2001 From: Ethan Geller Date: Wed, 15 Nov 2023 14:35:00 -0800 -Subject: [PATCH 12/12] fix filter chain targeting for mic. +Subject: [PATCH 11/11] fix filter chain targeting for mic. --- src/config/policy.lua.d/30-filters-config.lua | 2 +- From 67f9a583e2f79d17aafd6b9acbcbc3c1d7002004 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sun, 14 Jan 2024 12:07:07 -0800 Subject: [PATCH 24/48] chore: Remove unknown BW_PERIOD patch, investigating audio popping. --- spec_files/pipewire/pipewire.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec_files/pipewire/pipewire.spec b/spec_files/pipewire/pipewire.spec index 9e231d3daf..bb931bc013 100644 --- a/spec_files/pipewire/pipewire.spec +++ b/spec_files/pipewire/pipewire.spec @@ -81,7 +81,7 @@ Source1: pipewire.sysusers # Holo: TODO: Bug reference Patch0: bc435841c141ad38768b6cb1a7ad45e8bb13c7d2.patch # Holo: TODO: Bug reference -Patch1: acf7c0af0bf31b937c41e916a73c67ae0a253632.patch +#Patch1: acf7c0af0bf31b937c41e916a73c67ae0a253632.patch # Holo: upstream MR 1792 Patch2: 0001-Bluez5-backend-native-HSP-AG-release-SCO-link-on-AT-.patch From d164f79839472b1d6c951ef02ecf0c2ee43e8338 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sun, 14 Jan 2024 12:42:55 -0800 Subject: [PATCH 25/48] Revert "feat: Include nerd-fonts, this will automatically be used as a fallback for the default Fira Code font when an unknown symbol is requested" This reverts commit 6073c849b98b4e049e8c97b941850dcdcdae48b8. --- Containerfile | 3 --- 1 file changed, 3 deletions(-) diff --git a/Containerfile b/Containerfile index 0bad73b242..5537848267 100644 --- a/Containerfile +++ b/Containerfile @@ -38,7 +38,6 @@ RUN wget https://copr.fedorainfracloud.org/coprs/kylegospo/bazzite/repo/fedora-$ wget https://copr.fedorainfracloud.org/coprs/kylegospo/VTFLib/repo/fedora-$(rpm -E %fedora)/kylegospo-VTFLib-fedora-$(rpm -E %fedora).repo -O /etc/yum.repos.d/_copr_kylegospo-VTFLib.repo && \ wget https://copr.fedorainfracloud.org/coprs/kylegospo/webapp-manager/repo/fedora-$(rpm -E %fedora)/kylegospo-webapp-manager-fedora-$(rpm -E %fedora).repo -O /etc/yum.repos.d/_copr_kylegospo-webapp-manager.repo && \ wget https://copr.fedorainfracloud.org/coprs/hhd-dev/hhd/repo/fedora-$(rpm -E %fedora)/hhd-dev-hhd-fedora-$(rpm -E %fedora).repo -O /etc/yum.repos.d/_copr_hhd-dev-hhd.repo && \ - wget https://copr.fedorainfracloud.org/coprs/che/nerd-fonts/repo/fedora-$(rpm -E %fedora)/che-nerd-fonts-fedora-$(rpm -E %fedora).repo -O /etc/yum.repos.d/_copr_che-nerd-fonts.repo && \ wget https://pkgs.tailscale.com/stable/fedora/tailscale.repo -O /etc/yum.repos.d/tailscale.repo && \ sed -i 's@gpgcheck=1@gpgcheck=0@g' /etc/yum.repos.d/tailscale.repo @@ -223,7 +222,6 @@ RUN rpm-ostree install \ google-noto-sans-cjk-fonts \ lato-fonts \ fira-code-fonts \ - nerd-fonts \ glow \ gum \ setools \ @@ -431,7 +429,6 @@ RUN /tmp/image-info.sh && \ sed -i 's@enabled=1@enabled=0@g' /etc/yum.repos.d/_copr_kylegospo-VTFLib.repo && \ sed -i 's@enabled=1@enabled=0@g' /etc/yum.repos.d/_copr_kylegospo-webapp-manager.repo && \ sed -i 's@enabled=1@enabled=0@g' /etc/yum.repos.d/_copr_hhd-dev-hhd.repo && \ - sed -i 's@enabled=1@enabled=0@g' /etc/yum.repos.d/_copr_che-nerd-fonts.repo && \ sed -i 's@enabled=1@enabled=0@g' /etc/yum.repos.d/tailscale.repo && \ sed -i 's@enabled=1@enabled=0@g' /etc/yum.repos.d/charm.repo && \ sed -i 's/#DefaultTimeoutStopSec.*/DefaultTimeoutStopSec=15s/' /etc/systemd/user.conf && \ From 2c18133e2ad158d33ffda328a38ec5623f2ef1c7 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sun, 14 Jan 2024 13:21:31 -0800 Subject: [PATCH 26/48] fix: Correct restore-original-terminal command on KDE --- .../deck/shared/usr/share/ublue-os/just/70-bazzite.just | 2 +- .../desktop/shared/usr/share/ublue-os/just/70-bazzite.just | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/system_files/deck/shared/usr/share/ublue-os/just/70-bazzite.just b/system_files/deck/shared/usr/share/ublue-os/just/70-bazzite.just index 310fd38f39..e1207c2821 100644 --- a/system_files/deck/shared/usr/share/ublue-os/just/70-bazzite.just +++ b/system_files/deck/shared/usr/share/ublue-os/just/70-bazzite.just @@ -31,7 +31,7 @@ restore-original-terminal: sed -i '/NoDisplay=true/d' $HOME/.local/share/applications/org.gnome.Terminal.desktop else rm -f $HOME/.local/share/applications/org.kde.konsole.desktop - cp /usr/share/applications/org.gnome.Terminal.desktop $HOME/.local/share/applications/org.kde.konsole.desktop + cp /usr/share/applications/org.kde.konsole.desktop $HOME/.local/share/applications/org.kde.konsole.desktop sed -i '/NoDisplay=true/d' $HOME/.local/share/applications/org.kde.konsole.desktop fi diff --git a/system_files/desktop/shared/usr/share/ublue-os/just/70-bazzite.just b/system_files/desktop/shared/usr/share/ublue-os/just/70-bazzite.just index 0a13112f71..2e4ca1eeeb 100644 --- a/system_files/desktop/shared/usr/share/ublue-os/just/70-bazzite.just +++ b/system_files/desktop/shared/usr/share/ublue-os/just/70-bazzite.just @@ -17,7 +17,7 @@ restore-original-terminal: sed -i '/NoDisplay=true/d' $HOME/.local/share/applications/org.gnome.Terminal.desktop else rm -f $HOME/.local/share/applications/org.kde.konsole.desktop - cp /usr/share/applications/org.gnome.Terminal.desktop $HOME/.local/share/applications/org.kde.konsole.desktop + cp /usr/share/applications/org.kde.konsole.desktop $HOME/.local/share/applications/org.kde.konsole.desktop sed -i '/NoDisplay=true/d' $HOME/.local/share/applications/org.kde.konsole.desktop fi From 28f3f4f79fa4593b360efb596f8a0f1a27e9522e Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sun, 14 Jan 2024 14:43:57 -0800 Subject: [PATCH 27/48] chore: Rename to 80-bazzite.just --- Containerfile | 2 +- .../share/ublue-os/just/{70-bazzite.just => 80-bazzite.just} | 0 .../share/ublue-os/just/{70-bazzite.just => 80-bazzite.just} | 0 3 files changed, 1 insertion(+), 1 deletion(-) rename system_files/deck/shared/usr/share/ublue-os/just/{70-bazzite.just => 80-bazzite.just} (100%) rename system_files/desktop/shared/usr/share/ublue-os/just/{70-bazzite.just => 80-bazzite.just} (100%) diff --git a/Containerfile b/Containerfile index 5537848267..6820bfab5f 100644 --- a/Containerfile +++ b/Containerfile @@ -406,7 +406,7 @@ RUN /tmp/image-info.sh && \ sed -i 's@Exec=discover-overlay@Exec=/usr/bin/bazzite-discover-overlay@g' /usr/etc/xdg/autostart/discover_overlay.desktop && \ sed -i 's@\[Desktop Entry\]@\[Desktop Entry\]\nNoDisplay=true@g' /usr/share/applications/discover_overlay.desktop && \ cp "/usr/share/ublue-os/firstboot/yafti.yml" "/etc/yafti.yml" && \ - echo "import \"/usr/share/ublue-os/just/70-bazzite.just\"" >> "/usr/share/ublue-os/justfile" && \ + echo "import \"/usr/share/ublue-os/just/80-bazzite.just\"" >> /usr/share/ublue-os/justfile && \ pip install --prefix=/usr yafti && \ pip install --prefix=/usr hyfetch && \ sed -i 's/stage/none/g' /etc/rpm-ostreed.conf && \ diff --git a/system_files/deck/shared/usr/share/ublue-os/just/70-bazzite.just b/system_files/deck/shared/usr/share/ublue-os/just/80-bazzite.just similarity index 100% rename from system_files/deck/shared/usr/share/ublue-os/just/70-bazzite.just rename to system_files/deck/shared/usr/share/ublue-os/just/80-bazzite.just diff --git a/system_files/desktop/shared/usr/share/ublue-os/just/70-bazzite.just b/system_files/desktop/shared/usr/share/ublue-os/just/80-bazzite.just similarity index 100% rename from system_files/desktop/shared/usr/share/ublue-os/just/70-bazzite.just rename to system_files/desktop/shared/usr/share/ublue-os/just/80-bazzite.just From 65decdaeb6237e289553284b9b4a27fbef5acb24 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sun, 14 Jan 2024 15:14:49 -0800 Subject: [PATCH 28/48] chore: Remove now unneeded pipewire change --- .../share/pipewire/pipewire-pulse.conf.d/wine.conf | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 system_files/desktop/shared/usr/share/pipewire/pipewire-pulse.conf.d/wine.conf diff --git a/system_files/desktop/shared/usr/share/pipewire/pipewire-pulse.conf.d/wine.conf b/system_files/desktop/shared/usr/share/pipewire/pipewire-pulse.conf.d/wine.conf deleted file mode 100644 index c1a3018089..0000000000 --- a/system_files/desktop/shared/usr/share/pipewire/pipewire-pulse.conf.d/wine.conf +++ /dev/null @@ -1,14 +0,0 @@ -pulse.rules = [ - { - matches = [ - { application.process.binary = "wine64-preloader" } - { application.process.binary = "wine-preloader" } - ] - actions = { - update-props = { - pulse.min.req = 128/48000 - pulse.min.quantum = 128/48000 - } - } - } -] From db7f08e03d0a9c19a14566db28753de0bbb91d20 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sun, 14 Jan 2024 15:59:51 -0800 Subject: [PATCH 29/48] chore(readme): Add star history chart --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 2466562fe8..a27ea1b66a 100644 --- a/README.md +++ b/README.md @@ -302,6 +302,8 @@ sudo mokutil --import secure_boot_key.der ![Bazzite](https://repobeats.axiom.co/api/embed/86b500d79c613015ad16f56df76c8e13f3fd98ae.svg "Repobeats analytics image") +[![Star History Chart](https://api.star-history.com/svg?repos=ublue-os/bazzite&type=Date)](https://star-history.com/#ublue-os/bazzite&Date) + From afe1bbe0b574645e89ffb4550ac8c05e5d54c751 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sun, 14 Jan 2024 16:01:13 -0800 Subject: [PATCH 30/48] chore(readme): Support dark theme --- README.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a27ea1b66a..d6bf7830e7 100644 --- a/README.md +++ b/README.md @@ -302,7 +302,15 @@ sudo mokutil --import secure_boot_key.der ![Bazzite](https://repobeats.axiom.co/api/embed/86b500d79c613015ad16f56df76c8e13f3fd98ae.svg "Repobeats analytics image") -[![Star History Chart](https://api.star-history.com/svg?repos=ublue-os/bazzite&type=Date)](https://star-history.com/#ublue-os/bazzite&Date) +## Star History + + + + + + Star History Chart + +
From 6a588a0f41ea54ffcd86f1fb10bb0bf758a0df70 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sun, 14 Jan 2024 16:03:08 -0800 Subject: [PATCH 31/48] chore(readme): Adjust heading sizes --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d6bf7830e7..155180e588 100644 --- a/README.md +++ b/README.md @@ -302,7 +302,7 @@ sudo mokutil --import secure_boot_key.der ![Bazzite](https://repobeats.axiom.co/api/embed/86b500d79c613015ad16f56df76c8e13f3fd98ae.svg "Repobeats analytics image") -## Star History +#### Star History @@ -312,6 +312,7 @@ sudo mokutil --import secure_boot_key.der +#### Collaborators & Contributors
From 0b3eb4682dc2daad2bb447cffab1d8673451081f Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sun, 14 Jan 2024 17:07:48 -0800 Subject: [PATCH 32/48] fix: Remove rundir change from wireplumber, this will be implemented another way --- spec_files/wireplumber/wireplumber.spec | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/spec_files/wireplumber/wireplumber.spec b/spec_files/wireplumber/wireplumber.spec index 4bbbb0379f..e426426d87 100644 --- a/spec_files/wireplumber/wireplumber.spec +++ b/spec_files/wireplumber/wireplumber.spec @@ -70,8 +70,7 @@ managing PipeWire. -Dsystemd=enabled \ -Dsystemd-user-service=true \ -Dintrospection=enabled \ - -Delogind=disabled \ - --sysconfdir=%{_rundir} + -Delogind=disabled %meson_build %install From 71b615fc248fc5d818a833b8798ed68e2cb5729c Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sun, 14 Jan 2024 18:20:35 -0800 Subject: [PATCH 33/48] chore: Add patch to change behavior of steamdeck-dsp wireplumber config script --- spec_files/steamdeck-dsp/bazzite.patch | 57 +++++++++++++++++++++ spec_files/steamdeck-dsp/steamdeck-dsp.spec | 1 + 2 files changed, 58 insertions(+) create mode 100644 spec_files/steamdeck-dsp/bazzite.patch diff --git a/spec_files/steamdeck-dsp/bazzite.patch b/spec_files/steamdeck-dsp/bazzite.patch new file mode 100644 index 0000000000..c124afbcda --- /dev/null +++ b/spec_files/steamdeck-dsp/bazzite.patch @@ -0,0 +1,57 @@ +--- a/wireplumber/hardware-profiles/wireplumber-hwconfig ++++ b/wireplumber/hardware-profiles/wireplumber-hwconfig +@@ -45,39 +45,23 @@ + install_hwprofile () + { + local -r prpath="$1" +- local -r runconf=/run/wireplumber ++ local -r confdir=/usr/share/wireplumber + local confd + local conffile + +- echo "Installing wireplumber hardware profile from '$prpath' in $runconf" +- +- rm -rf $runconf ++ echo "Installing wireplumber hardware profile from '$prpath' in $confdir" + + for confd in "${confdirs[@]}" + do + if [ -d "$prpath"/"$confd" ] + then +- mkdir -p $runconf/"$confd" ++ mkdir -p $confdir/"$confd" + for conffile in "$prpath"/"$confd"/*.lua + do +- cp -av $conffile $runconf/"$confd" ++ /usr/bin/cp -avf $conffile $confdir/"$confd" + done + fi + done +- +- cat - < $runconf/README +-This configuration was: +- +- - installed in $runconf +- - by $0 +- - from $prpath +- +-It will be regenerated every time the system restarts. +- +-To alter it permanently either: +- - edit $prpath +- - override in \$XDG_CONFIG_DIR/wireplumber/ +-EOF + } + + unidentified () +--- a/wireplumber/systemd/system/multi-user.target.wants/wireplumber-sysconf.service ++++ b/wireplumber/systemd/system/multi-user.target.wants/wireplumber-sysconf.service +@@ -11,7 +11,7 @@ + Description=Hardware Specific Wireplumber Configuration + After=multi-user.target + Requisite=multi-user.target +-ConditionPathIsDirectory=/run ++Requires=wireplumber-workaround.service + Before=shutdown.target + + [Service] diff --git a/spec_files/steamdeck-dsp/steamdeck-dsp.spec b/spec_files/steamdeck-dsp/steamdeck-dsp.spec index 134e667c47..526506c032 100644 --- a/spec_files/steamdeck-dsp/steamdeck-dsp.spec +++ b/spec_files/steamdeck-dsp/steamdeck-dsp.spec @@ -7,6 +7,7 @@ URL: https://github.com/ublue-os/bazzite Source: https://gitlab.com/evlaV/valve-hardware-audio-processing/-/archive/main/valve-hardware-audio-processing-main.tar.gz Patch0: fedora.patch +Patch1: bazzite.patch Requires: pipewire-module-filter-chain-lv2 Requires: ladspa-noise-suppression-for-voice From 8e7ce02146b216f4b077117e42e178a33b8d9ed6 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sun, 14 Jan 2024 18:31:40 -0800 Subject: [PATCH 34/48] chore(readme): Temporarily remove contributor list --- .github/workflows/contributors.yml | 25 ---- README.md | 193 ----------------------------- 2 files changed, 218 deletions(-) delete mode 100644 .github/workflows/contributors.yml diff --git a/.github/workflows/contributors.yml b/.github/workflows/contributors.yml deleted file mode 100644 index 2dd3e154c9..0000000000 --- a/.github/workflows/contributors.yml +++ /dev/null @@ -1,25 +0,0 @@ -name: Update Contributors - -on: - schedule: - - cron: '0 0 * * *' # Every day at midnight - push: - branches: - - main - -jobs: - update: - runs-on: ubuntu-latest - permissions: - contents: write - pull-requests: write - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Contribute List - uses: akhilmhdh/contributors-readme-action@v2.3.6 - with: - use_username: true - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/README.md b/README.md index 155180e588..abcda3ea54 100644 --- a/README.md +++ b/README.md @@ -312,199 +312,6 @@ sudo mokutil --import secure_boot_key.der -#### Collaborators & Contributors - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - KyleGospo -
- KyleGospo -
-
- - EyeCantCU -
- EyeCantCU -
-
- - nicknamenamenick -
- nicknamenamenick -
-
- - HikariKnight -
- HikariKnight -
-
- - castrojo -
- castrojo -
-
- - RodoMa92 -
- RodoMa92 -
-
- - dnkmmr69420 -
- dnkmmr69420 -
-
- - fiftydinar -
- fiftydinar -
-
- - Gecked-Deck -
- Gecked-Deck -
-
- - tulilirockz -
- tulilirockz -
-
- - sekalengrengginang -
- sekalengrengginang -
-
- - Zindswini -
- Zindswini -
-
- - CharlieBros -
- CharlieBros -
-
- - noelmiller -
- noelmiller -
-
- - drokath -
- drokath -
-
- - bobslept -
- bobslept -
-
- - ArtikusHG -
- ArtikusHG -
-
- - duhow -
- duhow -
-
- - badlydrawnface -
- badlydrawnface -
-
- - eltociear -
- eltociear -
-
- - ashylily -
- ashylily -
-
- - gerblesh -
- gerblesh -
-
- - h7io -
- h7io -
-
- - karajan9 -
- karajan9 -
-
- - leechgrrl -
- leechgrrl -
-
- - zelikos -
- zelikos -
-
- - ## Special Thanks Bazzite is a community effort and wouldn't exist without everyone's support. Below are some of the people who've helped us along the way: From 660f064a04d49161900cff8bbe76cbb6f3e44984 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sun, 14 Jan 2024 19:59:01 -0800 Subject: [PATCH 35/48] chore: Update patch for steamdeck-dsp --- spec_files/steamdeck-dsp/bazzite.patch | 4 ++-- spec_files/steamdeck-dsp/steamdeck-dsp.spec | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/spec_files/steamdeck-dsp/bazzite.patch b/spec_files/steamdeck-dsp/bazzite.patch index c124afbcda..be71df44a2 100644 --- a/spec_files/steamdeck-dsp/bazzite.patch +++ b/spec_files/steamdeck-dsp/bazzite.patch @@ -44,8 +44,8 @@ } unidentified () ---- a/wireplumber/systemd/system/multi-user.target.wants/wireplumber-sysconf.service -+++ b/wireplumber/systemd/system/multi-user.target.wants/wireplumber-sysconf.service +--- a/wireplumber/systemd/system/wireplumber-sysconf.service ++++ b/wireplumber/systemd/system/wireplumber-sysconf.service @@ -11,7 +11,7 @@ Description=Hardware Specific Wireplumber Configuration After=multi-user.target diff --git a/spec_files/steamdeck-dsp/steamdeck-dsp.spec b/spec_files/steamdeck-dsp/steamdeck-dsp.spec index 526506c032..2fccf73e12 100644 --- a/spec_files/steamdeck-dsp/steamdeck-dsp.spec +++ b/spec_files/steamdeck-dsp/steamdeck-dsp.spec @@ -30,8 +30,7 @@ Steamdeck Audio Processing %define debug_package %{nil} %prep -%setup -n valve-hardware-audio-processing-main -%patch 0 -p1 +%autosetup -n valve-hardware-audio-processing-main -p1 %build %make_build FAUSTINC="/usr/include/faust" FAUSTLIB="/usr/share/faust" From b0bdb90e71de9a6894fe5c72c12dc46747d5a67d Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sun, 14 Jan 2024 17:57:12 -0800 Subject: [PATCH 36/48] feat: Make wireplumber write-able for later use with steamdeck-dsp --- Containerfile | 1 + .../system/wireplumber-workaround.service | 17 +++++++++++++++++ .../lib/tmpfiles.d/wireplumber-workaround.conf | 1 + 3 files changed, 19 insertions(+) create mode 100644 system_files/deck/shared/usr/lib/systemd/system/wireplumber-workaround.service create mode 100644 system_files/deck/shared/usr/lib/tmpfiles.d/wireplumber-workaround.conf diff --git a/Containerfile b/Containerfile index 6820bfab5f..653bd09cdd 100644 --- a/Containerfile +++ b/Containerfile @@ -623,6 +623,7 @@ RUN /tmp/image-info.sh && \ systemctl disable gdm.service && \ systemctl enable sddm.service \ ; fi && \ + systemctl enable wireplumber-workaround.service && \ systemctl enable bazzite-autologin.service && \ systemctl enable wireplumber-sysconf.service && \ systemctl enable btrfs-dedup@run-media-mmcblk0p1.timer && \ diff --git a/system_files/deck/shared/usr/lib/systemd/system/wireplumber-workaround.service b/system_files/deck/shared/usr/lib/systemd/system/wireplumber-workaround.service new file mode 100644 index 0000000000..10694c9219 --- /dev/null +++ b/system_files/deck/shared/usr/lib/systemd/system/wireplumber-workaround.service @@ -0,0 +1,17 @@ +[Unit] +Description=Workaround wireplumber needing to be written into by steamdeck-dsp +ConditionPathExists=/usr/share/wireplumber +After=local-fs.target + +[Service] +Type=oneshot +# Copy if it doesn't exist +ExecStartPre=/usr/bin/bash -c "[ -d /usr/local/share/.wireplumber ] || /usr/bin/cp -r /usr/share/wireplumber /usr/local/share/.wireplumber" +ExecStart=/usr/bin/mount --bind /usr/local/share/.wireplumber /usr/share/wireplumber +# Clean-up after ourselves +ExecStop=/usr/bin/umount /usr/share/wireplumber +ExecStop=/usr/bin/rm -r /usr/local/share/.wireplumber +RemainAfterExit=yes + +[Install] +WantedBy=multi-user.target diff --git a/system_files/deck/shared/usr/lib/tmpfiles.d/wireplumber-workaround.conf b/system_files/deck/shared/usr/lib/tmpfiles.d/wireplumber-workaround.conf new file mode 100644 index 0000000000..7ed882569f --- /dev/null +++ b/system_files/deck/shared/usr/lib/tmpfiles.d/wireplumber-workaround.conf @@ -0,0 +1 @@ +C /usr/local/share/.wireplumber - - - - /usr/share/wireplumber From 779951d7b10ac8394a0e038117bcf56cb9db9c35 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sun, 14 Jan 2024 21:53:29 -0800 Subject: [PATCH 37/48] feat(gnome): Show link to Pods in Bazzite Menu --- .../silverblue/usr/etc/dconf/db/local.d/02-bazzite-global | 1 + 1 file changed, 1 insertion(+) diff --git a/system_files/desktop/silverblue/usr/etc/dconf/db/local.d/02-bazzite-global b/system_files/desktop/silverblue/usr/etc/dconf/db/local.d/02-bazzite-global index 58e83becfc..a639a8cef6 100644 --- a/system_files/desktop/silverblue/usr/etc/dconf/db/local.d/02-bazzite-global +++ b/system_files/desktop/silverblue/usr/etc/dconf/db/local.d/02-bazzite-global @@ -72,3 +72,4 @@ show-lockscreen=false show-power-option=false show-gamemode=false hide-forcequit=true +show-pods=true From 2edbece8b55e9c8d14abebc7dd069b1cb9507b30 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sun, 14 Jan 2024 23:32:42 -0800 Subject: [PATCH 38/48] chore: Increase versions, prep for go-live --- system_files/desktop/shared/usr/bin/bazzite-flatpak-manager | 2 +- system_files/desktop/shared/usr/bin/bazzite-hardware-setup | 2 +- system_files/desktop/shared/usr/bin/bazzite-user-setup | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/system_files/desktop/shared/usr/bin/bazzite-flatpak-manager b/system_files/desktop/shared/usr/bin/bazzite-flatpak-manager index 67ed0aefd6..2096e10e14 100755 --- a/system_files/desktop/shared/usr/bin/bazzite-flatpak-manager +++ b/system_files/desktop/shared/usr/bin/bazzite-flatpak-manager @@ -1,7 +1,7 @@ #!/usr/bin/bash # SCRIPT VERSION -VER=13 +VER=14 VER_FILE="/etc/bazzite/flatpak_manager_version" VER_RAN=$(cat $VER_FILE) IMAGE_INFO="/usr/share/ublue-os/image-info.json" diff --git a/system_files/desktop/shared/usr/bin/bazzite-hardware-setup b/system_files/desktop/shared/usr/bin/bazzite-hardware-setup index 5b2a796dd3..94f0576459 100755 --- a/system_files/desktop/shared/usr/bin/bazzite-hardware-setup +++ b/system_files/desktop/shared/usr/bin/bazzite-hardware-setup @@ -7,7 +7,7 @@ IMAGE_FLAVOR=$(jq -r '."image-flavor"' < $IMAGE_INFO) FEDORA_VERSION=$(jq -r '."fedora-version"' < $IMAGE_INFO) # SCRIPT VERSION -HWS_VER=20 +HWS_VER=21 HWS_VER_FILE="/etc/bazzite/hws_version" HWS_VER_RAN=$(cat $HWS_VER_FILE) diff --git a/system_files/desktop/shared/usr/bin/bazzite-user-setup b/system_files/desktop/shared/usr/bin/bazzite-user-setup index ee66457cc9..95abf78c0a 100755 --- a/system_files/desktop/shared/usr/bin/bazzite-user-setup +++ b/system_files/desktop/shared/usr/bin/bazzite-user-setup @@ -11,7 +11,7 @@ BAZZITE_CONFIG_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/bazzite" mkdir -p "$BAZZITE_CONFIG_DIR" # SCRIPT VERSION -USER_SETUP_VER=21 +USER_SETUP_VER=22 USER_SETUP_VER_FILE="$BAZZITE_CONFIG_DIR/version" USER_SETUP_FEDORA_VER_FILE="$BAZZITE_CONFIG_DIR/fedora_version" From 8428ee1e70066f23eddcbc686758ad932f146511 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Sun, 14 Jan 2024 23:42:32 -0800 Subject: [PATCH 39/48] chore: Add ujust install-gamemode-video to desktop, usable in Big Picture mode --- .../shared/usr/share/ublue-os/bazzite/bazzite.webm | Bin .../shared/usr/share/ublue-os/firstboot/yafti.yml | 5 +++++ .../shared/usr/share/ublue-os/just/80-bazzite.just | 6 ++++++ 3 files changed, 11 insertions(+) rename system_files/{deck => desktop}/shared/usr/share/ublue-os/bazzite/bazzite.webm (100%) diff --git a/system_files/deck/shared/usr/share/ublue-os/bazzite/bazzite.webm b/system_files/desktop/shared/usr/share/ublue-os/bazzite/bazzite.webm similarity index 100% rename from system_files/deck/shared/usr/share/ublue-os/bazzite/bazzite.webm rename to system_files/desktop/shared/usr/share/ublue-os/bazzite/bazzite.webm diff --git a/system_files/desktop/shared/usr/share/ublue-os/firstboot/yafti.yml b/system_files/desktop/shared/usr/share/ublue-os/firstboot/yafti.yml index 848142ded5..bf7b389902 100644 --- a/system_files/desktop/shared/usr/share/ublue-os/firstboot/yafti.yml +++ b/system_files/desktop/shared/usr/share/ublue-os/firstboot/yafti.yml @@ -22,6 +22,11 @@ screens: default: true packages: - Set input group: sudo -A ujust add-user-to-input-group + Install Game Mode Startup Video: + description: Adds a Bazzite themed startup video for Steam's game mode. + default: true + packages: + - Install Video: ujust install-gamemode-video Fix Steam Download Speed: description: Adds a config file that fixes download speed under Steam for Linux. default: true diff --git a/system_files/desktop/shared/usr/share/ublue-os/just/80-bazzite.just b/system_files/desktop/shared/usr/share/ublue-os/just/80-bazzite.just index 2e4ca1eeeb..93e26bfcd6 100644 --- a/system_files/desktop/shared/usr/share/ublue-os/just/80-bazzite.just +++ b/system_files/desktop/shared/usr/share/ublue-os/just/80-bazzite.just @@ -21,6 +21,12 @@ restore-original-terminal: sed -i '/NoDisplay=true/d' $HOME/.local/share/applications/org.kde.konsole.desktop fi +# Install Bazzite's Steam Game Mode Startup Video +install-gamemode-video: + mkdir -p $HOME/.local/share/Steam/config/uioverrides/movies + rm -f $HOME/.local/share/Steam/config/uioverrides/movies/deck_startup.webm + ln -s /usr/share/ublue-os/bazzite/bazzite.webm $HOME/.local/share/Steam/config/uioverrides/movies/deck_startup.webm + # Remove all waydroid-related files in your user folders reset-waydroid: bash -c 'sudo rm -rf /var/lib/waydroid /home/.waydroid ~/waydroid ~/.share/waydroid ~/.local/share/applications/*aydroid* ~/.local/share/waydroid' From 95a3db54b223ad8031a50a6c5095d9976810203e Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Mon, 15 Jan 2024 00:27:02 -0800 Subject: [PATCH 40/48] chore: Fix minor escape sequence issue in newer versions of python --- spec_files/jupiter-fan-control/fedora.patch | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/spec_files/jupiter-fan-control/fedora.patch b/spec_files/jupiter-fan-control/fedora.patch index 631324ae12..95076df6f9 100644 --- a/spec_files/jupiter-fan-control/fedora.patch +++ b/spec_files/jupiter-fan-control/fedora.patch @@ -16,3 +16,12 @@ diff -ur usr/share/jupiter-fan-control/PID.py usr/share/jupiter-fan-control/PID. # # This file is part of IvPID. # Copyright (C) 2015 Ivmech Mechatronics Ltd. +@@ -64,7 +64,7 @@ + """Calculates PID value for given reference feedback + + .. math:: +- u(t) = K_p e(t) + K_i \int_{0}^{t} e(t)dt + K_d {de}/{dt} ++ u(t) = K_p e(t) + K_i \\int_{0}^{t} e(t)dt + K_d {de}/{dt} + + .. figure:: images/pid_1.png + :align: center From 1fe22c62f841f0cf8607feeb7c9fbf3d00ae141f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Jan 2024 11:08:54 +0000 Subject: [PATCH 41/48] chore(deps): bump ublue-os/isogenerator from 2.2.0 to 2.3.1 Bumps [ublue-os/isogenerator](https://github.com/ublue-os/isogenerator) from 2.2.0 to 2.3.1. - [Release notes](https://github.com/ublue-os/isogenerator/releases) - [Changelog](https://github.com/ublue-os/isogenerator/blob/main/CHANGELOG.md) - [Commits](https://github.com/ublue-os/isogenerator/compare/v2.2.0...v2.3.1) --- updated-dependencies: - dependency-name: ublue-os/isogenerator dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/release-please.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index ec29058a12..256b003b48 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -37,7 +37,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: Generate ISO - uses: ublue-os/isogenerator@v2.2.0 + uses: ublue-os/isogenerator@v2.3.1 id: isogenerator with: image-name: bazzite From ee08b8c4ac538d59cf401a672490d2ff2934b5c8 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Mon, 15 Jan 2024 10:46:09 -0800 Subject: [PATCH 42/48] feat: Ship a default Pods config for new users, simplifies setup for people who aren't container nerds --- .../com.github.marhkb.Pods/config/pods/connections.json | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 system_files/desktop/shared/usr/etc/skel/.var/app/com.github.marhkb.Pods/config/pods/connections.json diff --git a/system_files/desktop/shared/usr/etc/skel/.var/app/com.github.marhkb.Pods/config/pods/connections.json b/system_files/desktop/shared/usr/etc/skel/.var/app/com.github.marhkb.Pods/config/pods/connections.json new file mode 100644 index 0000000000..642aa82962 --- /dev/null +++ b/system_files/desktop/shared/usr/etc/skel/.var/app/com.github.marhkb.Pods/config/pods/connections.json @@ -0,0 +1,8 @@ +{ + "32218213-d8cf-444e-84c7-7f67b9765acd": { + "uuid": "32218213-d8cf-444e-84c7-7f67b9765acd", + "name": "System", + "url": "unix:///run/user/1000/podman/podman.sock", + "rgb": null + } +} \ No newline at end of file From a524faac6d82f132c1d04e7dd9a7695c903598e2 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Mon, 15 Jan 2024 17:15:32 -0800 Subject: [PATCH 43/48] feat: Switch to layered sunshine Fixes #649 --- Containerfile | 1 - .../usr/share/ublue-os/just/80-bazzite.just | 17 ++++++++++++----- .../usr/share/ublue-os/just/80-bazzite.just | 15 +++++++++++---- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/Containerfile b/Containerfile index 653bd09cdd..6691c037b1 100644 --- a/Containerfile +++ b/Containerfile @@ -444,7 +444,6 @@ RUN /tmp/image-info.sh && \ systemctl disable rpm-ostreed-automatic.timer && \ systemctl enable ublue-update.timer && \ systemctl enable gamescope-workaround.service && \ - systemctl enable sunshine-workaround.service && \ systemctl enable waydroid-workaround.service && \ systemctl enable bazzite-hardware-setup.service && \ systemctl enable tailscaled.service && \ diff --git a/system_files/deck/shared/usr/share/ublue-os/just/80-bazzite.just b/system_files/deck/shared/usr/share/ublue-os/just/80-bazzite.just index e1207c2821..3fa932dfd4 100644 --- a/system_files/deck/shared/usr/share/ublue-os/just/80-bazzite.just +++ b/system_files/deck/shared/usr/share/ublue-os/just/80-bazzite.just @@ -60,15 +60,22 @@ configure-waydroid: # Install Sunshine install-sunshine: #!/usr/bin/bash - flatpak install --system --noninteractive flathub dev.lizardbyte.app.Sunshine - flatpak run --command=additional-install.sh app/dev.lizardbyte.app.Sunshine/x86_64/stable || true + sudo sed -i '0,/enabled=0/s//enabled=1/' /etc/yum.repos.d/rpmfusion-nonfree.repo + sudo sed -i '0,/enabled=0/s//enabled=1/' /etc/yum.repos.d/rpmfusion-nonfree-updates.repo + systemctl enable sunshine-workaround.service + ublue-update --wait + rpm-ostree install -y sunshine echo "Sunshine is installed!" # Remove Sunshine remove-sunshine: #!/usr/bin/bash - flatpak run --command=remove-additional-install.sh app/dev.lizardbyte.app.Sunshine/x86_64/stable || true - flatpak uninstall --delete-data --noninteractive dev.lizardbyte.sunshine + sudo sed -i '0,/enabled=1/s//enabled=0/' /etc/yum.repos.d/rpmfusion-nonfree.repo + sudo sed -i '0,/enabled=1/s//enabled=0/' /etc/yum.repos.d/rpmfusion-nonfree-updates.repo + systemctl disable sunshine-workaround.service + ublue-update --wait + rpm-ostree remove -y sunshine + echo "Sunshine has been uninstalled." # Autostart Sunshine autostart-sunshine: @@ -154,7 +161,7 @@ get-steamcmd: install-openrazer: sudo wget https://download.opensuse.org/repositories/hardware:/razer/Fedora_$(rpm -E %fedora)/hardware:razer.repo -O /etc/yum.repos.d/hardware:razer.repo && \ ublue-update --wait && \ - rpm-ostree install openrazer-meta razergenie && \ + rpm-ostree install -y openrazer-meta razergenie && \ if ! grep -q "plugdev" /etc/group; then \ sudo bash -c 'grep "plugdev" /lib/group >> /etc/group' \ ; fi && \ diff --git a/system_files/desktop/shared/usr/share/ublue-os/just/80-bazzite.just b/system_files/desktop/shared/usr/share/ublue-os/just/80-bazzite.just index 93e26bfcd6..97690c89e0 100644 --- a/system_files/desktop/shared/usr/share/ublue-os/just/80-bazzite.just +++ b/system_files/desktop/shared/usr/share/ublue-os/just/80-bazzite.just @@ -50,15 +50,22 @@ configure-waydroid: # Install Sunshine install-sunshine: #!/usr/bin/bash - flatpak install --system --noninteractive flathub dev.lizardbyte.app.Sunshine - flatpak run --command=additional-install.sh app/dev.lizardbyte.app.Sunshine/x86_64/stable || true + sudo sed -i '0,/enabled=0/s//enabled=1/' /etc/yum.repos.d/rpmfusion-nonfree.repo + sudo sed -i '0,/enabled=0/s//enabled=1/' /etc/yum.repos.d/rpmfusion-nonfree-updates.repo + systemctl enable sunshine-workaround.service + ublue-update --wait + rpm-ostree install -y sunshine echo "Sunshine is installed!" # Remove Sunshine remove-sunshine: #!/usr/bin/bash - flatpak run --command=remove-additional-install.sh app/dev.lizardbyte.app.Sunshine/x86_64/stable || true - flatpak uninstall --delete-data --noninteractive dev.lizardbyte.sunshine + sudo sed -i '0,/enabled=1/s//enabled=0/' /etc/yum.repos.d/rpmfusion-nonfree.repo + sudo sed -i '0,/enabled=1/s//enabled=0/' /etc/yum.repos.d/rpmfusion-nonfree-updates.repo + systemctl disable sunshine-workaround.service + ublue-update --wait + rpm-ostree remove -y sunshine + echo "Sunshine has been uninstalled." # Autostart Sunshine autostart-sunshine: From c314aea8feb6d311f95c30e4493d3a91aebbbb89 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Mon, 15 Jan 2024 17:21:23 -0800 Subject: [PATCH 44/48] fix(ally): Correct rotation in KDE Fixes #680 --- ...egion-go-rotation => bazzite-rotation-fix} | 8 +++++++- .../desktop/shared/usr/bin/bazzite-user-setup | 20 ++++++++++++------- 2 files changed, 20 insertions(+), 8 deletions(-) rename system_files/deck/shared/usr/libexec/{bazzite-handle-legion-go-rotation => bazzite-rotation-fix} (81%) diff --git a/system_files/deck/shared/usr/libexec/bazzite-handle-legion-go-rotation b/system_files/deck/shared/usr/libexec/bazzite-rotation-fix similarity index 81% rename from system_files/deck/shared/usr/libexec/bazzite-handle-legion-go-rotation rename to system_files/deck/shared/usr/libexec/bazzite-rotation-fix index 58cebb2276..c620e0d3a5 100755 --- a/system_files/deck/shared/usr/libexec/bazzite-handle-legion-go-rotation +++ b/system_files/deck/shared/usr/libexec/bazzite-rotation-fix @@ -3,6 +3,8 @@ # This script fixes the screen orientation in the Desktop Mode in Bazzite-Deck KDE # Author: d3Xt3r +SYS_ID="$(cat /sys/devices/virtual/dmi/id/product_name)" + sleep 1 echo $(date '+%Y-%m-%d %H:%M:%S') Starting Bazzite Desktop Orientation Fix script...| tee -a /tmp/bazrotfix.log @@ -28,7 +30,11 @@ kscreen-doctor --outputs 2>&1 | tee -a /tmp/bazrotfix.log # Fix desktop orientation # Rotation options: right, normal, left, inverted echo $(date '+%Y-%m-%d %H:%M:%S') Fixing desktop orientation... | tee -a /tmp/bazrotfix.log -kscreen-doctor output.1.rotation.left 2>&1 | tee -a /tmp/bazrotfix.log +if [[ ":83E1:" =~ ":$SYS_ID" ]]; then + kscreen-doctor output.1.rotation.left 2>&1 | tee -a /tmp/bazrotfix.log +else + kscreen-doctor output.1.rotation.normal 2>&1 | tee -a /tmp/bazrotfix.log +fi echo $(date '+%Y-%m-%d %H:%M:%S') Ending Bazzite Desktop Orientation Fix script >> /tmp/bazrotfix.log echo -e '\n' >> /tmp/bazrotfix.log diff --git a/system_files/desktop/shared/usr/bin/bazzite-user-setup b/system_files/desktop/shared/usr/bin/bazzite-user-setup index 95abf78c0a..2b440e2761 100755 --- a/system_files/desktop/shared/usr/bin/bazzite-user-setup +++ b/system_files/desktop/shared/usr/bin/bazzite-user-setup @@ -126,15 +126,21 @@ if [[ $IMAGE_NAME =~ "deck" || $IMAGE_NAME =~ "ally" || $IMAGE_NAME =~ "framegam # Legion Rotation Fix AUTOSTART_FOLDER=${XDG_CONFIG_HOME:-$HOME/.config} - if [[ ":83E1:" =~ ":$SYS_ID" ]] && [[ $BASE_IMAGE_NAME =~ "kinoite" ]]; then - if [[ ! -f "$AUTOSTART_FOLDER/autostart/bazzite-handle-legion-go-rotation.desktop" ]]; then - echo 'Adding legion rotation fix' + + # Remove old legion-only file + if [[ -f "$AUTOSTART_FOLDER/autostart/bazzite-handle-legion-go-rotation.desktop" ]]; then + rm -f "$AUTOSTART_FOLDER/autostart/bazzite-handle-legion-go-rotation.desktop" + fi + + if [[ ":ROG Ally RC71L_RC71L:83E1:" =~ ":$SYS_ID" ]] && [[ $BASE_IMAGE_NAME =~ "kinoite" ]]; then + if [[ ! -f "$AUTOSTART_FOLDER/autostart/bazzite-rotation-fix.desktop" ]]; then + echo 'Adding rotation fix' mkdir -p "$AUTOSTART_FOLDER/autostart" - printf "[Desktop Entry]\nExec=/usr/libexec/bazzite-handle-legion-go-rotation\nIcon=dialog-scripts\nName=bazzite-handle-legion-go-rotation\nType=Application\nX-KDE-AutostartScript=true\n" > "$AUTOSTART_FOLDER/autostart/bazzite-handle-legion-go-rotation.desktop" + printf "[Desktop Entry]\nExec=/usr/libexec/bazzite-rotation-fix\nIcon=dialog-scripts\nName=bazzite-rotation-fix\nType=Application\nX-KDE-AutostartScript=true\n" > "$AUTOSTART_FOLDER/autostart/bazzite-rotation-fix.desktop" fi - elif [[ -f "$AUTOSTART_FOLDER/autostart/bazzite-handle-legion-go-rotation.desktop" ]]; then - echo 'Non-legion or GNOME detected, removing legionfix' - rm -f "$AUTOSTART_FOLDER/autostart/bazzite-handle-legion-go-rotation.desktop" + elif [[ -f "$AUTOSTART_FOLDER/autostart/bazzite-rotation-fix.desktop" ]]; then + echo 'Non-supported or GNOME detected, removing rotaion fix' + rm -f "$AUTOSTART_FOLDER/autostart/bazzite-rotation-fix.desktop" fi fi From db816c8d37f257eff34aa2020c1a6344e56eb906 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Mon, 15 Jan 2024 17:22:47 -0800 Subject: [PATCH 45/48] chore: Cleanup --- .../deck/shared/usr/share/ublue-os/just/80-bazzite.just | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/system_files/deck/shared/usr/share/ublue-os/just/80-bazzite.just b/system_files/deck/shared/usr/share/ublue-os/just/80-bazzite.just index 3fa932dfd4..1ac55189c1 100644 --- a/system_files/deck/shared/usr/share/ublue-os/just/80-bazzite.just +++ b/system_files/deck/shared/usr/share/ublue-os/just/80-bazzite.just @@ -62,20 +62,20 @@ install-sunshine: #!/usr/bin/bash sudo sed -i '0,/enabled=0/s//enabled=1/' /etc/yum.repos.d/rpmfusion-nonfree.repo sudo sed -i '0,/enabled=0/s//enabled=1/' /etc/yum.repos.d/rpmfusion-nonfree-updates.repo - systemctl enable sunshine-workaround.service + sudo systemctl enable sunshine-workaround.service ublue-update --wait rpm-ostree install -y sunshine - echo "Sunshine is installed!" + echo "Sunshine is installed, please reboot to apply changes." # Remove Sunshine remove-sunshine: #!/usr/bin/bash sudo sed -i '0,/enabled=1/s//enabled=0/' /etc/yum.repos.d/rpmfusion-nonfree.repo sudo sed -i '0,/enabled=1/s//enabled=0/' /etc/yum.repos.d/rpmfusion-nonfree-updates.repo - systemctl disable sunshine-workaround.service + sudo systemctl disable sunshine-workaround.service ublue-update --wait rpm-ostree remove -y sunshine - echo "Sunshine has been uninstalled." + echo "Sunshine has been uninstalled, please reboot to apply changes." # Autostart Sunshine autostart-sunshine: From 541b3d989db6ebc16c8caeb8f4f3ad6fff8c9fd7 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Mon, 15 Jan 2024 20:53:18 -0800 Subject: [PATCH 46/48] chore: Shorten name of secure boot key. --- README-ID.md | 4 ++-- README-SPA.md | 4 ++-- README.md | 4 ++-- secure_boot_key.der => secure_boot.der | Bin 4 files changed, 6 insertions(+), 6 deletions(-) rename secure_boot_key.der => secure_boot.der (100%) diff --git a/README-ID.md b/README-ID.md index 5ee82aa547..35d70e4ad0 100644 --- a/README-ID.md +++ b/README-ID.md @@ -292,11 +292,11 @@ cosign verify --key cosign.pub ghcr.io/ublue-os/bazzite ## Secure Boot -Secure boot didukung dengan key dari kami. Pub key dapat ditemukan di root repositori [ini](https://github.com/ublue-os/bazzite/blob/main/secure_boot_key.der). +Secure boot didukung dengan key dari kami. Pub key dapat ditemukan di root repositori [ini](https://github.com/ublue-os/bazzite/blob/main/secure_boot.der). Jika anda ingin menenroll key ini sebelum instalasi, unduh key ini dan jalankan: ```bash -sudo mokutil --import secure_boot_key.der +sudo mokutil --import secure_boot.der ``` ### Metrik Kontribusi diff --git a/README-SPA.md b/README-SPA.md index 19813321c9..14efdc234e 100644 --- a/README-SPA.md +++ b/README-SPA.md @@ -317,13 +317,13 @@ cosign verify --key cosign.pub ghcr.io/ublue-os/bazzite ## Arranque Seguro (Secure Boot) -El Arranque Seguro (Secure Boot) tiene soporte gracias a nuestra llave digital personalizada. La llave pública puede encontrarse en la raíz de [este](https://github.com/ublue-os/bazzite/blob/main/secure_boot_key.der) repositorio. +El Arranque Seguro (Secure Boot) tiene soporte gracias a nuestra llave digital personalizada. La llave pública puede encontrarse en la raíz de [este](https://github.com/ublue-os/bazzite/blob/main/secure_boot.der) repositorio. Si gustas registrar esta llave antes de instalar Bazzite, descarga la llave y ejecuta el siguiente comando en una terminal: ```bash -sudo mokutil --import secure_boot_key.der +sudo mokutil --import secure_boot.der ``` ### Métricas de Contribución diff --git a/README.md b/README.md index aaab76b525..fe564d159f 100644 --- a/README.md +++ b/README.md @@ -303,12 +303,12 @@ cosign verify --key cosign.pub ghcr.io/ublue-os/bazzite ## Secure Boot -Secure boot is supported with our custom key. The pub key can be found in the root of this repository [here](https://github.com/ublue-os/bazzite/blob/main/secure_boot_key.der). +Secure boot is supported with our custom key. The pub key can be found in the root of this repository [here](https://github.com/ublue-os/bazzite/blob/main/secure_boot.der). If you'd like to enroll this key prior to installation or rebase, download the key and run the following: ```bash sudo mokutil --timeout -1 -sudo mokutil --import secure_boot_key.der +sudo mokutil --import secure_boot.der ``` For users already on a Universal Blue image, you may instead run `ujust enroll-secure-boot-key`. diff --git a/secure_boot_key.der b/secure_boot.der similarity index 100% rename from secure_boot_key.der rename to secure_boot.der From 43b2ff55f22feb496ebbc3f61d02a9f9de868784 Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Mon, 15 Jan 2024 20:53:52 -0800 Subject: [PATCH 47/48] chore: Add timeout change to other readmes --- README-ID.md | 1 + README-SPA.md | 1 + 2 files changed, 2 insertions(+) diff --git a/README-ID.md b/README-ID.md index 35d70e4ad0..bdf02acd78 100644 --- a/README-ID.md +++ b/README-ID.md @@ -296,6 +296,7 @@ Secure boot didukung dengan key dari kami. Pub key dapat ditemukan di root repos Jika anda ingin menenroll key ini sebelum instalasi, unduh key ini dan jalankan: ```bash +sudo mokutil --timeout -1 sudo mokutil --import secure_boot.der ``` diff --git a/README-SPA.md b/README-SPA.md index 14efdc234e..758fe235ba 100644 --- a/README-SPA.md +++ b/README-SPA.md @@ -323,6 +323,7 @@ El Arranque Seguro (Secure Boot) tiene soporte gracias a nuestra llave digital p Si gustas registrar esta llave antes de instalar Bazzite, descarga la llave y ejecuta el siguiente comando en una terminal: ```bash +sudo mokutil --timeout -1 sudo mokutil --import secure_boot.der ``` From 24c9b8ad5b6474c8b7c49bae67058124589fd6da Mon Sep 17 00:00:00 2001 From: Kyle Gospodnetich Date: Mon, 15 Jan 2024 21:42:38 -0800 Subject: [PATCH 48/48] chore(readme): Fix index links --- README-ID.md | 26 +++++++++++++------------- README-SPA.md | 28 ++++++++++++++-------------- README.md | 34 +++++++++++++++++----------------- 3 files changed, 44 insertions(+), 44 deletions(-) diff --git a/README-ID.md b/README-ID.md index bdf02acd78..d268c9682c 100644 --- a/README-ID.md +++ b/README-ID.md @@ -9,19 +9,19 @@ --- # Daftar Isi -- [Fitur untuk **SEMUA** Image Bazzite](https://github.com/ublue-os/bazzite/blob/main/README-ID.md#tentang--fitur) - - [Fitur untuk Image **Desktop** ](https://github.com/ublue-os/bazzite/blob/main/README-ID.md#desktop) - - [Fitur untuk Image **Steam Deck / HTPC**](https://github.com/ublue-os/bazzite/blob/main/README-ID.md#steam-deckhome-theater-pcs-htpcs) - - [Fitur untuk Image **GNOME** ](https://github.com/ublue-os/bazzite/blob/main/README-ID.md#gnome) - - [Fitur dari upstream](https://github.com/ublue-os/bazzite/blob/main/README-ID.md#fitur-dari-upstream) -- [Alasan](https://github.com/ublue-os/bazzite/blob/main/README-ID.md#alasan) -- [Pameran](https://github.com/ublue-os/bazzite/blob/main/README-ID.md#pameran) -- [Dokumentasi & Buletin](https://github.com/ublue-os/bazzite/blob/main/README-ID.md#dokumentasi--buletin) -- [Paket Kustom](https://github.com/ublue-os/bazzite/blob/main/README-ID.md#paket-kustom) -- [Verifikasi & Metrik](https://github.com/ublue-os/bazzite/blob/main/README-ID.md#paket-kustom) -- [Ucapan Terimakasih](https://github.com/ublue-os/bazzite/blob/main/README-ID.md#ucapan-terimakasih) -- [Membuat Image Anda Sendiri](https://github.com/ublue-os/bazzite/blob/main/README-ID.md#membuat-image-anda-sendiri) -- [Komunitas](https://github.com/ublue-os/bazzite/blob/main/README-ID.md#bergabung-dengan-komunitas) +- [Fitur untuk **SEMUA** Image Bazzite](#tentang--fitur) + - [Fitur untuk Image **Desktop** ](#desktop) + - [Fitur untuk Image **Steam Deck / HTPC**](#steam-deckhome-theater-pcs-htpcs) + - [Fitur untuk Image **GNOME** ](#gnome) + - [Fitur dari upstream](#fitur-dari-upstream) +- [Alasan](#alasan) +- [Pameran](#pameran) +- [Dokumentasi & Buletin](#dokumentasi--buletin) +- [Paket Kustom](#paket-kustom) +- [Verifikasi & Metrik](#paket-kustom) +- [Ucapan Terimakasih](#ucapan-terimakasih) +- [Membuat Image Anda Sendiri](#membuat-image-anda-sendiri) +- [Komunitas](#bergabung-dengan-komunitas) --- ## Tentang & Fitur diff --git a/README-SPA.md b/README-SPA.md index 758fe235ba..fefe1ca71b 100644 --- a/README-SPA.md +++ b/README-SPA.md @@ -10,20 +10,20 @@ # Tabla de Contenidos -- [Características de **todas** las imágenes de Bazzite](https://github.com/ublue-os/bazzite#about--features) - - [Características de las imágenes para **Computadoras de Escritorio**](https://github.com/ublue-os/bazzite#desktop) - - [Características de las imágenes para **Steam Deck/HTPC**](https://github.com/ublue-os/bazzite#steam-deckhome-theater-pcs-htpcs) - - [Características de las imágenes con el entorno de escritorio **GNOME**](https://github.com/ublue-os/bazzite#gnome) - - [Características del Upstream](https://github.com/ublue-os/bazzite#features-from-upstream) -- [¿Por qué?](https://github.com/ublue-os/bazzite#why) -- [Mira como luce Bazzite (Capturas de Pantalla)](https://github.com/ublue-os/bazzite#showcase) -- [Documentación y Boletín informativo/Newsletters (En inglés)](https://github.com/ublue-os/bazzite#documentation--newsletters) -- [Paquetes Personalizados](https://github.com/ublue-os/bazzite#custom-packages) -- [Arranque Seguro (Secure Boot)](https://github.com/ublue-os/bazzite#secure-boot) -- [Verificación y Métricas](https://github.com/ublue-os/bazzite#verification) -- [Gracias Especiales](https://github.com/ublue-os/bazzite#special-thanks) -- [Créalo tu Mismo](https://github.com/ublue-os/bazzite#build-your-own) -- [Comunidad (en inglés)](https://github.com/ublue-os/bazzite#join-the-community) +- [Características de **todas** las imágenes de Bazzite](#about--features) + - [Características de las imágenes para **Computadoras de Escritorio**](#desktop) + - [Características de las imágenes para **Steam Deck/HTPC**](#steam-deckhome-theater-pcs-htpcs) + - [Características de las imágenes con el entorno de escritorio **GNOME**](#gnome) + - [Características del Upstream](#features-from-upstream) +- [¿Por qué?](#why) +- [Mira como luce Bazzite (Capturas de Pantalla)](#showcase) +- [Documentación y Boletín informativo/Newsletters (En inglés)](#documentation--newsletters) +- [Paquetes Personalizados](#custom-packages) +- [Arranque Seguro (Secure Boot)](#secure-boot) +- [Verificación y Métricas](#verification) +- [Gracias Especiales](#special-thanks) +- [Créalo tu Mismo](#build-your-own) +- [Comunidad (en inglés)](#join-the-community) --- diff --git a/README.md b/README.md index fe564d159f..bdd38f021f 100644 --- a/README.md +++ b/README.md @@ -9,21 +9,21 @@ --- # Table of Contents -- [Features for **All** Bazzite Images](https://github.com/ublue-os/bazzite#about--features) - - [Features for **Desktop** Images](https://github.com/ublue-os/bazzite#desktop) - - [Features for **Steam Deck / HTPC** Images](https://github.com/ublue-os/bazzite#steam-deckhome-theater-pcs-htpcs) - - [Features for **GNOME** Images](https://github.com/ublue-os/bazzite#gnome) - - [Features from Upstream](https://github.com/ublue-os/bazzite#features-from-upstream) -- [Why](https://github.com/ublue-os/bazzite#why) -- [Showcase](https://github.com/ublue-os/bazzite#showcase) -- [Documentation & Newsletters](https://github.com/ublue-os/bazzite#documentation--newsletters) -- [Custom Packages](https://github.com/ublue-os/bazzite#custom-packages) -- [Image Verification](https://github.com/ublue-os/bazzite#verification) -- [Secure Boot](https://github.com/ublue-os/bazzite#secure-boot) -- [Metrics](https://github.com/ublue-os/bazzite#contributor-metrics) -- [Special Thanks](https://github.com/ublue-os/bazzite#special-thanks) -- [Building Your Own](https://github.com/ublue-os/bazzite#build-your-own) -- [Community](https://github.com/ublue-os/bazzite#join-the-community) +- [Features for **All** Bazzite Images](#about--features) + - [Features for **Desktop** Images](#desktop) + - [Features for **Steam Deck / HTPC** Images](#steam-deckhome-theater-pcs-htpcs) + - [Features for **GNOME** Images](#gnome) + - [Features from Upstream](#features-from-upstream) +- [Why](#why) +- [Showcase](#showcase) +- [Documentation & Newsletters](#documentation--newsletters) +- [Custom Packages](#custom-packages) +- [Image Verification](#verification) +- [Secure Boot](#secure-boot) +- [Metrics](#contributor-metrics) +- [Special Thanks](#special-thanks) +- [Building Your Own](#build-your-own) +- [Community](#join-the-community) --- ## About & Features @@ -89,7 +89,7 @@ or for devices with Nvidia GPUs: rpm-ostree rebase ostree-unverified-registry:ghcr.io/ublue-os/bazzite-nvidia:latest ``` -**For users with Secure Boot enabled:** Follow our [secure boot documentation](https://github.com/ublue-os/bazzite#secure-boot) prior to rebasing. +**For users with Secure Boot enabled:** Follow our [secure boot documentation](#secure-boot) prior to rebasing. ### Steam Deck/Home Theater PCs (HTPCs) > [!IMPORTANT] @@ -174,7 +174,7 @@ To rebase an existing ostree system to the **Steam Deck/HTPC** release: rpm-ostree rebase ostree-unverified-registry:ghcr.io/ublue-os/bazzite-deck-gnome:latest ``` -**For users with Secure Boot enabled:** Follow our [secure boot documentation](https://github.com/ublue-os/bazzite#secure-boot) prior to rebasing. +**For users with Secure Boot enabled:** Follow our [secure boot documentation](#secure-boot) prior to rebasing. ### Features from Upstream