diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e4d4b1000e..7c79a45ebb 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -70,7 +70,7 @@ jobs: is_latest_version: true is_stable_version: true kernel_flavor: bazzite # must match a kernel_flavor from akmods repo - kernel_version: 6.11.6-303.bazzite.fc41.x86_64 # must match a cached version of the above flavor + kernel_version: 6.11.8-305.bazzite.fc41.x86_64 # must match a cached version of the above flavor exclude: - base_name: bazzite target_nvidia_flavor: nvidia @@ -172,7 +172,7 @@ jobs: sudo podman pull ${{ env.IMAGE_REGISTRY }}/akmods-${{ matrix.target_nvidia_flavor }}:${{ matrix.kernel_flavor}}-${{ matrix.fedora_version }}-${{ matrix.kernel_version }} # Add rechunk as well to remove this source of failure - sudo podman pull ghcr.io/hhd-dev/rechunk:v0.8.3 + sudo podman pull ghcr.io/hhd-dev/rechunk:v1.0.1 - name: Get source versions id: labels @@ -268,16 +268,35 @@ jobs: echo "Generated the following:" cat $GITHUB_OUTPUT + - name: Check Secureboot + shell: bash + run: | + set -x + if [[ ! $(command -v sbverify) || ! $(command -v curl) || ! $(command -v openssl) ]]; then + sudo apt update + sudo apt install sbsigntool curl openssl + fi + TMP=$(sudo podman create raw-img bash) + sudo podman cp $TMP:/usr/lib/modules/${{ matrix.kernel_version }}/vmlinuz . + sudo podman rm $TMP + sudo chmod 666 vmlinuz # might not be needed + sbverify --list vmlinuz + curl --retry 3 -Lo kernel-sign.der https://github.com/ublue-os/kernel-cache/raw/main/certs/public_key.der + curl --retry 3 -Lo akmods.der https://github.com/ublue-os/kernel-cache/raw/main/certs/public_key_2.der + openssl x509 -in kernel-sign.der -out kernel-sign.crt + openssl x509 -in akmods.der -out akmods.crt + sbverify --cert kernel-sign.crt vmlinuz || exit 1 + sbverify --cert akmods.crt vmlinuz || exit 1 + # Reprocess raw-img using rechunker which will delete it - name: Run Rechunker id: rechunk uses: hhd-dev/rechunk@v1.0.1 with: - rechunk: 'ghcr.io/hhd-dev/rechunk:v0.8.3' + rechunk: 'ghcr.io/hhd-dev/rechunk:v1.0.1' ref: 'raw-img' prev-ref: '${{ steps.generate-prev-ref.outputs.ref }}' version: '${{ steps.generate-version.outputs.tag }}' - skip_compression: 1 labels: | io.artifacthub.package.logo-url=https://raw.githubusercontent.com/ublue-os/bazzite/main/repo_content/logo.png io.artifacthub.package.readme-url=https://docs.bazzite.gg @@ -352,36 +371,6 @@ jobs: done echo "alias_tags=${BUILD_TAGS[*]}" >> $GITHUB_OUTPUT - # Pull oci-dir image, remove oci dir to make space, and then tag appropriately - - name: Load in podman and tag - run: | - IMAGE=$(podman pull ${{ steps.rechunk.outputs.ref }}) - sudo rm -rf ${{ steps.rechunk.outputs.output }} - for tag in ${{ steps.generate-tags.outputs.alias_tags }}; do - podman tag $IMAGE ${{ env.IMAGE_NAME }}:$tag - done - # keep for secureboot check - podman tag $IMAGE rechunked-img - - - name: Check Secureboot - shell: bash - run: | - set -x - if [[ ! $(command -v sbverify) || ! $(command -v curl) || ! $(command -v openssl) ]]; then - sudo apt update - sudo apt install sbsigntool curl openssl - fi - TMP=$(podman create rechunked-img bash) - podman cp $TMP:/usr/lib/modules/${{ matrix.kernel_version }}/vmlinuz . - podman rm $TMP - sbverify --list vmlinuz - curl --retry 3 -Lo kernel-sign.der https://github.com/ublue-os/kernel-cache/raw/main/certs/public_key.der - curl --retry 3 -Lo akmods.der https://github.com/ublue-os/kernel-cache/raw/main/certs/public_key_2.der - openssl x509 -in kernel-sign.der -out kernel-sign.crt - openssl x509 -in akmods.der -out akmods.crt - sbverify --cert kernel-sign.crt vmlinuz || exit 1 - sbverify --cert akmods.crt vmlinuz || exit 1 - # Workaround bug where capital letters in your GitHub username make it impossible to push to GHCR. # https://github.com/macbre/push-to-ghcr/issues/12 - name: Lowercase Registry @@ -395,21 +384,22 @@ jobs: uses: Wandalen/wretry.action@v3.7.2 id: push if: github.event_name != 'pull_request' - env: - REGISTRY_USER: ${{ github.actor }} - REGISTRY_PASSWORD: ${{ github.token }} with: - action: redhat-actions/push-to-registry@v2 attempt_limit: 3 attempt_delay: 15000 - with: | - image: ${{ env.IMAGE_NAME }} - tags: ${{ steps.generate-tags.outputs.alias_tags }} - registry: ${{ steps.registry_case.outputs.lowercase }} - username: ${{ env.REGISTRY_USER }} - password: ${{ env.REGISTRY_PASSWORD }} - extra-args: | - --compression-format=zstd:chunked + command: | + echo "${{ secrets.GITHUB_TOKEN }}" | sudo podman login ghcr.io -u ${{ github.actor }} --password-stdin + for tag in ${{ steps.generate-tags.outputs.alias_tags }}; do + sudo skopeo copy ${{ steps.rechunk.outputs.ref }} docker://${{ steps.registry_case.outputs.lowercase }}/${{ env.IMAGE_NAME }}:$tag + done + + - name: Get Image Digest + id: digest + run: | + # Get digest for signing + DIGEST=$(sudo skopeo inspect --format '{{.Digest}}' ${{ steps.rechunk.outputs.ref }}) + echo "Digest is: $DIGEST" + echo "digest=${DIGEST}" >> $GITHUB_OUTPUT - name: Sign container image uses: EyeCantCU/cosign-action/sign@v0.3.0 @@ -418,12 +408,7 @@ jobs: containers: ${{ env.IMAGE_NAME }} registry-token: ${{ secrets.GITHUB_TOKEN }} signing-secret: ${{ secrets.SIGNING_SECRET }} - tags: ${{ steps.push.outputs.outputs && fromJSON(steps.push.outputs.outputs).digest }} - - - name: Echo outputs - if: github.event_name != 'pull_request' - run: | - echo "${{ toJSON(steps.push.outputs) }}" + tags: ${{ steps.digest.outputs.digest }} generate_release: name: Generate Release diff --git a/.github/workflows/build_iso.yml b/.github/workflows/build_iso.yml index 0d018a4539..7668ed7089 100644 --- a/.github/workflows/build_iso.yml +++ b/.github/workflows/build_iso.yml @@ -35,7 +35,7 @@ jobs: - bazzite-gnome-asus-nvidia - bazzite-asus-nvidia-open - bazzite-gnome-asus-nvidia-open - major_version: [40] + major_version: [41] steps: - name: Free Disk Space (Ubuntu) diff --git a/.github/workflows/changelog.py b/.github/workflows/changelog.py index 3b6b9f3ee4..59713aa752 100644 --- a/.github/workflows/changelog.py +++ b/.github/workflows/changelog.py @@ -131,17 +131,24 @@ def get_manifests(target: str): def get_tags(target: str, manifests: dict[str, Any]): tags = set() + # Select random manifest to get reference tags from + first = next(iter(manifests.values())) + for tag in first["RepoTags"]: + # Tags ending with .0 should not exist + if tag.endswith(".0"): + continue + if target != "stable": + if re.match(OTHER_START_PATTERN(target), tag): + tags.add(tag) + else: + if re.match(STABLE_START_PATTERN, tag): + tags.add(tag) + + # Remove tags not present in all images for manifest in manifests.values(): - for tag in manifest["RepoTags"]: - # Tags ending with .0 should not exist - if tag.endswith(".0"): - continue - if target != "stable": - if re.match(OTHER_START_PATTERN(target), tag): - tags.add(tag) - else: - if re.match(STABLE_START_PATTERN, tag): - tags.add(tag) + for tag in list(tags): + if tag not in manifest["RepoTags"]: + tags.remove(tag) tags = list(sorted(tags)) assert len(tags) > 2, "No current and previous tags found" diff --git a/Containerfile b/Containerfile index 238566444b..61c70ad603 100644 --- a/Containerfile +++ b/Containerfile @@ -326,9 +326,24 @@ RUN --mount=type=cache,dst=/var/cache/rpm-ostree \ /usr/libexec/containerbuild/cleanup.sh && \ ostree container commit -# Install Valve's patched Mesa, Pipewire, Bluez, and Xwayland +# Install Valve's patched Mesa, Pipewire, Bluez, and Xwayland# # Install patched switcheroo control with proper discrete GPU support +# Tempporary fix for GPU Encoding RUN --mount=type=cache,dst=/var/cache/rpm-ostree \ + rpm-ostree install \ + mesa-dri-drivers.i686 && \ + mkdir -p /tmp/mesa-fix64/dri && \ + cp /usr/lib64/libgallium-*.so /tmp/mesa-fix64/ && \ + cp /usr/lib64/dri/kms_swrast_dri.so /tmp/mesa-fix64/dri/ && \ + cp /usr/lib64/dri/libdril_dri.so /tmp/mesa-fix64/dri/ && \ + cp /usr/lib64/dri/swrast_dri.so /tmp/mesa-fix64/dri/ && \ + cp /usr/lib64/dri/virtio_gpu_dri.so /tmp/mesa-fix64/dri/ && \ + mkdir -p /tmp/mesa-fix32/dri && \ + cp /usr/lib/libgallium-*.so /tmp/mesa-fix32/ && \ + cp /usr/lib/dri/kms_swrast_dri.so /tmp/mesa-fix32/dri/ && \ + cp /usr/lib/dri/libdril_dri.so /tmp/mesa-fix32/dri/ && \ + cp /usr/lib/dri/swrast_dri.so /tmp/mesa-fix32/dri/ && \ + cp /usr/lib/dri/virtio_gpu_dri.so /tmp/mesa-fix32/dri/ && \ rpm-ostree override replace \ --experimental \ --from repo=copr:copr.fedorainfracloud.org:kylegospo:bazzite-multilib \ @@ -353,6 +368,10 @@ RUN --mount=type=cache,dst=/var/cache/rpm-ostree \ bluez-cups \ bluez-libs \ xorg-x11-server-Xwayland && \ + rsync -a /tmp/mesa-fix64/ /usr/lib64/ && \ + rsync -a /tmp/mesa-fix32/ /usr/lib/ && \ + rm -rf /tmp/mesa-fix64 && \ + rm -rf /tmp/mesa-fix32 && \ sed -i 's@enabled=0@enabled=1@g' /etc/yum.repos.d/rpmfusion-*.repo && \ rpm-ostree install \ libaacs \ @@ -677,6 +696,7 @@ RUN rm -f /etc/profile.d/toolbox.sh && \ echo "import \"/usr/share/ublue-os/just/83-bazzite-audio.just\"" >> /usr/share/ublue-os/justfile && \ echo "import \"/usr/share/ublue-os/just/84-bazzite-virt.just\"" >> /usr/share/ublue-os/justfile && \ echo "import \"/usr/share/ublue-os/just/85-bazzite-image.just\"" >> /usr/share/ublue-os/justfile && \ + echo "import \"/usr/share/ublue-os/just/86-bazzite-windows.just\"" >> /usr/share/ublue-os/justfile && \ echo "import \"/usr/share/ublue-os/just/90-bazzite-de.just\"" >> /usr/share/ublue-os/justfile && \ if grep -q "kinoite" <<< "${BASE_IMAGE_NAME}"; then \ mkdir -p "/usr/share/ublue-os/dconfs/desktop-kinoite/" && \ @@ -737,6 +757,7 @@ RUN rm -f /etc/profile.d/toolbox.sh && \ systemctl enable ublue-update.timer && \ systemctl enable incus-workaround.service && \ systemctl enable bazzite-hardware-setup.service && \ + systemctl enable usr-share-sddm-themes.mount && \ systemctl disable tailscaled.service && \ systemctl enable dev-hugepages1G.mount && \ systemctl enable bazzite-snapper-setup && \ diff --git a/spec_files/gamescope/gamescope-legacy.spec b/spec_files/gamescope/gamescope-legacy.spec index 5bf68f37a2..eba477db4a 100644 --- a/spec_files/gamescope/gamescope-legacy.spec +++ b/spec_files/gamescope/gamescope-legacy.spec @@ -5,7 +5,7 @@ Name: gamescope-legacy Version: 3.14.2 -Release: 4.bazzite +Release: 5.bazzite Summary: Legacy builds of gamescope, a micro-compositor for video games on Wayland License: BSD diff --git a/spec_files/gamescope/gamescope.spec b/spec_files/gamescope/gamescope.spec index 25bb13a6e9..3a37fc7add 100644 --- a/spec_files/gamescope/gamescope.spec +++ b/spec_files/gamescope/gamescope.spec @@ -6,7 +6,7 @@ Name: gamescope Version: 100.%{gamescope_tag} -Release: 11.bazzite +Release: 14.bazzite Summary: Micro-compositor for video games on Wayland License: BSD @@ -99,6 +99,7 @@ Summary: libs for %{name} # git clone --depth 1 --branch %%{gamescope_tag} %%{url}.git git clone --depth 1 --branch master %{url}.git cd gamescope +git checkout 7dd1bcd9102a17e039970ccd9a324a9fe8365d6d git submodule update --init --recursive mkdir -p pkgconfig cp %{SOURCE0} pkgconfig/stb.pc diff --git a/spec_files/gamescope/handheld.patch b/spec_files/gamescope/handheld.patch index f11087eafa..081a948513 100644 --- a/spec_files/gamescope/handheld.patch +++ b/spec_files/gamescope/handheld.patch @@ -1,7 +1,7 @@ -From e0e74b9862ca591302a01ef89994e3eaf8d1245e Mon Sep 17 00:00:00 2001 +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Matthew Anderson Date: Fri, 17 May 2024 21:56:55 -0500 -Subject: [PATCH v2 01/12] feat: add --custom-refresh-rates option (+ fixes) +Subject: feat: add --custom-refresh-rates option (+ fixes) Commit originally by Matthew, external fixes by Kyle, and new system check move by Antheas. @@ -117,11 +117,11 @@ index 2e6fb83..390c04a 100644 2.47.0 -From 304c0c2297bc2f24be9edff4088fdfae418adaf0 Mon Sep 17 00:00:00 2001 +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Alesh Slovak Date: Thu, 26 Sep 2024 07:13:24 -0400 -Subject: [PATCH v2 02/12] fix(vrr): Revert "steamcompmgr: Move - outdatedInteractiveFocus to window" +Subject: fix(vrr): Revert "steamcompmgr: Move outdatedInteractiveFocus to + window" This reverts commit 299bc3410dcfd46da5e3c988354b60ed3a356900. --- @@ -210,10 +210,10 @@ index 095694e..e41fad9 100644 2.47.0 -From 2a9e687172b569681eea53fb8f4848b0a758e680 Mon Sep 17 00:00:00 2001 +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Renn <8340896+AkazaRenn@users.noreply.github.com> Date: Fri, 11 Oct 2024 17:48:26 +0200 -Subject: [PATCH v2 03/12] fix(deck): Use super + 1/2 for Overlay/QAM +Subject: fix(deck): Use super + 1/2 for Overlay/QAM Replaces the patch for CTRL + 1/2 for Overlay/QAM with Super + 1/2 and allows for CTRL for a smooth transition. @@ -271,10 +271,10 @@ index 78a86ee..99df8aa 100644 2.47.0 -From dde7f34921a70953fca2020dc22f89c544bdaf65 Mon Sep 17 00:00:00 2001 +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Antheas Kapenekakis Date: Fri, 11 Oct 2024 17:52:48 +0200 -Subject: [PATCH v2 04/12] fix: allow for disabling touch atom click +Subject: fix: allow for disabling touch atom click Causes issues in certain devices (or not anymore?). @@ -340,10 +340,10 @@ index df7616d..4a17499 100644 2.47.0 -From 033b1b8ce87267e9e1b75a889d5ba3d8c47ed4fe Mon Sep 17 00:00:00 2001 +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Antheas Kapenekakis Date: Fri, 11 Oct 2024 21:56:54 +0200 -Subject: [PATCH v2 05/12] fix(intel-gpu): allow for (enabling) hacky texture +Subject: fix(intel-gpu): allow for (enabling) hacky texture Disabling hacky texture will use more hardware planes, causing some devices to composite yielding lower fps. Required for intel to work --- @@ -405,11 +405,11 @@ index 4a17499..da3115f 100644 2.47.0 -From 8e64da6cabcd2a6fc9d9fad12cb95ff203985d1b Mon Sep 17 00:00:00 2001 +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Antheas Kapenekakis Date: Fri, 11 Oct 2024 23:01:13 +0200 -Subject: [PATCH v2 06/12] fix: re-add external orientation options to not - break current sessions (incl. applying ext. orientation) +Subject: fix: re-add external orientation options to not break current + sessions (incl. applying ext. orientation) --- src/main.cpp | 4 +++- @@ -441,11 +441,10 @@ index 84e05a9..2398535 100644 2.47.0 -From 14d19b8d86c485fe57e1489de905c908c67fd77e Mon Sep 17 00:00:00 2001 +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: honjow Date: Wed, 16 Oct 2024 00:23:58 +0800 -Subject: [PATCH v2 07/12] fix(external): fix crash when using external - touchscreens +Subject: fix(external): fix crash when using external touchscreens --- src/wlserver.cpp | 8 ++++++-- @@ -474,11 +473,11 @@ index 99df8aa..5e8f516 100644 2.47.0 -From 9e4ee4341a7480a0af883cc47d3c6e6ee91de74a Mon Sep 17 00:00:00 2001 +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Antheas Kapenekakis Date: Fri, 11 Oct 2024 23:47:59 +0200 -Subject: [PATCH v2 08/12] feat(vrr): allow for setting refresh rate if the - internal display allows +Subject: feat(vrr): allow for setting refresh rate if the internal display + allows For the Ally, we have a set of VFP that work to set the refresh rate. They can also be used for VRR but gamescope does not currently allow for @@ -551,11 +550,10 @@ index da3115f..69fd348 100644 2.47.0 -From dc2d5db6f62ac4c5a160d200be346100d923b1c3 Mon Sep 17 00:00:00 2001 +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Antheas Kapenekakis Date: Fri, 11 Oct 2024 19:09:05 +0200 -Subject: [PATCH v2 09/12] feat: add external option that now only lies to - steam +Subject: feat: add external option that now only lies to steam Previously, there was a force-panel option that allowed for VRR. However, this is no longer the case and VRR works fine. @@ -664,11 +662,10 @@ index 0569472..104f7a2 100644 2.47.0 -From b8e8677a811bbebe5f0f743ac22da7a83436d443 Mon Sep 17 00:00:00 2001 +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Antheas Kapenekakis Date: Mon, 14 Oct 2024 22:42:20 +0200 -Subject: [PATCH v2 10/12] fix(display-config): always fill in mutable refresh - rates +Subject: fix(display-config): always fill in mutable refresh rates Assume the user is not lying to us when they fill in dynamic_refresh_rates and that gamescope will work with e.g., CVT, so accept it even if no @@ -696,11 +693,10 @@ index 75c3258..f014be9 100644 2.47.0 -From 2d96bb5b3fc75690d60249a8e8ea29f3c667ef55 Mon Sep 17 00:00:00 2001 +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Antheas Kapenekakis Date: Fri, 25 Oct 2024 21:22:10 +0200 -Subject: [PATCH v2 11/12] fix(vrr): allow frame limiter to work with VRR - enabled +Subject: fix(vrr): allow frame limiter to work with VRR enabled Down to 48hz, modeset the correct framerate. Below 48hz, disable VRR and use the classic frame limiter. @@ -767,39 +763,18 @@ index 3dd64f8..7dacfe7 100644 2.47.0 -From c90aff28dae5c92170f47b2dc29c01770ff0dd42 Mon Sep 17 00:00:00 2001 +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Antheas Kapenekakis Date: Wed, 30 Oct 2024 00:39:03 +0100 -Subject: [PATCH v2 12/12] fix(battery): run at half hz while at steamUI and - disable VRR V2 + param +Subject: fix(battery): run at half hz while at steamUI and disable VRR V2 + + param --- - src/main.cpp | 2 ++ - src/steamcompmgr.cpp | 45 +++++++++++++++++++++++++++++++++----------- - 2 files changed, 36 insertions(+), 11 deletions(-) + src/steamcompmgr.cpp | 43 ++++++++++++++++++++++++++++++++----------- + 1 file changed, 32 insertions(+), 11 deletions(-) -diff --git a/src/main.cpp b/src/main.cpp -index 056e1c1..e6a634b 100644 ---- a/src/main.cpp -+++ b/src/main.cpp -@@ -132,6 +132,7 @@ const struct option *gamescope_options = (struct option[]){ - { "force-panel-type", required_argument, nullptr, 0 }, - { "force-external-orientation", required_argument, nullptr, 0 }, - { "disable-touch-click", no_argument, nullptr, 0 }, -+ { "disable-steamui-framelimit", no_argument, nullptr, 0 }, - { "enable-vrr-modesetting", no_argument, nullptr, 0 }, - { "force-windows-fullscreen", no_argument, nullptr, 0 }, - { "custom-refresh-rates", required_argument, nullptr, 0 }, -@@ -195,6 +196,7 @@ const char usage[] = - " -e, --steam enable Steam integration\n" - " --enable-hacky-texture enable hacky texture on hw that support it\n" - " --disable-touch-click disable touchscreen tap acting as a click\n" -+ " --disable-steamui-framelimit By default, for displays above 100Hz, framerate is halved in SteamUI. Disable that.\n" - " --enable-vrr-modesetting enable setting framerate while VRR is on in the internal display\n" - " --xwayland-count create N xwayland servers\n" - " --prefer-vk-device prefer Vulkan device for compositing (ex: 1002:7300)\n" diff --git a/src/steamcompmgr.cpp b/src/steamcompmgr.cpp -index 7dacfe7..70698ac 100644 +index 7dacfe7..4098c44 100644 --- a/src/steamcompmgr.cpp +++ b/src/steamcompmgr.cpp @@ -166,6 +166,9 @@ uint32_t g_reshade_technique_idx = 0; @@ -808,7 +783,7 @@ index 7dacfe7..70698ac 100644 bool g_bVRRRequested = false; +bool g_bVRRCanEnable = false; +bool b_bForceFrameLimit = false; -+bool g_bRefreshHalveEnable = true; ++bool g_bRefreshHalveEnable = false; static std::vector< steamcompmgr_win_t* > GetGlobalPossibleFocusWindows(); static bool @@ -905,24 +880,15 @@ index 7dacfe7..70698ac 100644 } if ( ev->atom == ctx->atoms.gamescopeDisplayForceInternal ) { -@@ -7507,6 +7511,8 @@ steamcompmgr_main(int argc, char **argv) - set_mura_overlay(optarg); - } else if (strcmp(opt_name, "disable-touch-click") == 0) { - cv_disable_touch_click = true; -+ } else if (strcmp(opt_name, "disable-steamui-framelimit") == 0) { -+ g_bRefreshHalveEnable = false; - } else if (strcmp(opt_name, "enable-vrr-modesetting") == 0) { - g_bVRRModesetting = true; - } else if (strcmp(opt_name, "enable-hacky-texture") == 0) { -@@ -7628,6 +7634,23 @@ steamcompmgr_main(int argc, char **argv) +@@ -7628,6 +7632,23 @@ steamcompmgr_main(int argc, char **argv) // as a question. const bool bIsVBlankFromTimer = vblank; -+ if ( window_is_steam( global_focus.focusWindow ) ) { ++ if ( g_bRefreshHalveEnable && window_is_steam( global_focus.focusWindow ) ) { + // Halve refresh rate and disable vrr on SteamUI + cv_adaptive_sync = false; + int nRealRefreshHz = gamescope::ConvertmHzToHz( g_nNestedRefresh ? g_nNestedRefresh : g_nOutputRefresh ); -+ if (g_bRefreshHalveEnable && nRealRefreshHz > 100 && g_nSteamCompMgrTargetFPSreq > 34) { ++ if (nRealRefreshHz > 100 && g_nSteamCompMgrTargetFPSreq > 34) { + g_nSteamCompMgrTargetFPS = nRealRefreshHz / 2; + b_bForceFrameLimit = true; + } else { @@ -941,3 +907,222 @@ index 7dacfe7..70698ac 100644 -- 2.47.0 + +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Antheas Kapenekakis +Date: Fri, 1 Nov 2024 17:27:54 +0100 +Subject: feat(battery): add atom for controlling frame halving + +--- + src/steamcompmgr.cpp | 6 ++++++ + src/xwayland_ctx.hpp | 2 ++ + 2 files changed, 8 insertions(+) + +diff --git a/src/steamcompmgr.cpp b/src/steamcompmgr.cpp +index 4098c44..6c8ce74 100644 +--- a/src/steamcompmgr.cpp ++++ b/src/steamcompmgr.cpp +@@ -5919,6 +5919,10 @@ handle_property_notify(xwayland_ctx_t *ctx, XPropertyEvent *ev) + MakeFocusDirty(); + } + } ++ if ( ev->atom == ctx->atoms.gamescopeFrameHalveAtom ) ++ { ++ g_bRefreshHalveEnable = !!get_prop( ctx, ctx->root, ctx->atoms.gamescopeFrameHalveAtom, 0 ); ++ } + } + + static int +@@ -7089,6 +7093,8 @@ void init_xwayland_ctx(uint32_t serverId, gamescope_xwayland_server_t *xwayland_ + ctx->atoms.primarySelection = XInternAtom(ctx->dpy, "PRIMARY", false); + ctx->atoms.targets = XInternAtom(ctx->dpy, "TARGETS", false); + ++ ctx->atoms.gamescopeFrameHalveAtom = XInternAtom( ctx->dpy, "GAMESCOPE_STEAMUI_HALFHZ", false );; ++ + ctx->root_width = DisplayWidth(ctx->dpy, ctx->scr); + ctx->root_height = DisplayHeight(ctx->dpy, ctx->scr); + +diff --git a/src/xwayland_ctx.hpp b/src/xwayland_ctx.hpp +index df2af70..e4eec9f 100644 +--- a/src/xwayland_ctx.hpp ++++ b/src/xwayland_ctx.hpp +@@ -246,6 +246,8 @@ struct xwayland_ctx_t final : public gamescope::IWaitable + Atom clipboard; + Atom primarySelection; + Atom targets; ++ ++ Atom gamescopeFrameHalveAtom; + } atoms; + + bool HasQueuedEvents(); +-- +2.47.0 + + +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Antheas Kapenekakis +Date: Wed, 13 Nov 2024 17:22:05 +0100 +Subject: feat: add DPMS support through an Atom + +--- + src/Backends/DRMBackend.cpp | 16 +++++++++++++--- + src/rendervulkan.hpp | 2 ++ + src/steamcompmgr.cpp | 18 +++++++++++++++--- + src/xwayland_ctx.hpp | 1 + + 4 files changed, 31 insertions(+), 6 deletions(-) + +diff --git a/src/Backends/DRMBackend.cpp b/src/Backends/DRMBackend.cpp +index f014be9..6bb0b88 100644 +--- a/src/Backends/DRMBackend.cpp ++++ b/src/Backends/DRMBackend.cpp +@@ -2669,6 +2669,9 @@ int drm_prepare( struct drm_t *drm, bool async, const struct FrameInfo_t *frameI + drm->needs_modeset = true; + } + ++ if (drm->pCRTC && drm->pCRTC->GetProperties().ACTIVE->GetCurrentValue() != !frameInfo->dpms) ++ drm->needs_modeset = true; ++ + drm_colorspace uColorimetry = DRM_MODE_COLORIMETRY_DEFAULT; + + const bool bWantsHDR10 = g_bOutputHDREnabled && frameInfo->outputEncodingEOTF == EOTF_PQ; +@@ -2724,7 +2727,7 @@ int drm_prepare( struct drm_t *drm, bool async, const struct FrameInfo_t *frameI + uint32_t flags = DRM_MODE_ATOMIC_NONBLOCK; + + // We do internal refcounting with these events +- if ( drm->pCRTC != nullptr ) ++ if ( !frameInfo->dpms && drm->pCRTC != nullptr) + flags |= DRM_MODE_PAGE_FLIP_EVENT; + + if ( async || g_bForceAsyncFlips ) +@@ -2797,7 +2800,13 @@ int drm_prepare( struct drm_t *drm, bool async, const struct FrameInfo_t *frameI + + if ( drm->pCRTC ) + { +- drm->pCRTC->GetProperties().ACTIVE->SetPendingValue( drm->req, 1u, true ); ++ if ( frameInfo->dpms ) { ++ // We can't disable a CRTC if it's already disabled ++ if (drm->pCRTC->GetProperties().ACTIVE->GetCurrentValue() != 0) ++ drm->pCRTC->GetProperties().ACTIVE->SetPendingValue(drm->req, 0, true); ++ } ++ else ++ drm->pCRTC->GetProperties().ACTIVE->SetPendingValue( drm->req, 1u, true ); + drm->pCRTC->GetProperties().MODE_ID->SetPendingValue( drm->req, drm->pending.mode_id ? drm->pending.mode_id->GetBlobValue() : 0lu, true ); + + if ( drm->pCRTC->GetProperties().VRR_ENABLED ) +@@ -2828,7 +2837,7 @@ int drm_prepare( struct drm_t *drm, bool async, const struct FrameInfo_t *frameI + drm->flags = flags; + + int ret; +- if ( drm->pCRTC == nullptr ) { ++ if (frameInfo->dpms || drm->pCRTC == nullptr ) { + ret = 0; + } else if ( drm->bUseLiftoff ) { + ret = drm_prepare_liftoff( drm, frameInfo, needs_modeset ); +@@ -3391,6 +3400,7 @@ namespace gamescope + + FrameInfo_t presentCompFrameInfo = {}; + presentCompFrameInfo.allowVRR = pFrameInfo->allowVRR; ++ presentCompFrameInfo.dpms = pFrameInfo->dpms; + presentCompFrameInfo.outputEncodingEOTF = pFrameInfo->outputEncodingEOTF; + + if ( bNeedsFullComposite ) +diff --git a/src/rendervulkan.hpp b/src/rendervulkan.hpp +index b537170..ccabd88 100644 +--- a/src/rendervulkan.hpp ++++ b/src/rendervulkan.hpp +@@ -281,6 +281,8 @@ struct FrameInfo_t + bool applyOutputColorMgmt; // drm only + EOTF outputEncodingEOTF; + ++ bool dpms; ++ + int layerCount; + struct Layer_t + { +diff --git a/src/steamcompmgr.cpp b/src/steamcompmgr.cpp +index 6c8ce74..77c9f28 100644 +--- a/src/steamcompmgr.cpp ++++ b/src/steamcompmgr.cpp +@@ -169,6 +169,7 @@ bool g_bVRRRequested = false; + bool g_bVRRCanEnable = false; + bool b_bForceFrameLimit = false; + bool g_bRefreshHalveEnable = false; ++bool g_bDPMS = false; + + static std::vector< steamcompmgr_win_t* > GetGlobalPossibleFocusWindows(); + static bool +@@ -2271,7 +2272,7 @@ bool ShouldDrawCursor() + } + + static void +-paint_all(bool async) ++paint_all(bool async, bool dpms) + { + gamescope_xwayland_server_t *root_server = wlserver_get_xwayland_server(0); + xwayland_ctx_t *root_ctx = root_server->ctx.get(); +@@ -2322,6 +2323,7 @@ paint_all(bool async) + frameInfo.outputEncodingEOTF = g_ColorMgmt.pending.outputEncodingEOTF; + frameInfo.allowVRR = cv_adaptive_sync; + frameInfo.bFadingOut = fadingOut; ++ frameInfo.dpms = dpms; + + // If the window we'd paint as the base layer is the streaming client, + // find the video underlay and put it up first in the scenegraph +@@ -2494,6 +2496,11 @@ paint_all(bool async) + + if ( !bValidContents || !GetBackend()->IsVisible() ) + { ++ // If dpms, we do not need to display a frame. ++ // Force the display to refresh. ++ if ( dpms ) { ++ GetBackend()->Present( &frameInfo, async ); ++ } + return; + } + +@@ -5923,6 +5930,10 @@ handle_property_notify(xwayland_ctx_t *ctx, XPropertyEvent *ev) + { + g_bRefreshHalveEnable = !!get_prop( ctx, ctx->root, ctx->atoms.gamescopeFrameHalveAtom, 0 ); + } ++ if (ev->atom == ctx->atoms.gamescopeDPMS) ++ { ++ g_bDPMS = !!get_prop(ctx, ctx->root, ctx->atoms.gamescopeDPMS, 0); ++ } + } + + static int +@@ -7094,6 +7105,7 @@ void init_xwayland_ctx(uint32_t serverId, gamescope_xwayland_server_t *xwayland_ + ctx->atoms.targets = XInternAtom(ctx->dpy, "TARGETS", false); + + ctx->atoms.gamescopeFrameHalveAtom = XInternAtom( ctx->dpy, "GAMESCOPE_STEAMUI_HALFHZ", false );; ++ ctx->atoms.gamescopeDPMS = XInternAtom(ctx->dpy, "GAMESCOPE_DPMS", false); + + ctx->root_width = DisplayWidth(ctx->dpy, ctx->scr); + ctx->root_height = DisplayHeight(ctx->dpy, ctx->scr); +@@ -8061,9 +8073,9 @@ steamcompmgr_main(int argc, char **argv) + bShouldPaint = false; + } + +- if ( bShouldPaint ) ++ if ( bShouldPaint || (g_bDPMS && vblank) ) + { +- paint_all( eFlipType == FlipType::Async ); ++ paint_all( eFlipType == FlipType::Async, g_bDPMS ); + + hasRepaint = false; + hasRepaintNonBasePlane = false; +diff --git a/src/xwayland_ctx.hpp b/src/xwayland_ctx.hpp +index e4eec9f..2347cbb 100644 +--- a/src/xwayland_ctx.hpp ++++ b/src/xwayland_ctx.hpp +@@ -248,6 +248,7 @@ struct xwayland_ctx_t final : public gamescope::IWaitable + Atom targets; + + Atom gamescopeFrameHalveAtom; ++ Atom gamescopeDPMS; + } atoms; + + bool HasQueuedEvents(); +-- +2.47.0 + diff --git a/spec_files/steamdeck-dsp/bazzite.patch b/spec_files/steamdeck-dsp/bazzite.patch index 9f10c1e7f2..8234137045 100644 --- a/spec_files/steamdeck-dsp/bazzite.patch +++ b/spec_files/steamdeck-dsp/bazzite.patch @@ -26,7 +26,7 @@ index ac7adb6..d46bb14 100755 for cffile in "$prpath"/"$confd"/*.conf do - [ -f "$cffile" ] && cp -av "$cffile" $runconf/"$confd" -+ [ -f "$cffile" ] && /usr/bin/cp -avf "$cffile" $confdir/"$confd" ++ [ -f "$cffile" ] && /usr/bin/cp -avf "$cffile" $confdir/"$confd" || true done fi done @@ -90,14 +90,14 @@ index 3f03354..1e43489 100755 for cffile in "$prpath"/"$confd"/*.lua do - [ -f "$cffile" ] && cp -av "$cffile" $runconf/"$confd" -+ [ -f "$cffile" ] && /usr/bin/cp -avf "$cffile" $confdir/"$confd" ++ [ -f "$cffile" ] && /usr/bin/cp -avf "$cffile" $confdir/"$confd" || true done ;; *.conf.d) for cffile in "$prpath"/"$confd"/*.conf do - [ -f "$cffile" ] && cp -av "$cffile" $runconf/"$confd" -+ [ -f "$cffile" ] && /usr/bin/cp -avf "$cffile" $confdir/"$confd" ++ [ -f "$cffile" ] && /usr/bin/cp -avf "$cffile" $confdir/"$confd" || true done ;; esac diff --git a/system_files/deck/shared/usr/lib/systemd/system/hhd@.service.d/override.conf b/system_files/deck/shared/usr/lib/systemd/system/hhd@.service.d/override.conf index 0f761302c1..4b2a328547 100644 --- a/system_files/deck/shared/usr/lib/systemd/system/hhd@.service.d/override.conf +++ b/system_files/deck/shared/usr/lib/systemd/system/hhd@.service.d/override.conf @@ -2,3 +2,4 @@ Environment="HHD_PPD_MASK=1" Environment="HHD_ALLY_POWERSAVE=1" Environment="HHD_HORI_STEAM=1" +Environment="HHD_GS_STEAMUI_HALFHZ=1" \ No newline at end of file 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 a0f1c192b8..0eb0d3aabb 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 @@ -6,27 +6,17 @@ screens: first-screen: source: yafti.screen.title values: - title: "Welcome to Bazzite (Handheld & HTPC Edition)" + title: "Welcome to Bazzite-Deck" icon: "/usr/share/ublue-os/bazzite/logo.svg" description: | - Configure your system to get started. This utility can be re-opened at any time, so don't feel like you have to get it perfect your first go-through. - configure-bazzite: + Install additional applications. + applications: source: yafti.screen.package values: title: Setting up Bazzite show_terminal: true package_manager: yafti.plugin.run groups: - Add input group to current user: - description: Adds the input group to your current user. Required by certain controller drivers. - default: true - packages: - - Set input group: sudo -A ujust add-user-to-input-group - BIOS & Firmware Updates: - description: Enables BIOS & Firmware updates for Steam Deck hardware - default: true - packages: - - Enable Updates: sudo -A ujust enable-deck-bios-firmware-updates Decky Loader: description: A plugin loader for the Steam Deck default: false @@ -44,37 +34,6 @@ screens: packages: - Install Sunshine: ujust setup-sunshine install - Autostart Sunshine: ujust setup-sunshine autostart - Hide GRUB Menu: - description: | - NOTE: Press the escape key before boot to show the menu - default: false - packages: - - Hide GRUB: sudo -A ujust configure-grub hide - Oversteer: - description: Application to control supported steering wheels - default: false - packages: - - Install Oversteer: ujust install-oversteer - OpenRazer: - description: Enables additional capabilities for Razer Hardware - default: false - packages: - - Install OpenRazer: ujust install-openrazer - OpenRGB: - description: Open source RGB lighting control that doesn't depend on manufacturer software - default: false - packages: - - Install OpenRGB: ujust install-openrgb - Wootility: - description: A configurator for Wooting keyboards - default: false - packages: - - Retrieve Wootility: ujust install-wootility - OpenTabletDriver: - description: Open source, cross-platform, user-mode tablet driver - default: false - packages: - - Install OpenTabletDriver: ujust install-opentabletdriver Resilio Sync: description: A file synchronization utility powered by BitTorrent default: false @@ -85,139 +44,68 @@ screens: default: false packages: - Install scrcpy: ujust install-scrcpy - SteamCMD: - description: Installs SteamCMD - default: true - packages: - - Install SteamCMD: ujust install-steamcmd - applications: + DaVinci Resolve: + description: Install/update DaVinci Resolve, a closed-source video editing utility + default: false + packages: + - Install/Update DaVinci Resolve: sudo -A ujust install-resolve + configure-bazzite: source: yafti.screen.package values: title: Application Installation show_terminal: true package_manager: yafti.plugin.flatpak - package_manager_defaults: - user: true - system: false groups: - Web Browsers: - description: Additional browsers to complement Firefox - default: false + Add input group to current user: + description: Adds the input group to your current user. Required by certain controller drivers. + default: true + packages: + - Set input group: sudo -A ujust add-user-to-input-group + BIOS & Firmware Updates: + description: Enables BIOS & Firmware updates for Steam Deck hardware + default: true packages: - - Brave: com.brave.Browser - - Google Chrome: com.google.Chrome - - LibreWolf: io.gitlab.librewolf-community - - Microsoft Edge: com.microsoft.Edge - - Opera: com.opera.Opera - - Vivaldi: com.vivaldi.Vivaldi - Gaming: - description: "Rock and Stone!" + - Enable Updates: sudo -A ujust enable-deck-bios-firmware-updates + Hide GRUB Menu: + description: | default: false packages: - - BoilR: io.github.philipk.boilr - - Bottles: com.usebottles.bottles - - Chiaki4Deck (PlayStation Remote Play): io.github.streetpea.Chiaki4deck - - Discord (Discover Overlay Included): com.discordapp.Discord - - DOSBox Staging: io.github.dosbox-staging - - Fightcade: com.fightcade.Fightcade - - GeForce NOW Electron: io.github.hmlendea.geforcenow-electron - - Greenlight: io.github.unknownskl.greenlight - - Heroic Games Launcher (GOG & Epic): com.heroicgameslauncher.hgl - - itch: io.itch.itch - - ludusavi (Game Save Backup): com.github.mtkennerly.ludusavi - - Minecraft (Prism Launcher): org.prismlauncher.PrismLauncher - - Minecraft Bedrock Launcher: io.mrarm.mcpelauncher - - Moonlight: com.moonlight_stream.Moonlight - - Mumble: info.mumble.Mumble - - OpenMW: org.openmw.OpenMW - - osu: sh.ppy.osu - - Space Cadet Pinball: com.github.k4zmu2a.spacecadetpinball - - Sonic Robo Blast 2: org.srb2.SRB2 - - Sonic Robo Blast 2 Kart: org.srb2.SRB2Kart - - Steam Link: com.valvesoftware.SteamLink - - SuperTux: org.supertuxproject.SuperTux - - SuperTuxKart: net.supertuxkart.SuperTuxKart - - TeamSpeak: com.teamspeak.TeamSpeak - - XIV Launcher (Final Fantasy XIV): dev.goats.xivlauncher - Emulation: - description: Play games like it's 1972 (Leave these all unchecked if you're planning to use EmuDeck) + - Hide GRUB: sudo -A ujust configure-grub hide + Visible Password Aestriks: + description: Toggles pwfeedback on. + default: true + packages: + - Install bazzite-cli: ujust bazzite-cli + bazzite-cli: + description: Bazzite CLI mod for Bluefin style CLI bling. + default: false + packages: + - Install bazzite-cli: ujust bazzite-cli + Oversteer: + description: Application to control supported steering wheels default: false packages: - - Cemu: info.cemu.Cemu - - Dolphin: org.DolphinEmu.dolphin-emu - - DuckStation: org.duckstation.DuckStation - - MAME: org.mamedev.MAME - - melonDS: net.kuribo64.melonDS - - mGBA: io.mgba.mGBA - - PCSX2: net.pcsx2.PCSX2 - - Parallel Launcher: ca.parallel_launcher.ParallelLauncher - - Pegasus: org.pegasus_frontend.Pegasus - - PPSSPP: org.ppsspp.PPSSPP - - RetroArch: org.libretro.RetroArch - - RetroDECK: net.retrodeck.retrodeck - - Rosalie's Mupen GUI: com.github.Rosalie241.RMG - - RPCS3: net.rpcs3.RPCS3 - - Ryujinx: org.ryujinx.Ryujinx - - ScummVM: org.scummvm.ScummVM - - Snes9x: com.snes9x.Snes9x - - Stella: io.github.stella_emu.Stella - - xemu: app.xemu.xemu - Streaming: - description: Stream to the Internet + - Install Oversteer: ujust install-oversteer + OpenRazer: + description: Enables additional capabilities for Razer Hardware default: false packages: - - OBS Studio: com.obsproject.Studio - - Boatswain for Streamdeck: com.feaneron.Boatswain - Music: - description: "Rock and Roll!" + - Install OpenRazer: ujust install-openrazer + OpenRGB: + description: Open source RGB lighting control that doesn't depend on manufacturer software default: false packages: - - Cider (Apple Music Client): sh.cider.Cider - - Spotify: com.spotify.Client - - Strawberry Music Player: org.strawberrymusicplayer.strawberry - - Tidal-hifi: com.mastermindzh.tidal-hifi - Office and Productivity: - description: Bow to Capitalism + - Install OpenRGB: ujust install-openrgb + OpenTabletDriver: + description: Open source, cross-platform, user-mode tablet driver default: false packages: - - Ardour: org.ardour.Ardour - - Blender: org.blender.Blender - - darktable: org.darktable.Darktable - - GIMP: org.gimp.GIMP - - Inkscape: org.inkscape.Inkscape - - Joplin: net.cozic.joplin_desktop - - Kdenlive: org.kde.kdenlive - - Krita: org.kde.krita - - LibreOffice: org.libreoffice.LibreOffice - - Obsidian: md.obsidian.Obsidian - - OnlyOffice: org.onlyoffice.desktopeditors - - Planify: io.github.alainm23.planify - - Slack: com.slack.Slack - - Standard Notes: org.standardnotes.standardnotes - - Tenacity: org.tenacityaudio.Tenacity - - Thunderbird Email: org.mozilla.Thunderbird - - Xournal++: com.github.xournalpp.xournalpp - Utilities and System Tools: - description: Helpful tools + - Install OpenTabletDriver: ujust install-opentabletdriver + Wootility: + description: A configurator for Wooting keyboards default: false packages: - - AppImage Pool: io.github.prateekmedia.appimagepool - - Barrier: com.github.debauchee.barrier - - Bitwarden: com.bitwarden.desktop - - Calibre: com.calibre_ebook.calibre - - DejaDup: org.gnome.DejaDup - - Fedora Media Writer: org.fedoraproject.MediaWriter - - Gradience: com.github.GradienceTeam.Gradience - - KeePassXC: org.keepassxc.KeePassXC - - Main Menu: page.codeberg.libre_menu_editor.LibreMenuEditor - - Metadata Cleaner: fr.romainvigier.MetadataCleaner - - Pika Backup: org.gnome.World.PikaBackup - - qBittorrent: org.qbittorrent.qBittorrent - - Resources: net.nokyan.Resources - - SaveDesktop: io.github.vikdevelop.SaveDesktop - - Solaar: io.github.pwr_solaar.solaar - - Syncthing: com.github.zocker_160.SyncThingy - - VLC: org.videolan.VLC + - Retrieve Wootility: ujust install-wootility final-screen: source: yafti.screen.title values: @@ -235,4 +123,4 @@ screens: - "Reboot now": run: systemctl reboot description: | - Thank you for trying Bazzite (Handheld & HTPC Edition). Please reboot to apply changes made by this setup utility. + Please reboot to apply changes made by this setup utility. diff --git a/system_files/deck/shared/usr/share/ublue-os/just/85-bazzite-image.just b/system_files/deck/shared/usr/share/ublue-os/just/85-bazzite-image.just index 8d83f6900c..1a0203d9a0 100644 --- a/system_files/deck/shared/usr/share/ublue-os/just/85-bazzite-image.just +++ b/system_files/deck/shared/usr/share/ublue-os/just/85-bazzite-image.just @@ -89,6 +89,26 @@ enable-ryzenadj-max-performance: sudo udevadm control --reload-rules echo 'installation complete. Reboot to take effect' +# toggles password prompt feedback in terminal, where sudo password prompts will display asterisks when enabled +toggle-password-feedback ACTION="": + #!/usr/bin/bash + PWFEEDBACK_FILE="/etc/sudoers.d/enable-pwfeedback" + OPTION={{ ACTION }} + + if [ "$OPTION" = "on" ]; then + echo 'Defaults pwfeedback' | sudo tee $PWFEEDBACK_FILE + echo "enabled, restart terminal to see changes" + elif [ "$OPTION" = "off" ]; then + sudo rm -f $PWFEEDBACK_FILE + echo "disabled pwfeedback. restart your terminal to see changes" + elif sudo test -f $PWFEEDBACK_FILE; then + sudo rm -f $PWFEEDBACK_FILE + echo "disabled pwfeedback. restart your terminal to see changes" + else + echo 'Defaults pwfeedback' | sudo tee $PWFEEDBACK_FILE + echo "enabled, restart terminal to see changes" + fi + # disables ryzenadj --max-performance on AC power disable-ryzenadj-max-performance: #/bin/bash diff --git a/system_files/desktop/kinoite/usr/lib/systemd/system/usr-share-sddm-themes.mount b/system_files/desktop/kinoite/usr/lib/systemd/system/usr-share-sddm-themes.mount new file mode 100644 index 0000000000..7e3ad30304 --- /dev/null +++ b/system_files/desktop/kinoite/usr/lib/systemd/system/usr-share-sddm-themes.mount @@ -0,0 +1,15 @@ +# Workaround to allow KDE Discover to install sddm themes + +[Unit] +Description=KDE writable sddm workaround +RequiresMountsFor=/usr/share/sddm/themes +PartOf=bazzite-kde-themes-workaround.target + +[Mount] +Type=overlay +What=overlay +Where=/usr/share/sddm/themes +Options=lowerdir=/usr/share/sddm/themes,upperdir=/var/sddm_themes/themes,workdir=/var/sddm_themes/themes.work + +[Install] +WantedBy=multi-user.target diff --git a/system_files/desktop/shared/usr/bin/boot-windows b/system_files/desktop/shared/usr/bin/boot-windows new file mode 100755 index 0000000000..1c0b994b95 --- /dev/null +++ b/system_files/desktop/shared/usr/bin/boot-windows @@ -0,0 +1,13 @@ +#!/usr/bin/bash + +# Look up the boot number for Windows in the EFI records +boot_number=$(echo $(efibootmgr) | grep -Po "(?<=Boot)\S{4}(?=( |\* )Windows)") + +# Check that Windows EFI entry was found +if [ -z "$boot_number" ]; then + echo "Cannot find Windows boot in EFI, exiting" + exit 1 +fi + +# Set next boot to be Windows and reboot the machine +sudo efibootmgr -n "${boot_number}" && reboot diff --git a/system_files/desktop/shared/usr/bin/copr b/system_files/desktop/shared/usr/bin/copr index 1b25db1007..9a15add33c 100755 --- a/system_files/desktop/shared/usr/bin/copr +++ b/system_files/desktop/shared/usr/bin/copr @@ -1,15 +1,2 @@ #!/bin/bash - -# Wrapper for 'dnf5 copr' -# Includes Workaround to append the chroot "fedora-RELEASE-ARCH" -function dnf5_wrapper() { - precmd="/usr/bin/dnf5 copr" - if [[ $* =~ copr\s+enable && $# -eq 2 ]]; then - exec $precmd enable "$2" "${3:-fedora-"$(lsb_release -sr)"-"$(uname -m)"}" - else - exec $precmd "$@" - fi - return -} - -dnf5_wrapper "$@" +exec dnf5 copr "$@" diff --git a/system_files/desktop/shared/usr/libexec/bazzite-hardware-setup b/system_files/desktop/shared/usr/libexec/bazzite-hardware-setup index 7320900db6..02202f2941 100755 --- a/system_files/desktop/shared/usr/libexec/bazzite-hardware-setup +++ b/system_files/desktop/shared/usr/libexec/bazzite-hardware-setup @@ -189,9 +189,6 @@ if [[ $IMAGE_NAME =~ "deck" || $IMAGE_NAME =~ "ally" ]]; then fi fi - # Ensure SCX service is disabled for now. - systemctl disable --now scx.service - systemctl enable --now jupiter-fan-control.service systemctl enable --now vpower.service else 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 3f81f78d4e..6efe10ba5d 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 @@ -9,19 +9,14 @@ screens: title: "Welcome to Bazzite" icon: "/usr/share/ublue-os/bazzite/logo.svg" description: | - Configure your system to get started. This utility can be re-opened at any time, so don't feel like you have to get it perfect your first go-through. - configure-bazzite: + Install additional applications. + applications: source: yafti.screen.package values: title: Setting up Bazzite show_terminal: true package_manager: yafti.plugin.run groups: - Add input group to current user: - description: Adds the input group to your current user. Required by certain controller drivers. - default: true - packages: - - Set input group: sudo -A ujust add-user-to-input-group Sunshine: description: A self-hosted game stream host for Moonlight default: false @@ -33,31 +28,6 @@ screens: default: false packages: - Retrieve EmuDeck: ujust install-emudeck - OpenRazer: - description: Enables additional capabilities for Razer Hardware - default: false - packages: - - Install OpenRazer: ujust install-openrazer - OpenRGB: - description: Open source RGB lighting control that doesn't depend on manufacturer software - default: false - packages: - - Install OpenRGB: ujust install-openrgb - OpenTabletDriver: - description: Open source, cross-platform, user-mode tablet driver - default: false - packages: - - Install OpenTabletDriver: ujust install-opentabletdriver - Oversteer: - description: Application to control supported steering wheels - default: false - packages: - - Install Oversteer: ujust install-oversteer - Wootility: - description: A configurator for Wooting keyboards - default: false - packages: - - Retrieve Wootility: ujust install-wootility Resilio Sync: description: A file synchronization utility powered by BitTorrent default: false @@ -68,16 +38,11 @@ screens: default: false packages: - Install scrcpy: ujust install-scrcpy - amd-additions: - source: yafti.screen.package - values: - title: AMD Additions - condition: - run: grep -qv 'nvidia' <<< $(jq -r '."image-flavor"' < /usr/share/ublue-os/image-info.json) - show_terminal: true - package_manager: yafti.plugin.run - packages: - - LACT (GPU Overclocking): ujust install-lact + lact: + description: LACT provides GPU overclocking for AMD & Nvidia GPUs + default: false + packages: + - Install LACT: ujust install-lact nvidia-additions: source: yafti.screen.package values: @@ -88,135 +53,53 @@ screens: package_manager: yafti.plugin.run packages: - Supergfxctl (Hybrid GPU Switching): ujust enable-supergfxctl - applications: + configure-bazzite: source: yafti.screen.package values: - title: Application Installation + title: System Configuration show_terminal: true - package_manager: yafti.plugin.flatpak - package_manager_defaults: - user: true - system: false + package_manager: yafti.plugin.run groups: - Web Browsers: - description: Additional browsers to complement Firefox - default: false - packages: - - Brave: com.brave.Browser - - Google Chrome: com.google.Chrome - - LibreWolf: io.gitlab.librewolf-community - - Microsoft Edge: com.microsoft.Edge - - Opera: com.opera.Opera - - Vivaldi: com.vivaldi.Vivaldi - Gaming: - description: "Rock and Stone!" - default: false + Add input group to current user: + description: Adds the input group to your current user. Required by certain controller drivers. + default: true packages: - - BoilR: io.github.philipk.boilr - - Bottles: com.usebottles.bottles - - Chiaki (PlayStation Remote Play): re.chiaki.Chiaki - - Discord: com.discordapp.Discord - - DOSBox Staging: io.github.dosbox-staging - - GeForce NOW Electron: io.github.hmlendea.geforcenow-electron - - Greenlight: io.github.unknownskl.greenlight - - Heroic Games Launcher (GOG & Epic): com.heroicgameslauncher.hgl - - itch: io.itch.itch - - ludusavi (Game Save Backup): com.github.mtkennerly.ludusavi - - Minecraft (Prism Launcher): org.prismlauncher.PrismLauncher - - Minecraft Bedrock Launcher: io.mrarm.mcpelauncher - - Moonlight: com.moonlight_stream.Moonlight - - Mumble: info.mumble.Mumble - - OpenMW: org.openmw.OpenMW - - osu: sh.ppy.osu - - Space Cadet Pinball: com.github.k4zmu2a.spacecadetpinball - - Sonic Robo Blast 2: org.srb2.SRB2 - - Sonic Robo Blast 2 Kart: org.srb2.SRB2Kart - - Steam Link: com.valvesoftware.SteamLink - - SuperTux: org.supertuxproject.SuperTux - - SuperTuxKart: net.supertuxkart.SuperTuxKart - - TeamSpeak: com.teamspeak.TeamSpeak - - XIV Launcher (Final Fantasy XIV): dev.goats.xivlauncher - Emulation: - description: Play games like it's 1972 + - Set input group: sudo -A ujust add-user-to-input-group + Visible Password Aestriks: + description: Toggles pwfeedback on. + default: true + packages: + - Enable pwfeedback: sudo -A ujust toggle-password-feedback on + OpenRazer: + description: Enables additional capabilities for Razer Hardware default: false packages: - - Cemu: info.cemu.Cemu - - Dolphin: org.DolphinEmu.dolphin-emu - - DuckStation: org.duckstation.DuckStation - - MAME: org.mamedev.MAME - - melonDS: net.kuribo64.melonDS - - mGBA: io.mgba.mGBA - - PCSX2: net.pcsx2.PCSX2 - - Parallel Launcher: ca.parallel_launcher.ParallelLauncher - - Pegasus: org.pegasus_frontend.Pegasus - - PPSSPP: org.ppsspp.PPSSPP - - RetroArch: org.libretro.RetroArch - - RetroDECK: net.retrodeck.retrodeck - - Rosalie's Mupen GUI: com.github.Rosalie241.RMG - - RPCS3: net.rpcs3.RPCS3 - - Ryujinx: org.ryujinx.Ryujinx - - ScummVM: org.scummvm.ScummVM - - Snes9x: com.snes9x.Snes9x - - Stella: io.github.stella_emu.Stella - - xemu: app.xemu.xemu - Streaming: - description: Stream to the Internet + - Install OpenRazer: ujust install-openrazer + OpenRGB: + description: Open source RGB lighting control that doesn't depend on manufacturer software default: false packages: - - OBS Studio: com.obsproject.Studio - - Boatswain for Streamdeck: com.feaneron.Boatswain - Music: - description: "Rock and Roll!" + - Install OpenRGB: ujust install-openrgb + OpenTabletDriver: + description: Open source, cross-platform, user-mode tablet driver default: false packages: - - Cider (Apple Music Client): sh.cider.Cider - - Spotify: com.spotify.Client - - Strawberry Music Player: org.strawberrymusicplayer.strawberry - - Tidal-hifi: com.mastermindzh.tidal-hifi - Office and Productivity: - description: Bow to Capitalism + - Install OpenTabletDriver: ujust install-opentabletdriver + Oversteer: + description: Application to control supported steering wheels default: false packages: - - Ardour: org.ardour.Ardour - - Blender: org.blender.Blender - - darktable: org.darktable.Darktable - - GIMP: org.gimp.GIMP - - Inkscape: org.inkscape.Inkscape - - Joplin: net.cozic.joplin_desktop - - Kdenlive: org.kde.kdenlive - - Krita: org.kde.krita - - LibreOffice: org.libreoffice.LibreOffice - - Obsidian: md.obsidian.Obsidian - - OnlyOffice: org.onlyoffice.desktopeditors - - Planify: io.github.alainm23.planify - - Slack: com.slack.Slack - - Standard Notes: org.standardnotes.standardnotes - - Tenacity: org.tenacityaudio.Tenacity - - Thunderbird Email: org.mozilla.Thunderbird - - Xournal++: com.github.xournalpp.xournalpp - Utilities and System Tools: - description: Helpful tools + - Install Oversteer: ujust install-oversteer + CoolerControl: + description: A GUI for viewing all your system's sensors and for creating custom fan and pump profiles + default: false + packages: + - Install CoolerControl: ujust install-coolercontrol + Wootility: + description: A configurator for Wooting keyboards default: false packages: - - AppImage Pool: io.github.prateekmedia.appimagepool - - Barrier: com.github.debauchee.barrier - - Bitwarden: com.bitwarden.desktop - - Calibre: com.calibre_ebook.calibre - - DejaDup: org.gnome.DejaDup - - Easy Effects: com.github.wwmm.easyeffects - - Fedora Media Writer: org.fedoraproject.MediaWriter - - Gradience: com.github.GradienceTeam.Gradience - - JamesDSP: me.timschneeberger.jdsp4linux - - KeePassXC: org.keepassxc.KeePassXC - - Main Menu: page.codeberg.libre_menu_editor.LibreMenuEditor - - Metadata Cleaner: fr.romainvigier.MetadataCleaner - - Pika Backup: org.gnome.World.PikaBackup - - qBittorrent: org.qbittorrent.qBittorrent - - Resources: net.nokyan.Resources - - SaveDesktop: io.github.vikdevelop.SaveDesktop - - Solaar: io.github.pwr_solaar.solaar - - Syncthing: com.github.zocker_160.SyncThingy - - VLC: org.videolan.VLC + - Retrieve Wootility: ujust install-wootility final-screen: source: yafti.screen.title values: @@ -234,4 +117,4 @@ screens: - "Reboot now": run: systemctl reboot description: | - Thank you for trying Bazzite. Please reboot to apply changes made by this setup utility. + Please reboot to apply changes made by this setup utility. 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 dafec3a11b..1e7e82e9ca 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 @@ -79,25 +79,6 @@ enable-displaylink: enable-tailscale: systemctl enable --now tailscaled.service -# toggles password prompt feedback in terminal, where sudo password prompts will display asterisks when enabled -toggle-password-feedback ACTION="": - #!/usr/bin/bash - PWFEEDBACK_FILE="/etc/sudoers.d/enable-pwfeedback" - OPTION={{ ACTION }} - if [ "$OPTION" = "on" ]; then - echo 'Defaults pwfeedback' | sudo tee $PWFEEDBACK_FILE - echo "enabled, restart terminal to see changes" - elif [ "$OPTION" = "off" ]; then - sudo rm -f $PWFEEDBACK_FILE - echo "disabled pwfeedback. restart your terminal to see changes" - elif sudo test -f $PWFEEDBACK_FILE; then - sudo rm -f $PWFEEDBACK_FILE - echo "disabled pwfeedback. restart your terminal to see changes" - else - echo 'Defaults pwfeedback' | sudo tee $PWFEEDBACK_FILE - echo "enabled, restart terminal to see changes" - fi - # Configure watchdog (default: enabled, recovers the system in the event of a malfunction) configure-watchdog ACTION="": #!/usr/bin/bash @@ -370,6 +351,26 @@ benchmark: echo 'Running a 1 minute benchmark ...' cd /tmp && stress-ng --matrix 0 -t 1m --times +# toggles password prompt feedback in terminal, where sudo password prompts will display asterisks when enabled +toggle-password-feedback ACTION="": + #!/usr/bin/bash + PWFEEDBACK_FILE="/etc/sudoers.d/enable-pwfeedback" + OPTION={{ ACTION }} + + if [ "$OPTION" = "on" ]; then + echo 'Defaults pwfeedback' | sudo tee $PWFEEDBACK_FILE + echo "enabled, restart terminal to see changes" + elif [ "$OPTION" = "off" ]; then + sudo rm -f $PWFEEDBACK_FILE + echo "disabled pwfeedback. restart your terminal to see changes" + elif sudo test -f $PWFEEDBACK_FILE; then + sudo rm -f $PWFEEDBACK_FILE + echo "disabled pwfeedback. restart your terminal to see changes" + else + echo 'Defaults pwfeedback' | sudo tee $PWFEEDBACK_FILE + echo "enabled, restart terminal to see changes" + fi + post-gamescope-logs: #!/usr/bin/bash OUTPUT_FILE="/tmp/gathered_info.txt" diff --git a/system_files/desktop/shared/usr/share/ublue-os/just/82-bazzite-apps.just b/system_files/desktop/shared/usr/share/ublue-os/just/82-bazzite-apps.just index 02b6ab975b..54c19d0c69 100644 --- a/system_files/desktop/shared/usr/share/ublue-os/just/82-bazzite-apps.just +++ b/system_files/desktop/shared/usr/share/ublue-os/just/82-bazzite-apps.just @@ -5,9 +5,9 @@ install-lact: #!/usr/bin/bash rpm-ostree kargs --append-if-missing=$(printf 'amdgpu.ppfeaturemask=0x%x\n' "$(($(cat /sys/module/amdgpu/parameters/ppfeaturemask) | 0x4000))") if [[ ${BASE_IMAGE_NAME} == 'silverblue' ]]; then - rpm-ostree install lact-libadwaita - else - rpm-ostree install lact + rpm-ostree install --apply-live -y lact-libadwaita + else + rpm-ostree install --apply-live -y lact fi sudo systemctl enable --now lactd diff --git a/system_files/desktop/shared/usr/share/ublue-os/just/86-bazzite-windows.just b/system_files/desktop/shared/usr/share/ublue-os/just/86-bazzite-windows.just new file mode 100644 index 0000000000..ab14b02797 --- /dev/null +++ b/system_files/desktop/shared/usr/share/ublue-os/just/86-bazzite-windows.just @@ -0,0 +1,8 @@ +# vim: set ft=make : + +# Adds a script in Steam to boot Windows which is useful for dual-boot setups +setup-boot-windows-steam: + echo "Making efibootmgr -n usable without sudo password" + echo "%wheel ALL=(root) NOPASSWD: /usr/sbin/efibootmgr" | sudo tee /etc/sudoers.d/efibootmgr-config + echo "Adding /usr/bin/boot-windows as a Non-steam game" + /usr/bin/steamos-add-to-steam /usr/bin/boot-windows diff --git a/system_files/desktop/shared/usr/share/ublue-os/motd/tips/10-ublue.md b/system_files/desktop/shared/usr/share/ublue-os/motd/tips/10-ublue.md index a72544b0ea..0f18e74de7 100644 --- a/system_files/desktop/shared/usr/share/ublue-os/motd/tips/10-ublue.md +++ b/system_files/desktop/shared/usr/share/ublue-os/motd/tips/10-ublue.md @@ -4,4 +4,5 @@ Packages installed in Distrobox can be exported to appear like any other applica *This isn't a distro*, this is a custom image built on  Fedora Atomic Desktop technology~[View our mission](https://ublue.it/mission/) **Support the app store!**~[Donate to  Flatpak](https://opencollective.com/flatpak) **Support indie game preservation and OSS developers!**~[Join Hit Save!'s Patreon](https://patreon.com/hitsave) +**Protect your video games!**~[Visit Stop Killing Games](https://www.stopkillinggames.com/) **H.264 hardware acceleration is supported out of the box.** No tweaks necessary! \ No newline at end of file