BC-250 console image: custom GNOME recipe with remote admin
Build Bazzite BC-250 / Check Bazzite channel digests (push) Has been cancelled
Build Bazzite BC-250 / Build Custom Image (push) Has been cancelled
Build Bazzite BC-250 / Build Custom 40CU Image (push) Has been cancelled
Build Bazzite BC-250 / Save Bazzite channel digest cache (push) Has been cancelled
Build Bazzite BC-250 / Publish GitHub Release (push) Has been cancelled

Based on 62fixolab/Latest-Bazzite-AMD-BC-250-Patched-Images @ 347fd4d.

Adds on top of the fork:
- recipes/bc250-console-gnome.yml: governor + gnome-remote-desktop +
  openssh-server, sshd enabled, hhd.service masked, no signing module
  (local build + ISO path)
- files/console/usr/bin/bc250-remote-setup: one-time on-box SSH/RDP setup
- files/console/usr/lib/bootc/kargs.d/50-bc250-ttm.toml: ttm memory kargs
- BUILD-CONSOLE.md: build -> ISO -> validation instructions

files/console/ is separate from files/system/ so the 40-CU unlock tooling
stays out of this stable 24-CU image.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-06 18:54:30 -04:00
co-authored by Claude Fable 5
commit 4e452acc7d
66 changed files with 13574 additions and 0 deletions
+55
View File
@@ -0,0 +1,55 @@
#!/usr/bin/env python3
"""Render a BlueBuild recipe for a specific Bazzite channel and package name."""
from __future__ import annotations
import argparse
from pathlib import Path
def replace_prefixed_line(lines: list[str], prefix: str, replacement: str) -> list[str]:
replaced = False
rendered: list[str] = []
for line in lines:
if line.startswith(prefix):
rendered.append(replacement)
replaced = True
else:
rendered.append(line)
if not replaced:
raise SystemExit(f"Could not find required line starting with {prefix!r}.")
return rendered
def parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("--recipe", required=True, type=Path)
parser.add_argument("--output", required=True, type=Path)
parser.add_argument("--channel", required=True)
parser.add_argument("--name", required=True)
return parser.parse_args()
def main() -> int:
args = parse_args()
lines = args.recipe.read_text(encoding="utf-8").splitlines()
lines = replace_prefixed_line(lines, "name:", f"name: {args.name}")
lines = replace_prefixed_line(lines, "image-version:", f"image-version: {args.channel}")
lines = [
line.replace(" stable image ", f" {args.channel} image ")
if line.startswith("description:")
else line
for line in lines
]
args.output.write_text("\n".join(lines) + "\n", encoding="utf-8")
print(f"Rendered {args.output} for {args.name}:{args.channel}")
return 0
if __name__ == "__main__":
raise SystemExit(main())