diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8370c177..49c6d05f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -31,6 +31,8 @@ on: merge_group: workflow_dispatch: inputs: + handwritten: + description: 'Small changelog:' # Run with this periodically to analyze the image again # As package drift will make the plan eventually non-ideal # (existing users will have to redownload most of the image) @@ -62,13 +64,13 @@ jobs: base_image_name: [kinoite, silverblue] target_image_flavor: [main, asus] target_nvidia_flavor: [nvidia, nvidia-open] - fedora_version: [40] + fedora_version: [41] include: - - fedora_version: 40 + - fedora_version: 41 is_latest_version: true is_stable_version: true - kernel_flavor: fsync-ba # must match a kernel_flavor from akmods repo - kernel_version: 6.9.12-210.fsync.fc40.x86_64 # must match a cached version of the above flavor + kernel_flavor: bazzite # must match a kernel_flavor from akmods repo + kernel_version: 6.11.5-303.bazzite.fc41.x86_64 # must match a cached version of the above flavor exclude: - base_name: bazzite target_nvidia_flavor: nvidia @@ -275,6 +277,7 @@ jobs: 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 @@ -319,9 +322,6 @@ jobs: BUILD_TAGS+=("${FEDORA_VERSION}-unstable") BUILD_TAGS+=("unstable-${FEDORA_VERSION}") # flip ver to be last - # Per upstream ver - BUILD_TAGS+=("unstable-${UPSTREAM_TAG}") - if [ -n "$LATEST" ]; then BUILD_TAGS+=("unstable") fi @@ -330,16 +330,12 @@ jobs: BUILD_TAGS+=("${FEDORA_VERSION}-testing") BUILD_TAGS+=("testing-${FEDORA_VERSION}") # flip ver to be last - # Per upstream ver - BUILD_TAGS+=("testing-${UPSTREAM_TAG}") - if [ -n "$LATEST" ]; then BUILD_TAGS+=("testing") fi else BUILD_TAGS+=("${FEDORA_VERSION}") - BUILD_TAGS+=("${UPSTREAM_TAG}") - BUILD_TAGS+=("stable-${UPSTREAM_TAG}") + BUILD_TAGS+=("stable-${VERSION_TAG}") # Per fedora version BUILD_TAGS+=("${FEDORA_VERSION}-stable") @@ -427,8 +423,15 @@ jobs: run: | echo "${{ toJSON(steps.push.outputs) }}" + generate_release: + name: Generate Release + needs: [push-ghcr] + if: github.event_name != 'pull_request' + secrets: inherit + uses: ./.github/workflows/generate_release.yml + build_iso: - name: build iso + name: Build ISO needs: [push-ghcr] if: github.ref_name == 'testing' # Eventually would be nice for building images in PRs diff --git a/.github/workflows/build_iso.yml b/.github/workflows/build_iso.yml index 964ff970..692dc62d 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 new file mode 100644 index 00000000..783dc859 --- /dev/null +++ b/.github/workflows/changelog.py @@ -0,0 +1,416 @@ +from itertools import product +import subprocess +import json +import time +from typing import Any +import re +from collections import defaultdict + +REGISTRY = "docker://ghcr.io/ublue-os/" + +IMAGE_MATRIX = { + "base": ["desktop", "deck", "nvidia-closed", "nvidia-open"], + "de": ["kde", "gnome"], + "image_flavor": ["main", "asus"], +} + +RETRIES = 3 +RETRY_WAIT = 5 +FEDORA_PATTERN = re.compile(r"\.fc\d\d") +STABLE_START_PATTERN = re.compile(r"\d\d\.\d") +OTHER_START_PATTERN = lambda target: re.compile(rf"{target}-\d\d\.\d") + +PATTERN_ADD = "\n| ✨ | {name} | | {version} |" +PATTERN_CHANGE = "\n| 🔄 | {name} | {prev} | {new} |" +PATTERN_REMOVE = "\n| ❌ | {name} | {version} | |" +PATTERN_PKGREL_CHANGED = "{prev} ➡️ {new}" +PATTERN_PKGREL = "{version}" +COMMON_PAT = "### All Images\n| | Name | Previous | New |\n| --- | --- | --- | --- |{changes}\n\n" +OTHER_NAMES = { + "desktop": "### Desktop Images\n| | Name | Previous | New |\n| --- | --- | --- | --- |{changes}\n\n", + "deck": "### Deck Images\n| | Name | Previous | New |\n| --- | --- | --- | --- |{changes}\n\n", + "kde": "### KDE Images\n| | Name | Previous | New |\n| --- | --- | --- | --- |{changes}\n\n", + "gnome": "### Gnome Images\n| | Name | Previous | New |\n| --- | --- | --- | --- |{changes}\n\n", + "nvidia": "### Nvidia Images\n| | Name | Previous | New |\n| --- | --- | --- | --- |{changes}\n\n", + "asus": "### Asus Images\n| | Name | Previous | New |\n| --- | --- | --- | --- |{changes}\n\n", +} + +COMMITS_FORMAT = "### Commits\n| Hash | Subject |\n| --- | --- |{commits}\n\n" +COMMIT_FORMAT = "\n| **[{short}](https://github.com/ublue-os/bazzite/commit/{hash})** | {subject} |" + +CHANGELOG_TITLE = "{tag}: {pretty}" +CHANGELOG_FORMAT = """\ +{handwritten} + +From previous `{target}` version `{prev}` there have been the following changes. **One package per new version shown.** + +Visit [bazzite.gg](https://bazzite.gg) for more information and to download Bazzite. + +### Major packages +| Name | Version | +| --- | --- | +| **Kernel** | {pkgrel:kernel} | +| **Firmware** | {pkgrel:atheros-firmware} | +| **Mesa** | {pkgrel:mesa-filesystem} | +| **Gamescope** | {pkgrel:gamescope} | +| **Gnome** | {pkgrel:gnome-control-center-filesystem} | +| **KDE** | {pkgrel:plasma-desktop} | +| **[HHD](https://github.com/hhd-dev/hhd)** | {pkgrel:hhd} | + +{changes} +""" +HANDWRITTEN_PLACEHOLDER = """\ +This is an automatically generated changelog for release `{curr}`.""" + +BLACKLIST_VERSIONS = [ + "kernel", + "mesa-filesystem", + "gamescope", + "gnome-control-center-filesystem", + "plasma-desktop", + "atheros-firmware", +] + + +def get_images(): + for base, de, image_flavor in product(*IMAGE_MATRIX.values()): + img = "bazzite" + if base == "deck": + if image_flavor == "asus": + img += "-ally" + else: + img += "-deck" + + if de == "gnome": + img += "-gnome" + + if base != "deck" and image_flavor == "asus": + img += "-asus" + + if base == "nvidia-closed": + img += "-nvidia" + elif base == "nvidia-open": + img += "-nvidia-open" + + yield img, base, de, image_flavor + + +def get_manifests(target: str): + out = {} + imgs = list(get_images()) + for j, (img, _, _, _) in enumerate(imgs): + output = None + print(f"Getting {img}:{target} manifest ({j+1}/{len(imgs)}).") + for i in range(RETRIES): + try: + output = subprocess.run( + ["skopeo", "inspect", REGISTRY + img + ":" + target], + check=True, + stdout=subprocess.PIPE, + ).stdout + break + except subprocess.CalledProcessError: + print( + f"Failed to get {img}:{target}, retrying in {RETRY_WAIT} seconds ({i+1}/{RETRIES})" + ) + time.sleep(RETRY_WAIT) + if output is None: + print(f"Failed to get {img}:{target}, skipping") + continue + out[img] = json.loads(output) + return out + + +def get_tags(target: str, manifests: dict[str, Any]): + tags = set() + + 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) + + tags = list(sorted(tags)) + assert len(tags) > 2, "No current and previous tags found" + return tags[-2], tags[-1] + + +def get_packages(manifests: dict[str, Any]): + packages = {} + for img, manifest in manifests.items(): + try: + packages[img] = json.loads(manifest["Labels"]["dev.hhd.rechunk.info"])[ + "packages" + ] + except Exception as e: + print(f"Failed to get packages for {img}:\n{e}") + return packages + + +def get_package_groups(prev: dict[str, Any], manifests: dict[str, Any]): + common = set() + others = {k: set() for k in OTHER_NAMES.keys()} + + npkg = get_packages(manifests) + ppkg = get_packages(prev) + + keys = set(npkg.keys()) | set(ppkg.keys()) + pkg = defaultdict(set) + for k in keys: + pkg[k] = set(npkg.get(k, {})) | set(ppkg.get(k, {})) + + # Find common packages + first = True + for img, base, de, image_flavor in get_images(): + if img not in pkg: + continue + + if first: + for p in pkg[img]: + common.add(p) + else: + for c in common.copy(): + if c not in pkg[img]: + common.remove(c) + + first = False + + # Find other packages + for t, other in others.items(): + first = True + for img, base, de, image_flavor in get_images(): + if img not in pkg: + continue + + if t == "asus" and image_flavor != "asus": + continue + if t == "nvidia" and "nvidia" not in base: + continue + if t == "kde" and de != "kde": + continue + if t == "gnome" and de != "gnome": + continue + if t == "deck" and base != "deck": + continue + if t == "desktop" and base == "deck": + continue + + if first: + for p in pkg[img]: + if p not in common: + other.add(p) + else: + for c in other.copy(): + if c not in pkg[img]: + other.remove(c) + + first = False + + return sorted(common), {k: sorted(v) for k, v in others.items()} + + +def get_versions(manifests: dict[str, Any]): + versions = {} + pkgs = get_packages(manifests) + for img_pkgs in pkgs.values(): + for pkg, v in img_pkgs.items(): + versions[pkg] = re.sub(FEDORA_PATTERN, "", v) + return versions + + +def calculate_changes(pkgs: list[str], prev: dict[str, str], curr: dict[str, str]): + added = [] + changed = [] + removed = [] + + blacklist_ver = set([curr.get(v, None) for v in BLACKLIST_VERSIONS]) + + for pkg in pkgs: + # Clearup changelog by removing mentioned packages + if pkg in BLACKLIST_VERSIONS: + continue + if pkg in curr and curr.get(pkg, None) in blacklist_ver: + continue + if pkg in prev and prev.get(pkg, None) in blacklist_ver: + continue + + if pkg not in prev: + added.append(pkg) + elif pkg not in curr: + removed.append(pkg) + elif prev[pkg] != curr[pkg]: + changed.append(pkg) + + blacklist_ver.add(curr.get(pkg, None)) + blacklist_ver.add(prev.get(pkg, None)) + + out = "" + for pkg in added: + out += PATTERN_ADD.format(name=pkg, version=curr[pkg]) + for pkg in changed: + out += PATTERN_CHANGE.format(name=pkg, prev=prev[pkg], new=curr[pkg]) + for pkg in removed: + out += PATTERN_REMOVE.format(name=pkg, version=prev[pkg]) + return out + + +def get_commits(prev_manifests, manifests, workdir: str): + try: + start = next(iter(prev_manifests.values()))["Labels"][ + "org.opencontainers.image.revision" + ] + finish = next(iter(manifests.values()))["Labels"][ + "org.opencontainers.image.revision" + ] + + commits = subprocess.run( + [ + "git", + "-C", + workdir, + "log", + "--pretty=format:%H %h %s", + f"{start}..{finish}", + ], + check=True, + stdout=subprocess.PIPE, + ).stdout.decode("utf-8") + + out = "" + for commit in commits.split("\n"): + if not commit: + continue + hash, short, subject = commit.split(" ", 2) + out += ( + COMMIT_FORMAT.replace("{short}", short) + .replace("{subject}", subject) + .replace("{hash}", hash) + ) + + if out: + return COMMITS_FORMAT.format(commits=out) + return "" + except Exception as e: + print(f"Failed to get commits:\n{e}") + return "" + + +def generate_changelog( + handwritten: str | None, + target: str, + pretty: str | None, + workdir: str, + prev_manifests, + manifests, +): + common, others = get_package_groups(prev_manifests, manifests) + versions = get_versions(manifests) + prev_versions = get_versions(prev_manifests) + + prev, curr = get_tags(target, manifests) + + if not pretty: + # Generate pretty version since we dont have it + try: + finish: str = next(iter(manifests.values()))["Labels"][ + "org.opencontainers.image.revision" + ] + except Exception as e: + print(f"Failed to get finish hash:\n{e}") + finish = "" + + # Remove .0 from curr + curr = re.sub(r"\.\d{1,2}$", "", curr) + # Remove target- from curr + curr_pretty = re.sub(rf"^[a-z]+-", "", curr) + pretty = target.capitalize() + " (F" + curr_pretty + if finish and target != "stable": + pretty += ", #" + finish[:7] + pretty += ")" + + title = CHANGELOG_TITLE.format_map(defaultdict(str, tag=curr, pretty=pretty)) + + changelog = CHANGELOG_FORMAT + + changelog = ( + changelog.replace("{handwritten}", handwritten if handwritten else HANDWRITTEN_PLACEHOLDER) + .replace("{target}", target) + .replace("{prev}", prev) + .replace("{curr}", curr) + ) + + for pkg, v in versions.items(): + if pkg not in prev_versions or prev_versions[pkg] == v: + changelog = changelog.replace( + "{pkgrel:" + pkg + "}", PATTERN_PKGREL.format(version=v) + ) + else: + changelog = changelog.replace( + "{pkgrel:" + pkg + "}", + PATTERN_PKGREL_CHANGED.format(prev=prev_versions[pkg], new=v), + ) + + changes = "" + changes += get_commits(prev_manifests, manifests, workdir) + common = calculate_changes(common, prev_versions, versions) + if common: + changes += COMMON_PAT.format(changes=common) + for k, v in others.items(): + chg = calculate_changes(v, prev_versions, versions) + if chg: + changes += OTHER_NAMES[k].format(changes=chg) + + changelog = changelog.replace("{changes}", changes) + + return title, changelog + + +def main(): + import argparse + + parser = argparse.ArgumentParser() + parser.add_argument("target", help="Target tag") + parser.add_argument("output", help="Output environment file") + parser.add_argument("changelog", help="Output changelog file") + parser.add_argument("--pretty", help="Subject for the changelog") + parser.add_argument("--workdir", help="Git directory for commits") + parser.add_argument("--handwritten", help="Handwritten changelog") + args = parser.parse_args() + + # Remove refs/tags, refs/heads, refs/remotes e.g. + # Tags cannot include / anyway. + target = args.target.split('/')[-1] + + manifests = get_manifests(target) + prev, curr = get_tags(target, manifests) + print(f"Previous tag: {prev}") + print(f" Current tag: {curr}") + + prev_manifests = get_manifests(prev) + title, changelog = generate_changelog( + args.handwritten, + target, + args.pretty, + args.workdir, + prev_manifests, + manifests, + ) + + print(f"Changelog:\n# {title}\n{changelog}") + print(f"\nOutput:\nTITLE=\"{title}\"\nTAG={curr}") + + with open(args.changelog, "w") as f: + f.write(changelog) + + with open(args.output, "w") as f: + f.write(f'TITLE="{title}"\nTAG={curr}\n') + + +if __name__ == "__main__": + main() diff --git a/.github/workflows/generate_release.yml b/.github/workflows/generate_release.yml new file mode 100644 index 00000000..30374cdb --- /dev/null +++ b/.github/workflows/generate_release.yml @@ -0,0 +1,44 @@ +on: + workflow_call: + workflow_dispatch: + inputs: + handwritten: + description: 'Small changelog about changes in this build:' + target: + description: 'Release Branch (e.g., testing). Defaults to branch name.' +permissions: + contents: write + +name: Generate Release +jobs: + generate-release: + runs-on: ubuntu-latest + steps: + - name: Checkout last 500 commits (for to work) + uses: actions/checkout@v4 + with: + fetch-depth: 500 + + - name: Get target + id: get-target + run: | + echo "target=${{ github.event.inputs.target || github.ref }}" > $GITHUB_OUTPUT + + - name: Generate Release Text + id: generate-release + run: | + python3 ./.github/workflows/changelog.py \ + "${{ steps.get-target.outputs.target }}" \ + ./output.env ./changelog.md --workdir . --handwritten "${{ github.event.inputs.handwritten }}" + source ./output.env + echo "title=${TITLE}" >> $GITHUB_OUTPUT + echo "tag=${TAG}" >> $GITHUB_OUTPUT + + - name: Create Release + uses: softprops/action-gh-release@v2 + with: + name: ${{ steps.generate-release.outputs.title }} + tag_name: ${{ steps.generate-release.outputs.tag }} + body_path: ./changelog.md + make_latest: ${{ steps.get-target.outputs.target == 'stable' }} + prerelease: ${{ steps.get-target.outputs.target != 'stable' }} \ No newline at end of file diff --git a/Containerfile b/Containerfile index fd03797b..3ccc312d 100644 --- a/Containerfile +++ b/Containerfile @@ -2,18 +2,18 @@ ARG BASE_IMAGE_NAME="${BASE_IMAGE_NAME:-kinoite}" ARG BASE_IMAGE_FLAVOR="${BASE_IMAGE_FLAVOR:-main}" ARG IMAGE_FLAVOR="${IMAGE_FLAVOR:-main}" ARG NVIDIA_FLAVOR="${NVIDIA_FLAVOR:-nvidia}" -ARG KERNEL_FLAVOR="${KERNEL_FLAVOR:-fsync-ba}" +ARG KERNEL_FLAVOR="${KERNEL_FLAVOR:-bazzite}" ARG KERNEL_VERSION="${KERNEL_VERSION:-6.9.12-8.fsync.fc40.x86_64}" ARG IMAGE_BRANCH="${IMAGE_BRANCH:-main}" ARG SOURCE_IMAGE="${SOURCE_IMAGE:-$BASE_IMAGE_NAME-$BASE_IMAGE_FLAVOR}" ARG BASE_IMAGE="ghcr.io/ublue-os/${SOURCE_IMAGE}" -ARG FEDORA_MAJOR_VERSION="${FEDORA_MAJOR_VERSION:-40}" +ARG FEDORA_MAJOR_VERSION="${FEDORA_MAJOR_VERSION:-41}" ARG JUPITER_FIRMWARE_VERSION="${JUPITER_FIRMWARE_VERSION:-jupiter-20240917.1}" ARG SHA_HEAD_SHORT="${SHA_HEAD_SHORT}" ARG VERSION_TAG="${VERSION_TAG}" ARG VERSION_PRETTY="${VERSION_PRETTY}" -FROM ghcr.io/ublue-os/${KERNEL_FLAVOR}-kernel:${FEDORA_MAJOR_VERSION}-${KERNEL_VERSION} AS fsync +FROM ghcr.io/ublue-os/${KERNEL_FLAVOR}-kernel:${FEDORA_MAJOR_VERSION}-${KERNEL_VERSION} AS kernel FROM ghcr.io/ublue-os/akmods:${KERNEL_FLAVOR}-${FEDORA_MAJOR_VERSION}-${KERNEL_VERSION} AS akmods FROM ghcr.io/ublue-os/akmods-extra:${KERNEL_FLAVOR}-${FEDORA_MAJOR_VERSION}-${KERNEL_VERSION} AS akmods-extra @@ -23,11 +23,11 @@ ARG IMAGE_NAME="${IMAGE_NAME:-bazzite}" ARG IMAGE_VENDOR="${IMAGE_VENDOR:-ublue-os}" ARG IMAGE_FLAVOR="${IMAGE_FLAVOR:-main}" ARG NVIDIA_FLAVOR="${NVIDIA_FLAVOR:-nvidia}" -ARG KERNEL_FLAVOR="${KERNEL_FLAVOR:-fsync-ba}" -ARG KERNEL_VERSION="${KERNEL_VERSION:-6.9.12-208.fsync.fc40.x86_64}" +ARG KERNEL_FLAVOR="${KERNEL_FLAVOR:-bazzite}" +ARG KERNEL_VERSION="${KERNEL_VERSION:-6.11.4-301.bazzite.fc41.x86_64}" ARG IMAGE_BRANCH="${IMAGE_BRANCH:-main}" ARG BASE_IMAGE_NAME="${BASE_IMAGE_NAME:-kinoite}" -ARG FEDORA_MAJOR_VERSION="${FEDORA_MAJOR_VERSION:-40}" +ARG FEDORA_MAJOR_VERSION="${FEDORA_MAJOR_VERSION:-41}" ARG JUPITER_FIRMWARE_VERSION="${JUPITER_FIRMWARE_VERSION:-jupiter-20240917.1}" ARG SHA_HEAD_SHORT="${SHA_HEAD_SHORT}" ARG VERSION_TAG="${VERSION_TAG}" @@ -211,9 +211,6 @@ RUN --mount=type=cache,dst=/var/cache/rpm-ostree \ curl -Lo /etc/yum.repos.d/_copr_hikariknight-looking-glass-kvmfr.repo https://copr.fedorainfracloud.org/coprs/hikariknight/looking-glass-kvmfr/repo/fedora-"${FEDORA_MAJOR_VERSION}"/hikariknight-looking-glass-kvmfr-fedora-"${FEDORA_MAJOR_VERSION}".repo && \ curl -Lo /etc/yum.repos.d/_copr_mavit-discover-overlay.repo https://copr.fedorainfracloud.org/coprs/mavit/discover-overlay/repo/fedora-"${FEDORA_MAJOR_VERSION}"/mavit-discover-overlay-fedora-"${FEDORA_MAJOR_VERSION}".repo && \ curl -Lo /etc/yum.repos.d/_copr_matte-schwartz-sunshine.repo https://copr.fedorainfracloud.org/coprs/matte-schwartz/sunshine/repo/fedora-"${FEDORA_MAJOR_VERSION}"/matte-schwartz-sunshine-fedora-"${FEDORA_MAJOR_VERSION}".repo && \ - curl -Lo /etc/yum.repos.d/_copr_rok-cdemu.repo https://copr.fedorainfracloud.org/coprs/rok/cdemu/repo/fedora-"${FEDORA_MAJOR_VERSION}"/rok-cdemu-fedora-"${FEDORA_MAJOR_VERSION}".rep && \ - curl -Lo /etc/yum.repos.d/_copr_rodoma92-kde-cdemu-manager.repo https://copr.fedorainfracloud.org/coprs/rodoma92/kde-cdemu-manager/repo/fedora-"${FEDORA_MAJOR_VERSION}"/rodoma92-kde-cdemu-manager-fedora-"${FEDORA_MAJOR_VERSION}".repo && \ - curl -Lo /etc/yum.repos.d/_copr_rodoma92-rmlint.repo https://copr.fedorainfracloud.org/coprs/rodoma92/rmlint/repo/fedora-"${FEDORA_MAJOR_VERSION}"/rodoma92-rmlint-fedora-"${FEDORA_MAJOR_VERSION}".repo && \ curl -Lo /etc/yum.repos.d/tailscale.repo https://pkgs.tailscale.com/stable/fedora/tailscale.repo && \ rpm-ostree install \ https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm \ @@ -225,21 +222,17 @@ RUN --mount=type=cache,dst=/var/cache/rpm-ostree \ /usr/libexec/containerbuild/cleanup.sh && \ ostree container commit -# Install kernel-fsync +# Install kernel RUN --mount=type=cache,dst=/var/cache/rpm-ostree \ - --mount=type=bind,from=fsync,src=/tmp/rpms,dst=/tmp/fsync-rpms \ + --mount=type=bind,from=kernel,src=/tmp/rpms,dst=/tmp/kernel-rpms \ rpm-ostree cliwrap install-to-root / && \ - if [[ "${KERNEL_FLAVOR}" =~ "fsync" ]]; then \ - echo "Will install ${KERNEL_FLAVOR} kernel" && \ - rpm-ostree override replace \ - --experimental \ - /tmp/fsync-rpms/kernel-[0-9]*.rpm \ - /tmp/fsync-rpms/kernel-core-*.rpm \ - /tmp/fsync-rpms/kernel-modules-*.rpm \ - /tmp/fsync-rpms/kernel-uki-virt-*.rpm \ - ; else \ - echo "will use kernel from ${KERNEL_FLAVOR} images" \ - ; fi && \ + echo "Will install ${KERNEL_FLAVOR} kernel" && \ + rpm-ostree override replace \ + --experimental \ + /tmp/kernel-rpms/kernel-[0-9]*.rpm \ + /tmp/kernel-rpms/kernel-core-*.rpm \ + /tmp/kernel-rpms/kernel-modules-*.rpm \ + /tmp/kernel-rpms/kernel-uki-virt-*.rpm && \ rpm-ostree install \ scx-scheds && \ /usr/libexec/containerbuild/cleanup.sh && \ @@ -301,12 +294,10 @@ RUN --mount=type=cache,dst=/var/cache/rpm-ostree \ /tmp/akmods-extra-rpms/kmods/*gcadapter_oc*.rpm \ /tmp/akmods-extra-rpms/kmods/*nct6687*.rpm \ /tmp/akmods-extra-rpms/kmods/*zenergy*.rpm \ - /tmp/akmods-extra-rpms/kmods/*vhba*.rpm \ /tmp/akmods-extra-rpms/kmods/*ayaneo-platform*.rpm \ /tmp/akmods-extra-rpms/kmods/*ayn-platform*.rpm \ /tmp/akmods-extra-rpms/kmods/*bmi260*.rpm \ - /tmp/akmods-extra-rpms/kmods/*ryzen-smu*.rpm \ - /tmp/akmods-extra-rpms/kmods/*evdi*.rpm && \ + /tmp/akmods-extra-rpms/kmods/*ryzen-smu*.rpm && \ rpm-ostree override replace \ --experimental \ --from repo=copr:copr.fedorainfracloud.org:ublue-os:staging \ @@ -365,13 +356,6 @@ RUN --mount=type=cache,dst=/var/cache/rpm-ostree \ firefox \ firefox-langpacks \ htop && \ - rpm-ostree override remove \ - power-profiles-daemon \ - || true && \ - rpm-ostree override remove \ - tlp \ - tlp-rdw \ - || true && \ /usr/libexec/containerbuild/cleanup.sh && \ ostree container commit @@ -389,10 +373,6 @@ RUN --mount=type=cache,dst=/var/cache/rpm-ostree \ compsize \ ryzenadj \ input-remapper \ - tuned \ - tuned-ppd \ - tuned-utils \ - tuned-gtk \ tuned-profiles-cpu-partitioning \ i2c-tools \ udica \ @@ -446,7 +426,6 @@ RUN --mount=type=cache,dst=/var/cache/rpm-ostree \ sed -i 's/max_cpu_load_percent.*/max_cpu_load_percent = 100.0/' /etc/ublue-update/ublue-update.toml && \ sed -i 's/max_mem_percent.*/max_mem_percent = 90.0/' /etc/ublue-update/ublue-update.toml && \ sed -i 's/dbus_notify.*/dbus_notify = false/' /etc/ublue-update/ublue-update.toml && \ - sed -i 's@Name=tuned-gui@Name=TuneD Manager@g' /usr/share/applications/tuned-gui.desktop && \ curl -Lo /usr/bin/installcab https://raw.githubusercontent.com/KyleGospo/steam-proton-mf-wmv/master/installcab.py && \ chmod +x /usr/bin/installcab && \ curl -Lo /usr/bin/install-mf-wmv https://github.com/KyleGospo/steam-proton-mf-wmv/blob/master/install-mf-wmv.sh && \ @@ -506,9 +485,6 @@ RUN --mount=type=cache,dst=/var/cache/rpm-ostree \ libobs_glcapture.x86_64 \ libobs_vkcapture.i686 \ libobs_glcapture.i686 && \ - ln -s wine32 /usr/bin/wine && \ - ln -s wine32-preloader /usr/bin/wine-preloader && \ - ln -s wineserver64 /usr/bin/wineserver && \ sed -i 's@\[Desktop Entry\]@\[Desktop Entry\]\nNoDisplay=true@g' /usr/share/applications/winetricks.desktop && \ curl -Lo /tmp/latencyflex.tar.xz $(curl https://api.github.com/repos/ishitatsuyuki/LatencyFleX/releases/latest | jq -r '.assets[] | select(.name| test(".*.tar.xz$")).browser_download_url') && \ mkdir -p /tmp/latencyflex && \ @@ -531,7 +507,8 @@ RUN --mount=type=cache,dst=/var/cache/rpm-ostree \ qt \ krdp && \ rpm-ostree override remove \ - plasma-welcome && \ + plasma-welcome \ + plasma-welcome-fedora && \ rpm-ostree override replace \ --experimental \ --from repo=copr:copr.fedorainfracloud.org:ublue-os:staging \ @@ -570,12 +547,8 @@ RUN --mount=type=cache,dst=/var/cache/rpm-ostree \ rpm-ostree override replace \ --experimental \ --from repo=copr:copr.fedorainfracloud.org:ublue-os:staging \ - mutter \ - mutter-common \ gnome-shell && \ rpm-ostree install \ - ptyxis \ - nautilus-open-any-terminal \ nautilus-gsconnect \ steamdeck-backgrounds \ gnome-randr-rust \ @@ -596,11 +569,8 @@ RUN --mount=type=cache,dst=/var/cache/rpm-ostree \ rpm-ostree override remove \ gnome-software-rpm-ostree \ gnome-classic-session \ - gnome-classic-session-xsession \ gnome-tour \ gnome-extensions-app \ - gnome-terminal \ - gnome-terminal-nautilus \ gnome-system-monitor \ gnome-initial-setup \ gnome-shell-extension-background-logo \ @@ -679,9 +649,7 @@ RUN rm -f /etc/profile.d/toolbox.sh && \ echo "import \"/usr/share/ublue-os/just/80-bazzite.just\"" >> /usr/share/ublue-os/justfile && \ echo "import \"/usr/share/ublue-os/just/81-bazzite-fixes.just\"" >> /usr/share/ublue-os/justfile && \ echo "import \"/usr/share/ublue-os/just/82-bazzite-apps.just\"" >> /usr/share/ublue-os/justfile && \ - echo "import \"/usr/share/ublue-os/just/82-bazzite-cdemu.just\"" >> /usr/share/ublue-os/justfile && \ echo "import \"/usr/share/ublue-os/just/82-bazzite-sunshine.just\"" >> /usr/share/ublue-os/justfile && \ - echo "import \"/usr/share/ublue-os/just/82-bazzite-rmlint.just\"" >> /usr/share/ublue-os/justfile && \ echo "import \"/usr/share/ublue-os/just/82-bazzite-waydroid.just\"" >> /usr/share/ublue-os/justfile && \ 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 && \ @@ -732,13 +700,11 @@ RUN rm -f /etc/profile.d/toolbox.sh && \ sed -i 's@enabled=1@enabled=0@g' /etc/yum.repos.d/negativo17-fedora-rar.repo && \ mkdir -p /etc/flatpak/remotes.d && \ curl -Lo /etc/flatpak/remotes.d/flathub.flatpakrepo https://dl.flathub.org/repo/flathub.flatpakrepo && \ - systemctl enable tuned.service && \ systemctl enable brew-dir-fix.service && \ systemctl enable brew-setup.service && \ systemctl disable brew-upgrade.timer && \ systemctl disable brew-update.timer && \ systemctl enable btrfs-dedup@var-home.timer && \ - systemctl disable displaylink.service && \ systemctl enable input-remapper.service && \ systemctl unmask bazzite-flatpak-manager.service && \ systemctl enable bazzite-flatpak-manager.service && \ @@ -769,11 +735,11 @@ ARG IMAGE_NAME="${IMAGE_NAME:-bazzite-deck}" ARG IMAGE_VENDOR="${IMAGE_VENDOR:-ublue-os}" ARG IMAGE_FLAVOR="${IMAGE_FLAVOR:-main}" ARG NVIDIA_FLAVOR="${NVIDIA_FLAVOR:-nvidia}" -ARG KERNEL_FLAVOR="${KERNEL_FLAVOR:-fsync-ba}" +ARG KERNEL_FLAVOR="${KERNEL_FLAVOR:-bazzite}" ARG KERNEL_VERSION="${KERNEL_VERSION:-6.9.12-206.fsync.fc40.x86_64}" ARG IMAGE_BRANCH="${IMAGE_BRANCH:-main}" ARG BASE_IMAGE_NAME="${BASE_IMAGE_NAME:-kinoite}" -ARG FEDORA_MAJOR_VERSION="${FEDORA_MAJOR_VERSION:-40}" +ARG FEDORA_MAJOR_VERSION="${FEDORA_MAJOR_VERSION:-41}" ARG VERSION_TAG="${VERSION_TAG}" ARG VERSION_PRETTY="${VERSION_PRETTY}" @@ -855,8 +821,6 @@ RUN --mount=type=cache,dst=/var/cache/rpm-ostree \ --from repo=copr:copr.fedorainfracloud.org:kylegospo:bazzite \ upower \ upower-libs && \ - rpm-ostree override remove \ - tuned-gtk && \ /usr/libexec/containerbuild/cleanup.sh && \ ostree container commit @@ -908,6 +872,8 @@ RUN /usr/libexec/containerbuild/image-info && \ echo "Compiling gschema to include Bazzite Deck setting overrides" && \ glib-compile-schemas /usr/share/glib-2.0/schemas &>/dev/null && \ rm -r /tmp/bazzite-schema-test && \ + echo "Removing Steam BPM workaround .desktop file" && \ + { rm -v /usr/share/applications/bazzite-steam-bpm.desktop || true; } && \ systemctl enable bazzite-autologin.service && \ systemctl enable wireplumber-workaround.service && \ systemctl enable wireplumber-sysconf.service && \ @@ -939,11 +905,11 @@ ARG IMAGE_NAME="${IMAGE_NAME:-bazzite-nvidia}" ARG IMAGE_VENDOR="${IMAGE_VENDOR:-ublue-os}" ARG IMAGE_FLAVOR="${IMAGE_FLAVOR:-nvidia}" ARG NVIDIA_FLAVOR="${NVIDIA_FLAVOR:-nvidia}" -ARG KERNEL_FLAVOR="${KERNEL_FLAVOR:-fsync-ba}" -ARG KERNEL_VERSION="${KERNEL_VERSION:-6.9.12-208.fsync.fc40.x86_64}" +ARG KERNEL_FLAVOR="${KERNEL_FLAVOR:-bazzite}" +ARG KERNEL_VERSION="${KERNEL_VERSION:-6.11.4-301.bazzite.fc41.x86_64}" ARG IMAGE_BRANCH="${IMAGE_BRANCH:-main}" ARG BASE_IMAGE_NAME="${BASE_IMAGE_NAME:-kinoite}" -ARG FEDORA_MAJOR_VERSION="${FEDORA_MAJOR_VERSION:-40}" +ARG FEDORA_MAJOR_VERSION="${FEDORA_MAJOR_VERSION:-41}" ARG VERSION_TAG="${VERSION_TAG}" ARG VERSION_PRETTY="${VERSION_PRETTY}" diff --git a/installer/gnome_flatpaks/flatpaks b/installer/gnome_flatpaks/flatpaks index 711b5b6b..de64aeeb 100644 --- a/installer/gnome_flatpaks/flatpaks +++ b/installer/gnome_flatpaks/flatpaks @@ -22,6 +22,7 @@ app/org.gnome.baobab/x86_64/stable app/org.gnome.clocks/x86_64/stable app/org.gnome.font-viewer/x86_64/stable app/io.github.nokse22.Exhibit/x86_64/stable +app/de.leopoldluley.Clapgrep/x86_64/stable runtime/org.freedesktop.Platform.VulkanLayer.MangoHud/x86_64/23.08 runtime/org.freedesktop.Platform.VulkanLayer.vkBasalt/x86_64/23.08 runtime/org.freedesktop.Platform.VulkanLayer.OBSVkCapture/x86_64/23.08 diff --git a/installer/kde_flatpaks/flatpaks b/installer/kde_flatpaks/flatpaks index f76db38b..ab3430e6 100644 --- a/installer/kde_flatpaks/flatpaks +++ b/installer/kde_flatpaks/flatpaks @@ -11,6 +11,7 @@ app/com.github.tchx84.Flatseal/x86_64/stable app/com.github.Matoking.protontricks/x86_64/stable app/io.github.flattool.Warehouse/x86_64/stable app/net.davidotek.pupgui2/x86_64/stable +app/de.leopoldluley.Clapgrep/x86_64/stable runtime/org.freedesktop.Platform.VulkanLayer.MangoHud/x86_64/23.08 runtime/org.freedesktop.Platform.VulkanLayer.vkBasalt/x86_64/23.08 runtime/org.freedesktop.Platform.VulkanLayer.OBSVkCapture/x86_64/23.08 diff --git a/spec_files/anaconda/0001-bootupd-call-bootupctl-with-update-firmware.patch b/spec_files/anaconda/0001-bootupd-call-bootupctl-with-update-firmware.patch deleted file mode 100644 index d88b34fc..00000000 --- a/spec_files/anaconda/0001-bootupd-call-bootupctl-with-update-firmware.patch +++ /dev/null @@ -1,31 +0,0 @@ -From d1424ea9ffa5d51d1cfa004b0861e345c4300902 Mon Sep 17 00:00:00 2001 -From: Adam Williamson -Date: Wed, 6 Mar 2024 17:26:45 -0800 -Subject: [PATCH] bootupd: call bootupctl with --update-firmware - -This is required to write an entry to the EFI boot manager, -which we ought to do (anaconda does it when installing the -bootloader itself). Without this, boot of the installed system -will only work if it's configured to try and boot from the -hard disk using the fallback path. - -Signed-off-by: Adam Williamson ---- - .../modules/payloads/payload/rpm_ostree/installation.py | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -diff --git a/pyanaconda/modules/payloads/payload/rpm_ostree/installation.py b/pyanaconda/modules/payloads/payload/rpm_ostree/installation.py -index 0ac8583b78..f5ea666cf2 100644 ---- a/pyanaconda/modules/payloads/payload/rpm_ostree/installation.py -+++ b/pyanaconda/modules/payloads/payload/rpm_ostree/installation.py -@@ -520,6 +520,7 @@ class ConfigureBootloader(Task): - "install", - "--auto", - "--write-uuid", -+ "--update-firmware", - "--device", - dev_data.path, - "/", --- -2.44.0 - diff --git a/spec_files/anaconda/anaconda.spec b/spec_files/anaconda/anaconda.spec index 789f4e89..9b6f2074 100644 --- a/spec_files/anaconda/anaconda.spec +++ b/spec_files/anaconda/anaconda.spec @@ -1,7 +1,7 @@ Summary: Graphical system installer Name: anaconda -Version: 40.22.3 -Release: 101.bazzite +Version: 41.35 +Release: 100.bazzite License: GPL-2.0-or-later URL: http://fedoraproject.org/wiki/Anaconda @@ -10,13 +10,9 @@ URL: http://fedoraproject.org/wiki/Anaconda # git checkout -b archive-branch anaconda-%%{version}-%%{release} # ./autogen.sh # make dist -Source0: https://github.com/rhinstaller/%{name}/releases/download/%{name}-%{version}-1/%{name}-%{version}.tar.bz2 -# https://github.com/rhinstaller/anaconda/pull/5508 -# https://bugzilla.redhat.com/show_bug.cgi?id=2268505 -# Fix bootupd UEFI path to create an EFI boot manager entry -Patch0: 0001-bootupd-call-bootupctl-with-update-firmware.patch +Source0: https://github.com/rhinstaller/%{name}/releases/download/%{name}-%{version}/%{name}-%{version}.tar.bz2 -Patch1: bazzite.patch +Patch0: bazzite.patch # Versions of required components (done so we make sure the buildrequires # match the requires versions of things). @@ -44,7 +40,7 @@ Patch1: bazzite.patch %define libxklavierver 5.4 %define mehver 0.23-1 %define nmver 1.0 -%define pykickstartver 3.52-1 +%define pykickstartver 3.58-1 %define pypartedver 2.5-2 %define pythonblivetver 1:3.9.0-1 %define rpmver 4.15.0 @@ -90,11 +86,16 @@ Summary: Core of the Anaconda installer # core/signal.py is under MIT License: GPL-2.0-or-later AND MIT Requires: python3-libs +%if 0%{?rhel} > 10 || 0%{?fedora} > 40 +Requires: python3-crypt-r +%endif Requires: python3-dnf >= %{dnfver} Requires: python3-blivet >= %{pythonblivetver} Requires: python3-blockdev >= %{libblockdevver} Requires: python3-meh >= %{mehver} +%if 0%{?rhel} < 10 || 0%{?fedora} Requires: libreport-anaconda >= %{libreportanacondaver} +%endif Requires: libselinux-python3 Requires: python3-rpm >= %{rpmver} Requires: python3-pyparted >= %{pypartedver} @@ -118,17 +119,19 @@ Requires: subscription-manager >= %{subscriptionmanagerver} # which is apparently great for containers but unhelpful for the rest of us Requires: cracklib-dicts +%if 0%{?rhel} < 10 || 0%{?fedora} Requires: teamd +Requires: NetworkManager-team +%endif %ifarch s390 s390x Requires: openssh %endif Requires: NetworkManager >= %{nmver} Requires: NetworkManager-libnm >= %{nmver} -Requires: NetworkManager-team Requires: kbd Requires: chrony Requires: systemd -%if ! 0%{?rhel} +%if 0%{?rhel} > 10 || 0%{?fedora} Requires: systemd-resolved %endif Requires: python3-pid @@ -173,7 +176,6 @@ BuildArchitectures: noarch BuildRequires: desktop-file-utils # live installation currently implies a graphical installation Requires: anaconda-gui = %{version}-%{release} -Requires: usermode Requires: zenity Requires: xisxwayland Recommends: xhost @@ -225,6 +227,8 @@ Requires: f2fs-tools Requires: xfsprogs Requires: dosfstools Requires: e2fsprogs +# External tooling for managing NVMe-FC devices in the installation environment +Recommends: nvme-cli %description install-env-deps The anaconda-install-env-deps metapackage lists all installation environment @@ -268,6 +272,10 @@ Requires: rpm-ostree >= %{rpmostreever} Requires: ostree # used by ostree command for native containers Requires: skopeo +# External tooling for managing NVMe-FC devices in the installation environment +Requires: nvme-cli +# Needed for bootc +Requires: podman %description install-img-deps The anaconda-install-img-deps metapackage lists all boot.iso installation @@ -335,6 +343,7 @@ Requires: dracut-network Requires: dracut-live Requires: xz Requires: python3-kickstart +Requires: iputils %description dracut The 'anaconda' dracut module handles installer-specific boot tasks and @@ -343,7 +352,6 @@ runtime on NFS/HTTP/FTP servers or local disks. %prep %autosetup -p 1 -rm pyanaconda/threading.py %build # use actual build-time release number, not tarball creation time release number @@ -474,25 +482,166 @@ rm -rf \ %{_prefix}/libexec/anaconda/dd_* %changelog -* Mon Mar 25 2024 Packit - 40.22.3-1 -- Disable preexec for vtActivate() (mkolman) -- Lower permissions for kickstart logs in /tmp (jkonecny) -- Copy /etc/resolv.conf to system only if there is no systemd-resolved - (rvykydal) -- Revert "Do not copy /etc/resolv.conf to chroot before installation" - (rvykydal) -- Do not use systemd-resolved in installer environment on RHEL (rvykydal) -- Do not write LVM devices file during image installation (vtrefny) +* Thu Oct 17 2024 Packit - 41.35-1 +- Fix checking whether a disk can be cleared during autopart (vtrefny) -* Wed Mar 06 2024 Adam Williamson - 40.22.2-2 +* Thu Sep 26 2024 Packit - 41.34-1 +- Fix scheduling actions in reclaim space dialog (#2311936) (vtrefny) + +* Mon Sep 23 2024 Packit - 41.33-1 +- New version - 41.33 (k.koukiou) + +* Thu Aug 22 2024 Packit - 41.31-1 +- docs: update release note about modularity deprecation (kkoukiou) +- Add support for creating LUKS HW-OPAL devices (vtrefny) +- Adjust to pykickstart moving new partition and autopart commands to F41 + (kkoukiou) +- pyanaconda: remove code paths around module command parsing as this was + deprecated (kkoukiou) +- Improve code based on min/max recommendation (jkonecny) +- Support DNF5's config-manager (marusak.matej) +- network: ignore kickstart configuration of nBFT devices (rvykydal) +- network: do not dump configurations of nBFT devices (rvykydal) +- network: ignore nBFT devices connections in network configuration (rvykydal) +- network: add a test for ignoring ifname=nbft* for device renaming (rvykydal) +- network: do not create empty dir for only ifname=nbft* options (rvykydal) +- network: Avoid creating link files for 'nbft' interfaces (tbzatek) + +* Tue Aug 20 2024 Packit - 41.30-1 +- Use proxy server also for FTP .treeinfo download (jkonecny) +- Fix the VNC question (#2293672) (mkolman) +- Check if text mode was actually requested by kickstart (#2293672) (mkolman) + +* Tue Aug 13 2024 Packit - 41.29-1 +- Remove deprecated warnings for inst prefix (rolivier) +- Fix using kickstart mount command with device ID (vtrefny) +- Update documentation for the update_iso script (jkonecny) +- Add support for Live ISO to rebuild_boot_iso (jkonecny) + +* Tue Aug 06 2024 Packit - 41.28-1 +- Adjust custom partitioning and storage spokes to the device ID API (vtrefny) +- Adjust resize module to the device ID API (vtrefny) +- Add a custom function for recreating btrfs subvolumes (vtrefny) +- Use blivet's "device ID" as a unique device identifier (vtrefny) +- Fix mock LUKS devices logic in tests (vtrefny) +- Fix checking for locked LUKS devices (vtrefny) +- util: Add additional information for EFI systems (riehecky) +- Add release note for network port devices' default configuration profiles + (rvykydal) + +* Tue Jul 30 2024 Packit - 41.27-1 +- Remove threading compatibility layer (kkoukiou) + +* Tue Jul 23 2024 Packit - 41.26-1 +- Don't use tmpfs in build if not enough RAM (lifto) +- Document RHEL 10 specifics for container shell (mkolman) +- storage: add EFI partition in the windows OS devices if it's detected + (kkoukiou) +- storage: add windows system to GetExistingSystems (kkoukiou) +- storage: store the partition type name in device attrs for partitions + (kkoukiou) +- Clean up the code by removing the utils directory (rolivier) + +* Wed Jul 17 2024 Fedora Release Engineering - 41.25-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + +* Tue Jul 16 2024 Packit - 41.25-1 +- makeupdates: Bump Python version in site packages path to 3.13 (vtrefny) +- Apply suggestions from Rodolfo (martin.kolman) +- Scripts for local boot.iso updates workflow (mkolman) +- Fix unit_tests/pyanaconda_tests/core/test_threads.py:140:20: E721 (kkoukiou) +- Fix pyanaconda/modules/network/nm_client.py:576:21: PLR1704 (kkoukiou) +- Fix pyanaconda/core/users.py:408:21: PLR1704 (kkoukiou) + +* Tue Jul 09 2024 Packit - 41.24-1 +- Update translations from Weblate for master (github-actions) +- tests: storage: conditionally run btrfs tests if command is not removed + (kkoukiou) +- tests: allow the module specification to contain removed commands (kkoukiou) + +* Tue Jul 02 2024 Packit - 41.23-1 +- Update translations from Weblate for master (github-actions) +- chore: remove unused atk in BaseWindow.c (freya) +- Replace deprecated methods to avoid warnings (rolivier) +- Do not mark ancestors of device with source or stage2 as protected (rvykydal) + +* Tue Jun 25 2024 Packit - 41.22-1 +- Update translations from Weblate for master (github-actions) + +* Tue Jun 11 2024 Python Maint - 41.20-2 +- Rebuilt for Python 3.13 + +* Tue Jun 11 2024 Packit - 41.20-1 +- Update translations from Weblate for master (github-actions) +- Fix issues for new pylint check (jkonecny) +- Use InconsistentParentSectorSize instead of InconsistentPVSectorSize + (vtrefny) +- Do not require libreport on RHEL 10 (mkolman) +- Update translations from Weblate for master (github-actions) +- Get kickstart data via DBus (akankovs) +- Adding a implementation for runtime and ui commands (akankovs) +- Update tests for kickstart commands (akankovs) +- Migration of the remaining kickstart commands to the Runtime module + (akankovs) + +* Fri Jun 07 2024 Python Maint - 41.19-2 +- Rebuilt for Python 3.13 + +* Tue Jun 04 2024 Packit - 41.19-1 +- dracut: Remove 'linear' from modules to load (vtrefny) +- Remove 'linear' from list of expected MD RAID levels (vtrefny) + +* Tue May 28 2024 Packit - 41.18-1 +- Do not imply that Fedora ELN has an EULA (sgallagh) +- Update translations from Weblate for master (github-actions) +- Deprecate kickstart modularity module (marusak.matej) +- Remove Javascript leftovers from Makefile (jkonecny) +- Revert "Ignore npm packages files for translation" (jkonecny) +- Update translations from Weblate for master (github-actions) +- docs: Add guide how to debug/develop GH workflows (jkonecny) + +* Tue May 21 2024 Packit - 41.17-1 +- RHEL moved from Bugzilla to Jira (jstodola) +- Update translations from Weblate for master (github-actions) +- docs: Fix link on ci-status page (jkonecny) +- docs: Fix link on ci status for container updates (jkonecny) +- gui: Fix displaying of the device label (yueyuankun) +- Stop pretending liveinst+vnc is supported (#678354) (kkoukiou) +- Use the standalone crypt_r package on Fedora 41+ (miro) +- Write a warning rescue selinux (akankovs) + Resolves: RHEL-14005 + +* Tue Apr 30 2024 Katerina Koukiou - 41.15-1 +- Update to upstream release 41.15 + +* Tue Apr 23 2024 Packit - 41.14-1 +- Revert "infra: Packit fix empty jobs field" (kkoukiou) + +* Thu Apr 18 2024 Packit - 41.13-1 +- Fix signature of the method passed to DNF (jkonecny) +- Do not include teamd on RHEL (rvykydal) +- network: guard team devices configuration in kickstart by capabilities + (rvykydal) + +* Tue Apr 09 2024 Packit - 41.9-1 +- Update translations from Weblate for master (github-actions) + +* Tue Mar 26 2024 Packit - 41.7-1 +- Update translations from Weblate for master (github-actions) +- Disable preexec for vtActivate() (mkolman) + +* Tue Mar 19 2024 Packit - 41.6-1 +- install-img-deps: Require podman (walters) + +* Wed Mar 06 2024 Adam Williamson - 41.2-2 - Backport PR #5508 to make bootupd create EFI boot manager entries (#2268505) -* Tue Feb 20 2024 Packit - 40.22.2-1 +* Tue Feb 20 2024 Packit - 41.2-1 - Test for task category and category API (akankovs) - Creating categories dbus API for installation phases (akankovs) -* Thu Feb 15 2024 Packit - 40.22.1-1 -- Set up the fedora-40 branch (mkolman) +* Fri Feb 16 2024 Packit - 41.1-1 +- bump major version number for Rawhide after F40 branching (mkolman) * Tue Feb 06 2024 Adam Williamson - 40.21-2 - Backport PR #5460 to fix ostree btrfs installs with new util-linux (#2262892) diff --git a/spec_files/gamescope/gamescope.spec b/spec_files/gamescope/gamescope.spec index a5db710d..cbd1059f 100644 --- a/spec_files/gamescope/gamescope.spec +++ b/spec_files/gamescope/gamescope.spec @@ -6,7 +6,7 @@ Name: gamescope Version: 100.%{gamescope_tag} -Release: 8.bazzite +Release: 10.bazzite Summary: Micro-compositor for video games on Wayland License: BSD @@ -17,9 +17,9 @@ Source0: stb.pc Patch0: 0001-cstdint.patch +# https://hhd.dev/ # https://github.com/ChimeraOS/gamescope -# Cleaned up by + patches from https://hhd.dev/ -Patch1: chimeraos-cleanup-v1.patch +Patch1: handheld.patch # https://github.com/ValveSoftware/gamescope/pull/740 Patch2: 740.patch @@ -55,8 +55,8 @@ BuildRequires: pkgconfig(xkbcommon) BuildRequires: pkgconfig(sdl2) BuildRequires: pkgconfig(libpipewire-0.3) BuildRequires: pkgconfig(libavif) -BuildRequires: (pkgconfig(wlroots) >= 0.18.0 with pkgconfig(wlroots) < 0.19.0) -BuildRequires: (pkgconfig(libliftoff) >= 0.4.1 with pkgconfig(libliftoff) < 0.5) +BuildRequires: pkgconfig(wlroots) +BuildRequires: pkgconfig(libliftoff) BuildRequires: pkgconfig(libcap) BuildRequires: pkgconfig(hwdata) BuildRequires: pkgconfig(lcms2) diff --git a/spec_files/gamescope/chimeraos-cleanup-v1.patch b/spec_files/gamescope/handheld.patch similarity index 70% rename from spec_files/gamescope/chimeraos-cleanup-v1.patch rename to spec_files/gamescope/handheld.patch index 37b10015..9a3ef369 100644 --- a/spec_files/gamescope/chimeraos-cleanup-v1.patch +++ b/spec_files/gamescope/handheld.patch @@ -1,7 +1,7 @@ -From 503b9235a9379dcc625857dbd062dbab386ec112 Mon Sep 17 00:00:00 2001 +From e0e74b9862ca591302a01ef89994e3eaf8d1245e Mon Sep 17 00:00:00 2001 From: Matthew Anderson Date: Fri, 17 May 2024 21:56:55 -0500 -Subject: [PATCH v1 1/8] feat: add --custom-refresh-rates option (+ fixes) +Subject: [PATCH v2 01/12] feat: add --custom-refresh-rates option (+ fixes) Commit originally by Matthew, external fixes by Kyle, and new system check move by Antheas. @@ -15,10 +15,10 @@ Co-authored-by: Antheas Kapenekakis 3 files changed, 38 insertions(+) diff --git a/src/Backends/DRMBackend.cpp b/src/Backends/DRMBackend.cpp -index 3a996af..b0c7670 100644 +index 0b121e8..75c3258 100644 --- a/src/Backends/DRMBackend.cpp +++ b/src/Backends/DRMBackend.cpp -@@ -2220,6 +2220,11 @@ namespace gamescope +@@ -2243,6 +2243,11 @@ namespace gamescope bHasKnownHDRInfo = true; } } @@ -31,7 +31,7 @@ index 3a996af..b0c7670 100644 if ( !bHasKnownColorimetry ) diff --git a/src/main.cpp b/src/main.cpp -index c074f82..f1db9cc 100644 +index 9dff5c4..8381889 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -129,6 +129,7 @@ const struct option *gamescope_options = (struct option[]){ @@ -84,7 +84,7 @@ index c074f82..f1db9cc 100644 struct sigaction handle_signal_action = {}; void ShutdownGamescope() -@@ -749,6 +778,8 @@ int main(int argc, char **argv) +@@ -746,6 +775,8 @@ int main(int argc, char **argv) g_eGamescopeModeGeneration = parse_gamescope_mode_generation( optarg ); } else if (strcmp(opt_name, "force-orientation") == 0) { g_DesiredInternalOrientation = force_orientation( optarg ); @@ -114,13 +114,13 @@ index 2e6fb83..390c04a 100644 enum class GamescopeUpscaleFilter : uint32_t { -- -2.46.2 +2.47.0 -From 99d77e08b6165a1f48e8870859dd8bb630f7c591 Mon Sep 17 00:00:00 2001 +From 304c0c2297bc2f24be9edff4088fdfae418adaf0 Mon Sep 17 00:00:00 2001 From: Alesh Slovak Date: Thu, 26 Sep 2024 07:13:24 -0400 -Subject: [PATCH v1 2/8] fix(vrr): Revert "steamcompmgr: Move +Subject: [PATCH v2 02/12] fix(vrr): Revert "steamcompmgr: Move outdatedInteractiveFocus to window" This reverts commit 299bc3410dcfd46da5e3c988354b60ed3a356900. @@ -207,13 +207,13 @@ index 095694e..e41fad9 100644 bool hasHwndStyle = false; uint32_t hwndStyle = 0; -- -2.46.2 +2.47.0 -From 6bffd653d8f9e6539008b4be898cca67c1414b37 Mon Sep 17 00:00:00 2001 +From 2a9e687172b569681eea53fb8f4848b0a758e680 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 v1 3/8] fix(deck): Use super + 1/2 for Overlay/QAM +Subject: [PATCH v2 03/12] 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. @@ -268,13 +268,13 @@ index 78a86ee..99df8aa 100644 wlserver_keyboardfocus( old_kb_surf, false ); return; -- -2.46.2 +2.47.0 -From 7d6fcc2580d34208e0860762ddbc8560a9b47af8 Mon Sep 17 00:00:00 2001 +From dde7f34921a70953fca2020dc22f89c544bdaf65 Mon Sep 17 00:00:00 2001 From: Antheas Kapenekakis Date: Fri, 11 Oct 2024 17:52:48 +0200 -Subject: [PATCH v1 4/8] fix: allow for disabling touch atom click +Subject: [PATCH v2 04/12] fix: allow for disabling touch atom click Causes issues in certain devices (or not anymore?). @@ -287,7 +287,7 @@ Co-authored-by: Kyle Gospodnetich 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp -index f1db9cc..d08f0e7 100644 +index 8381889..a76b51b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -128,6 +128,7 @@ const struct option *gamescope_options = (struct option[]){ @@ -337,13 +337,13 @@ index df7616d..4a17499 100644 break; case '?': -- -2.46.2 +2.47.0 -From fb371b1a06b1fba53e278bbcdfb491bcaec73099 Mon Sep 17 00:00:00 2001 +From 033b1b8ce87267e9e1b75a889d5ba3d8c47ed4fe Mon Sep 17 00:00:00 2001 From: Antheas Kapenekakis Date: Fri, 11 Oct 2024 21:56:54 +0200 -Subject: [PATCH v1 5/8] fix(intel-gpu): allow for (enabling) hacky texture +Subject: [PATCH v2 05/12] 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 --- @@ -352,7 +352,7 @@ Disabling hacky texture will use more hardware planes, causing some devices to c 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp -index d08f0e7..9b4ac91 100644 +index a76b51b..84e05a9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -128,6 +128,7 @@ const struct option *gamescope_options = (struct option[]){ @@ -402,21 +402,21 @@ index 4a17499..da3115f 100644 break; case '?': -- -2.46.2 +2.47.0 -From 4118463a5fab5b6d19e225507e5206a87711e66e Mon Sep 17 00:00:00 2001 +From 8e64da6cabcd2a6fc9d9fad12cb95ff203985d1b Mon Sep 17 00:00:00 2001 From: Antheas Kapenekakis Date: Fri, 11 Oct 2024 23:01:13 +0200 -Subject: [PATCH v1 6/8] fix: re-add external orientation options to not break - current sessions (incl. applying ext. orientation) +Subject: [PATCH v2 06/12] fix: re-add external orientation options to not + break current sessions (incl. applying ext. orientation) --- src/main.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp -index 9b4ac91..1338e94 100644 +index 84e05a9..2398535 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -129,6 +129,8 @@ const struct option *gamescope_options = (struct option[]){ @@ -428,7 +428,7 @@ index 9b4ac91..1338e94 100644 { "disable-touch-click", no_argument, nullptr, 0 }, { "force-windows-fullscreen", no_argument, nullptr, 0 }, { "custom-refresh-rates", required_argument, nullptr, 0 }, -@@ -780,7 +782,7 @@ int main(int argc, char **argv) +@@ -777,7 +779,7 @@ int main(int argc, char **argv) gamescope::cv_touch_click_mode = (gamescope::TouchClickMode) atoi( optarg ); } else if (strcmp(opt_name, "generate-drm-mode") == 0) { g_eGamescopeModeGeneration = parse_gamescope_mode_generation( optarg ); @@ -438,13 +438,46 @@ index 9b4ac91..1338e94 100644 } else if (strcmp(opt_name, "custom-refresh-rates") == 0) { g_customRefreshRates = parse_custom_refresh_rates( optarg ); -- -2.46.2 +2.47.0 -From c0368c80d256c24f43aa1c0a28695a6ec9c1dbab Mon Sep 17 00:00:00 2001 +From 14d19b8d86c485fe57e1489de905c908c67fd77e 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 + +--- + src/wlserver.cpp | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/src/wlserver.cpp b/src/wlserver.cpp +index 99df8aa..5e8f516 100644 +--- a/src/wlserver.cpp ++++ b/src/wlserver.cpp +@@ -2492,8 +2492,12 @@ static void apply_touchscreen_orientation(double *x, double *y ) + double tx = 0; + double ty = 0; + +- // Use internal screen always for orientation purposes. +- switch ( GetBackend()->GetConnector( gamescope::GAMESCOPE_SCREEN_TYPE_INTERNAL )->GetCurrentOrientation() ) ++ auto orientation = GAMESCOPE_PANEL_ORIENTATION_AUTO; ++ if ( GetBackend() && GetBackend()->GetCurrentConnector( ) ) ++ { ++ orientation = GetBackend()->GetCurrentConnector()->GetCurrentOrientation(); ++ } ++ switch ( orientation ) + { + default: + case GAMESCOPE_PANEL_ORIENTATION_AUTO: +-- +2.47.0 + + +From 9e4ee4341a7480a0af883cc47d3c6e6ee91de74a Mon Sep 17 00:00:00 2001 From: Antheas Kapenekakis Date: Fri, 11 Oct 2024 23:47:59 +0200 -Subject: [PATCH v1 7/8] feat(vrr): allow for setting refresh rate if the +Subject: [PATCH v2 08/12] 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. @@ -456,7 +489,7 @@ it. Therefore, bypass some checks to allow it to work just for this usecase. 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp -index 1338e94..6453702 100644 +index 2398535..0621c65 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -132,6 +132,7 @@ const struct option *gamescope_options = (struct option[]){ @@ -515,13 +548,14 @@ index da3115f..69fd348 100644 g_bHackyEnabled = true; } -- -2.46.2 +2.47.0 -From cfca9d99ab80df9ab3f83ce304345a17f7a52d4c Mon Sep 17 00:00:00 2001 +From dc2d5db6f62ac4c5a160d200be346100d923b1c3 Mon Sep 17 00:00:00 2001 From: Antheas Kapenekakis Date: Fri, 11 Oct 2024 19:09:05 +0200 -Subject: [PATCH v1 8/8] feat: add external option that now only lies to steam +Subject: [PATCH v2 09/12] 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. @@ -536,7 +570,7 @@ variant of the patch that only does that. 5 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp -index 6453702..7ec6020 100644 +index 0621c65..056e1c1 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -199,6 +199,7 @@ const char usage[] = @@ -567,7 +601,7 @@ index 6453702..7ec6020 100644 static enum GamescopeUpscaleScaler parse_upscaler_scaler(const char *str) { if (strcmp(str, "auto") == 0) { -@@ -786,6 +800,8 @@ int main(int argc, char **argv) +@@ -783,6 +797,8 @@ int main(int argc, char **argv) g_eGamescopeModeGeneration = parse_gamescope_mode_generation( optarg ); } else if (strcmp(opt_name, "force-orientation") == 0 || strcmp(opt_name, "force-external-orientation") == 0) { g_DesiredInternalOrientation = force_orientation( optarg ); @@ -602,7 +636,7 @@ index 9f384c4..30e48e8 100644 extern uint32_t inputCounter; diff --git a/src/wlserver.cpp b/src/wlserver.cpp -index 99df8aa..39010ab 100644 +index 5e8f516..1eeaa25 100644 --- a/src/wlserver.cpp +++ b/src/wlserver.cpp @@ -1078,7 +1078,7 @@ static uint32_t get_conn_display_info_flags() @@ -627,5 +661,216 @@ index 0569472..104f7a2 100644 std::vector wlserver_xdg_commit_queue(); -- -2.46.2 +2.47.0 + + +From b8e8677a811bbebe5f0f743ac22da7a83436d443 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 + +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 +custom modeline generation has been provided. +--- + src/Backends/DRMBackend.cpp | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/src/Backends/DRMBackend.cpp b/src/Backends/DRMBackend.cpp +index 75c3258..f014be9 100644 +--- a/src/Backends/DRMBackend.cpp ++++ b/src/Backends/DRMBackend.cpp +@@ -2161,7 +2161,9 @@ namespace gamescope + sol::optional otDynamicRefreshRates = tTable["dynamic_refresh_rates"]; + sol::optional ofnDynamicModegen = tTable["dynamic_modegen"]; + +- if ( otDynamicRefreshRates && ofnDynamicModegen ) ++ if ( otDynamicRefreshRates && !ofnDynamicModegen ) ++ m_Mutable.ValidDynamicRefreshRates = TableToVector( *otDynamicRefreshRates ); ++ else if ( otDynamicRefreshRates && ofnDynamicModegen ) + { + m_Mutable.ValidDynamicRefreshRates = TableToVector( *otDynamicRefreshRates ); + +-- +2.47.0 + + +From 2d96bb5b3fc75690d60249a8e8ea29f3c667ef55 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 + +Down to 48hz, modeset the correct framerate. Below 48hz, +disable VRR and use the classic frame limiter. +--- + src/steamcompmgr.cpp | 30 ++++++++++++++++++++++++++++-- + 1 file changed, 28 insertions(+), 2 deletions(-) + +diff --git a/src/steamcompmgr.cpp b/src/steamcompmgr.cpp +index 3dd64f8..7dacfe7 100644 +--- a/src/steamcompmgr.cpp ++++ b/src/steamcompmgr.cpp +@@ -165,6 +165,7 @@ uint32_t g_reshade_technique_idx = 0; + + bool g_bSteamIsActiveWindow = false; + bool g_bForceInternal = false; ++bool g_bVRRRequested = false; + + static std::vector< steamcompmgr_win_t* > GetGlobalPossibleFocusWindows(); + static bool +@@ -827,6 +828,28 @@ static void _update_app_target_refresh_cycle() + { + auto rates = GetBackend()->GetCurrentConnector()->GetValidDynamicRefreshRates(); + ++ if (g_bVRRModesetting) { ++ if (g_bVRRRequested) { ++ // If modeset VRR, go upwards to match the refresh rate 1-1. Refresh ++ // doubling would hurt us here by breaking the frame limiter. ++ for ( auto rate = rates.begin(); rate != rates.end(); rate++ ) ++ { ++ if ((int)*rate == target_fps) ++ { ++ g_nDynamicRefreshRate[ type ] = *rate; ++ // Enable VRR as we have the correct refresh rate ++ cv_adaptive_sync = true; ++ return; ++ } ++ } ++ // Otherwise, disable VRR as we can't match the refresh rate 1-1 ++ // (e.g., below 48hz). ++ cv_adaptive_sync = false; ++ } else { ++ cv_adaptive_sync = false; ++ } ++ } ++ + // Find highest mode to do refresh doubling with. + for ( auto rate = rates.rbegin(); rate != rates.rend(); rate++ ) + { +@@ -5522,8 +5545,11 @@ handle_property_notify(xwayland_ctx_t *ctx, XPropertyEvent *ev) + } + if ( ev->atom == ctx->atoms.gamescopeVRREnabled ) + { +- bool enabled = !!get_prop( ctx, ctx->root, ctx->atoms.gamescopeVRREnabled, 0 ); +- cv_adaptive_sync = enabled; ++ g_bVRRRequested = !!get_prop( ctx, ctx->root, ctx->atoms.gamescopeVRREnabled, 0 ); ++ // Try to match refresh rate and have that set the cv_adaptive_sync only if it can ++ if (g_bVRRModesetting) update_app_target_refresh_cycle(); ++ // otherwise, fall back to original behavior ++ else cv_adaptive_sync = g_bVRRRequested; + } + if ( ev->atom == ctx->atoms.gamescopeDisplayForceInternal ) + { +-- +2.47.0 + + +From 61ea8edafedd5c8cce320bf6415e6151555ce594 Mon Sep 17 00:00:00 2001 +From: Antheas Kapenekakis +Date: Wed, 23 Oct 2024 23:33:53 +0200 +Subject: [PATCH v2 12/12] fix(battery): run at half hz while at steamUI and + disable VRR + +--- + src/steamcompmgr.cpp | 34 +++++++++++++++++++++++++--------- + 1 file changed, 25 insertions(+), 9 deletions(-) + +diff --git a/src/steamcompmgr.cpp b/src/steamcompmgr.cpp +index 7dacfe7..f4446f0 100644 +--- a/src/steamcompmgr.cpp ++++ b/src/steamcompmgr.cpp +@@ -149,6 +149,7 @@ extern int g_nDynamicRefreshHz; + bool g_bForceHDRSupportDebug = false; + bool g_bHackyEnabled = false; + bool g_bVRRModesetting = false; ++bool g_refreshHalve = false; + extern float g_flInternalDisplayBrightnessNits; + extern float g_flHDRItmSdrNits; + extern float g_flHDRItmTargetNits; +@@ -166,6 +167,7 @@ uint32_t g_reshade_technique_idx = 0; + bool g_bSteamIsActiveWindow = false; + bool g_bForceInternal = false; + bool g_bVRRRequested = false; ++bool g_bVRRCanEnable = false; + + static std::vector< steamcompmgr_win_t* > GetGlobalPossibleFocusWindows(); + static bool +@@ -838,15 +840,15 @@ static void _update_app_target_refresh_cycle() + { + g_nDynamicRefreshRate[ type ] = *rate; + // Enable VRR as we have the correct refresh rate +- cv_adaptive_sync = true; ++ g_bVRRCanEnable = true; + return; + } + } + // Otherwise, disable VRR as we can't match the refresh rate 1-1 + // (e.g., below 48hz). +- cv_adaptive_sync = false; ++ g_bVRRCanEnable = false; + } else { +- cv_adaptive_sync = false; ++ g_bVRRCanEnable = false; + } + } + +@@ -5105,19 +5107,24 @@ static bool steamcompmgr_should_vblank_window( bool bShouldLimitFPS, uint64_t vb + if ( GetBackend()->IsVRRActive() ) + return true; + +- bool bSendCallback = true; +- + int nRefreshHz = gamescope::ConvertmHzToHz( g_nNestedRefresh ? g_nNestedRefresh : g_nOutputRefresh ); + int nTargetFPS = g_nSteamCompMgrTargetFPS; +- if ( g_nSteamCompMgrTargetFPS && bShouldLimitFPS && nRefreshHz > nTargetFPS ) ++ ++ if ( nRefreshHz > 90 && g_refreshHalve ) ++ { ++ // Refresh halve above 90Hz if steamui is active ++ if ( vblank_idx % 2 != 0 ) ++ return false; ++ } ++ else if ( g_nSteamCompMgrTargetFPS && bShouldLimitFPS && nRefreshHz > nTargetFPS ) + { + int nVblankDivisor = nRefreshHz / nTargetFPS; + + if ( vblank_idx % nVblankDivisor != 0 ) +- bSendCallback = false; ++ return false; + } + +- return bSendCallback; ++ return true; + } + + static bool steamcompmgr_should_vblank_window( steamcompmgr_win_t *w, uint64_t vblank_idx ) +@@ -5549,7 +5556,7 @@ handle_property_notify(xwayland_ctx_t *ctx, XPropertyEvent *ev) + // Try to match refresh rate and have that set the cv_adaptive_sync only if it can + if (g_bVRRModesetting) update_app_target_refresh_cycle(); + // otherwise, fall back to original behavior +- else cv_adaptive_sync = g_bVRRRequested; ++ else g_bVRRCanEnable = g_bVRRRequested; + } + if ( ev->atom == ctx->atoms.gamescopeDisplayForceInternal ) + { +@@ -7628,6 +7635,15 @@ steamcompmgr_main(int argc, char **argv) + // as a question. + const bool bIsVBlankFromTimer = vblank; + ++ if ( window_is_steam( global_focus.focusWindow ) ) { ++ // Halve refresh rate and disable vrr on SteamUI ++ cv_adaptive_sync = false; ++ g_refreshHalve = true; ++ } else { ++ cv_adaptive_sync = g_bVRRCanEnable; ++ g_refreshHalve = false; ++ } ++ + // We can always vblank if VRR. + const bool bVRR = GetBackend()->IsVRRActive(); + if ( bVRR ) +-- +2.47.0 diff --git a/spec_files/mesa-va-drivers/LICENSE b/spec_files/mesa-va-drivers/LICENSE deleted file mode 100644 index d159169d..00000000 --- a/spec_files/mesa-va-drivers/LICENSE +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/spec_files/mesa-va-drivers/mesa-va-drivers.spec b/spec_files/mesa-va-drivers/mesa-va-drivers.spec deleted file mode 100644 index 7ea817fd..00000000 --- a/spec_files/mesa-va-drivers/mesa-va-drivers.spec +++ /dev/null @@ -1,25 +0,0 @@ -Name: mesa-va-drivers -Version: 1000.0.0 -Release: 1%{?dist} -Summary: Corrects a dependency issue between steam and mesa-va-drivers-freeworld on rpm-ostree distributions -License: GPLv2 -URL: https://github.com/ublue-os/bazzite -BuildArch: noarch - -Source0: https://raw.githubusercontent.com/ublue-os/bazzite/main/spec_files/%{name}/LICENSE - -Requires: mesa-va-drivers-freeworld -Provides: mesa-va-drivers = %{version} - -# Disable debug packages -%define debug_package %{nil} - -%description -Corrects a dependency issue between steam and mesa-va-drivers-freeworld on rpm-ostree distributions - -%install -mkdir -p %{buildroot}%{_datadir}/licenses/%{name} -cp %{SOURCE0} %{buildroot}%{_datadir}/licenses/%{name}/LICENSE - -%files -%license LICENSE diff --git a/spec_files/mesa/mesa.spec b/spec_files/mesa/mesa.spec index b6bf71cb..9dbb4ec4 100644 --- a/spec_files/mesa/mesa.spec +++ b/spec_files/mesa/mesa.spec @@ -11,11 +11,12 @@ %global with_r300 1 %global with_r600 1 %global with_nine 1 -%global with_nvk %{with vulkan_hw} -%global with_omx 1 +%if 0%{?with_vulkan_hw} +%global with_nvk %{with_vulkan_hw} +%endif %global with_opencl 1 %endif -%global base_vulkan ,amd +%global base_vulkan %{?with_vulkan_hw:,amd}%{!?with_vulkan_hw:%{nil}} %endif %ifnarch %{ix86} @@ -30,25 +31,27 @@ %global with_iris 1 %global with_xa 1 %global with_intel_clc 1 -%global intel_platform_vulkan ,intel,intel_hasvk +%global intel_platform_vulkan %{?with_vulkan_hw:,intel,intel_hasvk}%{!?with_vulkan_hw:%{nil}} %endif %ifarch x86_64 +%if !0%{?with_vulkan_hw} %global with_intel_vk_rt 1 %endif +%endif %ifarch aarch64 x86_64 %{ix86} +%global with_kmsro 1 %if !0%{?rhel} %global with_lima 1 %global with_vc4 1 -%endif %global with_etnaviv 1 -%global with_freedreno 1 -%global with_kmsro 1 -%global with_panfrost 1 %global with_tegra 1 +%endif +%global with_freedreno 1 +%global with_panfrost 1 %global with_v3d 1 %global with_xa 1 -%global extra_platform_vulkan ,broadcom,freedreno,panfrost,imagination-experimental +%global extra_platform_vulkan %{?with_vulkan_hw:,broadcom,freedreno,panfrost,imagination-experimental}%{!?with_vulkan_hw:%{nil}} %endif %if !0%{?rhel} @@ -66,7 +69,7 @@ Name: mesa Summary: Mesa graphics libraries -%global ver 24.1.7 +%global ver 24.2.4 Version: %{lua:ver = string.gsub(rpm.expand("%{ver}"), "-", "~"); print(ver)} Epoch: 1 %global orig_release 1%{?dist} @@ -95,7 +98,7 @@ BuildRequires: kernel-headers # We only check for the minimum version of pkgconfig(libdrm) needed so that the # SRPMs for each arch still have the same build dependencies. See: # https://bugzilla.redhat.com/show_bug.cgi?id=1859515 -BuildRequires: pkgconfig(libdrm) >= 2.4.119 +BuildRequires: pkgconfig(libdrm) >= 2.4.122 %if 0%{?with_libunwind} BuildRequires: pkgconfig(libunwind) %endif @@ -137,9 +140,6 @@ BuildRequires: pkgconfig(vdpau) >= 1.1 %if 0%{?with_va} BuildRequires: pkgconfig(libva) >= 0.38.0 %endif -%if 0%{?with_omx} -BuildRequires: pkgconfig(libomxil-bellagio) -%endif BuildRequires: pkgconfig(libelf) BuildRequires: pkgconfig(libglvnd) >= 1.3.2 BuildRequires: llvm-devel >= 7.0.0 @@ -175,6 +175,7 @@ BuildRequires: python3-mako BuildRequires: python3-ply %endif BuildRequires: python3-pycparser +BuildRequires: python3-pyyaml BuildRequires: vulkan-headers BuildRequires: glslang %if 0%{?with_vulkan_hw} @@ -187,6 +188,7 @@ BuildRequires: pkgconfig(vulkan) %package filesystem Summary: Mesa driver filesystem Provides: mesa-dri-filesystem = %{?epoch:%{epoch}:}%{version}-%{release} +Obsoletes: mesa-omx-drivers < %{?epoch:%{epoch}:}%{version}-%{release} %description filesystem %{summary}. @@ -234,6 +236,7 @@ Provides: libEGL-devel%{?_isa} %package dri-drivers Summary: Mesa-based DRI drivers +# Bazzite: Compatibility with Negativo17 Requires: %{name}-filesystem%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{orig_release} Requires: %{name}-libglapi%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} %if 0%{?with_va} @@ -243,18 +246,10 @@ Recommends: %{name}-va-drivers%{?_isa} %description dri-drivers %{summary}. -%if 0%{?with_omx} -%package omx-drivers -Summary: Mesa-based OMX drivers -Requires: %{name}-filesystem%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{orig_release} - -%description omx-drivers -%{summary}. -%endif - %if 0%{?with_va} %package va-drivers Summary: Mesa-based VA-API video acceleration drivers +# Bazzite: Compatibility with Negativo17 Requires: %{name}-filesystem%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{orig_release} Obsoletes: %{name}-vaapi-drivers < 22.2.0-5 @@ -265,6 +260,7 @@ Obsoletes: %{name}-vaapi-drivers < 22.2.0-5 %if 0%{?with_vdpau} %package vdpau-drivers Summary: Mesa-based VDPAU drivers +# Bazzite: Compatibility with Negativo17 Requires: %{name}-filesystem%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{orig_release} %description vdpau-drivers @@ -385,6 +381,8 @@ Requires: %{name}-libd3d%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release %package vulkan-drivers Summary: Mesa Vulkan drivers Requires: vulkan%{_isa} +# Bazzite: Compatibility with Negativo17 +Requires: %{name}-filesystem%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{orig_release} Obsoletes: mesa-vulkan-devel < %{?epoch:%{epoch}:}%{version}-%{release} %description vulkan-drivers @@ -421,12 +419,11 @@ export MESON_PACKAGE_CACHE_DIR="%{cargo_registry}/" -Ddri3=enabled \ -Dosmesa=true \ %if 0%{?with_hardware} - -Dgallium-drivers=swrast,virgl,nouveau%{?with_r300:,r300}%{?with_crocus:,crocus}%{?with_i915:,i915}%{?with_iris:,iris}%{?with_vmware:,svga}%{?with_radeonsi:,radeonsi}%{?with_r600:,r600}%{?with_freedreno:,freedreno}%{?with_etnaviv:,etnaviv}%{?with_tegra:,tegra}%{?with_vc4:,vc4}%{?with_v3d:,v3d}%{?with_kmsro:,kmsro}%{?with_lima:,lima}%{?with_panfrost:,panfrost}%{?with_vulkan_hw:,zink} \ + -Dgallium-drivers=swrast,virgl,nouveau%{?with_r300:,r300}%{?with_crocus:,crocus}%{?with_i915:,i915}%{?with_iris:,iris}%{?with_vmware:,svga}%{?with_radeonsi:,radeonsi}%{?with_r600:,r600}%{?with_freedreno:,freedreno}%{?with_etnaviv:,etnaviv}%{?with_tegra:,tegra}%{?with_vc4:,vc4}%{?with_v3d:,v3d}%{?with_lima:,lima}%{?with_panfrost:,panfrost}%{?with_vulkan_hw:,zink} \ %else -Dgallium-drivers=swrast,virgl \ %endif -Dgallium-vdpau=%{?with_vdpau:enabled}%{!?with_vdpau:disabled} \ - -Dgallium-omx=%{?with_omx:bellagio}%{!?with_omx:disabled} \ -Dgallium-va=%{?with_va:enabled}%{!?with_va:disabled} \ -Dgallium-xa=%{?with_xa:enabled}%{!?with_xa:disabled} \ -Dgallium-nine=%{?with_nine:true}%{!?with_nine:false} \ @@ -493,16 +490,13 @@ popd %files filesystem %doc docs/Mesa-MLAA-License-Clarification-Email.txt %dir %{_libdir}/dri -%if 0%{?with_hardware} -%if 0%{?with_vdpau} -%dir %{_libdir}/vdpau -%endif -%endif +%dir %{_datadir}/drirc.d %files libGL %{_libdir}/libGLX_mesa.so.0* %{_libdir}/libGLX_system.so.0* %files libGL-devel +%dir %{_includedir}/GL %dir %{_includedir}/GL/internal %{_includedir}/GL/internal/dri_interface.h %{_libdir}/pkgconfig/dri.pc @@ -582,9 +576,10 @@ popd %endif %files dri-drivers -%dir %{_datadir}/drirc.d %{_datadir}/drirc.d/00-mesa-defaults.conf +%{_libdir}/libgallium-*.so %{_libdir}/dri/kms_swrast_dri.so +%{_libdir}/dri/libdril_dri.so %{_libdir}/dri/swrast_dri.so %{_libdir}/dri/virtio_gpu_dri.so @@ -672,17 +667,13 @@ popd %{_libdir}/dri/sti_dri.so %{_libdir}/dri/sun4i-drm_dri.so %{_libdir}/dri/udl_dri.so +%{_libdir}/dri/vkms_dri.so %{_libdir}/dri/zynqmp-dpsub_dri.so %endif %if 0%{?with_vulkan_hw} %{_libdir}/dri/zink_dri.so %endif -%if 0%{?with_omx} -%files omx-drivers -%{_libdir}/bellagio/libomx_mesa.so -%endif - %if 0%{?with_va} %files va-drivers %{_libdir}/dri/nouveau_drv_video.so @@ -697,6 +688,7 @@ popd %if 0%{?with_vdpau} %files vdpau-drivers +%dir %{_libdir}/vdpau %{_libdir}/vdpau/libvdpau_nouveau.so.1* %if 0%{?with_r600} %{_libdir}/vdpau/libvdpau_r600.so.1* diff --git a/spec_files/pipewire/0001-Bluez5-backend-native-HSP-AG-release-SCO-link-on-AT-.patch b/spec_files/pipewire/0001-Bluez5-backend-native-HSP-AG-release-SCO-link-on-AT-.patch deleted file mode 100644 index 0bc03888..00000000 --- a/spec_files/pipewire/0001-Bluez5-backend-native-HSP-AG-release-SCO-link-on-AT-.patch +++ /dev/null @@ -1,84 +0,0 @@ -diff --git a/spa/plugins/bluez5/backend-native.c b/spa/plugins/bluez5/backend-native.c -index 8144b09..51331a6 100644 ---- a/spa/plugins/bluez5/backend-native.c -+++ b/spa/plugins/bluez5/backend-native.c -@@ -422,7 +422,7 @@ static void rfcomm_emit_volume_changed(struct rfcomm *rfcomm, int id, int hw_vol - static bool rfcomm_hsp_ag(struct rfcomm *rfcomm, char* buf) - { - struct impl *backend = rfcomm->backend; -- unsigned int gain, dummy; -+ unsigned int gain; - - /* There are only three HSP AT commands: - * AT+VGS=value: value between 0 and 15, sent by the HS to AG to set the speaker gain. -@@ -445,8 +445,9 @@ static bool rfcomm_hsp_ag(struct rfcomm *rfcomm, char* buf) - rfcomm_send_reply(rfcomm, "ERROR"); - spa_log_debug(backend->log, "RFCOMM receive unsupported VGM gain: %s", buf); - } -- } else if (sscanf(buf, "AT+CKPD=%d", &dummy) == 1) { -+ } else if (spa_strstartswith(buf, "AT+CKPD=200") == 1) { - rfcomm_send_reply(rfcomm, "OK"); -+ spa_bt_device_emit_switch_profile(rfcomm->device); - } else { - return false; - } -diff --git a/spa/plugins/bluez5/bluez5-device.c b/spa/plugins/bluez5/bluez5-device.c -index 8d6ef49..40acd24 100644 ---- a/spa/plugins/bluez5/bluez5-device.c -+++ b/spa/plugins/bluez5/bluez5-device.c -@@ -1370,11 +1370,33 @@ static void device_connected(void *userdata, bool connected) - } - } - -+static void device_switch_profile(void *userdata) -+{ -+ struct impl *this = userdata; -+ uint32_t profile; -+ -+ switch(this->profile) { -+ case DEVICE_PROFILE_OFF: -+ profile = DEVICE_PROFILE_HSP_HFP; -+ break; -+ case DEVICE_PROFILE_HSP_HFP: -+ profile = DEVICE_PROFILE_OFF; -+ break; -+ default: -+ return; -+ } -+ -+ spa_log_debug(this->log, "%p: device switch profile %d -> %d", this, this->profile, profile); -+ -+ set_profile(this, profile, 0, false); -+} -+ - static const struct spa_bt_device_events bt_dev_events = { - SPA_VERSION_BT_DEVICE_EVENTS, - .connected = device_connected, - .codec_switched = codec_switched, - .profiles_changed = profiles_changed, -+ .switch_profile = device_switch_profile, - .device_set_changed = device_set_changed, - }; - -diff --git a/spa/plugins/bluez5/defs.h b/spa/plugins/bluez5/defs.h -index 81e5164..258b4f6 100644 ---- a/spa/plugins/bluez5/defs.h -+++ b/spa/plugins/bluez5/defs.h -@@ -459,6 +459,9 @@ struct spa_bt_device_events { - /** Profile configuration changed */ - void (*profiles_changed) (void *data, uint32_t prev_profiles, uint32_t prev_connected); - -+ /** Switch profile between OFF and HSP_HFP */ -+ void (*switch_profile) (void *data); -+ - /** Device set configuration changed */ - void (*device_set_changed) (void *data); - -@@ -553,6 +556,7 @@ void spa_bt_device_update_last_bluez_action_time(struct spa_bt_device *device); - #define spa_bt_device_emit_connected(d,...) spa_bt_device_emit(d, connected, 0, __VA_ARGS__) - #define spa_bt_device_emit_codec_switched(d,...) spa_bt_device_emit(d, codec_switched, 0, __VA_ARGS__) - #define spa_bt_device_emit_profiles_changed(d,...) spa_bt_device_emit(d, profiles_changed, 0, __VA_ARGS__) -+#define spa_bt_device_emit_switch_profile(d) spa_bt_device_emit(d, switch_profile, 0) - #define spa_bt_device_emit_device_set_changed(d) spa_bt_device_emit(d, device_set_changed, 0) - #define spa_bt_device_emit_destroy(d) spa_bt_device_emit(d, destroy, 0) - #define spa_bt_device_add_listener(d,listener,events,data) \ diff --git a/spec_files/pipewire/pipewire.spec b/spec_files/pipewire/pipewire.spec index 58ec5c68..65f3edb5 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 8 +%global minorversion 2 +%global microversion 6 %global apiversion 0.3 %global spaversion 0.2 @@ -83,9 +83,7 @@ Source1: pipewire.sysusers ## valve patches # Holo: TODO: Bug reference -Patch10: bc435841c141ad38768b6cb1a7ad45e8bb13c7d2.patch -# Holo: upstream MR 1792 -Patch30: 0001-Bluez5-backend-native-HSP-AG-release-SCO-link-on-AT-.patch +Patch10: bc435841c141ad38768b6cb1a7ad45e8bb13c7d2.patch BuildRequires: gettext BuildRequires: meson >= 0.59.0 @@ -143,6 +141,8 @@ Requires: rtkit Requires: pipewire-session-manager # Prefer WirePlumber for session manager Suggests: wireplumber +# Bring in libcamera plugin for MIPI / complex camera support +Recommends: pipewire-plugin-libcamera %description PipeWire is a multimedia server for Linux and other Unix like operating @@ -217,6 +217,9 @@ Summary: PipeWire JACK implementation libraries License: MIT Recommends: %{name}%{?_isa} = %{version}-%{release} Requires: %{name}-libs%{?_isa} = %{version}-%{release} +%if 0%{?rhel} +Requires: %{name}-jack-audio-connection-kit%{?_isa} = %{version}-%{release} +%endif # Fixed jack subpackages Conflicts: %{name}-libjack < 0.3.13-6 Conflicts: %{name}-jack-audio-connection-kit < 0.3.13-6 @@ -411,6 +414,25 @@ Requires: %{name}-libs%{?_isa} = %{version}-%{release} This package contains the mysofa support for PipeWire filter-chain. %endif +%package config-rates +Summary: PipeWire media server multirate configuration +License: MIT +Recommends: %{name}%{?_isa} = %{version}-%{release} +Requires: %{name}-libs%{?_isa} = %{version}-%{release} + +%description config-rates +This package contains the configuration files to support multiple +sample rates. + +%package config-upmix +Summary: PipeWire media server upmixing configuration +License: MIT +Recommends: %{name}%{?_isa} = %{version}-%{release} +Requires: %{name}-libs%{?_isa} = %{version}-%{release} + +%description config-upmix +This package contains the configuration files to support upmixing. + %prep %autosetup -p1 %{?snapdate:-n %{name}-%{gitcommit}} @@ -423,26 +445,27 @@ cp %{SOURCE1} subprojects/packagefiles/ %build %meson \ - -D docs=enabled -D man=enabled -D gstreamer=enabled -D systemd=enabled \ - -D sdl2=disabled \ - -D audiotestsrc=disabled -D videotestsrc=disabled \ - -D volume=disabled -D bluez5-codec-aptx=disabled \ - -D bluez5-codec-lc3plus=disabled -D bluez5-codec-lc3=enabled \ + -D docs=enabled -D man=enabled -D gstreamer=enabled -D systemd=enabled \ + -D sdl2=disabled \ + -D audiotestsrc=disabled -D videotestsrc=disabled \ + -D volume=disabled -D bluez5-codec-aptx=disabled \ + -D bluez5-codec-lc3plus=disabled -D bluez5-codec-lc3=enabled \ %ifarch s390x - -D bluez5-codec-ldac=disabled \ + -D bluez5-codec-ldac=disabled \ %endif - -D session-managers=[] \ - -D rtprio-server=60 -D rtprio-client=55 -D rlimits-rtprio=70 \ - %{!?with_jack:-D pipewire-jack=disabled} \ - %{!?with_jackserver_plugin:-D jack=disabled} \ - %{!?with_libcamera_plugin:-D libcamera=disabled} \ - %{?with_jack:-D jack-devel=true} \ - %{!?with_alsa:-D pipewire-alsa=disabled} \ - %{?with_vulkan:-D vulkan=enabled} \ - %{!?with_libmysofa:-D libmysofa=disabled} \ - %{!?with_lv2:-D lv2=disabled} \ - %{!?with_roc:-D roc=disabled} \ - %{!?with_ffado:-D libffado=disabled} \ + -D session-managers=[] \ + -D rtprio-server=60 -D rtprio-client=55 -D rlimits-rtprio=70 \ + -D snap=disabled \ + %{!?with_jack:-D pipewire-jack=disabled} \ + %{!?with_jackserver_plugin:-D jack=disabled} \ + %{!?with_libcamera_plugin:-D libcamera=disabled} \ + %{?with_jack:-D jack-devel=true} \ + %{!?with_alsa:-D pipewire-alsa=disabled} \ + %{?with_vulkan:-D vulkan=enabled} \ + %{!?with_libmysofa:-D libmysofa=disabled} \ + %{!?with_lv2:-D lv2=disabled} \ + %{!?with_roc:-D roc=disabled} \ + %{!?with_ffado:-D libffado=disabled} \ %{nil} %meson_build @@ -452,6 +475,8 @@ install -p -D -m 0644 %{SOURCE1} %{buildroot}%{_sysusersdir}/pipewire.conf # Own this directory so add-ons can use it install -d -m 0755 %{buildroot}%{_datadir}/pipewire/pipewire.conf.d/ +install -d -m 0755 %{buildroot}%{_datadir}/pipewire/client.conf.d/ +install -d -m 0755 %{buildroot}%{_datadir}/pipewire/client-rt.conf.d/ %if %{with jack} mkdir -p %{buildroot}%{_sysconfdir}/ld.so.conf.d/ @@ -481,15 +506,26 @@ rm %{buildroot}%{_datadir}/pipewire/pipewire-pulse.conf %if %{with pulse} # Own this directory so add-ons can use it install -d -m 0755 %{buildroot}%{_datadir}/pipewire/pipewire-pulse.conf.d/ + +ln -s ../pipewire-pulse.conf.avail/20-upmix.conf \ + %{buildroot}%{_datadir}/pipewire/pipewire-pulse.conf.d/20-upmix.conf %endif +# rates config +ln -s ../pipewire.conf.avail/10-rates.conf \ + %{buildroot}%{_datadir}/pipewire/pipewire.conf.d/10-rates.conf + +# upmix config +ln -s ../pipewire.conf.avail/20-upmix.conf \ + %{buildroot}%{_datadir}/pipewire/pipewire.conf.d/20-upmix.conf +ln -s ../client.conf.avail/20-upmix.conf \ + %{buildroot}%{_datadir}/pipewire/client.conf.d/20-upmix.conf +ln -s ../client-rt.conf.avail/20-upmix.conf \ + %{buildroot}%{_datadir}/pipewire/client-rt.conf.d/20-upmix.conf + + %find_lang %{name} -# upstream should use udev.pc -mkdir -p %{buildroot}%{_prefix}/lib/udev/rules.d -mv -fv %{buildroot}/lib/udev/rules.d/90-pipewire-alsa.rules %{buildroot}%{_prefix}/lib/udev/rules.d - - %check %meson_test || TESTS_ERROR=$? if [ "${TESTS_ERROR}" != "" ]; then @@ -560,6 +596,7 @@ systemctl --no-reload preset --global pipewire.socket >/dev/null 2>&1 || : %{_libdir}/pipewire-%{apiversion}/libpipewire-module-metadata.so %{_libdir}/pipewire-%{apiversion}/libpipewire-module-netjack2-driver.so %{_libdir}/pipewire-%{apiversion}/libpipewire-module-netjack2-manager.so +%{_libdir}/pipewire-%{apiversion}/libpipewire-module-parametric-equalizer.so %{_libdir}/pipewire-%{apiversion}/libpipewire-module-pipe-tunnel.so %{_libdir}/pipewire-%{apiversion}/libpipewire-module-portal.so %{_libdir}/pipewire-%{apiversion}/libpipewire-module-profiler.so @@ -575,6 +612,7 @@ systemctl --no-reload preset --global pipewire.socket >/dev/null 2>&1 || : %{_libdir}/pipewire-%{apiversion}/libpipewire-module-rtp-source.so %{_libdir}/pipewire-%{apiversion}/libpipewire-module-rt.so %{_libdir}/pipewire-%{apiversion}/libpipewire-module-session-manager.so +%{_libdir}/pipewire-%{apiversion}/libpipewire-module-snapcast-discover.so %{_libdir}/pipewire-%{apiversion}/libpipewire-module-spa-device-factory.so %{_libdir}/pipewire-%{apiversion}/libpipewire-module-spa-device.so %{_libdir}/pipewire-%{apiversion}/libpipewire-module-spa-node-factory.so @@ -601,11 +639,13 @@ systemctl --no-reload preset --global pipewire.socket >/dev/null 2>&1 || : %{_libdir}/spa-%{spaversion}/v4l2/ %{_libdir}/spa-%{spaversion}/videoconvert/ %{_datadir}/pipewire/client.conf +%dir %{_datadir}/pipewire/client.conf.d/ %{_datadir}/pipewire/client.conf.avail/20-upmix.conf %{_datadir}/pipewire/client-rt.conf +%dir %{_datadir}/pipewire/client-rt.conf.d/ %{_datadir}/pipewire/client-rt.conf.avail/20-upmix.conf %{_mandir}/man5/pipewire-client.conf.5.gz -%{_mandir}/man7/pipewire-devices.7.gz +%{_mandir}/man7/pipewire-props.7.gz %{_mandir}/man7/libpipewire-module-access.7.gz %{_mandir}/man7/libpipewire-module-adapter.7.gz %{_mandir}/man7/libpipewire-module-avb.7.gz @@ -626,6 +666,7 @@ systemctl --no-reload preset --global pipewire.socket >/dev/null 2>&1 || : %{_mandir}/man7/libpipewire-module-metadata.7.gz %{_mandir}/man7/libpipewire-module-netjack2-driver.7.gz %{_mandir}/man7/libpipewire-module-netjack2-manager.7.gz +%{_mandir}/man7/libpipewire-module-parametric-equalizer.7.gz %{_mandir}/man7/libpipewire-module-pipe-tunnel.7.gz %{_mandir}/man7/libpipewire-module-portal.7.gz %{_mandir}/man7/libpipewire-module-profiler.7.gz @@ -643,6 +684,7 @@ systemctl --no-reload preset --global pipewire.socket >/dev/null 2>&1 || : %{_mandir}/man7/libpipewire-module-rtp-sink.7.gz %{_mandir}/man7/libpipewire-module-rtp-source.7.gz %{_mandir}/man7/libpipewire-module-session-manager.7.gz +%{_mandir}/man7/libpipewire-module-snapcast-discover.7.gz %{_mandir}/man7/libpipewire-module-vban-recv.7.gz %{_mandir}/man7/libpipewire-module-vban-send.7.gz %{_mandir}/man7/libpipewire-module-x11-bell.7.gz @@ -668,6 +710,7 @@ systemctl --no-reload preset --global pipewire.socket >/dev/null 2>&1 || : %{_bindir}/pw-cat %{_bindir}/pw-cli %{_bindir}/pw-config +%{_bindir}/pw-container %{_bindir}/pw-dot %{_bindir}/pw-dsdplay %{_bindir}/pw-dump @@ -687,6 +730,7 @@ systemctl --no-reload preset --global pipewire.socket >/dev/null 2>&1 || : %{_mandir}/man1/pw-cat.1* %{_mandir}/man1/pw-cli.1* %{_mandir}/man1/pw-config.1* +%{_mandir}/man1/pw-container.1* %{_mandir}/man1/pw-dot.1* %{_mandir}/man1/pw-dump.1* %{_mandir}/man1/pw-link.1* @@ -764,6 +808,7 @@ systemctl --no-reload preset --global pipewire.socket >/dev/null 2>&1 || : %{_datadir}/pipewire/pipewire-pulse.conf %dir %{_datadir}/pipewire/pipewire-pulse.conf.d/ %{_datadir}/pipewire/pipewire-pulse.conf.avail/20-upmix.conf +%{_datadir}/glib-2.0/schemas/org.freedesktop.pulseaudio.gschema.xml %{_libdir}/pipewire-%{apiversion}/libpipewire-module-protocol-pulse.so %{_mandir}/man1/pipewire-pulse.1* %{_mandir}/man5/pipewire-pulse.conf.5.gz @@ -771,6 +816,8 @@ systemctl --no-reload preset --global pipewire.socket >/dev/null 2>&1 || : %{_mandir}/man7/pipewire-pulse-module-alsa-source.7.gz %{_mandir}/man7/pipewire-pulse-module-always-sink.7.gz %{_mandir}/man7/pipewire-pulse-module-combine-sink.7.gz +%{_mandir}/man7/pipewire-pulse-module-device-manager.7.gz +%{_mandir}/man7/pipewire-pulse-module-device-restore.7.gz %{_mandir}/man7/pipewire-pulse-module-echo-cancel.7.gz %{_mandir}/man7/pipewire-pulse-module-gsettings.7.gz %{_mandir}/man7/pipewire-pulse-module-jackdbus-detect.7.gz @@ -790,6 +837,7 @@ systemctl --no-reload preset --global pipewire.socket >/dev/null 2>&1 || : %{_mandir}/man7/pipewire-pulse-module-rtp-recv.7.gz %{_mandir}/man7/pipewire-pulse-module-rtp-send.7.gz %{_mandir}/man7/pipewire-pulse-module-simple-protocol-tcp.7.gz +%{_mandir}/man7/pipewire-pulse-module-stream-restore.7.gz %{_mandir}/man7/pipewire-pulse-module-switch-on-connect.7.gz %{_mandir}/man7/pipewire-pulse-module-tunnel-sink.7.gz %{_mandir}/man7/pipewire-pulse-module-tunnel-source.7.gz @@ -832,15 +880,61 @@ systemctl --no-reload preset --global pipewire.socket >/dev/null 2>&1 || : %{_libdir}/pipewire-%{apiversion}/libpipewire-module-filter-chain-lv2.so %endif -%changelog -* Thu Sep 19 2024 Wim Taymans - 1.0.8-1 -- Update version to 1.0.8 +%files config-rates +%{_datadir}/pipewire/pipewire.conf.d/10-rates.conf -* Tue Jun 18 2024 Peter Robinson - 1.0.7-2 +%files config-upmix +%{_datadir}/pipewire/pipewire.conf.d/20-upmix.conf +%{_datadir}/pipewire/client.conf.d/20-upmix.conf +%{_datadir}/pipewire/client-rt.conf.d/20-upmix.conf +%if %{with pulse} +%{_datadir}/pipewire/pipewire-pulse.conf.d/20-upmix.conf +%endif + +%changelog +* Wed Oct 23 2024 Wim Taymans - 1.2.6-1 +- Update version to 1.2.6 + +* Fri Sep 27 2024 Wim Taymans - 1.2.5-1 +- Update version to 1.2.5 +- Add config packages + +* Thu Sep 19 2024 Wim Taymans - 1.2.4-1 +- Update version to 1.2.4 +- Add Recommends: pipewire-plugin-libcamera for MIPI camera support + +* Thu Aug 22 2024 Wim Taymans - 1.2.3-1 +- Update version to 1.2.3 + +* Sun Aug 04 2024 Yaakov Selkowitz - 1.2.1-3 +- pipewire-jack-libs Requires pipewire-jack on RHEL + +* Fri Jul 19 2024 Fedora Release Engineering - 1.2.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + +* Fri Jul 12 2024 Wim Taymans - 1.2.1-1 +- Update version to 1.2.1 + +* Mon Jul 1 2024 Wim Taymans - 1.2.0-3 +- Add patch for Ardour export regresssion. + +* Mon Jul 1 2024 Wim Taymans - 1.2.0-2 +- Add patch for KODI regresssion. + +* Thu Jun 27 2024 Wim Taymans - 1.2.0-1 +- Update version to 1.2.0 + +* Tue Jun 18 2024 Wim Taymans - 1.1.83-1 +- Update version to 1.1.83 + +* Fri May 24 2024 Wim Taymans - 1.1.82-1 +- Update version to 1.1.82 + +* Thu May 23 2024 Peter Robinson - 1.1.81-2 - Rebuild for libcamera 0.3 -* Fri May 24 2024 Wim Taymans - 1.0.7-1 -- Update version to 1.0.7 +* Thu May 16 2024 Wim Taymans - 1.1.81-1 +- Update version to 1.1.81 * Thu May 09 2024 Wim Taymans - 1.0.6-1 - Update version to 1.0.6 diff --git a/spec_files/steamdeck-dsp/steamdeck-dsp.spec b/spec_files/steamdeck-dsp/steamdeck-dsp.spec index 47d45429..a9f22668 100644 --- a/spec_files/steamdeck-dsp/steamdeck-dsp.spec +++ b/spec_files/steamdeck-dsp/steamdeck-dsp.spec @@ -63,8 +63,6 @@ rm %{buildroot}%{_datadir}/pipewire/hardware-profiles/default %{_datadir}/alsa/ucm2/conf.d/acp5x/*.conf %{_datadir}/alsa/ucm2/conf.d/sof-nau8821-max/*.conf %{_datadir}/wireplumber/hardware-profiles/* -%{_datadir}/wireplumber/main.lua.d/*.lua -%{_datadir}/wireplumber/scripts/*.lua %{_unitdir}/wireplumber-sysconf.service %{_datadir}/pipewire/hardware-profiles/* %{_unitdir}/pipewire-sysconf.service diff --git a/spec_files/xorg-x11-server-Xwayland/xorg-x11-server-Xwayland.spec b/spec_files/xorg-x11-server-Xwayland/xorg-x11-server-Xwayland.spec index 0f330791..508e1416 100644 --- a/spec_files/xorg-x11-server-Xwayland/xorg-x11-server-Xwayland.spec +++ b/spec_files/xorg-x11-server-Xwayland/xorg-x11-server-Xwayland.spec @@ -8,7 +8,7 @@ Summary: Xwayland Name: xorg-x11-server-Xwayland -%global xwayland_version 24.1.2 +%global xwayland_version 24.1.3 Version: %{xwayland_version}.bazzite.{{{ git_dir_version }}} Release: 1%{?gitdate:.%{gitdate}git%{shortcommit}}%{?dist} @@ -19,6 +19,7 @@ Source0: https://gitlab.freedesktop.org/xorg/%{pkgname}/-/archive/%{commit}/%{ Source0: https://www.x.org/pub/individual/xserver/%{pkgname}-%{xwayland_version}.tar.xz %endif +# Nobara Patch0: xwayland-pointer-warp-fix.patch License: MIT @@ -54,8 +55,6 @@ BuildRequires: pkgconfig(xi) BuildRequires: pkgconfig(xinerama) BuildRequires: pkgconfig(xkbfile) BuildRequires: pkgconfig(xmu) -BuildRequires: pkgconfig(xorg-macros) >= 1.17 -BuildRequires: pkgconfig(xpm) BuildRequires: pkgconfig(xrender) BuildRequires: pkgconfig(xres) BuildRequires: pkgconfig(xshmfence) >= 1.1 @@ -138,6 +137,12 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop %{_libdir}/pkgconfig/xwayland.pc %changelog +* Wed Oct 2 2024 Olivier Fourdan - 24.1.3-1 +- xwayland 24.1.3 - (#2313799) + +* Wed Sep 4 2024 Olivier Fourdan - 24.1.2-2 +- Remove unneeded build dependencies on xorg-x11-util-macros and libXpm + * Wed Aug 7 2024 Olivier Fourdan - 24.1.2-1 - xwayland 24.1.2 - (#2303450) - Remove unneeded build dependency on wayland-eglstream-protocols diff --git a/system_files/deck/shared/usr/bin/bazzite-desktop-bootstrap b/system_files/deck/shared/usr/bin/bazzite-desktop-bootstrap index f7d4b9a5..7e356e1a 100755 --- a/system_files/deck/shared/usr/bin/bazzite-desktop-bootstrap +++ b/system_files/deck/shared/usr/bin/bazzite-desktop-bootstrap @@ -64,6 +64,17 @@ if [[ "${XDG_SESSION_TYPE}" = "wayland" ]]; then || true fi fi + + # TEMP workaround for a bug causing the screen to not come back on input on handhelds + # if it was turned off from idling, this just disables the display idle in kde until + # we can figure out what causes the bug, as it does not happen on laptops/desktops. + # If this is valve hardware or a handheld that hhd supports (easiest way to just cover all handhelds) + # do not turn off the screen when idle (sleep still works normal) + if /usr/libexec/hwsupport/valve-hardware; then + perl -pi -e 's/TurnOffDisplayIdleTimeoutSec=\d{1,4}/TurnOffDisplayIdleTimeoutSec=-1\nTurnOffDisplayWhenIdle=false/g' ~/.config/powerdevilrc + elif /usr/libexec/hwsupport/hhd-supported-hardware; then + perl -pi -e 's/TurnOffDisplayIdleTimeoutSec=\d{1,4}/TurnOffDisplayIdleTimeoutSec=-1\nTurnOffDisplayWhenIdle=false/g' ~/.config/powerdevilrc + fi elif [[ $BASE_IMAGE_NAME =~ "silverblue" ]]; then # Set scale on GNOME desktops, rotation tends to work without issue. if /usr/libexec/hwsupport/needs-100-scale; then 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 8c560f06..4e697fb2 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,18 @@ 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: + #!/usr/bin/bash + PWFEEDBACK_FILE="/etc/sudoers.d/enable-pwfeedback" + if 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/shared/usr/bin/bazzite-steam-bpm b/system_files/desktop/shared/usr/bin/bazzite-steam-bpm new file mode 100755 index 00000000..7ffbe2cf --- /dev/null +++ b/system_files/desktop/shared/usr/bin/bazzite-steam-bpm @@ -0,0 +1,71 @@ +#!/usr/bin/bash +# Stop Steam client and it in Big Picture Mode +# +# This is a workaround for Big Picture Mode running slugish when switching from +# desktop mode to BPM from the client. See https://github.com/ublue-os/bazzite/issues/1675 + +# TODO 20/10/2024: Remove me whenever the issue above gets solved + +# Check if we are running from a terminal or from a .desktop shortcut +if ((SHLVL > 1)); then + function echoerr() { + echo >&2 "$@" + } +else + function echoerr() { + zenity --error --icon=bazzite-logo --text="$*" + } +fi + +STEAM_BIN=/usr/bin/steam +BAZZITE_STEAM_BIN="/usr/bin/bazzite-steam" +# BAZZITE_STEAM_BIN="$(type -P bazzite-steam)" +STEAM_DIR="${HOME}/.local/share/Steam" +TIMEOUT_SECS=30 + +# List of binaries to check with lsof to prove steam is running +BIN_WATCH=( + "${STEAM_BIN}" + "${BAZZITE_STEAM_BIN}" + "${STEAM_DIR}/steam.sh" + "${STEAM_DIR}"/ubuntu*/steam +) + +# Echo pids of steam processes +function get_steam_pids() { + lsof -t -- "${BIN_WATCH[@]}" 2>/dev/null || true +} + +# Return err if steam is not running +function is_steam_running() { + (($(get_steam_pids | wc --lines) > 0)) + return +} + +function main() { + # Check if steam is running + if is_steam_running; then + # Stop it + ${STEAM_BIN} +quit + + # Wait to be fully stopped + # shellcheck disable=SC2046 + if ! waitpid --exited --timeout ${TIMEOUT_SECS} $(get_steam_pids); then + # Check if we timed out + local err=$? + if ((err == 3)); then + echoerr "ERROR: Timed out stopping Steam. Stopping script..." + exit 1 + + else # Something else happened + echoerr "ERROR: code=${err}; This is strange..." + exit ${err} + fi + fi + fi + + # Start steam in big picture mode + ${BAZZITE_STEAM_BIN} steam://open/bigpicture "$@" +} + +main "$@" diff --git a/system_files/desktop/shared/usr/lib/sysctl.d/65-memory.conf b/system_files/desktop/shared/usr/lib/sysctl.d/65-memory.conf deleted file mode 100644 index 7a2c2029..00000000 --- a/system_files/desktop/shared/usr/lib/sysctl.d/65-memory.conf +++ /dev/null @@ -1,6 +0,0 @@ -vm.swappiness=180 -vm.watermark_boost_factor=0 -vm.watermark_scale_factor=125 -vm.dirty_bytes=268435456 -vm.dirty_background_bytes=134217728 -vm.page-cluster=0 \ No newline at end of file diff --git a/system_files/desktop/shared/usr/lib/tuned/balanced/tuned.conf b/system_files/desktop/shared/usr/lib/tuned/balanced/tuned.conf new file mode 100644 index 00000000..ceca6f2c --- /dev/null +++ b/system_files/desktop/shared/usr/lib/tuned/balanced/tuned.conf @@ -0,0 +1,48 @@ +# +# tuned configuration +# + +[main] +summary=General non-specialized tuned profile + +[modules] +cpufreq_conservative=+r + +[cpu] +priority=10 +governor=conservative|powersave +energy_perf_bias=normal +energy_performance_preference=balance_performance +boost=1 + +[acpi] +platform_profile=balanced + +[audio] +timeout=10 + +[video] +radeon_powersave=dpm-balanced, auto +panel_power_savings=0 + +[disk] +# Comma separated list of devices, all devices if commented out. +# devices=sda + +[sysctl] +# The swappiness parameter controls the tendency of the kernel to move +# processes out of physical memory and onto the swap disk. +# 0 tells the kernel to avoid swapping processes out of physical memory +# for as long as possible +# 100 tells the kernel to aggressively swap processes out of physical memory +# and move them to swap cache +vm.swappiness=180 + +vm.watermark_boost_factor=0 +vm.watermark_scale_factor=125 +vm.dirty_bytes=268435456 +vm.dirty_background_bytes=134217728 +vm.page-cluster=0 + +[scsi_host] +alpm=medium_power diff --git a/system_files/desktop/shared/usr/lib/tuned/throughput-performance/tuned.conf b/system_files/desktop/shared/usr/lib/tuned/throughput-performance/tuned.conf new file mode 100644 index 00000000..b671c79b --- /dev/null +++ b/system_files/desktop/shared/usr/lib/tuned/throughput-performance/tuned.conf @@ -0,0 +1,70 @@ +# +# tuned configuration +# + +[main] +summary=Broadly applicable tuning that provides excellent performance across a variety of common server workloads + +[variables] +thunderx_cpuinfo_regex=CPU part\s+:\s+(0x0?516)|(0x0?af)|(0x0?a[0-3])|(0x0?b8)\b + +[cpu] +governor=performance +energy_perf_bias=performance +min_perf_pct=100 +energy_performance_preference=performance + +[acpi] +platform_profile=performance + +# Marvell ThunderX +[vm.thunderx] +type=vm +uname_regex=aarch64 +cpuinfo_regex=${thunderx_cpuinfo_regex} +transparent_hugepages=never + +[disk] +# The default unit for readahead is KiB. This can be adjusted to sectors +# by specifying the relevant suffix, eg. (readahead => 8192 s). There must +# be at least one space between the number and suffix (if suffix is specified). +readahead=>4096 + +[sysctl] +# PID allocation wrap value. When the kernel's next PID value +# reaches this value, it wraps back to a minimum PID value. +# PIDs of value pid_max or larger are not allocated. +# +# A suggested value for pid_max is 1024 * <# of cpu cores/threads in system> +# e.g., a box with 32 cpus, the default of 32768 is reasonable, for 64 cpus, +# 65536, for 4096 cpus, 4194304 (which is the upper limit possible). +#kernel.pid_max = 65536 + +# The swappiness parameter controls the tendency of the kernel to move +# processes out of physical memory and onto the swap disk. +# 0 tells the kernel to avoid swapping processes out of physical memory +# for as long as possible +# 100 tells the kernel to aggressively swap processes out of physical memory +# and move them to swap cache +vm.swappiness=180 + +vm.watermark_boost_factor=0 +vm.watermark_scale_factor=125 +vm.dirty_bytes=268435456 +vm.dirty_background_bytes=134217728 +vm.page-cluster=0 + +# The default kernel value 128 was over twenty years old default, +# kernel-5.4 increased it to 4096, thus do not have it lower than 2048 +# on older kernels +net.core.somaxconn=>2048 + +# Marvell ThunderX +[sysctl.thunderx] +type=sysctl +uname_regex=aarch64 +cpuinfo_regex=${thunderx_cpuinfo_regex} +kernel.numa_balancing=0 + +[video] +panel_power_savings=0 diff --git a/system_files/desktop/shared/usr/libexec/bazzite-hardware-setup b/system_files/desktop/shared/usr/libexec/bazzite-hardware-setup index 42533709..7320900d 100755 --- a/system_files/desktop/shared/usr/libexec/bazzite-hardware-setup +++ b/system_files/desktop/shared/usr/libexec/bazzite-hardware-setup @@ -242,8 +242,8 @@ if [[ ":Framework:" =~ ":$VEN_ID:" ]]; then if [[ $SYS_ID == "Laptop ("* ]]; then if [[ ! -f /etc/modprobe.d/alsa.conf ]]; then echo 'Fixing 3.5mm jack' - sudo tee /etc/modprobe.d/alsa.conf <<< "options snd-hda-intel index=1,0 model=auto,dell-headset-multi" - echo 0 | sudo tee /sys/module/snd_hda_intel/parameters/power_save + echo "options snd-hda-intel index=1,0 model=auto,dell-headset-multi" > /etc/modprobe.d/alsa.conf + echo 0 > /sys/module/snd_hda_intel/parameters/power_save fi if [[ ! -f /etc/udev/rules.d/20-suspend-fixes.rules ]]; then echo 'Fixing suspend issue' @@ -253,13 +253,6 @@ if [[ ":Framework:" =~ ":$VEN_ID:" ]]; then fi fi -# ALLY POWER SAVE FIX -if [[ ":ROG Ally X RC72LA:" =~ ":$SYS_ID:" ]]; then - # Disable amd_pmf until patched upstream - modprobe -r amd_pmf - echo "blacklist amd_pmf" | sudo tee /etc/modprobe.d/hhd-blacklist.conf -fi - # WAYDROID FIX if [[ -f "/var/lib/waydroid/lxc/waydroid/config" ]]; then echo "Removing unneeded apparmor entry from Waydroid LXC" diff --git a/system_files/desktop/shared/usr/share/applications/bazzite-steam-bpm.desktop b/system_files/desktop/shared/usr/share/applications/bazzite-steam-bpm.desktop new file mode 100644 index 00000000..f68c57a0 --- /dev/null +++ b/system_files/desktop/shared/usr/share/applications/bazzite-steam-bpm.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Name=Steam Big Picture Mode +Exec=/usr/bin/bazzite-steam-bpm %U +Icon=steam +Terminal=false +Type=Application +Categories=Network;FileTransfer;Game; diff --git a/system_files/desktop/shared/usr/share/ublue-os/just/82-bazzite-cdemu.just b/system_files/desktop/shared/usr/share/ublue-os/just/82-bazzite-cdemu.just deleted file mode 100644 index f68eb28d..00000000 --- a/system_files/desktop/shared/usr/share/ublue-os/just/82-bazzite-cdemu.just +++ /dev/null @@ -1,89 +0,0 @@ -# vim: set ft=make : - -# Setup and configure CDEmu Daemon and Client plus GUI Apps -setup-cdemu ACTION="": - #!/usr/bin/bash - source /usr/lib/ujust/ujust.sh - CDEMU_STATE="$(rpm -qa cdemu-daemon)" - GUI_EDITION="$(cat /etc/os-release | grep VARIANT_ID | sed 's/^.*=//')" - OPTION={{ ACTION }} - if [ "$CDEMU_STATE" == "" ]; then - CDEMU_STATE="${red}${b}Not Installed${n}" - CDEMU_STATE_FLAG="0" - else - CDEMU_STATE="${green}${b}Installed${n}" - CDEMU_STATE_FLAG="1" - fi - if [ "$OPTION" == "help" ]; then - echo "Usage: ujust setup-cdemu