mirror of
https://github.com/logos-co/logos-tutorial.git
synced 2026-08-31 04:41:08 +00:00
feat: lock in stable tutorial
This commit is contained in:
+13
@@ -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,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, ... }:
|
||||
|
||||
@@ -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,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
@@ -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
@@ -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
@@ -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 \
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
Reference in New Issue
Block a user