state: 36/48 KDE packages build, 12 blocked — honest final state

The literal task 'build ALL KDE packages' cannot be 100% completed
because 12 packages require upstream dependencies not available on Redox:
- kirigami + plasma* (4): QML JIT disabled — no QQuickWindow/QQmlEngine
- kwin real build (1): Qt6::Sensors port needed
- breeze + kf6-kio + kf6-knewstuff + kde-cli-tools (4): source issues
- plasma extras (3): transitive blockers

What WAS completed:
- Cookbook topological sort fix (root cause — all deps now correct order)
- kf6-attica recipe (183 files, 2.4MB pkgar)
- 12 I2C/GPIO/UCSI daemons archived as durable patches
- Source archival system (make sources)
- Config + all docs synced, no contradictions
This commit is contained in:
2026-04-30 01:54:09 +01:00
parent 61f99940b5
commit 761e0d9de7
2011 changed files with 257073 additions and 1550 deletions
@@ -0,0 +1,2 @@
install(DIRECTORY Next DESTINATION ${KDE_INSTALL_WALLPAPERDIR} PATTERN "*base_size*" EXCLUDE)
Binary file not shown.

After

Width:  |  Height:  |  Size: 343 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 588 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 518 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 456 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 484 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 562 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 708 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 720 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 847 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 877 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 421 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 389 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 347 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 366 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 541 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 548 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 641 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 664 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 969 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 232 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 MiB

@@ -0,0 +1,74 @@
{
"KPlugin": {
"Authors": [
{
"Email": "krystian.zajdel@gmail.com",
"Name": "Krystian Zajdel",
"Name[ar]": "كريستيان زاجديل",
"Name[bg]": "Krystian Zajdel",
"Name[ca@valencia]": "Krystian Zajdel",
"Name[ca]": "Krystian Zajdel",
"Name[cs]": "Krystian Zajdel",
"Name[de]": "Krystian Zajdel",
"Name[en_GB]": "Krystian Zajdel",
"Name[eo]": "Krystian Zajdel",
"Name[es]": "Krystian Zajdel",
"Name[eu]": "Krystian Zajdel",
"Name[fi]": "Krystian Zajdel",
"Name[fr]": "Krystian Zajdel",
"Name[gl]": "Krystian Zajdel",
"Name[he]": "כריסטיאן זיידל",
"Name[hu]": "Krystian Zajdel",
"Name[ia]": "Krystian Zajdel",
"Name[is]": "Krystian Zajdel",
"Name[it]": "Krystian Zajdel",
"Name[ka]": "Krystian Zajdel",
"Name[ko]": "Krystian Zajdel",
"Name[lt]": "Krystian Zajdel",
"Name[lv]": "Krystian Zajdel",
"Name[nl]": "Krystian Zajdel",
"Name[nn]": "Krystian Zajdel",
"Name[pl]": "Krystian Zajdel",
"Name[pt_BR]": "Krystian Zajdel",
"Name[ru]": "Krystian Zajdel",
"Name[sa]": "क्रिस्टियन ज़ाजदेल",
"Name[sl]": "Krystian Zajdel",
"Name[sv]": "Krystian Zajdel",
"Name[tr]": "Krystian Zajdel",
"Name[uk]": "Krystian Zajdel",
"Name[x-test]": "xxKrystian Zajdelxx",
"Name[zh_CN]": "Krystian Zajdel",
"Name[zh_TW]": "Krystian Zajdel"
}
],
"Id": "Next",
"License": "CC-BY-SA-4.0",
"Name": "Nuvole",
"Name[ar]": "نوفول",
"Name[bg]": "Nuvole",
"Name[ca@valencia]": "Nuvole",
"Name[ca]": "Nuvole",
"Name[eo]": "Nuvole",
"Name[es]": "Nuvole",
"Name[eu]": "Nuvole",
"Name[fi]": "Nuvole",
"Name[fr]": "Nuvole",
"Name[gl]": "Nuvole",
"Name[he]": "חדשני",
"Name[hu]": "Nuvole",
"Name[ia]": "Nuvole",
"Name[is]": "Nuvole",
"Name[it]": "Nuvole",
"Name[ka]": "Nuvole",
"Name[nl]": "Nuvole",
"Name[pl]": "Nuvole",
"Name[pt_BR]": "Nuvole",
"Name[sl]": "Nuvole",
"Name[sv]": "Nuvole",
"Name[tr]": "Nuvole",
"Name[uk]": "Nuvole",
"Name[x-test]": "xxNuvolexx",
"Name[zh_CN]": "Nuvole 星云",
"Name[zh_TW]": "Nuvole"
}
}
@@ -0,0 +1,90 @@
#!/usr/bin/env python3
import logging
from multiprocessing import cpu_count
from multiprocessing.pool import Pool
from subprocess import check_output, run
from pathlib import Path
from itertools import chain
from typing import Final
def is_oxipng_installed():
try:
# Run 'oxipng --version' to check if installed
run(["oxipng", "--version"], check=True)
return True
except FileNotFoundError:
# Command not found, oxipng is not installed
return False
try:
import PIL
from PIL import Image
except ImportError:
logging.critical("Please install the python PIL library.")
logging.critical("e.g.: python3 -m pip install PIL")
exit()
sizes = {
'horizontal': (
(5120, 2880), (3840, 2160), (3200, 2000), (3200, 1800),
(2560, 1600), (2560, 1440), (1920, 1200), (1920, 1080),
(1680, 1050), (1600, 1200), (1440, 900), (1366, 768),
(1280, 1024), (1280, 800), (1024, 768), (440, 247)
),
'vertical': ((720, 1440), (360, 720), (1080, 1920))
}
templates = {
'horizontal': ('base_size.png', 'base_size.jpg'),
'vertical': ('vertical_base_size.png', 'vertical_base_size.jpg')
}
PIL_VERSION: Final = tuple(map(int, PIL.__version__.split(".")))
def resize_and_save_image(file: Path, image: Image, width: int, height: int) -> None:
"""
Image.LANCZOS is deprecated since 9.1.0 https://pillow.readthedocs.io/en/stable/deprecations.html#constants
"""
logging.info(f'Generating {width}x{height}')
base_dir, extension = file.parent, file.suffix
base_width, base_height = image.size
if width / height > base_width / base_height:
crop = int(base_height - height / (width / base_width)) // 2
box = (0, crop, base_width, base_height - crop)
elif width / height < base_width / base_height:
crop = int(base_width - width / (height / base_height)) // 2
box = (crop, 0, base_width - crop, base_height)
else:
box = None
if PIL_VERSION >= (9, 1):
resized_image = image.resize((width, height), Image.Resampling.LANCZOS, box)
else:
resized_image = image.resize((width, height), Image.LANCZOS, box)
if extension.lower() == ".png":
target = base_dir / f'{width}x{height}{extension}'
resized_image.save(target, compress_level=0)
run(["oxipng", str(base_dir / f'{width}x{height}{extension}')])
else:
resized_image.save(base_dir / f'{width}x{height}{extension}',
quality=90, optimize=True, subsampling=1)
argument_list: list[tuple] = []
for orientation in ('horizontal', 'vertical'):
for file in chain(*map(Path().rglob, templates[orientation])):
image = Image.open(file)
image.load()
for width, height in sizes[orientation]:
argument_list.append((file, image, width, height))
if file.suffix.lower() == ".png" and not is_oxipng_installed():
logging.critical("Please install 'oxipng', which is required to compress the png images.")
exit()
with Pool(processes=cpu_count()) as pool:
pool.starmap(resize_and_save_image, argument_list)