feat: lock in stable tutorial

This commit is contained in:
Khushboo Mehta
2026-04-01 11:44:30 +02:00
parent eaf0e936c7
commit 321fe4a41a
8 changed files with 116 additions and 105 deletions
+13
View File
@@ -0,0 +1,13 @@
# Build artifacts
result
result-*
lm
lm-cli
logos
pm
modules/
plugins/
# Compiled libraries (keep sources, ignore build outputs)
logos-calc-module/lib/libcalc.so
logos-calc-module/lib/libcalc.dylib
+2 -2
View File
@@ -2,8 +2,8 @@
description = "Calculator C++ UI plugin for Logos - widget frontend for calc_module";
inputs = {
logos-module-builder.url = "github:logos-co/logos-module-builder";
calc_module.url = "github:logos-co/logos-tutorial?dir=logos-calc-module";
logos-module-builder.url = "github:logos-co/logos-module-builder/b6cf87d30e2995e023496fcfc7f06e8127c6ac5b";
calc_module.url = "github:logos-co/logos-tutorial/tutorial-v1?dir=logos-calc-module";
};
outputs = inputs@{ logos-module-builder, calc_module, ... }:
+1 -1
View File
@@ -2,7 +2,7 @@
description = "Calculator module - wraps libcalc C library for Logos";
inputs = {
logos-module-builder.url = "github:logos-co/logos-module-builder";
logos-module-builder.url = "github:logos-co/logos-module-builder/b6cf87d30e2995e023496fcfc7f06e8127c6ac5b";
};
outputs = inputs@{ logos-module-builder, ... }:
+2 -2
View File
@@ -2,8 +2,8 @@
description = "Calculator QML UI Plugin for Logos - frontend for calc_module";
inputs = {
logos-module-builder.url = "github:logos-co/logos-module-builder";
calc_module.url = "github:logos-co/logos-tutorial?dir=logos-calc-module";
logos-module-builder.url = "github:logos-co/logos-module-builder/b6cf87d30e2995e023496fcfc7f06e8127c6ac5b";
calc_module.url = "github:logos-co/logos-tutorial/tutorial-v1?dir=logos-calc-module";
};
outputs = inputs@{ logos-module-builder, ... }:
+63 -70
View File
@@ -131,16 +131,16 @@ The fastest way to create a new module is using the **logos-module-builder** tem
mkdir logos-my-module && cd logos-my-module
# Scaffold a minimal core module (no external dependencies)
nix flake init -t github:logos-co/logos-module-builder
nix flake init -t github:logos-co/logos-module-builder/b6cf87d30e2995e023496fcfc7f06e8127c6ac5b
# Or scaffold a module that wraps an external C/C++ library
nix flake init -t github:logos-co/logos-module-builder#with-external-lib
nix flake init -t github:logos-co/logos-module-builder/b6cf87d30e2995e023496fcfc7f06e8127c6ac5b#with-external-lib
# For UI modules (C++ Qt widget with logos-standalone-app runner)
nix flake init -t github:logos-co/logos-module-builder#ui-module
nix flake init -t github:logos-co/logos-module-builder/b6cf87d30e2995e023496fcfc7f06e8127c6ac5b#ui-module
# For QML UI modules (with logos-standalone-app runner)
nix flake init -t github:logos-co/logos-module-builder#ui-qml-module
nix flake init -t github:logos-co/logos-module-builder/b6cf87d30e2995e023496fcfc7f06e8127c6ac5b#ui-qml-module
```
**Available templates:**
@@ -296,7 +296,7 @@ The **`lm`** tool (from `logos-module`) lets you inspect compiled module binarie
#### Building lm
```bash
nix build 'github:logos-co/logos-module#lm' --out-link ./lm
nix build 'github:logos-co/logos-module/337223f2a72710d8052ca750510cd25d33e05047#lm' --out-link ./lm
```
#### Viewing Metadata
@@ -363,7 +363,7 @@ The **logos-module-viewer** is a graphical tool for inspecting loaded modules.
```bash
# Build the viewer
nix build 'github:logos-co/logos-module-viewer#app' --out-link ./logos-viewer
nix build 'github:logos-co/logos-module-viewer/b6489c1aab8c1590fa127dbaedb39708f3614fbc#app' --out-link ./logos-viewer
# Run it with your module
./logos-viewer/bin/logos-module-viewer -m ./result/lib/my_module_plugin.so
@@ -412,18 +412,16 @@ nix build .#lgx
# Portable variant (self-contained, all dependencies bundled)
nix build .#lgx-portable
# Dual variant (both dev and portable in one .lgx file)
nix build .#lgx-dual
```
This produces a `my_module-<version>.lgx` file in the `result/` directory.
This works because `logos-module-builder` includes `nix-bundle-lgx` as its own dependency and `mkLogosModule` automatically creates the `lgx`, `lgx-portable`, and `lgx-dual` package outputs. No extra configuration is needed — it is part of the standard module template:
This works because `logos-module-builder` includes `nix-bundle-lgx` as its own dependency and `mkLogosModule` automatically creates the `lgx` and `lgx-portable` package outputs. No extra configuration is needed — it is part of the standard module template:
```nix
{
inputs = {
logos-module-builder.url = "github:logos-co/logos-module-builder";
logos-module-builder.url = "github:logos-co/logos-module-builder/b6cf87d30e2995e023496fcfc7f06e8127c6ac5b";
};
outputs = inputs@{ logos-module-builder, ... }:
@@ -437,17 +435,17 @@ This works because `logos-module-builder` includes `nix-bundle-lgx` as its own d
#### Using `nix bundle` (Alternative)
You can also create `.lgx` packages using the `nix bundle` command directly. This is useful if your module does not use `logos-module-builder` or if you need the `dual` bundling mode (both dev and portable in a single `.lgx` file):
You can also create `.lgx` packages using the `nix bundle` command directly. This is useful if your module does not use `logos-module-builder`, or if you need the `dual` bundling mode (both dev and portable in a single `.lgx` file) which is only available via the `nix bundle` command:
```bash
# Dev variant
nix bundle --bundler github:logos-co/nix-bundle-lgx .#lib
nix bundle --bundler github:logos-co/nix-bundle-lgx/9d6f9016c865b9d2793672bc3c45a50b59753c78 .#lib
# Portable variant
nix bundle --bundler github:logos-co/nix-bundle-lgx#portable .#lib
nix bundle --bundler github:logos-co/nix-bundle-lgx/9d6f9016c865b9d2793672bc3c45a50b59753c78#portable .#lib
# Dual variant (both dev and portable in one .lgx file)
nix bundle --bundler github:logos-co/nix-bundle-lgx#dual .#lib
nix bundle --bundler github:logos-co/nix-bundle-lgx/9d6f9016c865b9d2793672bc3c45a50b59753c78#dual .#lib
```
This produces a `my_module-<version>.lgx` file in the current directory.
@@ -458,7 +456,7 @@ This produces a `my_module-<version>.lgx` file in the current directory.
|------|-----------------|---------------------|----------------|----------|
| **Dev** | `nix build .#lgx` | `nix bundle --bundler ...#default .#lib` | `darwin-arm64-dev` | Local development (requires Nix store) |
| **Portable** | `nix build .#lgx-portable` | `nix bundle --bundler ...#portable .#lib` | `darwin-arm64` | Distribution (self-contained, no Nix needed) |
| **Dual** | `nix build .#lgx-dual` | `nix bundle --bundler ...#dual .#lib` | Both dev and portable | One package for both environments |
| **Dual** | *(not available as built-in)* | `nix bundle --bundler ...#dual .#lib` | Both dev and portable | One package for both environments |
**Variant naming:**
@@ -482,38 +480,25 @@ The **`lgpm`** CLI (Logos Package Manager) installs, searches, and manages modul
#### Building lgpm
```bash
nix build 'github:logos-co/logos-package-manager-module#cli' --out-link ./package-manager
nix build 'github:logos-co/logos-package-manager/e5c25989861f4487c3dc8c7b3bc0062bcbc3221f#cli' --out-link ./package-manager
```
#### Commands
`lgpm` manages **locally-available** `.lgx` packages. It does not download packages from the network — use `lgpd` (logos-package-downloader) for that.
```bash
# Search for packages
./package-manager/bin/lgpm search waku
# List all available packages
./package-manager/bin/lgpm list
# List only installed packages
./package-manager/bin/lgpm list --installed
# List packages in a category
./package-manager/bin/lgpm list --category networking
# Show package details
./package-manager/bin/lgpm info my_module
# List available categories
./package-manager/bin/lgpm categories
# Install a package (with dependency resolution)
./package-manager/bin/lgpm --modules-dir ./modules install my_module
# Install multiple packages
./package-manager/bin/lgpm --modules-dir ./modules install my_module another_module
# Install from a local .lgx file
./package-manager/bin/lgpm --modules-dir ./modules install --file ./my_module.lgx
# Install all .lgx files in a directory
./package-manager/bin/lgpm --modules-dir ./modules install --dir ./packages/
# List installed packages
./package-manager/bin/lgpm --modules-dir ./modules list
# Show installed package details
./package-manager/bin/lgpm --modules-dir ./modules info my_module
```
#### Global Options
@@ -522,7 +507,6 @@ nix build 'github:logos-co/logos-package-manager-module#cli' --out-link ./packag
|--------|-------------|
| `--modules-dir <path>` | Target directory for installed core modules |
| `--ui-plugins-dir <path>` | Target directory for UI plugins |
| `--release <tag>` | GitHub release tag to use (default: `latest`) |
| `--json` | Output in JSON format |
| `-h, --help` | Show help |
@@ -543,21 +527,31 @@ modules/
└── variant
```
### 4.3 Installing from a Registry
### 4.3 Downloading and Installing from a Registry
To download packages from the online catalog and then install them locally, use `lgpd` (logos-package-downloader) followed by `lgpm`:
```bash
# Install a published package (lgpm fetches from GitHub Releases)
./package-manager/bin/lgpm --modules-dir ./modules install my_module
# Build lgpd
nix build 'github:logos-co/logos-package-downloader/fb3b8c48fed5323ea6a4f4195462dc8d84d1e77f#cli' --out-link ./downloader
# Install from a specific release
./package-manager/bin/lgpm --modules-dir ./modules --release v2.0.0 install my_module
# Search for packages
./downloader/bin/lgpd search waku
# List all available packages
./downloader/bin/lgpd list
# Download a package
./downloader/bin/lgpd download my_module -o ./packages/
# Download from a specific release
./downloader/bin/lgpd --release v2.0.0 download my_module -o ./packages/
# Install the downloaded package locally
./package-manager/bin/lgpm --modules-dir ./modules install --file ./packages/my_module.lgx
```
The package manager automatically:
1. Resolves transitive dependencies
2. Downloads the correct platform variant for your OS/architecture
3. Extracts the LGX package
4. Copies the library to the target directory
`lgpd` handles the network side (browsing, searching, downloading), while `lgpm` handles local installation.
---
@@ -572,7 +566,7 @@ The **`logoscore`** CLI (from `logos-liblogos`) is a headless runtime that can l
#### Building logoscore
```bash
nix build 'github:logos-co/logos-logoscore-cli' --out-link ./logos
nix build 'github:logos-co/logos-logoscore-cli/ce3884cce83f0706916c1af2a44f0775386c0ec4' --out-link ./logos
```
#### Daemon Mode
@@ -674,18 +668,18 @@ logos-basecamp produces two binary variants:
```bash
# Build the development version
nix build 'github:logos-co/logos-basecamp#app' --out-link ./logos-basecamp
nix build 'github:logos-co/logos-basecamp/70169584a44d954f638e34842bcfebf741e6bcfe#app' --out-link ./logos-basecamp
# Run the dev binary
./logos-basecamp/bin/logos-basecamp
# Build the portable/distributed version
nix build 'github:logos-co/logos-basecamp#portable' --out-link ./logos-basecamp-portable
nix build 'github:logos-co/logos-basecamp/70169584a44d954f638e34842bcfebf741e6bcfe#portable' --out-link ./logos-basecamp-portable
# Or build platform-specific distributions:
nix build 'github:logos-co/logos-basecamp#bin-bundle-dir' # Flat directory bundle
nix build 'github:logos-co/logos-basecamp#bin-appimage' # Linux AppImage
nix build 'github:logos-co/logos-basecamp#bin-macos-app' # macOS .app bundle
nix build 'github:logos-co/logos-basecamp/70169584a44d954f638e34842bcfebf741e6bcfe#bin-bundle-dir' # Flat directory bundle
nix build 'github:logos-co/logos-basecamp/70169584a44d954f638e34842bcfebf741e6bcfe#bin-appimage' # Linux AppImage
nix build 'github:logos-co/logos-basecamp/70169584a44d954f638e34842bcfebf741e6bcfe#bin-macos-app' # macOS .app bundle
```
> **Note:** When installing modules into logos-basecamp, the LGX variant type must match the build type. Dev builds of basecamp expect **dev** LGX variants (e.g., `darwin-arm64-dev`), while portable builds expect **portable** variants (e.g., `darwin-arm64`). Use the `dual` bundler (see [3.2](#32-bundling-with-nix-bundle-lgx)) to produce packages that work with both.
@@ -780,7 +774,7 @@ The generator is bundled with `logos-cpp-sdk`. It is automatically available:
- **In `nix develop`** -- the module dev shell includes the SDK on PATH
- **Build it directly:**
```bash
nix build 'github:logos-co/logos-cpp-sdk#cpp-generator' --out-link ./cpp-gen
nix build 'github:logos-co/logos-cpp-sdk/d633575677a3d19a8bf1d5ff687398dace532938#cpp-generator' --out-link ./cpp-gen
./cpp-gen/bin/logos-cpp-generator --help
```
@@ -984,12 +978,11 @@ logos-cpp-generator --metadata <metadata.json> --general-only [--output-dir <dir
# Preferred: built-in derivation (logos-module-builder includes nix-bundle-lgx)
nix build .#lgx # Dev variant
nix build .#lgx-portable # Portable variant
nix build .#lgx-dual # Both variants
# Alternative: nix bundle command
nix bundle --bundler github:logos-co/nix-bundle-lgx .#lib # Dev variant
nix bundle --bundler github:logos-co/nix-bundle-lgx#portable .#lib # Portable variant
nix bundle --bundler github:logos-co/nix-bundle-lgx#dual .#lib # Both variants
nix bundle --bundler github:logos-co/nix-bundle-lgx/9d6f9016c865b9d2793672bc3c45a50b59753c78 .#lib # Dev variant
nix bundle --bundler github:logos-co/nix-bundle-lgx/9d6f9016c865b9d2793672bc3c45a50b59753c78#portable .#lib # Portable variant
nix bundle --bundler github:logos-co/nix-bundle-lgx/9d6f9016c865b9d2793672bc3c45a50b59753c78#dual .#lib # Both variants
```
---
@@ -1066,8 +1059,8 @@ When running a UI module with `nix run`, the standalone app automatically bundle
3. **Each dependency must have a matching flake input** — the flake input name must exactly match the dependency name in `metadata.json`:
```nix
inputs = {
logos-module-builder.url = "github:logos-co/logos-module-builder";
calc_module.url = "github:logos-co/logos-calc-module";
logos-module-builder.url = "github:logos-co/logos-module-builder/b6cf87d30e2995e023496fcfc7f06e8127c6ac5b";
calc_module.url = "github:logos-co/logos-tutorial/tutorial-v1?dir=logos-calc-module";
storage_module.url = "github:logos-co/logos-storage-module";
};
```
@@ -1086,8 +1079,8 @@ When running a UI module with `nix run`, the standalone app automatically bundle
{
description = "My UI module";
inputs = {
logos-module-builder.url = "github:logos-co/logos-module-builder";
calc_module.url = "github:logos-co/logos-calc-module";
logos-module-builder.url = "github:logos-co/logos-module-builder/b6cf87d30e2995e023496fcfc7f06e8127c6ac5b";
calc_module.url = "github:logos-co/logos-tutorial/tutorial-v1?dir=logos-calc-module";
};
outputs = inputs@{ logos-module-builder, ... }:
logos-module-builder.lib.mkLogosModule {
@@ -1103,8 +1096,8 @@ When running a UI module with `nix run`, the standalone app automatically bundle
{
description = "My QML UI module";
inputs = {
logos-module-builder.url = "github:logos-co/logos-module-builder";
calc_module.url = "github:logos-co/logos-calc-module";
logos-module-builder.url = "github:logos-co/logos-module-builder/b6cf87d30e2995e023496fcfc7f06e8127c6ac5b";
calc_module.url = "github:logos-co/logos-tutorial/tutorial-v1?dir=logos-calc-module";
};
outputs = inputs@{ logos-module-builder, ... }:
logos-module-builder.lib.mkLogosQmlModule {
@@ -1134,7 +1127,7 @@ If a module installs but fails to load, the variant type may not match:
- **Dev build** of logos-basecamp needs **dev** LGX variants (`darwin-arm64-dev`)
- **Portable build** needs **portable** variants (`darwin-arm64`)
- Use `nix build .#lgx` and `nix build .#lgx-portable` to produce each variant separately, `nix build .#lgx-dual` for a single package with both, or `nix bundle --bundler github:logos-co/nix-bundle-lgx#dual .#lib` via the standalone bundler
- Use `nix build .#lgx` and `nix build .#lgx-portable` to produce each variant separately, or `nix bundle --bundler github:logos-co/nix-bundle-lgx/9d6f9016c865b9d2793672bc3c45a50b59753c78#dual .#lib` for a single package with both variants
### Cross-platform builds
@@ -1145,7 +1138,7 @@ Build on each target platform separately to create `.lgx` packages:
nix build .#lgx-portable
# Or using nix bundle for dual variant:
nix bundle --bundler github:logos-co/nix-bundle-lgx#dual .#lib
nix bundle --bundler github:logos-co/nix-bundle-lgx/9d6f9016c865b9d2793672bc3c45a50b59753c78#dual .#lib
# Then merge platform-specific .lgx files into one:
./lgx/bin/lgx merge my_module-linux.lgx my_module-macos.lgx -o my_module.lgx
+12 -10
View File
@@ -48,7 +48,7 @@ The plugin implements `createWidget()` which returns a `QWidget*`. The widget is
```bash
mkdir logos-calc-ui-cpp && cd logos-calc-ui-cpp
nix flake init -t github:logos-co/logos-module-builder#ui-module
nix flake init -t github:logos-co/logos-module-builder/b6cf87d30e2995e023496fcfc7f06e8127c6ac5b#ui-module
git init && git add -A
```
@@ -115,7 +115,7 @@ convert -size 64x64 xc:'#4a90d9' icons/calc.png 2>/dev/null \
|| printf '\x89PNG\r\n\x1a\n' > icons/calc.png
```
> **Naming convention:** Each entry in `dependencies` must match the `name` field in that module's own `metadata.json`. When adding a dependency as a flake input, the **input attribute name** must also match — e.g., `calc_module.url = "github:logos-co/logos-tutorial?dir=logos-calc-module"`. The URL can point to any repo, but the attribute name is how the builder resolves dependencies.
> **Naming convention:** Each entry in `dependencies` must match the `name` field in that module's own `metadata.json`. When adding a dependency as a flake input, the **input attribute name** must also match — e.g., `calc_module.url = "github:logos-co/logos-tutorial/tutorial-v1?dir=logos-calc-module"`. The URL can point to any repo, but the attribute name is how the builder resolves dependencies.
---
@@ -594,8 +594,8 @@ Since `metadata.json` declares `"type": "ui"`, `mkLogosModule` automatically wir
description = "Calculator C++ UI plugin for Logos - widget frontend for calc_module";
inputs = {
logos-module-builder.url = "github:logos-co/logos-module-builder";
calc_module.url = "github:logos-co/logos-tutorial?dir=logos-calc-module";
logos-module-builder.url = "github:logos-co/logos-module-builder/b6cf87d30e2995e023496fcfc7f06e8127c6ac5b";
calc_module.url = "github:logos-co/logos-tutorial/tutorial-v1?dir=logos-calc-module";
};
outputs = inputs@{ logos-module-builder, calc_module, ... }:
@@ -623,7 +623,7 @@ nix build --override-input calc_module path:../logos-calc-module
Inspect the output with `lm` (the module inspector from `logos-module`):
```bash
nix build 'github:logos-co/logos-module#cli' --out-link ./lm-cli
nix build 'github:logos-co/logos-module/337223f2a72710d8052ca750510cd25d33e05047#cli' --out-link ./lm-cli
./lm-cli/bin/lm ./result/lib/calc_ui_cpp_plugin.dylib
```
@@ -644,7 +644,7 @@ The widget opens. No backend connected yet, so button clicks will silently retur
The `capability_module` is loaded automatically by the standalone app. You only need to install `calc_module`:
```bash
nix build 'github:logos-co/logos-package-manager-module#cli' --out-link ./pm
nix build 'github:logos-co/logos-package-manager/e5c25989861f4487c3dc8c7b3bc0062bcbc3221f#cli' --out-link ./pm
mkdir -p modules
# Bundle and install calc_module (from Part 1)
@@ -665,11 +665,13 @@ nix run . --override-input calc_module path:../logos-calc-module -- --modules-di
```bash
# Package calc_module (from Part 1)
cd ../logos-calc-module
nix build '.#lgx-dual'
nix build '.#lgx'
nix build '.#lgx-portable'
# Package the C++ UI plugin
cd ../logos-calc-ui-cpp
nix build '.#lgx-dual'
nix build '.#lgx'
nix build '.#lgx-portable'
```
> For more bundling options (standalone bundler syntax, cross-platform packaging), see the [Developer Guide — Bundling with nix-bundle-lgx](logos-developer-guide.md#32-bundling-with-nix-bundle-lgx).
@@ -682,7 +684,7 @@ Build logos-basecamp, launch it once to preinstall its bundled modules, then ins
```bash
# Build logos-basecamp
nix build 'github:logos-co/logos-basecamp' -o basecamp-result
nix build 'github:logos-co/logos-basecamp/70169584a44d954f638e34842bcfebf741e6bcfe' -o basecamp-result
# Launch once to preinstall bundled modules, then close it
./basecamp-result/bin/logos-basecamp
@@ -704,7 +706,7 @@ Install your modules using `lgpm` (substitute `BASECAMP_DIR` with the actual pat
```bash
# Build lgpm CLI
nix build 'github:logos-co/logos-package-manager-module#cli' --out-link ./pm
nix build 'github:logos-co/logos-package-manager/e5c25989861f4487c3dc8c7b3bc0062bcbc3221f#cli' --out-link ./pm
# Install core module
./pm/bin/lgpm --modules-dir BASECAMP_DIR/modules \
+12 -10
View File
@@ -48,7 +48,7 @@ Use the QML module template from `logos-module-builder`:
```bash
mkdir logos-calc-ui && cd logos-calc-ui
nix flake init -t github:logos-co/logos-module-builder#ui-qml-module
nix flake init -t github:logos-co/logos-module-builder/b6cf87d30e2995e023496fcfc7f06e8127c6ac5b#ui-qml-module
git init && git add -A
```
@@ -82,7 +82,7 @@ Replace the template contents with your plugin's details:
The `dependencies` field tells the host to load `calc_module` before showing your UI.
> **Naming convention:** Each entry in `dependencies` must match the `name` field in that module's own `metadata.json`. When adding a dependency as a flake input, the **input attribute name** must also match the dependency name — e.g., `calc_module.url = "github:logos-co/logos-tutorial?dir=logos-calc-module"`. The URL can point to any repo, but the attribute name is how the builder resolves dependencies.
> **Naming convention:** Each entry in `dependencies` must match the `name` field in that module's own `metadata.json`. When adding a dependency as a flake input, the **input attribute name** must also match the dependency name — e.g., `calc_module.url = "github:logos-co/logos-tutorial/tutorial-v1?dir=logos-calc-module"`. The URL can point to any repo, but the attribute name is how the builder resolves dependencies.
---
@@ -231,8 +231,8 @@ The template already has everything wired up. Update the description and add `ca
description = "Calculator QML UI Plugin for Logos - frontend for calc_module";
inputs = {
logos-module-builder.url = "github:logos-co/logos-module-builder";
calc_module.url = "github:logos-co/logos-tutorial?dir=logos-calc-module"; # must match dependency name in metadata.json
logos-module-builder.url = "github:logos-co/logos-module-builder/b6cf87d30e2995e023496fcfc7f06e8127c6ac5b";
calc_module.url = "github:logos-co/logos-tutorial/tutorial-v1?dir=logos-calc-module"; # must match dependency name in metadata.json
};
outputs = inputs@{ logos-module-builder, ... }:
@@ -264,7 +264,7 @@ The app opens immediately. No modules are loaded, so clicking buttons shows "Log
To test actual calls to `calc_module`, you need a modules directory with `calc_module` installed via `lgpm`. The `capability_module` is loaded automatically by the standalone app. Do this once:
```bash
nix build 'github:logos-co/logos-package-manager-module#cli' --out-link ./pm
nix build 'github:logos-co/logos-package-manager/e5c25989861f4487c3dc8c7b3bc0062bcbc3221f#cli' --out-link ./pm
mkdir -p modules
# Bundle and install calc_module (from Part 1)
@@ -329,16 +329,18 @@ Available theme tokens via `Theme.palette`:
### 7.1 Bundle as LGX packages
Create `.lgx` packages using the dual variant (includes both dev and portable variants, so they work with any basecamp build):
Create `.lgx` packages for both dev and portable variants:
```bash
# Package calc_module (from Part 1)
cd ../logos-calc-module
nix build '.#lgx-dual'
nix build '.#lgx'
nix build '.#lgx-portable'
# Package the QML UI plugin
cd ../logos-calc-ui
nix build '.#lgx-dual'
nix build '.#lgx'
nix build '.#lgx-portable'
```
> For more bundling options (standalone bundler syntax, cross-platform packaging), see the [Developer Guide — Bundling with nix-bundle-lgx](logos-developer-guide.md#32-bundling-with-nix-bundle-lgx).
@@ -351,7 +353,7 @@ Build logos-basecamp, launch it once to preinstall its bundled modules, then ins
```bash
# Build logos-basecamp
nix build 'github:logos-co/logos-basecamp' -o basecamp-result
nix build 'github:logos-co/logos-basecamp/70169584a44d954f638e34842bcfebf741e6bcfe' -o basecamp-result
# Launch once to preinstall bundled modules, then close it
./basecamp-result/bin/logos-basecamp
@@ -373,7 +375,7 @@ Install your modules using `lgpm` (substitute `BASECAMP_DIR` with the actual pat
```bash
# Build lgpm CLI
nix build 'github:logos-co/logos-package-manager-module#cli' --out-link ./pm
nix build 'github:logos-co/logos-package-manager/e5c25989861f4487c3dc8c7b3bc0062bcbc3221f#cli' --out-link ./pm
# Install core module
./pm/bin/lgpm --modules-dir BASECAMP_DIR/modules \
+11 -10
View File
@@ -32,10 +32,10 @@ Before writing any C code, scaffold the Logos module project using the official
```bash
# For a module that wraps an external C library:
mkdir logos-calc-module && cd logos-calc-module
nix flake init -t github:logos-co/logos-module-builder#with-external-lib
nix flake init -t github:logos-co/logos-module-builder/b6cf87d30e2995e023496fcfc7f06e8127c6ac5b#with-external-lib
# Or for a plain module (no external library):
# nix flake init -t github:logos-co/logos-module-builder
# nix flake init -t github:logos-co/logos-module-builder/b6cf87d30e2995e023496fcfc7f06e8127c6ac5b
```
This generates the skeleton files (`flake.nix`, `metadata.json`, `CMakeLists.txt`, etc.) pre-configured for the logos-module-builder. You then customize them for your specific library.
@@ -295,7 +295,7 @@ The `if/elseif/else` block above it is boilerplate — don't change it.
description = "Calculator module - wraps libcalc C library for Logos";
inputs = {
logos-module-builder.url = "github:logos-co/logos-module-builder";
logos-module-builder.url = "github:logos-co/logos-module-builder/b6cf87d30e2995e023496fcfc7f06e8127c6ac5b";
};
outputs = inputs@{ logos-module-builder, ... }:
@@ -542,7 +542,7 @@ Both library files are placed together so the plugin can find the C library at r
The `lm` CLI tool (from `logos-module`) inspects compiled module binaries:
```bash
nix build 'github:logos-co/logos-module#lm' --out-link ./lm
nix build 'github:logos-co/logos-module/337223f2a72710d8052ca750510cd25d33e05047#lm' --out-link ./lm
```
### 4.2 View metadata
@@ -650,7 +650,7 @@ For scripting and CI, use `--json`:
### 5.1 Build logoscore
```bash
nix build 'github:logos-co/logos-logoscore-cli' --out-link ./logos
nix build 'github:logos-co/logos-logoscore-cli/ce3884cce83f0706916c1af2a44f0775386c0ec4' --out-link ./logos
```
### 5.2 Set up the modules directory
@@ -662,7 +662,7 @@ nix build 'github:logos-co/logos-logoscore-cli' --out-link ./logos
nix build '.#lgx'
# Install it into a modules directory using the Logos Package Manager
nix build 'github:logos-co/logos-package-manager#cli' --out-link ./pm
nix build 'github:logos-co/logos-package-manager/e5c25989861f4487c3dc8c7b3bc0062bcbc3221f#cli' --out-link ./pm
mkdir -p modules
./pm/bin/lgpm --modules-dir ./modules install --file result/*.lgx
```
@@ -736,10 +736,11 @@ nix build '.#lgx-portable'
Portable LGX packages are fully self-contained with no `/nix/store` references at runtime. These are the packages used by the Logos App Package Manager UI and published to [logos-modules](https://github.com/logos-co/logos-modules) releases.
To create a **dual** package containing both dev and portable variants (works with any basecamp build):
To create both dev and portable variants (the dev variant works with local `nix build` of basecamp; the portable variant works with standalone basecamp builds):
```bash
nix build '.#lgx-dual'
nix build '.#lgx'
nix build '.#lgx-portable'
```
> For more bundling options (standalone bundler syntax, cross-platform packaging), see the [Developer Guide — Bundling with nix-bundle-lgx](logos-developer-guide.md#32-bundling-with-nix-bundle-lgx).
@@ -747,7 +748,7 @@ nix build '.#lgx-dual'
To install a portable package on another machine:
```bash
nix build 'github:logos-co/logos-package-manager-module#cli' --out-link ./pm
nix build 'github:logos-co/logos-package-manager/e5c25989861f4487c3dc8c7b3bc0062bcbc3221f#cli' --out-link ./pm
./pm/bin/lgpm --modules-dir ./modules install --file calc_module.lgx
```
@@ -862,7 +863,7 @@ Instead of pre-building the library and placing it in `lib/`, you can have Nix f
description = "Module wrapping libfoo from GitHub";
inputs = {
logos-module-builder.url = "github:logos-co/logos-module-builder";
logos-module-builder.url = "github:logos-co/logos-module-builder/b6cf87d30e2995e023496fcfc7f06e8127c6ac5b";
# Fetch the library source (non-flake)
libfoo-src = {