diff --git a/CMakeLists.txt b/CMakeLists.txt index 08912ac..bf6f97a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,6 +8,7 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(Qt6 REQUIRED COMPONENTS Core Qml) set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) # ── Logos SDK + liblogos ────────────────────────────────────────────────────── set(LOGOS_CPP_SDK_ROOT "" CACHE PATH "Path to logos-cpp-sdk install") @@ -219,7 +220,6 @@ if(BUILD_UI_PLUGIN) add_library(${UI_TARGET} SHARED src/scala_ui_component.cpp - src/scala_plugin.cpp src/calendar_module.cpp src/calendar_store.cpp src/calendar_sync.cpp diff --git a/Makefile b/Makefile index 3aaeebb..f64a459 100644 --- a/Makefile +++ b/Makefile @@ -31,7 +31,7 @@ NIX_QT_PREFIX ?= $(NIX_QTBASE);$(NIX_QTDECL);$(NIX_QTREMOBJ) .PHONY: all build test test-cli clean standalone build-standalone screenshot \ setup setup-logoscore setup-kv-module \ run-core run dev install-cli \ - build-module run-module build-ui-plugin + build-module run-module build-ui-plugin run-app # ── Build ──────────────────────────────────────────────────────────────────── @@ -163,6 +163,28 @@ build-ui-plugin: setup-nix-merged run-module: build-module $(LOGOSCORE) --modules-dir $(MODULES_DIR) --load-modules kv_module,scala_module +## Run logos-app-poc with scala_ui as the main UI plugin +LOGOS_APP_NIX ?= $(shell ls -d /nix/store/*logos-app-1.0.0 2>/dev/null | grep -v '\.drv$$' | head -1) +STAGING_DIR ?= /tmp/scala-app-staging + +run-app: build-ui-plugin + @if [ -z "$(LOGOS_APP_NIX)" ]; then echo "ERROR: logos-app-1.0.0 not found in nix store. Run: nix build github:logos-co/logos-core-poc#logos-app"; exit 1; fi + @echo "Staging logos-app with scala_ui plugin..." + rm -rf $(STAGING_DIR) + mkdir -p $(STAGING_DIR)/bin/plugins $(STAGING_DIR)/bin/modules $(STAGING_DIR)/lib + cp $(LOGOS_APP_NIX)/bin/LogosApp $(STAGING_DIR)/bin/ + cp $(LOGOS_APP_NIX)/bin/logos_host $(STAGING_DIR)/bin/ 2>/dev/null || true + cp $(LOGOS_APP_NIX)/bin/logoscore $(STAGING_DIR)/bin/ 2>/dev/null || true + @for f in $(LOGOS_APP_NIX)/lib/*; do cp -a "$$f" $(STAGING_DIR)/lib/; done 2>/dev/null || true + cp $(BUILD_UI_PLUGIN)/libscala_ui.so $(STAGING_DIR)/bin/plugins/main_ui.so + @echo "Launching logos-app with scala calendar..." + LD_LIBRARY_PATH="$(STAGING_DIR)/lib:$(NIX_QTBASE)/lib:$(NIX_QTDECL)/lib:$(NIX_QTREMOBJ)/lib:/lib/x86_64-linux-gnu" \ + QT_PLUGIN_PATH="$(NIX_QTBASE)/lib/qt-6/plugins" \ + QML2_IMPORT_PATH="$(STAGING_DIR)/lib:$(NIX_QTDECL)/lib/qt-6/qml" \ + LIBGL_ALWAYS_SOFTWARE=1 \ + QT_QUICK_BACKEND=software \ + $(STAGING_DIR)/bin/LogosApp + ## Full dev stack: build everything and run ## ── CLI (--call) targets ───────────────────────────────────────────────────── diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..9db9e26 --- /dev/null +++ b/flake.lock @@ -0,0 +1,770 @@ +{ + "nodes": { + "logos-capability-module": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk_2", + "logos-liblogos": "logos-liblogos_2", + "nixpkgs": [ + "logos-liblogos", + "logos-capability-module", + "logos-liblogos", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1767809111, + "narHash": "sha256-jehjsB+BpDJlVu3I7x+vFVOdXmy9MDmFTJtRqzFUONo=", + "owner": "logos-co", + "repo": "logos-capability-module", + "rev": "7b35383e0aa4e28a4633ed18a87efb57636939b1", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-capability-module", + "type": "github" + } + }, + "logos-capability-module_2": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk_7", + "logos-liblogos": "logos-liblogos_4", + "nixpkgs": [ + "logos-module-builder", + "logos-liblogos", + "logos-capability-module", + "logos-liblogos", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1767809111, + "narHash": "sha256-jehjsB+BpDJlVu3I7x+vFVOdXmy9MDmFTJtRqzFUONo=", + "owner": "logos-co", + "repo": "logos-capability-module", + "rev": "7b35383e0aa4e28a4633ed18a87efb57636939b1", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-capability-module", + "type": "github" + } + }, + "logos-cpp-sdk": { + "inputs": { + "nixpkgs": "nixpkgs" + }, + "locked": { + "lastModified": 1772028960, + "narHash": "sha256-BDWFjaKeoJW8oWDlPphNINt5U3P1xt1z1Y4f9jyC7uU=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "95f763b48d74bcdc63093b05159f43500cab139e", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_10": { + "inputs": { + "nixpkgs": "nixpkgs_12" + }, + "locked": { + "lastModified": 1767724329, + "narHash": "sha256-UPkqxqxbKwU5Dmu00TnjiJVXUmfVylF3p1qziEuYwIE=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "32f1d7080d784ff044d91d076ef2f0c7305d4784", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_2": { + "inputs": { + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1761230734, + "narHash": "sha256-CMRUwXH7pJZ1OI6bd/TDDDXKqQ1tQZHQEOOwK8TgYHI=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "4b143922c190df00bb3835441c9f0075cb28283b", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_3": { + "inputs": { + "nixpkgs": "nixpkgs_3" + }, + "locked": { + "lastModified": 1761230734, + "narHash": "sha256-CMRUwXH7pJZ1OI6bd/TDDDXKqQ1tQZHQEOOwK8TgYHI=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "4b143922c190df00bb3835441c9f0075cb28283b", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_4": { + "inputs": { + "nixpkgs": "nixpkgs_4" + }, + "locked": { + "lastModified": 1772028960, + "narHash": "sha256-BDWFjaKeoJW8oWDlPphNINt5U3P1xt1z1Y4f9jyC7uU=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "95f763b48d74bcdc63093b05159f43500cab139e", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_5": { + "inputs": { + "nixpkgs": "nixpkgs_5" + }, + "locked": { + "lastModified": 1767724329, + "narHash": "sha256-UPkqxqxbKwU5Dmu00TnjiJVXUmfVylF3p1qziEuYwIE=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "32f1d7080d784ff044d91d076ef2f0c7305d4784", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_6": { + "inputs": { + "nixpkgs": "nixpkgs_8" + }, + "locked": { + "lastModified": 1772028960, + "narHash": "sha256-BDWFjaKeoJW8oWDlPphNINt5U3P1xt1z1Y4f9jyC7uU=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "95f763b48d74bcdc63093b05159f43500cab139e", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_7": { + "inputs": { + "nixpkgs": "nixpkgs_9" + }, + "locked": { + "lastModified": 1761230734, + "narHash": "sha256-CMRUwXH7pJZ1OI6bd/TDDDXKqQ1tQZHQEOOwK8TgYHI=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "4b143922c190df00bb3835441c9f0075cb28283b", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_8": { + "inputs": { + "nixpkgs": "nixpkgs_10" + }, + "locked": { + "lastModified": 1761230734, + "narHash": "sha256-CMRUwXH7pJZ1OI6bd/TDDDXKqQ1tQZHQEOOwK8TgYHI=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "4b143922c190df00bb3835441c9f0075cb28283b", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_9": { + "inputs": { + "nixpkgs": "nixpkgs_11" + }, + "locked": { + "lastModified": 1772028960, + "narHash": "sha256-BDWFjaKeoJW8oWDlPphNINt5U3P1xt1z1Y4f9jyC7uU=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "95f763b48d74bcdc63093b05159f43500cab139e", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-liblogos": { + "inputs": { + "logos-capability-module": "logos-capability-module", + "logos-cpp-sdk": "logos-cpp-sdk_4", + "logos-module": "logos-module", + "nix-bundle-appimage": "nix-bundle-appimage", + "nix-bundle-dir": "nix-bundle-dir_2", + "nixpkgs": [ + "logos-liblogos", + "logos-cpp-sdk", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773346195, + "narHash": "sha256-QiLHYKwtVSbivN7H8OO/rsMcRtmxlcuxWPdaWQI+RcI=", + "owner": "logos-co", + "repo": "logos-liblogos", + "rev": "def730603373ad3952550998bcd59b76304628a8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-liblogos", + "type": "github" + } + }, + "logos-liblogos_2": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk_3", + "nixpkgs": [ + "logos-liblogos", + "logos-capability-module", + "logos-liblogos", + "logos-cpp-sdk", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1761845775, + "narHash": "sha256-ulK8xq05ejK6qIgZ7WtWb/MJt2rk5BKfDA2z7mM3wq8=", + "owner": "logos-co", + "repo": "logos-liblogos", + "rev": "a92c2c1268bc70764c8f73c7bce07d21024f5af9", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-liblogos", + "type": "github" + } + }, + "logos-liblogos_3": { + "inputs": { + "logos-capability-module": "logos-capability-module_2", + "logos-cpp-sdk": "logos-cpp-sdk_9", + "logos-module": "logos-module_2", + "nix-bundle-appimage": "nix-bundle-appimage_2", + "nix-bundle-dir": "nix-bundle-dir_4", + "nixpkgs": [ + "logos-module-builder", + "logos-liblogos", + "logos-cpp-sdk", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1772115748, + "narHash": "sha256-sPdAuYiLOjsulrk+uKMT7EG05ZlGT7OYEpgUh+f0nME=", + "owner": "logos-co", + "repo": "logos-liblogos", + "rev": "07780444deb99f10e600247e3696ba495f2f071a", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-liblogos", + "type": "github" + } + }, + "logos-liblogos_4": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk_8", + "nixpkgs": [ + "logos-module-builder", + "logos-liblogos", + "logos-capability-module", + "logos-liblogos", + "logos-cpp-sdk", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1761845775, + "narHash": "sha256-ulK8xq05ejK6qIgZ7WtWb/MJt2rk5BKfDA2z7mM3wq8=", + "owner": "logos-co", + "repo": "logos-liblogos", + "rev": "a92c2c1268bc70764c8f73c7bce07d21024f5af9", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-liblogos", + "type": "github" + } + }, + "logos-module": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk_5", + "nixpkgs": [ + "logos-liblogos", + "logos-module", + "logos-cpp-sdk", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1770999556, + "narHash": "sha256-anpsEniGTTwUAwknRxjaT9GP4avHzIsolEHdHDTV9rM=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "d1b35f335f938bb5de21a2a6010f1104075bdb1c", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module-builder": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk_6", + "logos-liblogos": "logos-liblogos_3", + "nixpkgs": [ + "logos-module-builder", + "logos-cpp-sdk", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773345665, + "narHash": "sha256-BBEjGd3azhQxKo1AC6J4psWOYltidlLHDXFPuuk//AE=", + "owner": "logos-co", + "repo": "logos-module-builder", + "rev": "fbacdfe3fcb208f4c36eee42417ac55a4ed7582f", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module-builder", + "type": "github" + } + }, + "logos-module_2": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk_10", + "nixpkgs": [ + "logos-module-builder", + "logos-liblogos", + "logos-module", + "logos-cpp-sdk", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1770999556, + "narHash": "sha256-anpsEniGTTwUAwknRxjaT9GP4avHzIsolEHdHDTV9rM=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "d1b35f335f938bb5de21a2a6010f1104075bdb1c", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "nix-bundle-appimage": { + "inputs": { + "nix-bundle-dir": "nix-bundle-dir", + "nixpkgs": "nixpkgs_6" + }, + "locked": { + "lastModified": 1772047346, + "narHash": "sha256-RUsTUxKCxuQ3+D2LfBbK0EX1vF7HNMkpWgOGFfZbrEg=", + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "rev": "4d68437c97ac59c3c70c1b2b116235c434d571a8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "type": "github" + } + }, + "nix-bundle-appimage_2": { + "inputs": { + "nix-bundle-dir": "nix-bundle-dir_3", + "nixpkgs": "nixpkgs_13" + }, + "locked": { + "lastModified": 1772047346, + "narHash": "sha256-RUsTUxKCxuQ3+D2LfBbK0EX1vF7HNMkpWgOGFfZbrEg=", + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "rev": "4d68437c97ac59c3c70c1b2b116235c434d571a8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "type": "github" + } + }, + "nix-bundle-dir": { + "inputs": { + "nixpkgs": [ + "logos-liblogos", + "nix-bundle-appimage", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1771971384, + "narHash": "sha256-fq0H+sxQhkGN054jdN+ZfHZibbOjHA+KD5SpRH78T1g=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "1ecb9662145a1ad84007a970b4bef50a4af159c9", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_2": { + "inputs": { + "nixpkgs": "nixpkgs_7" + }, + "locked": { + "lastModified": 1771971384, + "narHash": "sha256-fq0H+sxQhkGN054jdN+ZfHZibbOjHA+KD5SpRH78T1g=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "1ecb9662145a1ad84007a970b4bef50a4af159c9", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_3": { + "inputs": { + "nixpkgs": [ + "logos-module-builder", + "logos-liblogos", + "nix-bundle-appimage", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1771971384, + "narHash": "sha256-fq0H+sxQhkGN054jdN+ZfHZibbOjHA+KD5SpRH78T1g=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "1ecb9662145a1ad84007a970b4bef50a4af159c9", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_4": { + "inputs": { + "nixpkgs": "nixpkgs_14" + }, + "locked": { + "lastModified": 1771971384, + "narHash": "sha256-fq0H+sxQhkGN054jdN+ZfHZibbOjHA+KD5SpRH78T1g=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "1ecb9662145a1ad84007a970b4bef50a4af159c9", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_10": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_11": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_12": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_13": { + "locked": { + "lastModified": 1771848320, + "narHash": "sha256-0MAd+0mun3K/Ns8JATeHT1sX28faLII5hVLq0L3BdZU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "2fc6539b481e1d2569f25f8799236694180c0993", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_14": { + "locked": { + "lastModified": 1770562336, + "narHash": "sha256-ub1gpAONMFsT/GU2hV6ZWJjur8rJ6kKxdm9IlCT0j84=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "d6c71932130818840fc8fe9509cf50be8c64634f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_4": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_5": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_6": { + "locked": { + "lastModified": 1771848320, + "narHash": "sha256-0MAd+0mun3K/Ns8JATeHT1sX28faLII5hVLq0L3BdZU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "2fc6539b481e1d2569f25f8799236694180c0993", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_7": { + "locked": { + "lastModified": 1770562336, + "narHash": "sha256-ub1gpAONMFsT/GU2hV6ZWJjur8rJ6kKxdm9IlCT0j84=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "d6c71932130818840fc8fe9509cf50be8c64634f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_8": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_9": { + "locked": { + "lastModified": 1759036355, + "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk", + "logos-liblogos": "logos-liblogos", + "logos-module-builder": "logos-module-builder", + "nixpkgs": [ + "logos-module-builder", + "nixpkgs" + ] + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix index 5a4432f..eaf7f1d 100644 --- a/flake.nix +++ b/flake.nix @@ -4,9 +4,18 @@ inputs = { logos-module-builder.url = "github:logos-co/logos-module-builder"; nixpkgs.follows = "logos-module-builder/nixpkgs"; + logos-cpp-sdk = { + url = "github:logos-co/logos-cpp-sdk"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + logos-liblogos = { + url = "github:logos-co/logos-liblogos"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.logos-cpp-sdk.follows = "logos-cpp-sdk"; + }; }; - outputs = { self, logos-module-builder, nixpkgs, ... }: + outputs = { self, logos-module-builder, nixpkgs, logos-cpp-sdk, logos-liblogos, ... }: let moduleOutputs = logos-module-builder.lib.mkLogosModule { src = ./.; @@ -15,18 +24,66 @@ systems = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ]; forAllSystems = f: nixpkgs.lib.genAttrs systems (system: f { pkgs = import nixpkgs { inherit system; }; + logosSdk = logos-cpp-sdk.packages.${system}.default; + logosLiblogos = logos-liblogos.packages.${system}.default; }); in moduleOutputs // { - packages = forAllSystems ({ pkgs }: + packages = forAllSystems ({ pkgs, logosSdk, logosLiblogos }: let base = moduleOutputs.packages.${pkgs.system} or {}; + + ui-plugin = pkgs.stdenv.mkDerivation { + pname = "scala-ui-plugin"; + version = "0.1.0"; + src = ./.; + + nativeBuildInputs = [ + pkgs.cmake + pkgs.ninja + pkgs.pkg-config + pkgs.qt6.wrapQtAppsHook + ]; + + buildInputs = [ + pkgs.qt6.qtbase + pkgs.qt6.qtdeclarative + pkgs.qt6.qtremoteobjects + ]; + + cmakeFlags = [ + "-DBUILD_UI_PLUGIN=ON" + "-DLOGOS_CPP_SDK_ROOT=${logosSdk}" + "-DLOGOS_LIBLOGOS_ROOT=${logosLiblogos}" + ]; + + buildPhase = '' + runHook preBuild + cmake --build . --target scala_ui -j''${NIX_BUILD_CORES:-1} + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + mkdir -p $out/lib + cp libscala_ui${pkgs.stdenv.hostPlatform.extensions.sharedLibrary} $out/lib/ + runHook postInstall + ''; + + dontWrapQtApps = true; + + meta = with pkgs.lib; { + description = "Scala UI plugin (IComponent) for logos-app-poc"; + platforms = platforms.unix; + }; + }; in base // { ui = pkgs.runCommand "scala-ui" {} '' mkdir -p $out/qml cp -r ${./qml}/* $out/qml/ ''; + inherit ui-plugin; } ); }; diff --git a/src/calendar_module.h b/src/calendar_module.h index f693559..23f1145 100644 --- a/src/calendar_module.h +++ b/src/calendar_module.h @@ -53,7 +53,9 @@ Q_DECLARE_INTERFACE(ILogosCalendar, ILogosCalendar_iid) #if defined(LOGOS_CORE_AVAILABLE) && !defined(SCALA_MODULE_WRAPPER) class LogosCalendar final : public QObject, public PluginInterface, public ILogosCalendar { Q_OBJECT +#ifndef SCALA_UI_BUILD Q_PLUGIN_METADATA(IID ILogosCalendar_iid FILE "metadata.json") +#endif Q_INTERFACES(PluginInterface ILogosCalendar) #elif defined(LOGOS_CORE_AVAILABLE) && defined(SCALA_MODULE_WRAPPER) class LogosCalendar final : public QObject, public PluginInterface, public ILogosCalendar { @@ -62,7 +64,9 @@ class LogosCalendar final : public QObject, public PluginInterface, public ILogo #else class LogosCalendar final : public QObject, public ILogosCalendar { Q_OBJECT +#ifndef SCALA_UI_BUILD Q_PLUGIN_METADATA(IID ILogosCalendar_iid FILE "metadata.json") +#endif Q_INTERFACES(ILogosCalendar) #endif diff --git a/src/calendar_store.cpp b/src/calendar_store.cpp index 1d23f31..5bfb84e 100644 --- a/src/calendar_store.cpp +++ b/src/calendar_store.cpp @@ -6,6 +6,7 @@ #include #include +#include // ── Construction ───────────────────────────────────────────────────────────── @@ -14,6 +15,10 @@ CalendarStore::CalendarStore() = default; #ifdef LOGOS_CORE_AVAILABLE void CalendarStore::setClient(LogosAPIClient *client) { m_kvClient = client; + // Switch kv_module to file backend for persistence + QString dataDir = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + "/kv-data"; + m_kvClient->invokeRemoteMethod("kv_module", "setDataDir", dataDir); + qDebug() << "CalendarStore: set kv_module data dir:" << dataDir; } #endif diff --git a/src/scala_plugin.h b/src/scala_plugin.h index 40990d2..7c2b759 100644 --- a/src/scala_plugin.h +++ b/src/scala_plugin.h @@ -18,7 +18,9 @@ */ class ScalaPlugin : public QObject, public PluginInterface { Q_OBJECT +#ifndef SCALA_UI_BUILD Q_PLUGIN_METADATA(IID PluginInterface_iid FILE "metadata.json") +#endif Q_INTERFACES(PluginInterface) public: diff --git a/src/scala_ui_component.cpp b/src/scala_ui_component.cpp index 1e9ac79..502c66f 100644 --- a/src/scala_ui_component.cpp +++ b/src/scala_ui_component.cpp @@ -1,5 +1,5 @@ #include "scala_ui_component.h" -#include "scala_plugin.h" +#include "calendar_module.h" #include #include @@ -9,12 +9,14 @@ QWidget* ScalaUIComponent::createWidget(LogosAPI* logosAPI) { quickWidget->setMinimumSize(800, 600); quickWidget->setResizeMode(QQuickWidget::SizeRootObjectToView); - auto* backend = new ScalaPlugin(); + auto* backend = new LogosCalendar(); backend->setParent(quickWidget); +#ifdef LOGOS_CORE_AVAILABLE if (logosAPI) { backend->initLogos(logosAPI); } +#endif quickWidget->rootContext()->setContextProperty("calendarModule", backend); diff --git a/ui_metadata.json b/ui_metadata.json index 64adfbe..d860a68 100644 --- a/ui_metadata.json +++ b/ui_metadata.json @@ -4,5 +4,10 @@ "description": "Scala — Secure Calendar App UI for Logos", "author": "jimmy-claw", "type": "ui", - "category": "productivity" + "category": "productivity", + "dependencies": ["scala_module"], + "main": { + "linux-amd64": "scala_ui.so" + }, + "manifestVersion": "0.1.0" }