From 39da4936ec2f755834f5f40a2bc0c6963d39084b Mon Sep 17 00:00:00 2001 From: Natsu <139412824+ddy314@users.noreply.github.com> Date: Sun, 20 Sep 2026 21:56:29 +0800 Subject: [PATCH 1/2] Packages (Linux): detects rum overlay packages --- CHANGELOG.md | 1 + doc/json_schema.json | 3 ++- src/detection/packages/packages.h | 1 + src/detection/packages/packages_linux.c | 3 +++ src/modules/packages/option.h | 1 + src/modules/packages/packages.c | 6 ++++++ 6 files changed, 14 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7f4436ce09..6140a364a6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ Changes: * The operating system accounts process CPU time in fixed steps, so a window longer than roughly 150 ms does not visibly improve the reported percentages. The module now finishes about 250 ms sooner. Features: +* Added rum overlay package counting on RakuOS, exposed as `{rum}`. (Packages, Linux) * Improved image logo support * Backend rewritten * Added a native image decoding backend on Windows (WIC), macOS (ImageIO) and Android (AImageDecoder). diff --git a/doc/json_schema.json b/doc/json_schema.json index 829998d4b9..9a01bdb6f5 100644 --- a/doc/json_schema.json +++ b/doc/json_schema.json @@ -446,7 +446,7 @@ "type": "string" }, "packagesFormat": { - "description": "Output format for the `Packages` module. See Wiki for formatting syntax\n 1. {am-system}: Number of am-system packages\n 2. {am-user}: Number of am-user (aka appman) packages\n 3. {appimage}: Number of appimage packages\n 4. {apk}: Number of apk packages\n 5. {brew}: Number of brew packages\n 6. {brew-cask}: Number of brew-cask packages\n 7. {cards}: Number of cards packages\n 8. {choco}: Number of choco packages\n 9. {crux}: Number of crux packages\n 10. {dpkg}: Number of dpkg packages\n 11. {emerge}: Number of emerge packages\n 12. {eopkg}: Number of eopkg packages\n 13. {flatpak-system}: Number of flatpak-system app packages\n 14. {flatpak-user}: Number of flatpak-user app packages\n 15. {guix-home}: Number of guix-home packages\n 16. {guix-system}: Number of guix-system packages\n 17. {guix-user}: Number of guix-user packages\n 18. {hpkg-system}: Number of hpkg-system packages\n 19. {hpkg-user}: Number of hpkg-user packages\n 20. {install-release}: Number of install-release packages\n 21. {kiss}: Number of kiss packages\n 22. {linglong}: Number of linglong packages\n 23. {lpkg}: Number of lpkg packages\n 24. {lpkgbuild}: Number of lpkgbuild packages\n 25. {macports}: Number of macports packages\n 26. {mport}: Number of mport packages\n 27. {moss}: Number of moss packages\n 28. {nix-default}: Number of nix-default packages\n 29. {nix-system}: Number of nix-system packages\n 30. {nix-user}: Number of nix-user packages\n 31. {opkg}: Number of opkg packages\n 32. {pacman}: Number of pacman packages\n 33. {pacman-branch}: Pacman branch on manjaro\n 34. {pacstall}: Number of pacstall packages\n 35. {paludis}: Number of paludis packages\n 36. {pisi}: Number of pisi packages\n 37. {pkg}: Number of pkg packages\n 38. {pkgsrc}: Number of pkgsrc packages\n 39. {pkgtool}: Number of pkgtool packages\n 40. {porg}: Number of porg packages\n 41. {rpm}: Number of rpm packages\n 42. {scoop-global}: Number of scoop-global packages\n 43. {scoop-user}: Number of scoop-user packages\n 44. {snap}: Number of snap packages\n 45. {soar}: Number of soar packages\n 46. {sorcery}: Number of sorcery packages\n 47. {winget}: Number of winget packages\n 48. {xbps}: Number of xbps packages\n 49. {brew-all}: Total number of all brew packages\n 50. {flatpak-all}: Total number of all flatpak app packages\n 51. {guix-all}: Total number of all guix packages\n 52. {hpkg-all}: Total number of all hpkg packages\n 53. {nix-all}: Total number of all nix packages\n 54. {all}: Number of all packages", + "description": "Output format for the `Packages` module. See Wiki for formatting syntax\n 1. {am-system}: Number of am-system packages\n 2. {am-user}: Number of am-user (aka appman) packages\n 3. {appimage}: Number of appimage packages\n 4. {apk}: Number of apk packages\n 5. {brew}: Number of brew packages\n 6. {brew-cask}: Number of brew-cask packages\n 7. {cards}: Number of cards packages\n 8. {choco}: Number of choco packages\n 9. {crux}: Number of crux packages\n 10. {dpkg}: Number of dpkg packages\n 11. {emerge}: Number of emerge packages\n 12. {eopkg}: Number of eopkg packages\n 13. {flatpak-system}: Number of flatpak-system app packages\n 14. {flatpak-user}: Number of flatpak-user app packages\n 15. {guix-home}: Number of guix-home packages\n 16. {guix-system}: Number of guix-system packages\n 17. {guix-user}: Number of guix-user packages\n 18. {hpkg-system}: Number of hpkg-system packages\n 19. {hpkg-user}: Number of hpkg-user packages\n 20. {install-release}: Number of install-release packages\n 21. {kiss}: Number of kiss packages\n 22. {linglong}: Number of linglong packages\n 23. {lpkg}: Number of lpkg packages\n 24. {lpkgbuild}: Number of lpkgbuild packages\n 25. {macports}: Number of macports packages\n 26. {mport}: Number of mport packages\n 27. {moss}: Number of moss packages\n 28. {nix-default}: Number of nix-default packages\n 29. {nix-system}: Number of nix-system packages\n 30. {nix-user}: Number of nix-user packages\n 31. {opkg}: Number of opkg packages\n 32. {pacman}: Number of pacman packages\n 33. {pacman-branch}: Pacman branch on manjaro\n 34. {pacstall}: Number of pacstall packages\n 35. {paludis}: Number of paludis packages\n 36. {pisi}: Number of pisi packages\n 37. {pkg}: Number of pkg packages\n 38. {pkgsrc}: Number of pkgsrc packages\n 39. {pkgtool}: Number of pkgtool packages\n 40. {porg}: Number of porg packages\n 41. {rpm}: Number of rpm packages\n 42. {scoop-global}: Number of scoop-global packages\n 43. {scoop-user}: Number of scoop-user packages\n 44. {snap}: Number of snap packages\n 45. {soar}: Number of soar packages\n 46. {sorcery}: Number of sorcery packages\n 47. {winget}: Number of winget packages\n 48. {xbps}: Number of xbps packages\n 49. {brew-all}: Total number of all brew packages\n 50. {flatpak-all}: Total number of all flatpak app packages\n 51. {guix-all}: Total number of all guix packages\n 52. {hpkg-all}: Total number of all hpkg packages\n 53. {nix-all}: Total number of all nix packages\n 54. {all}: Number of all packages\n 55. {rum}: Number of rum overlay packages", "type": "string" }, "physicaldiskFormat": { @@ -3798,6 +3798,7 @@ "pkg", "pkgtool", "rpm", + "rum", "scoop", "snap", "sorcery", diff --git a/src/detection/packages/packages.h b/src/detection/packages/packages.h index 08623f8728..e91dfe2dc8 100644 --- a/src/detection/packages/packages.h +++ b/src/detection/packages/packages.h @@ -44,6 +44,7 @@ typedef struct FFPackagesResult { uint32_t pkgtool; uint32_t porg; uint32_t rpm; + uint32_t rum; uint32_t scoopGlobal; uint32_t scoopUser; uint32_t snap; diff --git a/src/detection/packages/packages_linux.c b/src/detection/packages/packages_linux.c index 1ad1124cb7..2440ebec69 100644 --- a/src/detection/packages/packages_linux.c +++ b/src/detection/packages/packages_linux.c @@ -528,6 +528,9 @@ static void getPackageCounts(FFstrbuf* baseDir, FFPackagesResult* packageCounts, // `Sigmd5` is the only table that doesn't contain the virtual `gpg-pubkey` package packageCounts->rpm += getSQLite3Int(baseDir, "/var/lib/rpm/rpmdb.sqlite", "SELECT count(*) FROM Sigmd5", "rpm"); } + if (FF_PACKAGES_IS_ENABLED(options, RUM)) { + packageCounts->rum += getSQLite3Int(baseDir, "/var/lib/rakuos/rum-rpmdb/rpmdb.sqlite", "SELECT count(*) FROM Sigmd5", "rum"); + } if (FF_PACKAGES_IS_ENABLED(options, SNAP)) { packageCounts->snap += getSnap(baseDir); } diff --git a/src/modules/packages/option.h b/src/modules/packages/option.h index ce96a3c8ea..2cf734b57c 100644 --- a/src/modules/packages/option.h +++ b/src/modules/packages/option.h @@ -42,6 +42,7 @@ typedef enum FFPackagesFlags: uint64_t { FF_PACKAGES_FLAG_PORG_BIT = UINT64_C(1) << 35U, FF_PACKAGES_FLAG_INSTALLRELEASE_BIT = UINT64_C(1) << 36U, FF_PACKAGES_FLAG_CRUX_BIT = UINT64_C(1) << 37U, + FF_PACKAGES_FLAG_RUM_BIT = UINT64_C(1) << 38U, } FFPackagesFlags; static_assert(sizeof(FFPackagesFlags) == sizeof(uint64_t), ""); diff --git a/src/modules/packages/packages.c b/src/modules/packages/packages.c index cae7da8b4b..c34008db0b 100644 --- a/src/modules/packages/packages.c +++ b/src/modules/packages/packages.c @@ -123,6 +123,7 @@ bool ffPrintPackages(FFPackagesOptions* options) { FF_PRINT_PACKAGE(pkgtool) FF_PRINT_PACKAGE(porg) FF_PRINT_PACKAGE(rpm) + FF_PRINT_PACKAGE(rum) if (options->combined) { FF_PRINT_PACKAGE_ALL(scoop); } else if (counts.scoopGlobal > 0) { @@ -202,6 +203,7 @@ bool ffPrintPackages(FFPackagesOptions* options) { FF_ARG(hpkgAll, "hpkg-all"), FF_ARG(nixAll, "nix-all"), FF_ARG(counts.all, "all"), + FF_ARG(counts.rum, "rum"), })); } @@ -337,6 +339,7 @@ void ffParsePackagesJsonObject(FFPackagesOptions* options, yyjson_val* module) { if (false) ; FF_TEST_PACKAGE_NAME(RPM) + FF_TEST_PACKAGE_NAME(RUM) break; case 'S': if (false) @@ -418,6 +421,7 @@ void ffGeneratePackagesJsonConfig(FFPackagesOptions* options, yyjson_mut_doc* do FF_TEST_PACKAGE_NAME(PKGTOOL) FF_TEST_PACKAGE_NAME(PORG) FF_TEST_PACKAGE_NAME(RPM) + FF_TEST_PACKAGE_NAME(RUM) FF_TEST_PACKAGE_NAME(SCOOP) FF_TEST_PACKAGE_NAME(SNAP) FF_TEST_PACKAGE_NAME(SOAR) @@ -487,6 +491,7 @@ bool ffGeneratePackagesJsonResult(FFPackagesOptions* options, yyjson_mut_doc* do FF_APPEND_PACKAGE_COUNT(pkgtool) FF_APPEND_PACKAGE_COUNT(porg) FF_APPEND_PACKAGE_COUNT(rpm) + FF_APPEND_PACKAGE_COUNT(rum) FF_APPEND_PACKAGE_COUNT(scoopGlobal) FF_APPEND_PACKAGE_COUNT(scoopUser) FF_APPEND_PACKAGE_COUNT(snap) @@ -601,6 +606,7 @@ FFModuleBaseInfo ffPackagesModuleInfo = { { "Total number of all hpkg packages", "hpkg-all" }, { "Total number of all nix packages", "nix-all" }, { "Number of all packages", "all" }, + { "Number of rum overlay packages", "rum" }, })), .defaultOrder = 14, }; From 6a57e650e1629fe04e92449718a4e254dadcf057 Mon Sep 17 00:00:00 2001 From: Natsu <139412824+ddy314@users.noreply.github.com> Date: Mon, 21 Sep 2026 10:58:51 +0800 Subject: [PATCH 2/2] Packages: order rum format arguments alphabetically --- src/modules/packages/packages.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/modules/packages/packages.c b/src/modules/packages/packages.c index c34008db0b..307e1ccd42 100644 --- a/src/modules/packages/packages.c +++ b/src/modules/packages/packages.c @@ -189,6 +189,7 @@ bool ffPrintPackages(FFPackagesOptions* options) { FF_ARG(counts.pkgtool, "pkgtool"), FF_ARG(counts.porg, "porg"), FF_ARG(counts.rpm, "rpm"), + FF_ARG(counts.rum, "rum"), FF_ARG(counts.scoopGlobal, "scoop-global"), FF_ARG(counts.scoopUser, "scoop-user"), FF_ARG(counts.snap, "snap"), @@ -203,7 +204,6 @@ bool ffPrintPackages(FFPackagesOptions* options) { FF_ARG(hpkgAll, "hpkg-all"), FF_ARG(nixAll, "nix-all"), FF_ARG(counts.all, "all"), - FF_ARG(counts.rum, "rum"), })); } @@ -592,6 +592,7 @@ FFModuleBaseInfo ffPackagesModuleInfo = { { "Number of pkgtool packages", "pkgtool" }, { "Number of porg packages", "porg" }, { "Number of rpm packages", "rpm" }, + { "Number of rum overlay packages", "rum" }, { "Number of scoop-global packages", "scoop-global" }, { "Number of scoop-user packages", "scoop-user" }, { "Number of snap packages", "snap" }, @@ -606,7 +607,6 @@ FFModuleBaseInfo ffPackagesModuleInfo = { { "Total number of all hpkg packages", "hpkg-all" }, { "Total number of all nix packages", "nix-all" }, { "Number of all packages", "all" }, - { "Number of rum overlay packages", "rum" }, })), .defaultOrder = 14, };