Iuri Matias 664af09ff1 use module builder
use module builder

use module builder
2026-03-30 13:57:41 -04:00
2025-12-02 15:28:29 -05:00
2025-10-09 09:26:12 -04:00
2026-03-30 13:57:41 -04:00
2026-03-30 13:57:41 -04:00
2026-03-30 13:57:41 -04:00
2026-03-30 13:57:41 -04:00
2026-03-30 13:57:41 -04:00

logos-package-manager-module

Logos module that wraps logos-package-manager as a process-isolated service, exposing local package installation and module scanning via LogosAPI.

This module handles local operations only (installing from .lgx files, scanning installed modules/UI plugins). For online catalog browsing and downloading, see logos-package-downloader-module.

The underlying logos-package-manager library is plain C++17 (no Qt). This module provides the Qt/IPC boundary, converting between std::string/std::vector and QString/QVariantList.

Module API

All methods are accessible via LogosAPI from other modules and UI plugins.

Directory Configuration

Embedded directories (multiple, read-only at runtime):

Method Description
setEmbeddedModulesDirectory(dir) Clear and set a single embedded modules directory
addEmbeddedModulesDirectory(dir) Append an additional embedded modules directory
setEmbeddedUiPluginsDirectory(dir) Clear and set a single embedded UI plugins directory
addEmbeddedUiPluginsDirectory(dir) Append an additional embedded UI plugins directory

User directories (single, writable, where new packages are installed):

Method Description
setUserModulesDirectory(dir) Set directory for user-installed core modules
setUserUiPluginsDirectory(dir) Set directory for user-installed UI plugins

Installation

Method Return Description
installPlugin(path, skipIfNotNewer) QVariantMap Install a local .lgx file. Returns {name, path, isCoreModule, error}

Scanning

Method Return Description
getInstalledPackages() QVariantList All installed packages (modules + UI plugins)
getInstalledModules() QVariantList Installed core modules only
getInstalledUiPlugins() QVariantList Installed UI plugins only
getValidVariants() QStringList Platform variants this build accepts (e.g. ["darwin-arm64-dev"])

Each item in the scan results contains all manifest.json fields plus installDir and mainFilePath.

Events

Event Data Description
corePluginFileInstalled [path] Emitted after a core module .lgx is installed
uiPluginFileInstalled [path] Emitted after a UI plugin .lgx is installed

Usage from another module

LogosModules logos(logosAPI);

// Configure embedded directories (multiple, read-only)
logos.package_manager.setEmbeddedModulesDirectory("/app/modules");
logos.package_manager.addEmbeddedModulesDirectory("/app/extra-modules");
logos.package_manager.setEmbeddedUiPluginsDirectory("/app/ui-plugins");

// Configure user directories (single, writable)
logos.package_manager.setUserModulesDirectory("/home/user/.logos/modules");
logos.package_manager.setUserUiPluginsDirectory("/home/user/.logos/ui-plugins");

// Scan installed packages
QVariantList all = logos.package_manager.getInstalledPackages();
QVariantList modules = logos.package_manager.getInstalledModules();
QVariantList uiPlugins = logos.package_manager.getInstalledUiPlugins();

// Install a downloaded .lgx file
QVariantMap result = logos.package_manager.installPlugin("/path/to/waku_module.lgx", false);
if (result.contains("error")) {
    qWarning() << "Install failed:" << result["error"].toString();
}

// Listen for installation events
logos.package_manager.on("corePluginFileInstalled", [](const QVariantList& data) {
    QString path = data[0].toString();
    qDebug() << "Core module installed at:" << path;
});

logos.package_manager.on("uiPluginFileInstalled", [](const QVariantList& data) {
    QString path = data[0].toString();
    qDebug() << "UI plugin installed at:" << path;
});

Typical flow with the downloader module

// 1. Download via downloader module
QVariantMap result = logos.package_downloader.downloadPackage("waku_module");

// 2. Install via package manager
if (!result.contains("error")) {
    logos.package_manager.installPlugin(result["path"].toString(), false);
}

Building

Uses logos-module-builder for minimal build configuration.

nix build                # module plugin (lib + include)
nix build .#lib          # plugin .so/.dylib only
nix build .#lgx          # .lgx package
nix build .#lgx-portable # portable .lgx package

Dependencies

  • logos-module-builder — shared Nix/CMake build infrastructure
  • logos-package-manager — package management library (plain C++, linked at build time)
S
Description
No description provided
Readme
898 KiB
Languages
C++ 94.6%
Shell 2.6%
CMake 1.4%
C 0.9%
Nix 0.5%