From 17212167b08aa47eb7c1eacdcbb9a670bb9d6754 Mon Sep 17 00:00:00 2001 From: Gianni Spadoni Date: Wed, 27 May 2026 21:08:11 +0800 Subject: [PATCH 1/5] nodejs: new package We need Node on the host to build decky-loader's frontend. This package supports building for target anyways though! Signed-off-by: Gianni Spadoni --- .../ROCKNIX/packages/devel/nodejs/package.mk | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 projects/ROCKNIX/packages/devel/nodejs/package.mk diff --git a/projects/ROCKNIX/packages/devel/nodejs/package.mk b/projects/ROCKNIX/packages/devel/nodejs/package.mk new file mode 100644 index 00000000000..5697801f31e --- /dev/null +++ b/projects/ROCKNIX/packages/devel/nodejs/package.mk @@ -0,0 +1,61 @@ +# SPDX-License-Identifier: GPL-2.0-or-later +# Copyright (C) 2026 ROCKNIX (https://github.com/ROCKNIX) + +PKG_NAME="nodejs" +PKG_VERSION="v22.22.3" +PKG_LICENSE="MIT" +PKG_SITE="https://github.com/nodejs/node" +PKG_URL="${PKG_SITE}/archive/refs/tags/${PKG_VERSION}.tar.gz" +PKG_DEPENDS_TARGET="toolchain bzip2:host" +PKG_LONGDESC="Open-source, cross-platform JavaScript runtime environment." +PKG_TOOLCHAIN="configure" + +pre_build_target() { + mkdir -p ${PKG_BUILD}/.${TARGET_NAME} + cp -RP ${PKG_BUILD}/* ${PKG_BUILD}/.${TARGET_NAME} +} + +pre_build_host() { + mkdir -p ${PKG_BUILD}/.${HOST_NAME} + cp -RP ${PKG_BUILD}/* ${PKG_BUILD}/.${HOST_NAME} +} + +configure_target() { + case ${ARCH} in + aarch64) + PKG_ARCH_NAME_NODEJS="arm64" + ;; + arm) + PKG_ARCH_NAME_NODEJS="arm" + ;; + x86_64) + PKG_ARCH_NAME_NODEJS="x86_64" + ;; + esac + + export CC_target=${TARGET_NAME}-gcc + export CXX_target=${TARGET_NAME}-g++ + export AR_target=${TARGET_NAME}-ar + export LD_target=${TARGET_NAME}-ld + + export CC_host=/usr/bin/gcc + export CXX_host=/usr/bin/g++ + export AR_host=/usr/bin/ar + export LD_host=/usr/bin/ld + + /usr/bin/python3 ./configure.py \ + --cross-compiling \ + --dest-cpu ${PKG_ARCH_NAME_NODEJS} \ + --shared \ + --prefix /usr +} + +configure_host() { + /usr/bin/python3 ./configure.py \ + --shared \ + --prefix ${TOOLCHAIN} +} + +post_makeinstall_host() { + mkdir -p ${TOOLCHAIN}/usr/{lib,bin,include} +} \ No newline at end of file From fdbb076b4a2c1e4523b4ce596ed9d0b250eb3954 Mon Sep 17 00:00:00 2001 From: Gianni Spadoni Date: Thu, 28 May 2026 11:01:44 +0800 Subject: [PATCH 2/5] Python3: support host builds & pip3 Needed for decky-loader. Our Python3 build was stripped down, we can relax that a bit now Target build size didn't go up in my testing. Notably, the below line has been removed from post_makeinstall_target `python_compile ${PKG_INSTALL_PATH_LIB}` With the new configure options, this was breaking the install and causing a FS codec error, need to look into this Signed-off-by: Gianni Spadoni --- .../ROCKNIX/packages/lang/Python3/package.mk | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 projects/ROCKNIX/packages/lang/Python3/package.mk diff --git a/projects/ROCKNIX/packages/lang/Python3/package.mk b/projects/ROCKNIX/packages/lang/Python3/package.mk new file mode 100644 index 00000000000..f04997969b2 --- /dev/null +++ b/projects/ROCKNIX/packages/lang/Python3/package.mk @@ -0,0 +1,52 @@ +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2026-present ROCKNIX (https://github.com/ROCKNIX) + +. ${ROOT}/packages/lang/Python3/package.mk + +PKG_CONFIGURE_OPTS_HOST="ac_cv_prog_HAS_HG=/bin/false + ac_cv_prog_SVNVERSION=/bin/false + py_cv_module_unicodedata=yes + py_cv_module__codecs_cn=n/a + py_cv_module__codecs_hk=n/a + py_cv_module__codecs_iso2022=n/a + py_cv_module__codecs_jp=n/a + py_cv_module__codecs_kr=n/a + py_cv_module__codecs_tw=n/a + py_cv_module__decimal=n/a + py_cv_module__lzma=n/a + py_cv_module_nis=n/a + py_cv_module_ossaudiodev=n/a + py_cv_module__dbm=n/a + py_cv_module__gdbm=n/a + --without-readline + --disable-tk + --disable-curses + --disable-pydoc + --disable-idle3 + --with-expat=builtin + --with-doc-strings + --without-pymalloc + --with-ensurepip=yes + --enable-shared +" + +post_makeinstall_target() { + ln -sf ${PKG_PYTHON_VERSION} ${INSTALL}/usr/bin/python + + rm -fr ${PKG_BUILD}/.${TARGET_NAME}/build/temp.* + + PKG_INSTALL_PATH_LIB=${INSTALL}/usr/lib/${PKG_PYTHON_VERSION} + + for dir in config compiler sysconfigdata lib-dynload/sysconfigdata test; do + rm -rf ${PKG_INSTALL_PATH_LIB}/${dir} + done + + safe_remove ${INSTALL}/usr/bin/python*-config + + find ${INSTALL} -name '*.o' -delete + find ${INSTALL}/usr/lib/ | grep -E "(/__pycache__$|\.pyc$|\.pyo$)" | xargs rm -rf + + # strip + chmod u+w ${INSTALL}/usr/lib/libpython*.so.* + debug_strip ${INSTALL}/usr +} \ No newline at end of file From c9f39dada981cb6ea924b257da6e58b565e355d9 Mon Sep 17 00:00:00 2001 From: Gianni Spadoni Date: Thu, 28 May 2026 11:04:34 +0800 Subject: [PATCH 3/5] decky-loader: new package Adds decky-loader as a package. Stores plugins in "/storage/.config/decky-loader/plugins" Requires: nodejs:host (for frontend building) and Python3 (for the backend) Signed-off-by: Gianni Spadoni --- .../packages/tools/decky-loader/package.mk | 58 +++++++++++++++++++ .../decky-loader/scripts/decky-backend.sh | 14 +++++ .../system.d/decky-loader.service | 12 ++++ 3 files changed, 84 insertions(+) create mode 100644 projects/ROCKNIX/packages/tools/decky-loader/package.mk create mode 100644 projects/ROCKNIX/packages/tools/decky-loader/scripts/decky-backend.sh create mode 100644 projects/ROCKNIX/packages/tools/decky-loader/system.d/decky-loader.service diff --git a/projects/ROCKNIX/packages/tools/decky-loader/package.mk b/projects/ROCKNIX/packages/tools/decky-loader/package.mk new file mode 100644 index 00000000000..c96e26e2eea --- /dev/null +++ b/projects/ROCKNIX/packages/tools/decky-loader/package.mk @@ -0,0 +1,58 @@ +# SPDX-License-Identifier: GPL-2.0-or-later +# Copyright (C) 2026 ROCKNIX (https://github.com/ROCKNIX) + +PKG_NAME="decky-loader" +PKG_VERSION="v3.2.3" +PKG_LICENSE="MIT" +PKG_SITE="https://github.com/SteamDeckHomebrew/decky-loader" +PKG_URL="${PKG_SITE}/archive/refs/tags/${PKG_VERSION}.tar.gz" +PKG_DEPENDS_TARGET="toolchain nodejs:host Python3:host Python3" +PKG_LONGDESC="A plugin loader for the Steam Deck." +PKG_TOOLCHAIN="manual" + +makeinstall_target() { + # Build the frontend + # npm needs a home directory, we can't really do that with our build system (or at least Docker) + export PKG_DECKY_LOADER_NPM_HOME="${PKG_BUILD}/npm-home" + export PKG_DECKY_LOADER_NPM_CACHE="${PKG_BUILD}/npm-cache" + mkdir -p ${PKG_DECKY_LOADER_NPM_HOME} + mkdir -p ${PKG_DECKY_LOADER_NPM_CACHE} + + pushd ${PKG_BUILD}/frontend + # Remove existing node_modules so we can handle the change from npm to pnpm + rm -rf node_modules + + # Download dependencies + HOME="${PKG_DECKY_LOADER_NPM_HOME}" npm install pnpm --cache ${PKG_DECKY_LOADER_NPM_CACHE} --no-save --legacy-peer-deps + HOME="${PKG_DECKY_LOADER_NPM_HOME}" npm exec -- pnpm i --frozen-lockfile --dangerously-allow-all-builds + + # Build + HOME="${PKG_DECKY_LOADER_NPM_HOME}" npm exec -- pnpm build + popd + + # "Build" the backend + # We can't really build it... just install the dependencies preemptively + export PKG_DECKY_LOADER_PIP_LIBS="${PKG_BUILD}/backend/lib" + pip3 install \ + --target="${PKG_DECKY_LOADER_PIP_LIBS}" \ + --platform=manylinux2014_aarch64 \ + --python-version=313 \ + --implementation=cp \ + --only-binary=:all: \ + aiohttp aiohttp-jinja2 aiohttp-cors \ + setproctitle watchdog certifi packaging Jinja2 yarl frozenlist attrs multidict +} + +post_makeinstall_target() { + mkdir -p ${INSTALL}/usr/share/decky-loader/ + cp -rf ${PKG_BUILD}/backend ${INSTALL}/usr/share/decky-loader/ + + mkdir -p ${INSTALL}/usr/bin/ + cp -rf ${PKG_DIR}/scripts/* ${INSTALL}/usr/bin/ + + chmod +x ${INSTALL}/usr/bin/* +} + +post_install() { + enable_service decky-loader.service +} \ No newline at end of file diff --git a/projects/ROCKNIX/packages/tools/decky-loader/scripts/decky-backend.sh b/projects/ROCKNIX/packages/tools/decky-loader/scripts/decky-backend.sh new file mode 100644 index 00000000000..263df3dde03 --- /dev/null +++ b/projects/ROCKNIX/packages/tools/decky-loader/scripts/decky-backend.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +# SPDX-License-Identifier: GPL-2.0-or-later +# Copyright (C) 2026 ROCKNIX (https://github.com/ROCKNIX) + +. /etc/profile + +DECKY_LOADER_HOME="/storage/.config/decky-loader" +mkdir -p $DECKY_LOADER_HOME/data +mkdir -p $DECKY_LOADER_HOME/plugins + +UNPRIVILEGED_PATH="$DECKY_LOADER_HOME/data" \ + PLUGIN_PATH="$DECKY_LOADER_HOME/plugins" \ + PYTHONPATH="/usr/share/decky-loader/backend/lib/" python3 /usr/share/decky-loader/backend/main.py \ No newline at end of file diff --git a/projects/ROCKNIX/packages/tools/decky-loader/system.d/decky-loader.service b/projects/ROCKNIX/packages/tools/decky-loader/system.d/decky-loader.service new file mode 100644 index 00000000000..0a8b6776d25 --- /dev/null +++ b/projects/ROCKNIX/packages/tools/decky-loader/system.d/decky-loader.service @@ -0,0 +1,12 @@ +[Unit] +Description=Decky Loader + +[Service] +ExecStart=/bin/bash -c "source /etc/profile && /usr/bin/decky-backend.sh" +Restart=always +RestartSec=5 +User=root +Group=root + +[Install] +WantedBy=rocknix.target From 09b71ca445b2f4a933826ea6b7af9e8bb6784408 Mon Sep 17 00:00:00 2001 From: Gio Date: Tue, 2 Jun 2026 14:49:57 +0800 Subject: [PATCH 4/5] steam: add decky-loader dependency Compiles decky-loader when using the Steam package --- .../ROCKNIX/packages/emulators/standalone/steam/package.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/ROCKNIX/packages/emulators/standalone/steam/package.mk b/projects/ROCKNIX/packages/emulators/standalone/steam/package.mk index 0733745875f..1b90ceebf85 100644 --- a/projects/ROCKNIX/packages/emulators/standalone/steam/package.mk +++ b/projects/ROCKNIX/packages/emulators/standalone/steam/package.mk @@ -6,7 +6,7 @@ PKG_VERSION="1.0.0.85" PKG_LICENSE="proprietary" PKG_SITE="https://steampowered.com" PKG_URL="https://repo.steampowered.com/steam/archive/stable/steam-launcher_${PKG_VERSION}_amd64.deb" -PKG_DEPENDS_TARGET="mesa:host fex-emu gamescope nss networkmanager" +PKG_DEPENDS_TARGET="mesa:host fex-emu gamescope nss networkmanager decky-loader" PKG_LONGDESC="Steam is the ultimate destination for playing, discussing, and creating games" PKG_TOOLCHAIN="manual" @@ -28,4 +28,4 @@ makeinstall_target() { cp -rf ${PKG_DIR}/resources/compatibilitytool.vdf ${INSTALL}/usr/share/steam cp -rf ${PKG_DIR}/resources/toolmanifest.vdf ${INSTALL}/usr/share/steam cp -rf ${PKG_DIR}/resources/registry.vdf ${INSTALL}/usr/share/steam -} \ No newline at end of file +} From 25a9cd08fb3b572ae18ac1545192bae8e8f5b8c6 Mon Sep 17 00:00:00 2001 From: Gianni Spadoni Date: Fri, 5 Jun 2026 13:45:43 +0800 Subject: [PATCH 5/5] decky-loader: update to v3.2.4 Fixes Steam UI issues Signed-off-by: Gianni Spadoni --- projects/ROCKNIX/packages/tools/decky-loader/package.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/ROCKNIX/packages/tools/decky-loader/package.mk b/projects/ROCKNIX/packages/tools/decky-loader/package.mk index c96e26e2eea..dcc3fc956cb 100644 --- a/projects/ROCKNIX/packages/tools/decky-loader/package.mk +++ b/projects/ROCKNIX/packages/tools/decky-loader/package.mk @@ -2,7 +2,7 @@ # Copyright (C) 2026 ROCKNIX (https://github.com/ROCKNIX) PKG_NAME="decky-loader" -PKG_VERSION="v3.2.3" +PKG_VERSION="v3.2.4" PKG_LICENSE="MIT" PKG_SITE="https://github.com/SteamDeckHomebrew/decky-loader" PKG_URL="${PKG_SITE}/archive/refs/tags/${PKG_VERSION}.tar.gz"