From f4c180ccdc1ba447ae56af6e6e7035ce78c3b2c4 Mon Sep 17 00:00:00 2001 From: erhant Date: Thu, 18 Jun 2026 14:13:42 +0300 Subject: [PATCH 1/8] use logos protocol with indexer dependency --- .github/pull_request_template.md | 43 + CMakeLists.txt | 164 +- flake.lock | 19537 +++++++++++++++++++++++++- flake.nix | 69 +- metadata.json | 20 +- nix/app.nix | 65 - nix/default.nix | 29 - nix/lib.nix | 45 - src/ExplorerPlugin.cpp | 4 +- src/ExplorerWidget.cpp | 6 +- src/ExplorerWidget.h | 3 +- src/models/Block.h | 1 - src/pages/MainPage.cpp | 15 +- src/services/IndexerService.h | 5 +- src/services/LpIndexerService.cpp | 438 + src/services/LpIndexerService.h | 69 + src/services/MockIndexerService.cpp | 2 - src/services/RpcIndexerService.cpp | 741 - src/services/RpcIndexerService.h | 66 - 19 files changed, 20192 insertions(+), 1130 deletions(-) create mode 100644 .github/pull_request_template.md delete mode 100644 nix/app.nix delete mode 100644 nix/default.nix delete mode 100644 nix/lib.nix create mode 100644 src/services/LpIndexerService.cpp create mode 100644 src/services/LpIndexerService.h delete mode 100644 src/services/RpcIndexerService.cpp delete mode 100644 src/services/RpcIndexerService.h diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..18064c6 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,43 @@ +## 🎯 Purpose + +*What problem does this PR solve or what feature does it add? Mention issues related to it* + +TO COMPLETE + +## ⚙️ Approach + +*Describe the core changes introduced by this PR.* + +TO COMPLETE + +- [ ] Change ... +- [ ] Add ... +- [ ] Fix ... +- [ ] ... + +## 🧪 How to Test + +*How to verify that this PR works as intended.* + +TO COMPLETE + +## 🔗 Dependencies + +*Link PRs that must be merged before this one.* + +TO COMPLETE IF APPLICABLE + +## 🔜 Future Work + +*List any work intentionally left out of this PR, whether due to scope, prioritization, or pending decisions.* + +TO COMPLETE IF APPLICABLE + +## 📋 PR Completion Checklist + +*Mark only completed items. A complete PR should have all boxes ticked.* + +- [ ] Complete PR description +- [ ] Implement the core functionality +- [ ] Add/update tests +- [ ] Add/update documentation and inline comments diff --git a/CMakeLists.txt b/CMakeLists.txt index 95f17ce..e56a8fe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,116 +1,68 @@ -cmake_minimum_required(VERSION 3.16) -project(LEZExplorerUIPlugin VERSION 1.0.0 LANGUAGES CXX) +cmake_minimum_required(VERSION 3.14) +project(LezExplorerUiPlugin LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) +# Hand-written Q_OBJECT classes (widgets/pages/services) need MOC; +# explorer_resources.qrc -> compiled icons via AUTORCC. set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) -set(CMAKE_AUTOUIC ON) -# Find Qt packages -find_package(Qt6 REQUIRED COMPONENTS Core Widgets Svg SvgWidgets Network WebSockets) - -# Try to find the component-interfaces package first -find_package(component-interfaces QUIET) - -# If not found, use the local interfaces folder -if(NOT component-interfaces_FOUND) - include_directories(${CMAKE_CURRENT_SOURCE_DIR}/interfaces) - add_library(component-interfaces INTERFACE) - target_include_directories(component-interfaces INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/interfaces) -endif() - -# Source files -set(SOURCES - src/ExplorerPlugin.cpp - src/ExplorerPlugin.h - src/ExplorerWidget.cpp - src/ExplorerWidget.h - src/Style.h - src/services/MockIndexerService.cpp - src/services/MockIndexerService.h - src/services/RpcIndexerService.cpp - src/services/RpcIndexerService.h - src/services/IndexerService.h - src/models/Block.h - src/models/Transaction.h - src/models/Account.h - src/widgets/SearchBar.cpp - src/widgets/SearchBar.h - src/widgets/NavigationBar.cpp - src/widgets/NavigationBar.h - src/widgets/ClickableFrame.h - src/pages/MainPage.cpp - src/pages/MainPage.h - src/pages/BlockPage.cpp - src/pages/BlockPage.h - src/pages/TransactionPage.cpp - src/pages/TransactionPage.h - src/pages/AccountPage.cpp - src/pages/AccountPage.h - src/explorer_resources.qrc -) - -# Create the plugin library -add_library(lez_explorer_ui SHARED ${SOURCES}) - -# Set output name without lib prefix -set_target_properties(lez_explorer_ui PROPERTIES - PREFIX "" - OUTPUT_NAME "lez_explorer_ui" -) - -# Include directories -target_include_directories(lez_explorer_ui PRIVATE - ${CMAKE_CURRENT_SOURCE_DIR} - ${CMAKE_CURRENT_SOURCE_DIR}/src - ${CMAKE_CURRENT_BINARY_DIR} -) - -# Link against libraries -target_link_libraries(lez_explorer_ui PRIVATE - Qt6::Core - Qt6::Widgets - Qt6::Svg - Qt6::SvgWidgets - Qt6::Network - Qt6::WebSockets - component-interfaces -) - -# Set common properties for both platforms -set_target_properties(lez_explorer_ui PROPERTIES - LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/modules" - RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/modules" - BUILD_WITH_INSTALL_RPATH TRUE - SKIP_BUILD_RPATH FALSE -) - -if(APPLE) - set_target_properties(lez_explorer_ui PROPERTIES - INSTALL_RPATH "@loader_path" - INSTALL_NAME_DIR "@rpath" - BUILD_WITH_INSTALL_NAME_DIR TRUE - ) - add_custom_command(TARGET lez_explorer_ui POST_BUILD - COMMAND install_name_tool -id "@rpath/lez_explorer_ui.dylib" $ - COMMENT "Updating library paths for macOS" - ) +# Logos Module CMake helper. For nix builds this is provided via +# LOGOS_MODULE_BUILDER_ROOT. +if(DEFINED ENV{LOGOS_MODULE_BUILDER_ROOT}) + include($ENV{LOGOS_MODULE_BUILDER_ROOT}/cmake/LogosModule.cmake) +elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/LogosModule.cmake") + include(cmake/LogosModule.cmake) else() - set_target_properties(lez_explorer_ui PROPERTIES - INSTALL_RPATH "$ORIGIN" - INSTALL_RPATH_USE_LINK_PATH FALSE - ) + message(FATAL_ERROR "LogosModule.cmake not found. Set LOGOS_MODULE_BUILDER_ROOT.") endif() -install(TARGETS lez_explorer_ui - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}/logos/modules - RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR}/logos/modules - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}/logos/modules +# Legacy `type: ui` QWidget plugin (hand-written ExplorerPlugin / IComponent — +# no `interface: universal`, so no codegen). The builder links the logos +# SDK/protocol (logos_api.h / getClient) automatically; we add the Qt widget +# stack the explorer needs on top of the default Core/RemoteObjects. +logos_module( + NAME lez_explorer_ui + SOURCES + src/ExplorerPlugin.cpp + src/ExplorerPlugin.h + src/ExplorerWidget.cpp + src/ExplorerWidget.h + src/Style.h + src/services/IndexerService.h + src/services/LpIndexerService.cpp + src/services/LpIndexerService.h + src/services/MockIndexerService.cpp + src/services/MockIndexerService.h + src/models/Block.h + src/models/Transaction.h + src/models/Account.h + src/widgets/SearchBar.cpp + src/widgets/SearchBar.h + src/widgets/NavigationBar.cpp + src/widgets/NavigationBar.h + src/widgets/ClickableFrame.h + src/pages/MainPage.cpp + src/pages/MainPage.h + src/pages/BlockPage.cpp + src/pages/BlockPage.h + src/pages/TransactionPage.cpp + src/pages/TransactionPage.h + src/pages/AccountPage.cpp + src/pages/AccountPage.h + src/explorer_resources.qrc + FIND_PACKAGES + Qt6Widgets + Qt6Svg + Qt6SvgWidgets + Qt6Network + LINK_LIBRARIES + Qt6::Widgets + Qt6::Svg + Qt6::SvgWidgets + Qt6::Network + INCLUDE_DIRS + src + interfaces ) - -install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/metadata.json - DESTINATION ${CMAKE_INSTALL_DATADIR}/lez-explorer-ui -) - -message(STATUS "LEZ Explorer UI Plugin configured successfully") diff --git a/flake.lock b/flake.lock index f0d7218..8e95248 100644 --- a/flake.lock +++ b/flake.lock @@ -1,6 +1,14553 @@ { "nodes": { + "crane": { + "locked": { + "lastModified": 1776396856, + "narHash": "sha256-aRJpIJUlZLaf06ekPvqjuU46zvO9K90IxJGpbqodkPs=", + "owner": "ipetkov", + "repo": "crane", + "rev": "28462d6d55c33206ffa5a56c7907ca3125ed788f", + "type": "github" + }, + "original": { + "owner": "ipetkov", + "repo": "crane", + "type": "github" + } + }, + "lez_indexer_module": { + "inputs": { + "logos-execution-zone": "logos-execution-zone", + "logos-module-builder": "logos-module-builder_2" + }, + "locked": { + "lastModified": 1781779306, + "narHash": "sha256-dPnC5t4PohfEALyvJqHjc9QlVPse0GhLue1mczt90So=", + "path": "/Users/erhant/logos/logos-execution-zone-indexer-module", + "type": "path" + }, + "original": { + "path": "/Users/erhant/logos/logos-execution-zone-indexer-module", + "type": "path" + } + }, + "logos-blockchain-circuits": { + "inputs": { + "nixpkgs": "nixpkgs" + }, + "locked": { + "lastModified": 1775835011, + "narHash": "sha256-SQDLyyRUa5J9QHjNiHbeZw4rQOZnTEo61TcaUpjtLBs=", + "owner": "logos-blockchain", + "repo": "logos-blockchain-circuits", + "rev": "d6cf41f66500d4afc157b4f43de0f0d5bfa01443", + "type": "github" + }, + "original": { + "owner": "logos-blockchain", + "repo": "logos-blockchain-circuits", + "type": "github" + } + }, + "logos-capability-module": { + "inputs": { + "logos-module-builder": "logos-module-builder" + }, + "locked": { + "lastModified": 1778182598, + "narHash": "sha256-QoyirL/blmVM2cmXQwbR6rmHufQJ6vaJSCkNORu4qaA=", + "owner": "logos-co", + "repo": "logos-capability-module", + "rev": "e675e9e3a98ee69bb303365c2c626f9237bc1ab5", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-capability-module", + "type": "github" + } + }, + "logos-capability-module_10": { + "inputs": { + "logos-module-builder": "logos-module-builder_6" + }, + "locked": { + "lastModified": 1778182598, + "narHash": "sha256-QoyirL/blmVM2cmXQwbR6rmHufQJ6vaJSCkNORu4qaA=", + "owner": "logos-co", + "repo": "logos-capability-module", + "rev": "e675e9e3a98ee69bb303365c2c626f9237bc1ab5", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-capability-module", + "type": "github" + } + }, + "logos-capability-module_11": { + "inputs": { + "logos-cpp-sdk": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-cpp-sdk" + ], + "logos-module": "logos-module_30", + "logos-nix": "logos-nix_192", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455138, + "narHash": "sha256-szx2dnnY9MP1NpdBnR8E2DRSz9CtQlo/6698zgJcAEM=", + "owner": "logos-co", + "repo": "logos-capability-module", + "rev": "0655be68e0078bede0682bb6a5b53330dac37a72", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-capability-module", + "type": "github" + } + }, + "logos-capability-module_12": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk_21", + "logos-module": "logos-module_31", + "logos-nix": "logos-nix_197", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455138, + "narHash": "sha256-szx2dnnY9MP1NpdBnR8E2DRSz9CtQlo/6698zgJcAEM=", + "owner": "logos-co", + "repo": "logos-capability-module", + "rev": "0655be68e0078bede0682bb6a5b53330dac37a72", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-capability-module", + "type": "github" + } + }, + "logos-capability-module_13": { + "inputs": { + "logos-module-builder": "logos-module-builder_7" + }, + "locked": { + "lastModified": 1778182598, + "narHash": "sha256-QoyirL/blmVM2cmXQwbR6rmHufQJ6vaJSCkNORu4qaA=", + "owner": "logos-co", + "repo": "logos-capability-module", + "rev": "e675e9e3a98ee69bb303365c2c626f9237bc1ab5", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-capability-module", + "type": "github" + } + }, + "logos-capability-module_14": { + "inputs": { + "logos-cpp-sdk": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-cpp-sdk" + ], + "logos-module": "logos-module_36", + "logos-nix": "logos-nix_236", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455138, + "narHash": "sha256-szx2dnnY9MP1NpdBnR8E2DRSz9CtQlo/6698zgJcAEM=", + "owner": "logos-co", + "repo": "logos-capability-module", + "rev": "0655be68e0078bede0682bb6a5b53330dac37a72", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-capability-module", + "type": "github" + } + }, + "logos-capability-module_15": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk_26", + "logos-module": "logos-module_37", + "logos-nix": "logos-nix_241", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455138, + "narHash": "sha256-szx2dnnY9MP1NpdBnR8E2DRSz9CtQlo/6698zgJcAEM=", + "owner": "logos-co", + "repo": "logos-capability-module", + "rev": "0655be68e0078bede0682bb6a5b53330dac37a72", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-capability-module", + "type": "github" + } + }, + "logos-capability-module_2": { + "inputs": { + "logos-cpp-sdk": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-cpp-sdk" + ], + "logos-module": "logos-module_4", + "logos-nix": "logos-nix_9", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455138, + "narHash": "sha256-szx2dnnY9MP1NpdBnR8E2DRSz9CtQlo/6698zgJcAEM=", + "owner": "logos-co", + "repo": "logos-capability-module", + "rev": "0655be68e0078bede0682bb6a5b53330dac37a72", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-capability-module", + "type": "github" + } + }, + "logos-capability-module_3": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk_3", + "logos-module": "logos-module_5", + "logos-nix": "logos-nix_14", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455138, + "narHash": "sha256-szx2dnnY9MP1NpdBnR8E2DRSz9CtQlo/6698zgJcAEM=", + "owner": "logos-co", + "repo": "logos-capability-module", + "rev": "0655be68e0078bede0682bb6a5b53330dac37a72", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-capability-module", + "type": "github" + } + }, + "logos-capability-module_4": { + "inputs": { + "logos-module-builder": "logos-module-builder_3" + }, + "locked": { + "lastModified": 1778182598, + "narHash": "sha256-QoyirL/blmVM2cmXQwbR6rmHufQJ6vaJSCkNORu4qaA=", + "owner": "logos-co", + "repo": "logos-capability-module", + "rev": "e675e9e3a98ee69bb303365c2c626f9237bc1ab5", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-capability-module", + "type": "github" + } + }, + "logos-capability-module_5": { + "inputs": { + "logos-cpp-sdk": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-cpp-sdk" + ], + "logos-module": "logos-module_14", + "logos-nix": "logos-nix_69", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455138, + "narHash": "sha256-szx2dnnY9MP1NpdBnR8E2DRSz9CtQlo/6698zgJcAEM=", + "owner": "logos-co", + "repo": "logos-capability-module", + "rev": "0655be68e0078bede0682bb6a5b53330dac37a72", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-capability-module", + "type": "github" + } + }, + "logos-capability-module_6": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk_9", + "logos-module": "logos-module_15", + "logos-nix": "logos-nix_74", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455138, + "narHash": "sha256-szx2dnnY9MP1NpdBnR8E2DRSz9CtQlo/6698zgJcAEM=", + "owner": "logos-co", + "repo": "logos-capability-module", + "rev": "0655be68e0078bede0682bb6a5b53330dac37a72", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-capability-module", + "type": "github" + } + }, + "logos-capability-module_7": { + "inputs": { + "logos-module-builder": "logos-module-builder_4" + }, + "locked": { + "lastModified": 1778182598, + "narHash": "sha256-QoyirL/blmVM2cmXQwbR6rmHufQJ6vaJSCkNORu4qaA=", + "owner": "logos-co", + "repo": "logos-capability-module", + "rev": "e675e9e3a98ee69bb303365c2c626f9237bc1ab5", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-capability-module", + "type": "github" + } + }, + "logos-capability-module_8": { + "inputs": { + "logos-cpp-sdk": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-cpp-sdk" + ], + "logos-module": "logos-module_20", + "logos-nix": "logos-nix_113", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455138, + "narHash": "sha256-szx2dnnY9MP1NpdBnR8E2DRSz9CtQlo/6698zgJcAEM=", + "owner": "logos-co", + "repo": "logos-capability-module", + "rev": "0655be68e0078bede0682bb6a5b53330dac37a72", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-capability-module", + "type": "github" + } + }, + "logos-capability-module_9": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk_14", + "logos-module": "logos-module_21", + "logos-nix": "logos-nix_118", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455138, + "narHash": "sha256-szx2dnnY9MP1NpdBnR8E2DRSz9CtQlo/6698zgJcAEM=", + "owner": "logos-co", + "repo": "logos-capability-module", + "rev": "0655be68e0078bede0682bb6a5b53330dac37a72", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-capability-module", + "type": "github" + } + }, + "logos-cpp-sdk": { + "inputs": { + "logos-nix": "logos-nix", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-cpp-sdk", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778167634, + "narHash": "sha256-gbBYvyEDxBHF8iACAE/dFcljBkIUTWr1rP3gBLj62JI=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "25c88f4d48fa95ea4437194bcf60bd8d0cf84a74", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_10": { + "inputs": { + "logos-nix": "logos-nix_75", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-cpp-sdk", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778167634, + "narHash": "sha256-gbBYvyEDxBHF8iACAE/dFcljBkIUTWr1rP3gBLj62JI=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "25c88f4d48fa95ea4437194bcf60bd8d0cf84a74", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_11": { + "inputs": { + "logos-nix": "logos-nix_103", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-cpp-sdk", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1779716125, + "narHash": "sha256-PfpmvkXyDnQRW0dcnIthGKE17rm5bwm8KLbEqJcm9kM=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "d77c3dd616384addfcc8c5607860466850fdfcf2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_12": { + "inputs": { + "logos-nix": "logos-nix_105", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-cpp-sdk", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778167634, + "narHash": "sha256-gbBYvyEDxBHF8iACAE/dFcljBkIUTWr1rP3gBLj62JI=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "25c88f4d48fa95ea4437194bcf60bd8d0cf84a74", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_13": { + "inputs": { + "logos-nix": "logos-nix_114", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-cpp-sdk", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778167634, + "narHash": "sha256-gbBYvyEDxBHF8iACAE/dFcljBkIUTWr1rP3gBLj62JI=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "25c88f4d48fa95ea4437194bcf60bd8d0cf84a74", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_14": { + "inputs": { + "logos-nix": "logos-nix_116", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-cpp-sdk", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773956385, + "narHash": "sha256-CV0Lo1FrosBt/MSP+GWQGWXnYobxRGXGOREylNuwZ58=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "4b66dac015e4b977d33cfae80a4c8e1d518679f3", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_15": { + "inputs": { + "logos-nix": "logos-nix_119", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-cpp-sdk", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778167634, + "narHash": "sha256-gbBYvyEDxBHF8iACAE/dFcljBkIUTWr1rP3gBLj62JI=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "25c88f4d48fa95ea4437194bcf60bd8d0cf84a74", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_16": { + "inputs": { + "logos-nix": "logos-nix_147", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-cpp-sdk", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1779716125, + "narHash": "sha256-PfpmvkXyDnQRW0dcnIthGKE17rm5bwm8KLbEqJcm9kM=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "d77c3dd616384addfcc8c5607860466850fdfcf2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_17": { + "inputs": { + "logos-nix": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-view-module-runtime", + "logos-nix" + ], + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-view-module-runtime", + "logos-cpp-sdk", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1779716125, + "narHash": "sha256-PfpmvkXyDnQRW0dcnIthGKE17rm5bwm8KLbEqJcm9kM=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "d77c3dd616384addfcc8c5607860466850fdfcf2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_18": { + "inputs": { + "logos-lidl": "logos-lidl_3", + "logos-nix": "logos-nix_175", + "logos-protocol": [ + "logos-module-builder", + "logos-protocol" + ], + "nixpkgs": [ + "logos-module-builder", + "logos-cpp-sdk", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1781654442, + "narHash": "sha256-jMoXJe4POztuthZzotA/4T0okTOMllFZIRVMOqc7Ubc=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "1bc101df1f368cce728dbbedf0a433266beb5129", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_19": { + "inputs": { + "logos-nix": "logos-nix_184", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-cpp-sdk", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778167634, + "narHash": "sha256-gbBYvyEDxBHF8iACAE/dFcljBkIUTWr1rP3gBLj62JI=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "25c88f4d48fa95ea4437194bcf60bd8d0cf84a74", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_2": { + "inputs": { + "logos-nix": "logos-nix_10", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-cpp-sdk", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778167634, + "narHash": "sha256-gbBYvyEDxBHF8iACAE/dFcljBkIUTWr1rP3gBLj62JI=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "25c88f4d48fa95ea4437194bcf60bd8d0cf84a74", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_20": { + "inputs": { + "logos-nix": "logos-nix_193", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-cpp-sdk", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778167634, + "narHash": "sha256-gbBYvyEDxBHF8iACAE/dFcljBkIUTWr1rP3gBLj62JI=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "25c88f4d48fa95ea4437194bcf60bd8d0cf84a74", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_21": { + "inputs": { + "logos-nix": "logos-nix_195", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-cpp-sdk", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773956385, + "narHash": "sha256-CV0Lo1FrosBt/MSP+GWQGWXnYobxRGXGOREylNuwZ58=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "4b66dac015e4b977d33cfae80a4c8e1d518679f3", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_22": { + "inputs": { + "logos-nix": "logos-nix_198", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-cpp-sdk", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778167634, + "narHash": "sha256-gbBYvyEDxBHF8iACAE/dFcljBkIUTWr1rP3gBLj62JI=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "25c88f4d48fa95ea4437194bcf60bd8d0cf84a74", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_23": { + "inputs": { + "logos-nix": "logos-nix_226", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-cpp-sdk", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1779716125, + "narHash": "sha256-PfpmvkXyDnQRW0dcnIthGKE17rm5bwm8KLbEqJcm9kM=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "d77c3dd616384addfcc8c5607860466850fdfcf2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_24": { + "inputs": { + "logos-nix": "logos-nix_228", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-cpp-sdk", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778167634, + "narHash": "sha256-gbBYvyEDxBHF8iACAE/dFcljBkIUTWr1rP3gBLj62JI=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "25c88f4d48fa95ea4437194bcf60bd8d0cf84a74", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_25": { + "inputs": { + "logos-nix": "logos-nix_237", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-cpp-sdk", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778167634, + "narHash": "sha256-gbBYvyEDxBHF8iACAE/dFcljBkIUTWr1rP3gBLj62JI=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "25c88f4d48fa95ea4437194bcf60bd8d0cf84a74", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_26": { + "inputs": { + "logos-nix": "logos-nix_239", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-cpp-sdk", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773956385, + "narHash": "sha256-CV0Lo1FrosBt/MSP+GWQGWXnYobxRGXGOREylNuwZ58=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "4b66dac015e4b977d33cfae80a4c8e1d518679f3", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_27": { + "inputs": { + "logos-nix": "logos-nix_242", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-cpp-sdk", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778167634, + "narHash": "sha256-gbBYvyEDxBHF8iACAE/dFcljBkIUTWr1rP3gBLj62JI=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "25c88f4d48fa95ea4437194bcf60bd8d0cf84a74", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_28": { + "inputs": { + "logos-nix": "logos-nix_270", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-cpp-sdk", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1779716125, + "narHash": "sha256-PfpmvkXyDnQRW0dcnIthGKE17rm5bwm8KLbEqJcm9kM=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "d77c3dd616384addfcc8c5607860466850fdfcf2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_29": { + "inputs": { + "logos-nix": [ + "logos-module-builder", + "logos-standalone-app", + "logos-view-module-runtime", + "logos-nix" + ], + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-view-module-runtime", + "logos-cpp-sdk", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1779716125, + "narHash": "sha256-PfpmvkXyDnQRW0dcnIthGKE17rm5bwm8KLbEqJcm9kM=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "d77c3dd616384addfcc8c5607860466850fdfcf2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_3": { + "inputs": { + "logos-nix": "logos-nix_12", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-cpp-sdk", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773956385, + "narHash": "sha256-CV0Lo1FrosBt/MSP+GWQGWXnYobxRGXGOREylNuwZ58=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "4b66dac015e4b977d33cfae80a4c8e1d518679f3", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_4": { + "inputs": { + "logos-nix": "logos-nix_15", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-cpp-sdk", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778167634, + "narHash": "sha256-gbBYvyEDxBHF8iACAE/dFcljBkIUTWr1rP3gBLj62JI=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "25c88f4d48fa95ea4437194bcf60bd8d0cf84a74", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_5": { + "inputs": { + "logos-nix": "logos-nix_43", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-cpp-sdk", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778167634, + "narHash": "sha256-gbBYvyEDxBHF8iACAE/dFcljBkIUTWr1rP3gBLj62JI=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "25c88f4d48fa95ea4437194bcf60bd8d0cf84a74", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_6": { + "inputs": { + "logos-lidl": "logos-lidl", + "logos-nix": "logos-nix_52", + "logos-protocol": [ + "lez_indexer_module", + "logos-module-builder", + "logos-protocol" + ], + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-cpp-sdk", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1781654442, + "narHash": "sha256-jMoXJe4POztuthZzotA/4T0okTOMllFZIRVMOqc7Ubc=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "1bc101df1f368cce728dbbedf0a433266beb5129", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_7": { + "inputs": { + "logos-nix": "logos-nix_61", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-cpp-sdk", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778167634, + "narHash": "sha256-gbBYvyEDxBHF8iACAE/dFcljBkIUTWr1rP3gBLj62JI=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "25c88f4d48fa95ea4437194bcf60bd8d0cf84a74", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_8": { + "inputs": { + "logos-nix": "logos-nix_70", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-cpp-sdk", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778167634, + "narHash": "sha256-gbBYvyEDxBHF8iACAE/dFcljBkIUTWr1rP3gBLj62JI=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "25c88f4d48fa95ea4437194bcf60bd8d0cf84a74", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-cpp-sdk_9": { + "inputs": { + "logos-nix": "logos-nix_72", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-cpp-sdk", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773956385, + "narHash": "sha256-CV0Lo1FrosBt/MSP+GWQGWXnYobxRGXGOREylNuwZ58=", + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "rev": "4b66dac015e4b977d33cfae80a4c8e1d518679f3", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-cpp-sdk", + "type": "github" + } + }, + "logos-design-system": { + "inputs": { + "logos-nix": "logos-nix_11", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-design-system", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777999983, + "narHash": "sha256-D6W7oC80cT7pg95kSpxO0jtoVj1hG9A151CciCSZaBc=", + "owner": "logos-co", + "repo": "logos-design-system", + "rev": "f6e95ae24ede3871c380f8250feffd17d173f5a4", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-design-system", + "type": "github" + } + }, + "logos-design-system_2": { + "inputs": { + "logos-nix": "logos-nix_71", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-design-system", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777999983, + "narHash": "sha256-D6W7oC80cT7pg95kSpxO0jtoVj1hG9A151CciCSZaBc=", + "owner": "logos-co", + "repo": "logos-design-system", + "rev": "f6e95ae24ede3871c380f8250feffd17d173f5a4", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-design-system", + "type": "github" + } + }, + "logos-design-system_3": { + "inputs": { + "logos-nix": "logos-nix_104", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-design-system", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778224414, + "narHash": "sha256-QSSCCE4eKGiIS5PqHDfk9Lj4VFmeCh18khbFWrGxvvc=", + "owner": "logos-co", + "repo": "logos-design-system", + "rev": "6176f0d7a5dfeb64a7f0f98e7ca2bf71a4804772", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-design-system", + "type": "github" + } + }, + "logos-design-system_4": { + "inputs": { + "logos-nix": "logos-nix_115", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-design-system", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777999983, + "narHash": "sha256-D6W7oC80cT7pg95kSpxO0jtoVj1hG9A151CciCSZaBc=", + "owner": "logos-co", + "repo": "logos-design-system", + "rev": "f6e95ae24ede3871c380f8250feffd17d173f5a4", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-design-system", + "type": "github" + } + }, + "logos-design-system_5": { + "inputs": { + "logos-nix": "logos-nix_194", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-design-system", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777999983, + "narHash": "sha256-D6W7oC80cT7pg95kSpxO0jtoVj1hG9A151CciCSZaBc=", + "owner": "logos-co", + "repo": "logos-design-system", + "rev": "f6e95ae24ede3871c380f8250feffd17d173f5a4", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-design-system", + "type": "github" + } + }, + "logos-design-system_6": { + "inputs": { + "logos-nix": "logos-nix_227", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-design-system", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778224414, + "narHash": "sha256-QSSCCE4eKGiIS5PqHDfk9Lj4VFmeCh18khbFWrGxvvc=", + "owner": "logos-co", + "repo": "logos-design-system", + "rev": "6176f0d7a5dfeb64a7f0f98e7ca2bf71a4804772", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-design-system", + "type": "github" + } + }, + "logos-design-system_7": { + "inputs": { + "logos-nix": "logos-nix_238", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-design-system", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777999983, + "narHash": "sha256-D6W7oC80cT7pg95kSpxO0jtoVj1hG9A151CciCSZaBc=", + "owner": "logos-co", + "repo": "logos-design-system", + "rev": "f6e95ae24ede3871c380f8250feffd17d173f5a4", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-design-system", + "type": "github" + } + }, + "logos-execution-zone": { + "inputs": { + "crane": "crane", + "logos-blockchain-circuits": "logos-blockchain-circuits", + "logos-liblogos": "logos-liblogos", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "nixpkgs" + ], + "rust-overlay": "rust-overlay" + }, + "locked": { + "lastModified": 1778768658, + "narHash": "sha256-2HGdz+l5DsWO0fOTvfgR7N/i/tYkp64SOyG9Dw7nbrA=", + "owner": "logos-blockchain", + "repo": "logos-execution-zone", + "rev": "41fa494e32dbde1699cc6da007a35cac5a2331d5", + "type": "github" + }, + "original": { + "owner": "logos-blockchain", + "ref": "main", + "repo": "logos-execution-zone", + "type": "github" + } + }, + "logos-liblogos": { + "inputs": { + "logos-capability-module": "logos-capability-module", + "logos-cpp-sdk": "logos-cpp-sdk_5", + "logos-module": "logos-module_7", + "logos-nix": "logos-nix_45", + "logos-package-manager": "logos-package-manager_3", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-nix", + "nixpkgs" + ], + "process-stats": "process-stats_2" + }, + "locked": { + "lastModified": 1778263223, + "narHash": "sha256-LvenATy+0mzX2jKp+4KxB5Uuky3KXnHYy8FX18qSLHs=", + "owner": "logos-co", + "repo": "logos-liblogos", + "rev": "2321de0365249e7223cac9ea2ac321fa0a2495c7", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-liblogos", + "type": "github" + } + }, + "logos-liblogos_2": { + "inputs": { + "logos-capability-module": "logos-capability-module_3", + "logos-cpp-sdk": "logos-cpp-sdk_4", + "logos-module": "logos-module_6", + "logos-nix": "logos-nix_17", + "logos-package-manager": "logos-package-manager", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ], + "process-stats": "process-stats" + }, + "locked": { + "lastModified": 1778168472, + "narHash": "sha256-Td7Um8HOx4hG6k8ky3+bTsmgA9bgspI3eDs9LzVWv2s=", + "owner": "logos-co", + "repo": "logos-liblogos", + "rev": "94af58c819038e0eb5c2003f69d3260d964aa8f3", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-liblogos", + "type": "github" + } + }, + "logos-liblogos_3": { + "inputs": { + "logos-capability-module": "logos-capability-module_6", + "logos-cpp-sdk": "logos-cpp-sdk_10", + "logos-module": "logos-module_16", + "logos-nix": "logos-nix_77", + "logos-package-manager": "logos-package-manager_4", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ], + "process-stats": "process-stats_3" + }, + "locked": { + "lastModified": 1778168472, + "narHash": "sha256-Td7Um8HOx4hG6k8ky3+bTsmgA9bgspI3eDs9LzVWv2s=", + "owner": "logos-co", + "repo": "logos-liblogos", + "rev": "94af58c819038e0eb5c2003f69d3260d964aa8f3", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-liblogos", + "type": "github" + } + }, + "logos-liblogos_4": { + "inputs": { + "logos-capability-module": "logos-capability-module_7", + "logos-cpp-sdk": "logos-cpp-sdk_16", + "logos-module": "logos-module_23", + "logos-nix": "logos-nix_149", + "logos-package-manager": "logos-package-manager_8", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-nix", + "nixpkgs" + ], + "process-stats": "process-stats_5" + }, + "locked": { + "lastModified": 1779724404, + "narHash": "sha256-HKgY1cbcm1BgFau0KBJba0pKGNZ/7oJMcqJMhPDQ20Q=", + "owner": "logos-co", + "repo": "logos-liblogos", + "rev": "be7c8fd8e89e9c7506421735e18dc85bde0c1cb2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-liblogos", + "type": "github" + } + }, + "logos-liblogos_5": { + "inputs": { + "logos-capability-module": "logos-capability-module_9", + "logos-cpp-sdk": "logos-cpp-sdk_15", + "logos-module": "logos-module_22", + "logos-nix": "logos-nix_121", + "logos-package-manager": "logos-package-manager_6", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ], + "process-stats": "process-stats_4" + }, + "locked": { + "lastModified": 1778168472, + "narHash": "sha256-Td7Um8HOx4hG6k8ky3+bTsmgA9bgspI3eDs9LzVWv2s=", + "owner": "logos-co", + "repo": "logos-liblogos", + "rev": "94af58c819038e0eb5c2003f69d3260d964aa8f3", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-liblogos", + "type": "github" + } + }, + "logos-liblogos_6": { + "inputs": { + "logos-capability-module": "logos-capability-module_12", + "logos-cpp-sdk": "logos-cpp-sdk_22", + "logos-module": "logos-module_32", + "logos-nix": "logos-nix_200", + "logos-package-manager": "logos-package-manager_10", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ], + "process-stats": "process-stats_6" + }, + "locked": { + "lastModified": 1778168472, + "narHash": "sha256-Td7Um8HOx4hG6k8ky3+bTsmgA9bgspI3eDs9LzVWv2s=", + "owner": "logos-co", + "repo": "logos-liblogos", + "rev": "94af58c819038e0eb5c2003f69d3260d964aa8f3", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-liblogos", + "type": "github" + } + }, + "logos-liblogos_7": { + "inputs": { + "logos-capability-module": "logos-capability-module_13", + "logos-cpp-sdk": "logos-cpp-sdk_28", + "logos-module": "logos-module_39", + "logos-nix": "logos-nix_272", + "logos-package-manager": "logos-package-manager_14", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-nix", + "nixpkgs" + ], + "process-stats": "process-stats_8" + }, + "locked": { + "lastModified": 1779724404, + "narHash": "sha256-HKgY1cbcm1BgFau0KBJba0pKGNZ/7oJMcqJMhPDQ20Q=", + "owner": "logos-co", + "repo": "logos-liblogos", + "rev": "be7c8fd8e89e9c7506421735e18dc85bde0c1cb2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-liblogos", + "type": "github" + } + }, + "logos-liblogos_8": { + "inputs": { + "logos-capability-module": "logos-capability-module_15", + "logos-cpp-sdk": "logos-cpp-sdk_27", + "logos-module": "logos-module_38", + "logos-nix": "logos-nix_244", + "logos-package-manager": "logos-package-manager_12", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ], + "process-stats": "process-stats_7" + }, + "locked": { + "lastModified": 1778168472, + "narHash": "sha256-Td7Um8HOx4hG6k8ky3+bTsmgA9bgspI3eDs9LzVWv2s=", + "owner": "logos-co", + "repo": "logos-liblogos", + "rev": "94af58c819038e0eb5c2003f69d3260d964aa8f3", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-liblogos", + "type": "github" + } + }, + "logos-lidl": { + "inputs": { + "logos-nix": [ + "lez_indexer_module", + "logos-module-builder", + "logos-cpp-sdk", + "logos-nix" + ], + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-cpp-sdk", + "logos-lidl", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1781653473, + "narHash": "sha256-8l2tE2K5nY1grcFROQHC1By1jVI0NrfkS3k2v2y6R2I=", + "owner": "logos-co", + "repo": "logos-lidl", + "rev": "8c95d4f0cc6a10195c70ed71e85b7a4cddca02f8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-lidl", + "type": "github" + } + }, + "logos-lidl_2": { + "inputs": { + "logos-nix": [ + "lez_indexer_module", + "logos-module-builder", + "logos-qt-sdk", + "logos-nix" + ], + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-qt-sdk", + "logos-lidl", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1781653473, + "narHash": "sha256-8l2tE2K5nY1grcFROQHC1By1jVI0NrfkS3k2v2y6R2I=", + "owner": "logos-co", + "repo": "logos-lidl", + "rev": "8c95d4f0cc6a10195c70ed71e85b7a4cddca02f8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-lidl", + "type": "github" + } + }, + "logos-lidl_3": { + "inputs": { + "logos-nix": [ + "logos-module-builder", + "logos-cpp-sdk", + "logos-nix" + ], + "nixpkgs": [ + "logos-module-builder", + "logos-cpp-sdk", + "logos-lidl", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1781653473, + "narHash": "sha256-8l2tE2K5nY1grcFROQHC1By1jVI0NrfkS3k2v2y6R2I=", + "owner": "logos-co", + "repo": "logos-lidl", + "rev": "8c95d4f0cc6a10195c70ed71e85b7a4cddca02f8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-lidl", + "type": "github" + } + }, + "logos-lidl_4": { + "inputs": { + "logos-nix": [ + "logos-module-builder", + "logos-qt-sdk", + "logos-nix" + ], + "nixpkgs": [ + "logos-module-builder", + "logos-qt-sdk", + "logos-lidl", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1781653473, + "narHash": "sha256-8l2tE2K5nY1grcFROQHC1By1jVI0NrfkS3k2v2y6R2I=", + "owner": "logos-co", + "repo": "logos-lidl", + "rev": "8c95d4f0cc6a10195c70ed71e85b7a4cddca02f8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-lidl", + "type": "github" + } + }, + "logos-module": { + "inputs": { + "logos-nix": "logos-nix_2", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776369033, + "narHash": "sha256-ehePoUEd/u3Ng0TvCmjocXYJWWH6P61PA7tNpgV59lo=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "194778491ef4dd36967ac40cc2fec6b8a8b1d660", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module-builder": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk", + "logos-module": "logos-module", + "logos-nix": "logos-nix_3", + "logos-plugin-core": "logos-plugin-core", + "logos-plugin-qt": "logos-plugin-qt", + "logos-standalone-app": "logos-standalone-app", + "logos-test-framework": "logos-test-framework", + "nix-bundle-lgx": "nix-bundle-lgx_2", + "nix-bundle-logos-module-install": "nix-bundle-logos-module-install", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778177522, + "narHash": "sha256-sUGiatEU51cyZeATc3P/8b0myrAkCKavePpFwtkKxAI=", + "owner": "logos-co", + "repo": "logos-module-builder", + "rev": "b0e41abf3e14c0534b41933c5f8e3fc697319037", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module-builder", + "type": "github" + } + }, + "logos-module-builder_2": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk_6", + "logos-module": "logos-module_8", + "logos-nix": "logos-nix_54", + "logos-plugin-core": "logos-plugin-core_2", + "logos-plugin-qt": "logos-plugin-qt_2", + "logos-protocol": "logos-protocol", + "logos-qt-sdk": "logos-qt-sdk", + "logos-rust-sdk": "logos-rust-sdk", + "logos-standalone-app": "logos-standalone-app_2", + "logos-test-framework": "logos-test-framework_4", + "nix-bundle-lgx": "nix-bundle-lgx_11", + "nix-bundle-logos-module-install": "nix-bundle-logos-module-install_4", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1781659847, + "narHash": "sha256-5x7MyWMBSYqYWHNl9ttxxudzNkiKeHvPeseBVGDIIv4=", + "owner": "logos-co", + "repo": "logos-module-builder", + "rev": "021013458d87ba871e1d80ff2e70d8dda331606d", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module-builder", + "type": "github" + } + }, + "logos-module-builder_3": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk_7", + "logos-module": "logos-module_11", + "logos-nix": "logos-nix_63", + "logos-plugin-core": "logos-plugin-core_3", + "logos-plugin-qt": "logos-plugin-qt_3", + "logos-standalone-app": "logos-standalone-app_3", + "logos-test-framework": "logos-test-framework_2", + "nix-bundle-lgx": "nix-bundle-lgx_5", + "nix-bundle-logos-module-install": "nix-bundle-logos-module-install_2", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778177522, + "narHash": "sha256-sUGiatEU51cyZeATc3P/8b0myrAkCKavePpFwtkKxAI=", + "owner": "logos-co", + "repo": "logos-module-builder", + "rev": "b0e41abf3e14c0534b41933c5f8e3fc697319037", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module-builder", + "type": "github" + } + }, + "logos-module-builder_4": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk_12", + "logos-module": "logos-module_17", + "logos-nix": "logos-nix_107", + "logos-plugin-core": "logos-plugin-core_4", + "logos-plugin-qt": "logos-plugin-qt_4", + "logos-standalone-app": "logos-standalone-app_4", + "logos-test-framework": "logos-test-framework_3", + "nix-bundle-lgx": "nix-bundle-lgx_8", + "nix-bundle-logos-module-install": "nix-bundle-logos-module-install_3", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778177522, + "narHash": "sha256-sUGiatEU51cyZeATc3P/8b0myrAkCKavePpFwtkKxAI=", + "owner": "logos-co", + "repo": "logos-module-builder", + "rev": "b0e41abf3e14c0534b41933c5f8e3fc697319037", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module-builder", + "type": "github" + } + }, + "logos-module-builder_5": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk_18", + "logos-module": "logos-module_24", + "logos-nix": "logos-nix_177", + "logos-plugin-core": "logos-plugin-core_5", + "logos-plugin-qt": "logos-plugin-qt_5", + "logos-protocol": "logos-protocol_3", + "logos-qt-sdk": "logos-qt-sdk_3", + "logos-rust-sdk": "logos-rust-sdk_2", + "logos-standalone-app": "logos-standalone-app_5", + "logos-test-framework": "logos-test-framework_7", + "nix-bundle-lgx": "nix-bundle-lgx_20", + "nix-bundle-logos-module-install": "nix-bundle-logos-module-install_7", + "nixpkgs": [ + "logos-module-builder", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1781659847, + "narHash": "sha256-5x7MyWMBSYqYWHNl9ttxxudzNkiKeHvPeseBVGDIIv4=", + "owner": "logos-co", + "repo": "logos-module-builder", + "rev": "021013458d87ba871e1d80ff2e70d8dda331606d", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module-builder", + "type": "github" + } + }, + "logos-module-builder_6": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk_19", + "logos-module": "logos-module_27", + "logos-nix": "logos-nix_186", + "logos-plugin-core": "logos-plugin-core_6", + "logos-plugin-qt": "logos-plugin-qt_6", + "logos-standalone-app": "logos-standalone-app_6", + "logos-test-framework": "logos-test-framework_5", + "nix-bundle-lgx": "nix-bundle-lgx_14", + "nix-bundle-logos-module-install": "nix-bundle-logos-module-install_5", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778177522, + "narHash": "sha256-sUGiatEU51cyZeATc3P/8b0myrAkCKavePpFwtkKxAI=", + "owner": "logos-co", + "repo": "logos-module-builder", + "rev": "b0e41abf3e14c0534b41933c5f8e3fc697319037", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module-builder", + "type": "github" + } + }, + "logos-module-builder_7": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk_24", + "logos-module": "logos-module_33", + "logos-nix": "logos-nix_230", + "logos-plugin-core": "logos-plugin-core_7", + "logos-plugin-qt": "logos-plugin-qt_7", + "logos-standalone-app": "logos-standalone-app_7", + "logos-test-framework": "logos-test-framework_6", + "nix-bundle-lgx": "nix-bundle-lgx_17", + "nix-bundle-logos-module-install": "nix-bundle-logos-module-install_6", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778177522, + "narHash": "sha256-sUGiatEU51cyZeATc3P/8b0myrAkCKavePpFwtkKxAI=", + "owner": "logos-co", + "repo": "logos-module-builder", + "rev": "b0e41abf3e14c0534b41933c5f8e3fc697319037", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module-builder", + "type": "github" + } + }, + "logos-module_10": { + "inputs": { + "logos-nix": "logos-nix_57", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-plugin-qt", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776369033, + "narHash": "sha256-ehePoUEd/u3Ng0TvCmjocXYJWWH6P61PA7tNpgV59lo=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "194778491ef4dd36967ac40cc2fec6b8a8b1d660", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_11": { + "inputs": { + "logos-nix": "logos-nix_62", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776369033, + "narHash": "sha256-ehePoUEd/u3Ng0TvCmjocXYJWWH6P61PA7tNpgV59lo=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "194778491ef4dd36967ac40cc2fec6b8a8b1d660", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_12": { + "inputs": { + "logos-nix": "logos-nix_64", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-plugin-core", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776369033, + "narHash": "sha256-ehePoUEd/u3Ng0TvCmjocXYJWWH6P61PA7tNpgV59lo=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "194778491ef4dd36967ac40cc2fec6b8a8b1d660", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_13": { + "inputs": { + "logos-nix": "logos-nix_66", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-plugin-qt", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776369033, + "narHash": "sha256-ehePoUEd/u3Ng0TvCmjocXYJWWH6P61PA7tNpgV59lo=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "194778491ef4dd36967ac40cc2fec6b8a8b1d660", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_14": { + "inputs": { + "logos-nix": "logos-nix_68", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773963329, + "narHash": "sha256-zdvDHoYWQDse0eJ/UCKIJcfuYJ8NMgl6QfxRcyDEovI=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "ac5a4f06ea94b01dd9c5fbb9ed4f20620beab88d", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_15": { + "inputs": { + "logos-nix": "logos-nix_73", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773963329, + "narHash": "sha256-zdvDHoYWQDse0eJ/UCKIJcfuYJ8NMgl6QfxRcyDEovI=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "ac5a4f06ea94b01dd9c5fbb9ed4f20620beab88d", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_16": { + "inputs": { + "logos-nix": "logos-nix_76", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776369033, + "narHash": "sha256-ehePoUEd/u3Ng0TvCmjocXYJWWH6P61PA7tNpgV59lo=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "194778491ef4dd36967ac40cc2fec6b8a8b1d660", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_17": { + "inputs": { + "logos-nix": "logos-nix_106", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776369033, + "narHash": "sha256-ehePoUEd/u3Ng0TvCmjocXYJWWH6P61PA7tNpgV59lo=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "194778491ef4dd36967ac40cc2fec6b8a8b1d660", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_18": { + "inputs": { + "logos-nix": "logos-nix_108", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-plugin-core", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776369033, + "narHash": "sha256-ehePoUEd/u3Ng0TvCmjocXYJWWH6P61PA7tNpgV59lo=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "194778491ef4dd36967ac40cc2fec6b8a8b1d660", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_19": { + "inputs": { + "logos-nix": "logos-nix_110", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-plugin-qt", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776369033, + "narHash": "sha256-ehePoUEd/u3Ng0TvCmjocXYJWWH6P61PA7tNpgV59lo=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "194778491ef4dd36967ac40cc2fec6b8a8b1d660", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_2": { + "inputs": { + "logos-nix": "logos-nix_4", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-plugin-core", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776369033, + "narHash": "sha256-ehePoUEd/u3Ng0TvCmjocXYJWWH6P61PA7tNpgV59lo=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "194778491ef4dd36967ac40cc2fec6b8a8b1d660", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_20": { + "inputs": { + "logos-nix": "logos-nix_112", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773963329, + "narHash": "sha256-zdvDHoYWQDse0eJ/UCKIJcfuYJ8NMgl6QfxRcyDEovI=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "ac5a4f06ea94b01dd9c5fbb9ed4f20620beab88d", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_21": { + "inputs": { + "logos-nix": "logos-nix_117", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773963329, + "narHash": "sha256-zdvDHoYWQDse0eJ/UCKIJcfuYJ8NMgl6QfxRcyDEovI=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "ac5a4f06ea94b01dd9c5fbb9ed4f20620beab88d", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_22": { + "inputs": { + "logos-nix": "logos-nix_120", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776369033, + "narHash": "sha256-ehePoUEd/u3Ng0TvCmjocXYJWWH6P61PA7tNpgV59lo=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "194778491ef4dd36967ac40cc2fec6b8a8b1d660", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_23": { + "inputs": { + "logos-nix": "logos-nix_148", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776369033, + "narHash": "sha256-ehePoUEd/u3Ng0TvCmjocXYJWWH6P61PA7tNpgV59lo=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "194778491ef4dd36967ac40cc2fec6b8a8b1d660", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_24": { + "inputs": { + "logos-nix": "logos-nix_176", + "nixpkgs": [ + "logos-module-builder", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1781311603, + "narHash": "sha256-Ym3i52f5MWuZy8Qas3+zfoxz+mxQUsyW+Qol1no6kDs=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "a3e288a71d6f79445db598b0ffcca2ee435596b9", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_25": { + "inputs": { + "logos-nix": "logos-nix_178", + "nixpkgs": [ + "logos-module-builder", + "logos-plugin-core", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776369033, + "narHash": "sha256-ehePoUEd/u3Ng0TvCmjocXYJWWH6P61PA7tNpgV59lo=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "194778491ef4dd36967ac40cc2fec6b8a8b1d660", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_26": { + "inputs": { + "logos-nix": "logos-nix_180", + "nixpkgs": [ + "logos-module-builder", + "logos-plugin-qt", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776369033, + "narHash": "sha256-ehePoUEd/u3Ng0TvCmjocXYJWWH6P61PA7tNpgV59lo=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "194778491ef4dd36967ac40cc2fec6b8a8b1d660", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_27": { + "inputs": { + "logos-nix": "logos-nix_185", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776369033, + "narHash": "sha256-ehePoUEd/u3Ng0TvCmjocXYJWWH6P61PA7tNpgV59lo=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "194778491ef4dd36967ac40cc2fec6b8a8b1d660", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_28": { + "inputs": { + "logos-nix": "logos-nix_187", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-plugin-core", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776369033, + "narHash": "sha256-ehePoUEd/u3Ng0TvCmjocXYJWWH6P61PA7tNpgV59lo=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "194778491ef4dd36967ac40cc2fec6b8a8b1d660", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_29": { + "inputs": { + "logos-nix": "logos-nix_189", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-plugin-qt", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776369033, + "narHash": "sha256-ehePoUEd/u3Ng0TvCmjocXYJWWH6P61PA7tNpgV59lo=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "194778491ef4dd36967ac40cc2fec6b8a8b1d660", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_3": { + "inputs": { + "logos-nix": "logos-nix_6", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-plugin-qt", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776369033, + "narHash": "sha256-ehePoUEd/u3Ng0TvCmjocXYJWWH6P61PA7tNpgV59lo=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "194778491ef4dd36967ac40cc2fec6b8a8b1d660", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_30": { + "inputs": { + "logos-nix": "logos-nix_191", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773963329, + "narHash": "sha256-zdvDHoYWQDse0eJ/UCKIJcfuYJ8NMgl6QfxRcyDEovI=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "ac5a4f06ea94b01dd9c5fbb9ed4f20620beab88d", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_31": { + "inputs": { + "logos-nix": "logos-nix_196", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773963329, + "narHash": "sha256-zdvDHoYWQDse0eJ/UCKIJcfuYJ8NMgl6QfxRcyDEovI=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "ac5a4f06ea94b01dd9c5fbb9ed4f20620beab88d", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_32": { + "inputs": { + "logos-nix": "logos-nix_199", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776369033, + "narHash": "sha256-ehePoUEd/u3Ng0TvCmjocXYJWWH6P61PA7tNpgV59lo=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "194778491ef4dd36967ac40cc2fec6b8a8b1d660", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_33": { + "inputs": { + "logos-nix": "logos-nix_229", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776369033, + "narHash": "sha256-ehePoUEd/u3Ng0TvCmjocXYJWWH6P61PA7tNpgV59lo=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "194778491ef4dd36967ac40cc2fec6b8a8b1d660", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_34": { + "inputs": { + "logos-nix": "logos-nix_231", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-plugin-core", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776369033, + "narHash": "sha256-ehePoUEd/u3Ng0TvCmjocXYJWWH6P61PA7tNpgV59lo=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "194778491ef4dd36967ac40cc2fec6b8a8b1d660", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_35": { + "inputs": { + "logos-nix": "logos-nix_233", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-plugin-qt", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776369033, + "narHash": "sha256-ehePoUEd/u3Ng0TvCmjocXYJWWH6P61PA7tNpgV59lo=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "194778491ef4dd36967ac40cc2fec6b8a8b1d660", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_36": { + "inputs": { + "logos-nix": "logos-nix_235", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773963329, + "narHash": "sha256-zdvDHoYWQDse0eJ/UCKIJcfuYJ8NMgl6QfxRcyDEovI=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "ac5a4f06ea94b01dd9c5fbb9ed4f20620beab88d", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_37": { + "inputs": { + "logos-nix": "logos-nix_240", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773963329, + "narHash": "sha256-zdvDHoYWQDse0eJ/UCKIJcfuYJ8NMgl6QfxRcyDEovI=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "ac5a4f06ea94b01dd9c5fbb9ed4f20620beab88d", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_38": { + "inputs": { + "logos-nix": "logos-nix_243", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776369033, + "narHash": "sha256-ehePoUEd/u3Ng0TvCmjocXYJWWH6P61PA7tNpgV59lo=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "194778491ef4dd36967ac40cc2fec6b8a8b1d660", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_39": { + "inputs": { + "logos-nix": "logos-nix_271", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776369033, + "narHash": "sha256-ehePoUEd/u3Ng0TvCmjocXYJWWH6P61PA7tNpgV59lo=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "194778491ef4dd36967ac40cc2fec6b8a8b1d660", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_4": { + "inputs": { + "logos-nix": "logos-nix_8", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773963329, + "narHash": "sha256-zdvDHoYWQDse0eJ/UCKIJcfuYJ8NMgl6QfxRcyDEovI=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "ac5a4f06ea94b01dd9c5fbb9ed4f20620beab88d", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_5": { + "inputs": { + "logos-nix": "logos-nix_13", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773963329, + "narHash": "sha256-zdvDHoYWQDse0eJ/UCKIJcfuYJ8NMgl6QfxRcyDEovI=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "ac5a4f06ea94b01dd9c5fbb9ed4f20620beab88d", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_6": { + "inputs": { + "logos-nix": "logos-nix_16", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776369033, + "narHash": "sha256-ehePoUEd/u3Ng0TvCmjocXYJWWH6P61PA7tNpgV59lo=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "194778491ef4dd36967ac40cc2fec6b8a8b1d660", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_7": { + "inputs": { + "logos-nix": "logos-nix_44", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776369033, + "narHash": "sha256-ehePoUEd/u3Ng0TvCmjocXYJWWH6P61PA7tNpgV59lo=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "194778491ef4dd36967ac40cc2fec6b8a8b1d660", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_8": { + "inputs": { + "logos-nix": "logos-nix_53", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1781311603, + "narHash": "sha256-Ym3i52f5MWuZy8Qas3+zfoxz+mxQUsyW+Qol1no6kDs=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "a3e288a71d6f79445db598b0ffcca2ee435596b9", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-module_9": { + "inputs": { + "logos-nix": "logos-nix_55", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-plugin-core", + "logos-module", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776369033, + "narHash": "sha256-ehePoUEd/u3Ng0TvCmjocXYJWWH6P61PA7tNpgV59lo=", + "owner": "logos-co", + "repo": "logos-module", + "rev": "194778491ef4dd36967ac40cc2fec6b8a8b1d660", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-module", + "type": "github" + } + }, + "logos-nix": { + "inputs": { + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_10": { + "inputs": { + "nixpkgs": "nixpkgs_11" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_100": { + "inputs": { + "nixpkgs": "nixpkgs_101" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_101": { + "inputs": { + "nixpkgs": "nixpkgs_102" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_102": { + "inputs": { + "nixpkgs": "nixpkgs_103" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_103": { + "inputs": { + "nixpkgs": "nixpkgs_104" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_104": { + "inputs": { + "nixpkgs": "nixpkgs_105" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_105": { + "inputs": { + "nixpkgs": "nixpkgs_106" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_106": { + "inputs": { + "nixpkgs": "nixpkgs_107" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_107": { + "inputs": { + "nixpkgs": "nixpkgs_108" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_108": { + "inputs": { + "nixpkgs": "nixpkgs_109" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_109": { + "inputs": { + "nixpkgs": "nixpkgs_110" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_11": { + "inputs": { + "nixpkgs": "nixpkgs_12" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_110": { + "inputs": { + "nixpkgs": "nixpkgs_111" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_111": { + "inputs": { + "nixpkgs": "nixpkgs_112" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_112": { + "inputs": { + "nixpkgs": "nixpkgs_113" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_113": { + "inputs": { + "nixpkgs": "nixpkgs_114" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_114": { + "inputs": { + "nixpkgs": "nixpkgs_115" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_115": { + "inputs": { + "nixpkgs": "nixpkgs_116" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_116": { + "inputs": { + "nixpkgs": "nixpkgs_117" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_117": { + "inputs": { + "nixpkgs": "nixpkgs_118" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_118": { + "inputs": { + "nixpkgs": "nixpkgs_119" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_119": { + "inputs": { + "nixpkgs": "nixpkgs_120" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_12": { + "inputs": { + "nixpkgs": "nixpkgs_13" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_120": { + "inputs": { + "nixpkgs": "nixpkgs_121" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_121": { + "inputs": { + "nixpkgs": "nixpkgs_122" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_122": { + "inputs": { + "nixpkgs": "nixpkgs_123" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_123": { + "inputs": { + "nixpkgs": "nixpkgs_124" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_124": { + "inputs": { + "nixpkgs": "nixpkgs_125" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_125": { + "inputs": { + "nixpkgs": "nixpkgs_126" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_126": { + "inputs": { + "nixpkgs": "nixpkgs_127" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_127": { + "inputs": { + "nixpkgs": "nixpkgs_128" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_128": { + "inputs": { + "nixpkgs": "nixpkgs_129" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_129": { + "inputs": { + "nixpkgs": "nixpkgs_130" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_13": { + "inputs": { + "nixpkgs": "nixpkgs_14" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_130": { + "inputs": { + "nixpkgs": "nixpkgs_131" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_131": { + "inputs": { + "nixpkgs": "nixpkgs_132" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_132": { + "inputs": { + "nixpkgs": "nixpkgs_133" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_133": { + "inputs": { + "nixpkgs": "nixpkgs_134" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_134": { + "inputs": { + "nixpkgs": "nixpkgs_135" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_135": { + "inputs": { + "nixpkgs": "nixpkgs_136" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_136": { + "inputs": { + "nixpkgs": "nixpkgs_137" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_137": { + "inputs": { + "nixpkgs": "nixpkgs_138" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_138": { + "inputs": { + "nixpkgs": "nixpkgs_139" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_139": { + "inputs": { + "nixpkgs": "nixpkgs_140" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_14": { + "inputs": { + "nixpkgs": "nixpkgs_15" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_140": { + "inputs": { + "nixpkgs": "nixpkgs_141" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_141": { + "inputs": { + "nixpkgs": "nixpkgs_142" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_142": { + "inputs": { + "nixpkgs": "nixpkgs_143" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_143": { + "inputs": { + "nixpkgs": "nixpkgs_144" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_144": { + "inputs": { + "nixpkgs": "nixpkgs_145" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_145": { + "inputs": { + "nixpkgs": "nixpkgs_146" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_146": { + "inputs": { + "nixpkgs": "nixpkgs_147" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_147": { + "inputs": { + "nixpkgs": "nixpkgs_148" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_148": { + "inputs": { + "nixpkgs": "nixpkgs_149" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_149": { + "inputs": { + "nixpkgs": "nixpkgs_150" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_15": { + "inputs": { + "nixpkgs": "nixpkgs_16" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_150": { + "inputs": { + "nixpkgs": "nixpkgs_151" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_151": { + "inputs": { + "nixpkgs": "nixpkgs_152" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_152": { + "inputs": { + "nixpkgs": "nixpkgs_153" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_153": { + "inputs": { + "nixpkgs": "nixpkgs_154" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_154": { + "inputs": { + "nixpkgs": "nixpkgs_155" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_155": { + "inputs": { + "nixpkgs": "nixpkgs_156" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_156": { + "inputs": { + "nixpkgs": "nixpkgs_157" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_157": { + "inputs": { + "nixpkgs": "nixpkgs_158" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_158": { + "inputs": { + "nixpkgs": "nixpkgs_159" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_159": { + "inputs": { + "nixpkgs": "nixpkgs_160" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_16": { + "inputs": { + "nixpkgs": "nixpkgs_17" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_160": { + "inputs": { + "nixpkgs": "nixpkgs_161" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_161": { + "inputs": { + "nixpkgs": "nixpkgs_162" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_162": { + "inputs": { + "nixpkgs": "nixpkgs_163" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_163": { + "inputs": { + "nixpkgs": "nixpkgs_164" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_164": { + "inputs": { + "nixpkgs": "nixpkgs_165" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_165": { + "inputs": { + "nixpkgs": "nixpkgs_166" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_166": { + "inputs": { + "nixpkgs": "nixpkgs_167" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_167": { + "inputs": { + "nixpkgs": "nixpkgs_168" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_168": { + "inputs": { + "nixpkgs": "nixpkgs_169" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_169": { + "inputs": { + "nixpkgs": "nixpkgs_170" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_17": { + "inputs": { + "nixpkgs": "nixpkgs_18" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_170": { + "inputs": { + "nixpkgs": "nixpkgs_171" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_171": { + "inputs": { + "nixpkgs": "nixpkgs_172" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_172": { + "inputs": { + "nixpkgs": "nixpkgs_173" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_173": { + "inputs": { + "nixpkgs": "nixpkgs_174" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_174": { + "inputs": { + "nixpkgs": "nixpkgs_175" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_175": { + "inputs": { + "nixpkgs": "nixpkgs_176" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_176": { + "inputs": { + "nixpkgs": "nixpkgs_177" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_177": { + "inputs": { + "nixpkgs": "nixpkgs_178" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_178": { + "inputs": { + "nixpkgs": "nixpkgs_179" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_179": { + "inputs": { + "nixpkgs": "nixpkgs_180" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_18": { + "inputs": { + "nixpkgs": "nixpkgs_19" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_180": { + "inputs": { + "nixpkgs": "nixpkgs_181" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_181": { + "inputs": { + "nixpkgs": "nixpkgs_182" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_182": { + "inputs": { + "nixpkgs": "nixpkgs_183" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_183": { + "inputs": { + "nixpkgs": "nixpkgs_184" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_184": { + "inputs": { + "nixpkgs": "nixpkgs_185" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_185": { + "inputs": { + "nixpkgs": "nixpkgs_186" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_186": { + "inputs": { + "nixpkgs": "nixpkgs_187" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_187": { + "inputs": { + "nixpkgs": "nixpkgs_188" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_188": { + "inputs": { + "nixpkgs": "nixpkgs_189" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_189": { + "inputs": { + "nixpkgs": "nixpkgs_190" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_19": { + "inputs": { + "nixpkgs": "nixpkgs_20" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_190": { + "inputs": { + "nixpkgs": "nixpkgs_191" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_191": { + "inputs": { + "nixpkgs": "nixpkgs_192" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_192": { + "inputs": { + "nixpkgs": "nixpkgs_193" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_193": { + "inputs": { + "nixpkgs": "nixpkgs_194" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_194": { + "inputs": { + "nixpkgs": "nixpkgs_195" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_195": { + "inputs": { + "nixpkgs": "nixpkgs_196" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_196": { + "inputs": { + "nixpkgs": "nixpkgs_197" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_197": { + "inputs": { + "nixpkgs": "nixpkgs_198" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_198": { + "inputs": { + "nixpkgs": "nixpkgs_199" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_199": { + "inputs": { + "nixpkgs": "nixpkgs_200" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_2": { + "inputs": { + "nixpkgs": "nixpkgs_3" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_20": { + "inputs": { + "nixpkgs": "nixpkgs_21" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_200": { + "inputs": { + "nixpkgs": "nixpkgs_201" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_201": { + "inputs": { + "nixpkgs": "nixpkgs_202" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_202": { + "inputs": { + "nixpkgs": "nixpkgs_203" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_203": { + "inputs": { + "nixpkgs": "nixpkgs_204" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_204": { + "inputs": { + "nixpkgs": "nixpkgs_205" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_205": { + "inputs": { + "nixpkgs": "nixpkgs_206" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_206": { + "inputs": { + "nixpkgs": "nixpkgs_207" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_207": { + "inputs": { + "nixpkgs": "nixpkgs_208" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_208": { + "inputs": { + "nixpkgs": "nixpkgs_209" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_209": { + "inputs": { + "nixpkgs": "nixpkgs_210" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_21": { + "inputs": { + "nixpkgs": "nixpkgs_22" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_210": { + "inputs": { + "nixpkgs": "nixpkgs_211" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_211": { + "inputs": { + "nixpkgs": "nixpkgs_212" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_212": { + "inputs": { + "nixpkgs": "nixpkgs_213" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_213": { + "inputs": { + "nixpkgs": "nixpkgs_214" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_214": { + "inputs": { + "nixpkgs": "nixpkgs_215" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_215": { + "inputs": { + "nixpkgs": "nixpkgs_216" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_216": { + "inputs": { + "nixpkgs": "nixpkgs_217" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_217": { + "inputs": { + "nixpkgs": "nixpkgs_218" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_218": { + "inputs": { + "nixpkgs": "nixpkgs_219" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_219": { + "inputs": { + "nixpkgs": "nixpkgs_220" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_22": { + "inputs": { + "nixpkgs": "nixpkgs_23" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_220": { + "inputs": { + "nixpkgs": "nixpkgs_221" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_221": { + "inputs": { + "nixpkgs": "nixpkgs_222" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_222": { + "inputs": { + "nixpkgs": "nixpkgs_223" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_223": { + "inputs": { + "nixpkgs": "nixpkgs_224" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_224": { + "inputs": { + "nixpkgs": "nixpkgs_225" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_225": { + "inputs": { + "nixpkgs": "nixpkgs_226" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_226": { + "inputs": { + "nixpkgs": "nixpkgs_227" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_227": { + "inputs": { + "nixpkgs": "nixpkgs_228" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_228": { + "inputs": { + "nixpkgs": "nixpkgs_229" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_229": { + "inputs": { + "nixpkgs": "nixpkgs_230" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_23": { + "inputs": { + "nixpkgs": "nixpkgs_24" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_230": { + "inputs": { + "nixpkgs": "nixpkgs_231" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_231": { + "inputs": { + "nixpkgs": "nixpkgs_232" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_232": { + "inputs": { + "nixpkgs": "nixpkgs_233" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_233": { + "inputs": { + "nixpkgs": "nixpkgs_234" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_234": { + "inputs": { + "nixpkgs": "nixpkgs_235" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_235": { + "inputs": { + "nixpkgs": "nixpkgs_236" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_236": { + "inputs": { + "nixpkgs": "nixpkgs_237" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_237": { + "inputs": { + "nixpkgs": "nixpkgs_238" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_238": { + "inputs": { + "nixpkgs": "nixpkgs_239" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_239": { + "inputs": { + "nixpkgs": "nixpkgs_240" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_24": { + "inputs": { + "nixpkgs": "nixpkgs_25" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_240": { + "inputs": { + "nixpkgs": "nixpkgs_241" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_241": { + "inputs": { + "nixpkgs": "nixpkgs_242" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_242": { + "inputs": { + "nixpkgs": "nixpkgs_243" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_243": { + "inputs": { + "nixpkgs": "nixpkgs_244" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_244": { + "inputs": { + "nixpkgs": "nixpkgs_245" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_245": { + "inputs": { + "nixpkgs": "nixpkgs_246" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_246": { + "inputs": { + "nixpkgs": "nixpkgs_247" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_247": { + "inputs": { + "nixpkgs": "nixpkgs_248" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_248": { + "inputs": { + "nixpkgs": "nixpkgs_249" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_249": { + "inputs": { + "nixpkgs": "nixpkgs_250" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_25": { + "inputs": { + "nixpkgs": "nixpkgs_26" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_250": { + "inputs": { + "nixpkgs": "nixpkgs_251" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_251": { + "inputs": { + "nixpkgs": "nixpkgs_252" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_252": { + "inputs": { + "nixpkgs": "nixpkgs_253" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_253": { + "inputs": { + "nixpkgs": "nixpkgs_254" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_254": { + "inputs": { + "nixpkgs": "nixpkgs_255" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_255": { + "inputs": { + "nixpkgs": "nixpkgs_256" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_256": { + "inputs": { + "nixpkgs": "nixpkgs_257" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_257": { + "inputs": { + "nixpkgs": "nixpkgs_258" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_258": { + "inputs": { + "nixpkgs": "nixpkgs_259" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_259": { + "inputs": { + "nixpkgs": "nixpkgs_260" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_26": { + "inputs": { + "nixpkgs": "nixpkgs_27" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_260": { + "inputs": { + "nixpkgs": "nixpkgs_261" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_261": { + "inputs": { + "nixpkgs": "nixpkgs_262" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_262": { + "inputs": { + "nixpkgs": "nixpkgs_263" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_263": { + "inputs": { + "nixpkgs": "nixpkgs_264" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_264": { + "inputs": { + "nixpkgs": "nixpkgs_265" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_265": { + "inputs": { + "nixpkgs": "nixpkgs_266" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_266": { + "inputs": { + "nixpkgs": "nixpkgs_267" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_267": { + "inputs": { + "nixpkgs": "nixpkgs_268" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_268": { + "inputs": { + "nixpkgs": "nixpkgs_269" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_269": { + "inputs": { + "nixpkgs": "nixpkgs_270" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_27": { + "inputs": { + "nixpkgs": "nixpkgs_28" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_270": { + "inputs": { + "nixpkgs": "nixpkgs_271" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_271": { + "inputs": { + "nixpkgs": "nixpkgs_272" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_272": { + "inputs": { + "nixpkgs": "nixpkgs_273" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_273": { + "inputs": { + "nixpkgs": "nixpkgs_274" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_274": { + "inputs": { + "nixpkgs": "nixpkgs_275" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_275": { + "inputs": { + "nixpkgs": "nixpkgs_276" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_276": { + "inputs": { + "nixpkgs": "nixpkgs_277" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_277": { + "inputs": { + "nixpkgs": "nixpkgs_278" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_278": { + "inputs": { + "nixpkgs": "nixpkgs_279" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_279": { + "inputs": { + "nixpkgs": "nixpkgs_280" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_28": { + "inputs": { + "nixpkgs": "nixpkgs_29" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_280": { + "inputs": { + "nixpkgs": "nixpkgs_281" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_281": { + "inputs": { + "nixpkgs": "nixpkgs_282" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_282": { + "inputs": { + "nixpkgs": "nixpkgs_283" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_283": { + "inputs": { + "nixpkgs": "nixpkgs_284" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_284": { + "inputs": { + "nixpkgs": "nixpkgs_285" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_285": { + "inputs": { + "nixpkgs": "nixpkgs_286" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_286": { + "inputs": { + "nixpkgs": "nixpkgs_287" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_287": { + "inputs": { + "nixpkgs": "nixpkgs_288" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_288": { + "inputs": { + "nixpkgs": "nixpkgs_289" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_289": { + "inputs": { + "nixpkgs": "nixpkgs_290" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_29": { + "inputs": { + "nixpkgs": "nixpkgs_30" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_290": { + "inputs": { + "nixpkgs": "nixpkgs_291" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_291": { + "inputs": { + "nixpkgs": "nixpkgs_292" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_292": { + "inputs": { + "nixpkgs": "nixpkgs_293" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_293": { + "inputs": { + "nixpkgs": "nixpkgs_294" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_294": { + "inputs": { + "nixpkgs": "nixpkgs_295" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_295": { + "inputs": { + "nixpkgs": "nixpkgs_296" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_296": { + "inputs": { + "nixpkgs": "nixpkgs_297" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_297": { + "inputs": { + "nixpkgs": "nixpkgs_298" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_3": { + "inputs": { + "nixpkgs": "nixpkgs_4" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_30": { + "inputs": { + "nixpkgs": "nixpkgs_31" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_31": { + "inputs": { + "nixpkgs": "nixpkgs_32" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_32": { + "inputs": { + "nixpkgs": "nixpkgs_33" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_33": { + "inputs": { + "nixpkgs": "nixpkgs_34" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_34": { + "inputs": { + "nixpkgs": "nixpkgs_35" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_35": { + "inputs": { + "nixpkgs": "nixpkgs_36" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_36": { + "inputs": { + "nixpkgs": "nixpkgs_37" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_37": { + "inputs": { + "nixpkgs": "nixpkgs_38" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_38": { + "inputs": { + "nixpkgs": "nixpkgs_39" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_39": { + "inputs": { + "nixpkgs": "nixpkgs_40" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_4": { + "inputs": { + "nixpkgs": "nixpkgs_5" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_40": { + "inputs": { + "nixpkgs": "nixpkgs_41" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_41": { + "inputs": { + "nixpkgs": "nixpkgs_42" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_42": { + "inputs": { + "nixpkgs": "nixpkgs_43" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_43": { + "inputs": { + "nixpkgs": "nixpkgs_44" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_44": { + "inputs": { + "nixpkgs": "nixpkgs_45" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_45": { + "inputs": { + "nixpkgs": "nixpkgs_46" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_46": { + "inputs": { + "nixpkgs": "nixpkgs_47" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_47": { + "inputs": { + "nixpkgs": "nixpkgs_48" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_48": { + "inputs": { + "nixpkgs": "nixpkgs_49" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_49": { + "inputs": { + "nixpkgs": "nixpkgs_50" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_5": { + "inputs": { + "nixpkgs": "nixpkgs_6" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_50": { + "inputs": { + "nixpkgs": "nixpkgs_51" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_51": { + "inputs": { + "nixpkgs": "nixpkgs_52" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_52": { + "inputs": { + "nixpkgs": "nixpkgs_53" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_53": { + "inputs": { + "nixpkgs": "nixpkgs_54" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_54": { + "inputs": { + "nixpkgs": "nixpkgs_55" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_55": { + "inputs": { + "nixpkgs": "nixpkgs_56" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_56": { + "inputs": { + "nixpkgs": "nixpkgs_57" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_57": { + "inputs": { + "nixpkgs": "nixpkgs_58" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_58": { + "inputs": { + "nixpkgs": "nixpkgs_59" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_59": { + "inputs": { + "nixpkgs": "nixpkgs_60" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_6": { + "inputs": { + "nixpkgs": "nixpkgs_7" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_60": { + "inputs": { + "nixpkgs": "nixpkgs_61" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_61": { + "inputs": { + "nixpkgs": "nixpkgs_62" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_62": { + "inputs": { + "nixpkgs": "nixpkgs_63" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_63": { + "inputs": { + "nixpkgs": "nixpkgs_64" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_64": { + "inputs": { + "nixpkgs": "nixpkgs_65" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_65": { + "inputs": { + "nixpkgs": "nixpkgs_66" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_66": { + "inputs": { + "nixpkgs": "nixpkgs_67" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_67": { + "inputs": { + "nixpkgs": "nixpkgs_68" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_68": { + "inputs": { + "nixpkgs": "nixpkgs_69" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_69": { + "inputs": { + "nixpkgs": "nixpkgs_70" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_7": { + "inputs": { + "nixpkgs": "nixpkgs_8" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_70": { + "inputs": { + "nixpkgs": "nixpkgs_71" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_71": { + "inputs": { + "nixpkgs": "nixpkgs_72" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_72": { + "inputs": { + "nixpkgs": "nixpkgs_73" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_73": { + "inputs": { + "nixpkgs": "nixpkgs_74" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_74": { + "inputs": { + "nixpkgs": "nixpkgs_75" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_75": { + "inputs": { + "nixpkgs": "nixpkgs_76" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_76": { + "inputs": { + "nixpkgs": "nixpkgs_77" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_77": { + "inputs": { + "nixpkgs": "nixpkgs_78" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_78": { + "inputs": { + "nixpkgs": "nixpkgs_79" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_79": { + "inputs": { + "nixpkgs": "nixpkgs_80" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_8": { + "inputs": { + "nixpkgs": "nixpkgs_9" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_80": { + "inputs": { + "nixpkgs": "nixpkgs_81" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_81": { + "inputs": { + "nixpkgs": "nixpkgs_82" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_82": { + "inputs": { + "nixpkgs": "nixpkgs_83" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_83": { + "inputs": { + "nixpkgs": "nixpkgs_84" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_84": { + "inputs": { + "nixpkgs": "nixpkgs_85" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_85": { + "inputs": { + "nixpkgs": "nixpkgs_86" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_86": { + "inputs": { + "nixpkgs": "nixpkgs_87" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_87": { + "inputs": { + "nixpkgs": "nixpkgs_88" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_88": { + "inputs": { + "nixpkgs": "nixpkgs_89" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_89": { + "inputs": { + "nixpkgs": "nixpkgs_90" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_9": { + "inputs": { + "nixpkgs": "nixpkgs_10" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_90": { + "inputs": { + "nixpkgs": "nixpkgs_91" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_91": { + "inputs": { + "nixpkgs": "nixpkgs_92" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_92": { + "inputs": { + "nixpkgs": "nixpkgs_93" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_93": { + "inputs": { + "nixpkgs": "nixpkgs_94" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_94": { + "inputs": { + "nixpkgs": "nixpkgs_95" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_95": { + "inputs": { + "nixpkgs": "nixpkgs_96" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_96": { + "inputs": { + "nixpkgs": "nixpkgs_97" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_97": { + "inputs": { + "nixpkgs": "nixpkgs_98" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_98": { + "inputs": { + "nixpkgs": "nixpkgs_99" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_99": { + "inputs": { + "nixpkgs": "nixpkgs_100" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-package": { + "inputs": { + "logos-nix": "logos-nix_19", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775835037, + "narHash": "sha256-Cti0DhkzyLQs98BSzcHWMLtGXpa3n+R+5upfSw6vKdQ=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "ff93a0df15ceab255f27687d22d962ea2737efbe", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package-manager": { + "inputs": { + "logos-nix": "logos-nix_18", + "logos-package": "logos-package", + "nix-bundle-appimage": "nix-bundle-appimage", + "nix-bundle-dir": "nix-bundle-dir_2", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776374462, + "narHash": "sha256-HMkuqSLdScAWTwXEWjhqx9Yk82GiPzPIfRaHTvjG730=", + "owner": "logos-co", + "repo": "logos-package-manager", + "rev": "9101875bc103214855bc6217834e22e66802ed86", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package-manager", + "type": "github" + } + }, + "logos-package-manager_10": { + "inputs": { + "logos-nix": "logos-nix_201", + "logos-package": "logos-package_22", + "nix-bundle-appimage": "nix-bundle-appimage_10", + "nix-bundle-dir": "nix-bundle-dir_32", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776374462, + "narHash": "sha256-HMkuqSLdScAWTwXEWjhqx9Yk82GiPzPIfRaHTvjG730=", + "owner": "logos-co", + "repo": "logos-package-manager", + "rev": "9101875bc103214855bc6217834e22e66802ed86", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package-manager", + "type": "github" + } + }, + "logos-package-manager_11": { + "inputs": { + "logos-nix": "logos-nix_218", + "logos-package": "logos-package_25", + "nix-bundle-appimage": "nix-bundle-appimage_11", + "nix-bundle-dir": "nix-bundle-dir_36", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775836847, + "narHash": "sha256-pU7GShEizE8HkDGvR9NWZPqksiGyvfcWodtFyc318TM=", + "owner": "logos-co", + "repo": "logos-package-manager", + "rev": "39118d6c52226e88a77c6ff7d1196229f56b757e", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package-manager", + "type": "github" + } + }, + "logos-package-manager_12": { + "inputs": { + "logos-nix": "logos-nix_245", + "logos-package": "logos-package_27", + "nix-bundle-appimage": "nix-bundle-appimage_12", + "nix-bundle-dir": "nix-bundle-dir_39", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776374462, + "narHash": "sha256-HMkuqSLdScAWTwXEWjhqx9Yk82GiPzPIfRaHTvjG730=", + "owner": "logos-co", + "repo": "logos-package-manager", + "rev": "9101875bc103214855bc6217834e22e66802ed86", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package-manager", + "type": "github" + } + }, + "logos-package-manager_13": { + "inputs": { + "logos-nix": "logos-nix_262", + "logos-package": "logos-package_30", + "nix-bundle-appimage": "nix-bundle-appimage_13", + "nix-bundle-dir": "nix-bundle-dir_43", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775836847, + "narHash": "sha256-pU7GShEizE8HkDGvR9NWZPqksiGyvfcWodtFyc318TM=", + "owner": "logos-co", + "repo": "logos-package-manager", + "rev": "39118d6c52226e88a77c6ff7d1196229f56b757e", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package-manager", + "type": "github" + } + }, + "logos-package-manager_14": { + "inputs": { + "logos-nix": "logos-nix_273", + "logos-package": "logos-package_32", + "nix-bundle-appimage": "nix-bundle-appimage_14", + "nix-bundle-dir": "nix-bundle-dir_46", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776374462, + "narHash": "sha256-HMkuqSLdScAWTwXEWjhqx9Yk82GiPzPIfRaHTvjG730=", + "owner": "logos-co", + "repo": "logos-package-manager", + "rev": "9101875bc103214855bc6217834e22e66802ed86", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package-manager", + "type": "github" + } + }, + "logos-package-manager_15": { + "inputs": { + "logos-nix": "logos-nix_290", + "logos-package": "logos-package_35", + "nix-bundle-appimage": "nix-bundle-appimage_15", + "nix-bundle-dir": "nix-bundle-dir_50", + "nixpkgs": [ + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775836847, + "narHash": "sha256-pU7GShEizE8HkDGvR9NWZPqksiGyvfcWodtFyc318TM=", + "owner": "logos-co", + "repo": "logos-package-manager", + "rev": "39118d6c52226e88a77c6ff7d1196229f56b757e", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package-manager", + "type": "github" + } + }, + "logos-package-manager_2": { + "inputs": { + "logos-nix": "logos-nix_35", + "logos-package": "logos-package_4", + "nix-bundle-appimage": "nix-bundle-appimage_2", + "nix-bundle-dir": "nix-bundle-dir_6", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775836847, + "narHash": "sha256-pU7GShEizE8HkDGvR9NWZPqksiGyvfcWodtFyc318TM=", + "owner": "logos-co", + "repo": "logos-package-manager", + "rev": "39118d6c52226e88a77c6ff7d1196229f56b757e", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package-manager", + "type": "github" + } + }, + "logos-package-manager_3": { + "inputs": { + "logos-nix": "logos-nix_46", + "logos-package": "logos-package_6", + "nix-bundle-appimage": "nix-bundle-appimage_3", + "nix-bundle-dir": "nix-bundle-dir_9", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-package-manager", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776374462, + "narHash": "sha256-HMkuqSLdScAWTwXEWjhqx9Yk82GiPzPIfRaHTvjG730=", + "owner": "logos-co", + "repo": "logos-package-manager", + "rev": "9101875bc103214855bc6217834e22e66802ed86", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package-manager", + "type": "github" + } + }, + "logos-package-manager_4": { + "inputs": { + "logos-nix": "logos-nix_78", + "logos-package": "logos-package_7", + "nix-bundle-appimage": "nix-bundle-appimage_4", + "nix-bundle-dir": "nix-bundle-dir_11", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776374462, + "narHash": "sha256-HMkuqSLdScAWTwXEWjhqx9Yk82GiPzPIfRaHTvjG730=", + "owner": "logos-co", + "repo": "logos-package-manager", + "rev": "9101875bc103214855bc6217834e22e66802ed86", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package-manager", + "type": "github" + } + }, + "logos-package-manager_5": { + "inputs": { + "logos-nix": "logos-nix_95", + "logos-package": "logos-package_10", + "nix-bundle-appimage": "nix-bundle-appimage_5", + "nix-bundle-dir": "nix-bundle-dir_15", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775836847, + "narHash": "sha256-pU7GShEizE8HkDGvR9NWZPqksiGyvfcWodtFyc318TM=", + "owner": "logos-co", + "repo": "logos-package-manager", + "rev": "39118d6c52226e88a77c6ff7d1196229f56b757e", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package-manager", + "type": "github" + } + }, + "logos-package-manager_6": { + "inputs": { + "logos-nix": "logos-nix_122", + "logos-package": "logos-package_12", + "nix-bundle-appimage": "nix-bundle-appimage_6", + "nix-bundle-dir": "nix-bundle-dir_18", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776374462, + "narHash": "sha256-HMkuqSLdScAWTwXEWjhqx9Yk82GiPzPIfRaHTvjG730=", + "owner": "logos-co", + "repo": "logos-package-manager", + "rev": "9101875bc103214855bc6217834e22e66802ed86", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package-manager", + "type": "github" + } + }, + "logos-package-manager_7": { + "inputs": { + "logos-nix": "logos-nix_139", + "logos-package": "logos-package_15", + "nix-bundle-appimage": "nix-bundle-appimage_7", + "nix-bundle-dir": "nix-bundle-dir_22", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775836847, + "narHash": "sha256-pU7GShEizE8HkDGvR9NWZPqksiGyvfcWodtFyc318TM=", + "owner": "logos-co", + "repo": "logos-package-manager", + "rev": "39118d6c52226e88a77c6ff7d1196229f56b757e", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package-manager", + "type": "github" + } + }, + "logos-package-manager_8": { + "inputs": { + "logos-nix": "logos-nix_150", + "logos-package": "logos-package_17", + "nix-bundle-appimage": "nix-bundle-appimage_8", + "nix-bundle-dir": "nix-bundle-dir_25", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776374462, + "narHash": "sha256-HMkuqSLdScAWTwXEWjhqx9Yk82GiPzPIfRaHTvjG730=", + "owner": "logos-co", + "repo": "logos-package-manager", + "rev": "9101875bc103214855bc6217834e22e66802ed86", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package-manager", + "type": "github" + } + }, + "logos-package-manager_9": { + "inputs": { + "logos-nix": "logos-nix_167", + "logos-package": "logos-package_20", + "nix-bundle-appimage": "nix-bundle-appimage_9", + "nix-bundle-dir": "nix-bundle-dir_29", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775836847, + "narHash": "sha256-pU7GShEizE8HkDGvR9NWZPqksiGyvfcWodtFyc318TM=", + "owner": "logos-co", + "repo": "logos-package-manager", + "rev": "39118d6c52226e88a77c6ff7d1196229f56b757e", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package-manager", + "type": "github" + } + }, + "logos-package_10": { + "inputs": { + "logos-nix": "logos-nix_96", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775835037, + "narHash": "sha256-Cti0DhkzyLQs98BSzcHWMLtGXpa3n+R+5upfSw6vKdQ=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "ff93a0df15ceab255f27687d22d962ea2737efbe", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_11": { + "inputs": { + "logos-nix": "logos-nix_101", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "nix-bundle-lgx", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775835037, + "narHash": "sha256-Cti0DhkzyLQs98BSzcHWMLtGXpa3n+R+5upfSw6vKdQ=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "ff93a0df15ceab255f27687d22d962ea2737efbe", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_12": { + "inputs": { + "logos-nix": "logos-nix_123", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775835037, + "narHash": "sha256-Cti0DhkzyLQs98BSzcHWMLtGXpa3n+R+5upfSw6vKdQ=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "ff93a0df15ceab255f27687d22d962ea2737efbe", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_13": { + "inputs": { + "logos-nix": "logos-nix_132", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "nix-bundle-lgx", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777575342, + "narHash": "sha256-l/tL39ZVNz3nWpE9zWpC/kg11QHSQJ2HHp3W3yv1pNI=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "118ccc4efd04eb0c4d541be8db7f1075e014ac39", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_14": { + "inputs": { + "logos-nix": "logos-nix_136", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-lgx", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777575342, + "narHash": "sha256-l/tL39ZVNz3nWpE9zWpC/kg11QHSQJ2HHp3W3yv1pNI=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "118ccc4efd04eb0c4d541be8db7f1075e014ac39", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_15": { + "inputs": { + "logos-nix": "logos-nix_140", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775835037, + "narHash": "sha256-Cti0DhkzyLQs98BSzcHWMLtGXpa3n+R+5upfSw6vKdQ=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "ff93a0df15ceab255f27687d22d962ea2737efbe", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_16": { + "inputs": { + "logos-nix": "logos-nix_145", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "nix-bundle-lgx", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775835037, + "narHash": "sha256-Cti0DhkzyLQs98BSzcHWMLtGXpa3n+R+5upfSw6vKdQ=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "ff93a0df15ceab255f27687d22d962ea2737efbe", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_17": { + "inputs": { + "logos-nix": "logos-nix_151", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775835037, + "narHash": "sha256-Cti0DhkzyLQs98BSzcHWMLtGXpa3n+R+5upfSw6vKdQ=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "ff93a0df15ceab255f27687d22d962ea2737efbe", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_18": { + "inputs": { + "logos-nix": "logos-nix_160", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "nix-bundle-lgx", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777575342, + "narHash": "sha256-l/tL39ZVNz3nWpE9zWpC/kg11QHSQJ2HHp3W3yv1pNI=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "118ccc4efd04eb0c4d541be8db7f1075e014ac39", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_19": { + "inputs": { + "logos-nix": "logos-nix_164", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "nix-bundle-lgx", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777575342, + "narHash": "sha256-l/tL39ZVNz3nWpE9zWpC/kg11QHSQJ2HHp3W3yv1pNI=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "118ccc4efd04eb0c4d541be8db7f1075e014ac39", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_2": { + "inputs": { + "logos-nix": "logos-nix_28", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "nix-bundle-lgx", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777575342, + "narHash": "sha256-l/tL39ZVNz3nWpE9zWpC/kg11QHSQJ2HHp3W3yv1pNI=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "118ccc4efd04eb0c4d541be8db7f1075e014ac39", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_20": { + "inputs": { + "logos-nix": "logos-nix_168", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775835037, + "narHash": "sha256-Cti0DhkzyLQs98BSzcHWMLtGXpa3n+R+5upfSw6vKdQ=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "ff93a0df15ceab255f27687d22d962ea2737efbe", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_21": { + "inputs": { + "logos-nix": "logos-nix_173", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "nix-bundle-lgx", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775835037, + "narHash": "sha256-Cti0DhkzyLQs98BSzcHWMLtGXpa3n+R+5upfSw6vKdQ=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "ff93a0df15ceab255f27687d22d962ea2737efbe", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_22": { + "inputs": { + "logos-nix": "logos-nix_202", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775835037, + "narHash": "sha256-Cti0DhkzyLQs98BSzcHWMLtGXpa3n+R+5upfSw6vKdQ=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "ff93a0df15ceab255f27687d22d962ea2737efbe", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_23": { + "inputs": { + "logos-nix": "logos-nix_211", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "nix-bundle-lgx", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777575342, + "narHash": "sha256-l/tL39ZVNz3nWpE9zWpC/kg11QHSQJ2HHp3W3yv1pNI=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "118ccc4efd04eb0c4d541be8db7f1075e014ac39", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_24": { + "inputs": { + "logos-nix": "logos-nix_215", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-lgx", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777575342, + "narHash": "sha256-l/tL39ZVNz3nWpE9zWpC/kg11QHSQJ2HHp3W3yv1pNI=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "118ccc4efd04eb0c4d541be8db7f1075e014ac39", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_25": { + "inputs": { + "logos-nix": "logos-nix_219", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775835037, + "narHash": "sha256-Cti0DhkzyLQs98BSzcHWMLtGXpa3n+R+5upfSw6vKdQ=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "ff93a0df15ceab255f27687d22d962ea2737efbe", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_26": { + "inputs": { + "logos-nix": "logos-nix_224", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "nix-bundle-lgx", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775835037, + "narHash": "sha256-Cti0DhkzyLQs98BSzcHWMLtGXpa3n+R+5upfSw6vKdQ=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "ff93a0df15ceab255f27687d22d962ea2737efbe", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_27": { + "inputs": { + "logos-nix": "logos-nix_246", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775835037, + "narHash": "sha256-Cti0DhkzyLQs98BSzcHWMLtGXpa3n+R+5upfSw6vKdQ=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "ff93a0df15ceab255f27687d22d962ea2737efbe", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_28": { + "inputs": { + "logos-nix": "logos-nix_255", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "nix-bundle-lgx", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777575342, + "narHash": "sha256-l/tL39ZVNz3nWpE9zWpC/kg11QHSQJ2HHp3W3yv1pNI=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "118ccc4efd04eb0c4d541be8db7f1075e014ac39", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_29": { + "inputs": { + "logos-nix": "logos-nix_259", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-lgx", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777575342, + "narHash": "sha256-l/tL39ZVNz3nWpE9zWpC/kg11QHSQJ2HHp3W3yv1pNI=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "118ccc4efd04eb0c4d541be8db7f1075e014ac39", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_3": { + "inputs": { + "logos-nix": "logos-nix_32", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-lgx", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777575342, + "narHash": "sha256-l/tL39ZVNz3nWpE9zWpC/kg11QHSQJ2HHp3W3yv1pNI=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "118ccc4efd04eb0c4d541be8db7f1075e014ac39", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_30": { + "inputs": { + "logos-nix": "logos-nix_263", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775835037, + "narHash": "sha256-Cti0DhkzyLQs98BSzcHWMLtGXpa3n+R+5upfSw6vKdQ=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "ff93a0df15ceab255f27687d22d962ea2737efbe", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_31": { + "inputs": { + "logos-nix": "logos-nix_268", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "nix-bundle-lgx", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775835037, + "narHash": "sha256-Cti0DhkzyLQs98BSzcHWMLtGXpa3n+R+5upfSw6vKdQ=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "ff93a0df15ceab255f27687d22d962ea2737efbe", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_32": { + "inputs": { + "logos-nix": "logos-nix_274", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775835037, + "narHash": "sha256-Cti0DhkzyLQs98BSzcHWMLtGXpa3n+R+5upfSw6vKdQ=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "ff93a0df15ceab255f27687d22d962ea2737efbe", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_33": { + "inputs": { + "logos-nix": "logos-nix_283", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "nix-bundle-lgx", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777575342, + "narHash": "sha256-l/tL39ZVNz3nWpE9zWpC/kg11QHSQJ2HHp3W3yv1pNI=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "118ccc4efd04eb0c4d541be8db7f1075e014ac39", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_34": { + "inputs": { + "logos-nix": "logos-nix_287", + "nixpkgs": [ + "logos-module-builder", + "nix-bundle-lgx", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777575342, + "narHash": "sha256-l/tL39ZVNz3nWpE9zWpC/kg11QHSQJ2HHp3W3yv1pNI=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "118ccc4efd04eb0c4d541be8db7f1075e014ac39", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_35": { + "inputs": { + "logos-nix": "logos-nix_291", + "nixpkgs": [ + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775835037, + "narHash": "sha256-Cti0DhkzyLQs98BSzcHWMLtGXpa3n+R+5upfSw6vKdQ=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "ff93a0df15ceab255f27687d22d962ea2737efbe", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_36": { + "inputs": { + "logos-nix": "logos-nix_296", + "nixpkgs": [ + "logos-module-builder", + "nix-bundle-logos-module-install", + "nix-bundle-lgx", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775835037, + "narHash": "sha256-Cti0DhkzyLQs98BSzcHWMLtGXpa3n+R+5upfSw6vKdQ=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "ff93a0df15ceab255f27687d22d962ea2737efbe", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_4": { + "inputs": { + "logos-nix": "logos-nix_36", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775835037, + "narHash": "sha256-Cti0DhkzyLQs98BSzcHWMLtGXpa3n+R+5upfSw6vKdQ=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "ff93a0df15ceab255f27687d22d962ea2737efbe", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_5": { + "inputs": { + "logos-nix": "logos-nix_41", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "nix-bundle-lgx", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775835037, + "narHash": "sha256-Cti0DhkzyLQs98BSzcHWMLtGXpa3n+R+5upfSw6vKdQ=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "ff93a0df15ceab255f27687d22d962ea2737efbe", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_6": { + "inputs": { + "logos-nix": "logos-nix_47", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-package-manager", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775835037, + "narHash": "sha256-Cti0DhkzyLQs98BSzcHWMLtGXpa3n+R+5upfSw6vKdQ=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "ff93a0df15ceab255f27687d22d962ea2737efbe", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_7": { + "inputs": { + "logos-nix": "logos-nix_79", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775835037, + "narHash": "sha256-Cti0DhkzyLQs98BSzcHWMLtGXpa3n+R+5upfSw6vKdQ=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "ff93a0df15ceab255f27687d22d962ea2737efbe", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_8": { + "inputs": { + "logos-nix": "logos-nix_88", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "nix-bundle-lgx", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777575342, + "narHash": "sha256-l/tL39ZVNz3nWpE9zWpC/kg11QHSQJ2HHp3W3yv1pNI=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "118ccc4efd04eb0c4d541be8db7f1075e014ac39", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-package_9": { + "inputs": { + "logos-nix": "logos-nix_92", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-lgx", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777575342, + "narHash": "sha256-l/tL39ZVNz3nWpE9zWpC/kg11QHSQJ2HHp3W3yv1pNI=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "118ccc4efd04eb0c4d541be8db7f1075e014ac39", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, + "logos-plugin-core": { + "inputs": { + "logos-module": "logos-module_2", + "logos-nix": "logos-nix_5", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-plugin-core", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778168218, + "narHash": "sha256-EGHUsyKaA7IjnBKNysFD62Qlqsd0GyxyhbuYNAS0+Tg=", + "owner": "logos-co", + "repo": "logos-plugin-qt", + "rev": "8c45eca86db8fba8689326c35d0ec8c2b3cdd9a0", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-plugin-qt", + "type": "github" + } + }, + "logos-plugin-core_2": { + "inputs": { + "logos-module": "logos-module_9", + "logos-nix": "logos-nix_56", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-plugin-core", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1781532038, + "narHash": "sha256-C6SXkO2efD7rNK5iIbxqLZKtOOsUVSNxw2m3DVEhijE=", + "owner": "logos-co", + "repo": "logos-plugin-qt", + "rev": "f33f264abb6d628cc78cf926f9f33c7cc8252151", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-plugin-qt", + "type": "github" + } + }, + "logos-plugin-core_3": { + "inputs": { + "logos-module": "logos-module_12", + "logos-nix": "logos-nix_65", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-plugin-core", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778168218, + "narHash": "sha256-EGHUsyKaA7IjnBKNysFD62Qlqsd0GyxyhbuYNAS0+Tg=", + "owner": "logos-co", + "repo": "logos-plugin-qt", + "rev": "8c45eca86db8fba8689326c35d0ec8c2b3cdd9a0", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-plugin-qt", + "type": "github" + } + }, + "logos-plugin-core_4": { + "inputs": { + "logos-module": "logos-module_18", + "logos-nix": "logos-nix_109", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-plugin-core", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778168218, + "narHash": "sha256-EGHUsyKaA7IjnBKNysFD62Qlqsd0GyxyhbuYNAS0+Tg=", + "owner": "logos-co", + "repo": "logos-plugin-qt", + "rev": "8c45eca86db8fba8689326c35d0ec8c2b3cdd9a0", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-plugin-qt", + "type": "github" + } + }, + "logos-plugin-core_5": { + "inputs": { + "logos-module": "logos-module_25", + "logos-nix": "logos-nix_179", + "nixpkgs": [ + "logos-module-builder", + "logos-plugin-core", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1781532038, + "narHash": "sha256-C6SXkO2efD7rNK5iIbxqLZKtOOsUVSNxw2m3DVEhijE=", + "owner": "logos-co", + "repo": "logos-plugin-qt", + "rev": "f33f264abb6d628cc78cf926f9f33c7cc8252151", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-plugin-qt", + "type": "github" + } + }, + "logos-plugin-core_6": { + "inputs": { + "logos-module": "logos-module_28", + "logos-nix": "logos-nix_188", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-plugin-core", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778168218, + "narHash": "sha256-EGHUsyKaA7IjnBKNysFD62Qlqsd0GyxyhbuYNAS0+Tg=", + "owner": "logos-co", + "repo": "logos-plugin-qt", + "rev": "8c45eca86db8fba8689326c35d0ec8c2b3cdd9a0", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-plugin-qt", + "type": "github" + } + }, + "logos-plugin-core_7": { + "inputs": { + "logos-module": "logos-module_34", + "logos-nix": "logos-nix_232", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-plugin-core", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778168218, + "narHash": "sha256-EGHUsyKaA7IjnBKNysFD62Qlqsd0GyxyhbuYNAS0+Tg=", + "owner": "logos-co", + "repo": "logos-plugin-qt", + "rev": "8c45eca86db8fba8689326c35d0ec8c2b3cdd9a0", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-plugin-qt", + "type": "github" + } + }, + "logos-plugin-qt": { + "inputs": { + "logos-module": "logos-module_3", + "logos-nix": "logos-nix_7", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-plugin-qt", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778168218, + "narHash": "sha256-EGHUsyKaA7IjnBKNysFD62Qlqsd0GyxyhbuYNAS0+Tg=", + "owner": "logos-co", + "repo": "logos-plugin-qt", + "rev": "8c45eca86db8fba8689326c35d0ec8c2b3cdd9a0", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-plugin-qt", + "type": "github" + } + }, + "logos-plugin-qt_2": { + "inputs": { + "logos-module": "logos-module_10", + "logos-nix": "logos-nix_58", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-plugin-qt", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1781532038, + "narHash": "sha256-C6SXkO2efD7rNK5iIbxqLZKtOOsUVSNxw2m3DVEhijE=", + "owner": "logos-co", + "repo": "logos-plugin-qt", + "rev": "f33f264abb6d628cc78cf926f9f33c7cc8252151", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-plugin-qt", + "type": "github" + } + }, + "logos-plugin-qt_3": { + "inputs": { + "logos-module": "logos-module_13", + "logos-nix": "logos-nix_67", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-plugin-qt", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778168218, + "narHash": "sha256-EGHUsyKaA7IjnBKNysFD62Qlqsd0GyxyhbuYNAS0+Tg=", + "owner": "logos-co", + "repo": "logos-plugin-qt", + "rev": "8c45eca86db8fba8689326c35d0ec8c2b3cdd9a0", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-plugin-qt", + "type": "github" + } + }, + "logos-plugin-qt_4": { + "inputs": { + "logos-module": "logos-module_19", + "logos-nix": "logos-nix_111", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-plugin-qt", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778168218, + "narHash": "sha256-EGHUsyKaA7IjnBKNysFD62Qlqsd0GyxyhbuYNAS0+Tg=", + "owner": "logos-co", + "repo": "logos-plugin-qt", + "rev": "8c45eca86db8fba8689326c35d0ec8c2b3cdd9a0", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-plugin-qt", + "type": "github" + } + }, + "logos-plugin-qt_5": { + "inputs": { + "logos-module": "logos-module_26", + "logos-nix": "logos-nix_181", + "nixpkgs": [ + "logos-module-builder", + "logos-plugin-qt", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1781532038, + "narHash": "sha256-C6SXkO2efD7rNK5iIbxqLZKtOOsUVSNxw2m3DVEhijE=", + "owner": "logos-co", + "repo": "logos-plugin-qt", + "rev": "f33f264abb6d628cc78cf926f9f33c7cc8252151", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-plugin-qt", + "type": "github" + } + }, + "logos-plugin-qt_6": { + "inputs": { + "logos-module": "logos-module_29", + "logos-nix": "logos-nix_190", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-plugin-qt", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778168218, + "narHash": "sha256-EGHUsyKaA7IjnBKNysFD62Qlqsd0GyxyhbuYNAS0+Tg=", + "owner": "logos-co", + "repo": "logos-plugin-qt", + "rev": "8c45eca86db8fba8689326c35d0ec8c2b3cdd9a0", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-plugin-qt", + "type": "github" + } + }, + "logos-plugin-qt_7": { + "inputs": { + "logos-module": "logos-module_35", + "logos-nix": "logos-nix_234", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-plugin-qt", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778168218, + "narHash": "sha256-EGHUsyKaA7IjnBKNysFD62Qlqsd0GyxyhbuYNAS0+Tg=", + "owner": "logos-co", + "repo": "logos-plugin-qt", + "rev": "8c45eca86db8fba8689326c35d0ec8c2b3cdd9a0", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-plugin-qt", + "type": "github" + } + }, + "logos-protocol": { + "inputs": { + "logos-nix": "logos-nix_59", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-protocol", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1781303997, + "narHash": "sha256-j9U4wPlHdN5oA+65h1SAo/s2YUHvNYKxij4/pCqEtAs=", + "owner": "logos-co", + "repo": "logos-protocol", + "rev": "9de4165ab68ece4071647026cb2596bed8a8d7e2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-protocol", + "type": "github" + } + }, + "logos-protocol_2": { + "inputs": { + "logos-nix": [ + "lez_indexer_module", + "logos-module-builder", + "logos-test-framework", + "logos-nix" + ], + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-test-framework", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1781065710, + "narHash": "sha256-QmNQ7LdrfzyvsZGISGKJKbHqB03F6JExgGF2K1f2WcE=", + "owner": "logos-co", + "repo": "logos-protocol", + "rev": "ca28190272eef2772edf9b3e1df47e121f02a726", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-protocol", + "type": "github" + } + }, + "logos-protocol_3": { + "inputs": { + "logos-nix": "logos-nix_182", + "nixpkgs": [ + "logos-module-builder", + "logos-protocol", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1781303997, + "narHash": "sha256-j9U4wPlHdN5oA+65h1SAo/s2YUHvNYKxij4/pCqEtAs=", + "owner": "logos-co", + "repo": "logos-protocol", + "rev": "9de4165ab68ece4071647026cb2596bed8a8d7e2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-protocol", + "type": "github" + } + }, + "logos-protocol_4": { + "inputs": { + "logos-nix": [ + "logos-module-builder", + "logos-test-framework", + "logos-nix" + ], + "nixpkgs": [ + "logos-module-builder", + "logos-test-framework", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1781065710, + "narHash": "sha256-QmNQ7LdrfzyvsZGISGKJKbHqB03F6JExgGF2K1f2WcE=", + "owner": "logos-co", + "repo": "logos-protocol", + "rev": "ca28190272eef2772edf9b3e1df47e121f02a726", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-protocol", + "type": "github" + } + }, + "logos-qt-mcp": { + "inputs": { + "logos-nix": "logos-nix_25", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455349, + "narHash": "sha256-rebrtH1UxC1hDuwQBwyYbGzNCrnuuqiVL7OvzUhk65k=", + "owner": "logos-co", + "repo": "logos-qt-mcp", + "rev": "c5223b4b640add09e461983b8fddbd12c8b31f4f", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-qt-mcp", + "type": "github" + } + }, + "logos-qt-mcp_2": { + "inputs": { + "logos-nix": "logos-nix_85", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455349, + "narHash": "sha256-rebrtH1UxC1hDuwQBwyYbGzNCrnuuqiVL7OvzUhk65k=", + "owner": "logos-co", + "repo": "logos-qt-mcp", + "rev": "c5223b4b640add09e461983b8fddbd12c8b31f4f", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-qt-mcp", + "type": "github" + } + }, + "logos-qt-mcp_3": { + "inputs": { + "logos-nix": "logos-nix_129", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455349, + "narHash": "sha256-rebrtH1UxC1hDuwQBwyYbGzNCrnuuqiVL7OvzUhk65k=", + "owner": "logos-co", + "repo": "logos-qt-mcp", + "rev": "c5223b4b640add09e461983b8fddbd12c8b31f4f", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-qt-mcp", + "type": "github" + } + }, + "logos-qt-mcp_4": { + "inputs": { + "logos-nix": "logos-nix_157", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-qt-mcp", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455349, + "narHash": "sha256-rebrtH1UxC1hDuwQBwyYbGzNCrnuuqiVL7OvzUhk65k=", + "owner": "logos-co", + "repo": "logos-qt-mcp", + "rev": "c5223b4b640add09e461983b8fddbd12c8b31f4f", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-qt-mcp", + "type": "github" + } + }, + "logos-qt-mcp_5": { + "inputs": { + "logos-nix": "logos-nix_208", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455349, + "narHash": "sha256-rebrtH1UxC1hDuwQBwyYbGzNCrnuuqiVL7OvzUhk65k=", + "owner": "logos-co", + "repo": "logos-qt-mcp", + "rev": "c5223b4b640add09e461983b8fddbd12c8b31f4f", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-qt-mcp", + "type": "github" + } + }, + "logos-qt-mcp_6": { + "inputs": { + "logos-nix": "logos-nix_252", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455349, + "narHash": "sha256-rebrtH1UxC1hDuwQBwyYbGzNCrnuuqiVL7OvzUhk65k=", + "owner": "logos-co", + "repo": "logos-qt-mcp", + "rev": "c5223b4b640add09e461983b8fddbd12c8b31f4f", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-qt-mcp", + "type": "github" + } + }, + "logos-qt-mcp_7": { + "inputs": { + "logos-nix": "logos-nix_280", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-qt-mcp", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455349, + "narHash": "sha256-rebrtH1UxC1hDuwQBwyYbGzNCrnuuqiVL7OvzUhk65k=", + "owner": "logos-co", + "repo": "logos-qt-mcp", + "rev": "c5223b4b640add09e461983b8fddbd12c8b31f4f", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-qt-mcp", + "type": "github" + } + }, + "logos-qt-sdk": { + "inputs": { + "logos-cpp-sdk": [ + "lez_indexer_module", + "logos-module-builder", + "logos-cpp-sdk" + ], + "logos-lidl": "logos-lidl_2", + "logos-nix": "logos-nix_60", + "logos-protocol": [ + "lez_indexer_module", + "logos-module-builder", + "logos-protocol" + ], + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-qt-sdk", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1781655169, + "narHash": "sha256-wjbHmczSG8VUMlRkIp3pviVTLPTzReDbIRfBpqnlQr4=", + "owner": "logos-co", + "repo": "logos-qt-sdk", + "rev": "812369213719773f6486755a30c476a699469b37", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-qt-sdk", + "type": "github" + } + }, + "logos-qt-sdk_2": { + "inputs": { + "logos-cpp-sdk": [ + "lez_indexer_module", + "logos-module-builder", + "logos-test-framework", + "logos-cpp-sdk" + ], + "logos-nix": [ + "lez_indexer_module", + "logos-module-builder", + "logos-test-framework", + "logos-nix" + ], + "logos-protocol": [ + "lez_indexer_module", + "logos-module-builder", + "logos-test-framework", + "logos-protocol" + ], + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-test-framework", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1781066423, + "narHash": "sha256-3pVeJ/cK2z4OEi5iLORjoC7YpdrRrHmigl9SyvEapI8=", + "owner": "logos-co", + "repo": "logos-qt-sdk", + "rev": "355774603877637b486ea0aeefbf7828ae321868", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-qt-sdk", + "type": "github" + } + }, + "logos-qt-sdk_3": { + "inputs": { + "logos-cpp-sdk": [ + "logos-module-builder", + "logos-cpp-sdk" + ], + "logos-lidl": "logos-lidl_4", + "logos-nix": "logos-nix_183", + "logos-protocol": [ + "logos-module-builder", + "logos-protocol" + ], + "nixpkgs": [ + "logos-module-builder", + "logos-qt-sdk", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1781655169, + "narHash": "sha256-wjbHmczSG8VUMlRkIp3pviVTLPTzReDbIRfBpqnlQr4=", + "owner": "logos-co", + "repo": "logos-qt-sdk", + "rev": "812369213719773f6486755a30c476a699469b37", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-qt-sdk", + "type": "github" + } + }, + "logos-qt-sdk_4": { + "inputs": { + "logos-cpp-sdk": [ + "logos-module-builder", + "logos-test-framework", + "logos-cpp-sdk" + ], + "logos-nix": [ + "logos-module-builder", + "logos-test-framework", + "logos-nix" + ], + "logos-protocol": [ + "logos-module-builder", + "logos-test-framework", + "logos-protocol" + ], + "nixpkgs": [ + "logos-module-builder", + "logos-test-framework", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1781066423, + "narHash": "sha256-3pVeJ/cK2z4OEi5iLORjoC7YpdrRrHmigl9SyvEapI8=", + "owner": "logos-co", + "repo": "logos-qt-sdk", + "rev": "355774603877637b486ea0aeefbf7828ae321868", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-qt-sdk", + "type": "github" + } + }, + "logos-rust-sdk": { + "inputs": { + "logos-logoscore-cli": [ + "lez_indexer_module", + "logos-module-builder", + "logos-cpp-sdk" + ], + "logos-module-builder": [ + "lez_indexer_module", + "logos-module-builder", + "logos-cpp-sdk" + ], + "logos-module-client": [ + "lez_indexer_module", + "logos-module-builder", + "logos-cpp-sdk" + ], + "logos-nix": [ + "lez_indexer_module", + "logos-module-builder", + "logos-nix" + ], + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-rust-sdk", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1781550278, + "narHash": "sha256-j3CZSeGvvw+X5qRLlaHh1UfUNFc2hNs756hSN04J/XQ=", + "owner": "logos-co", + "repo": "logos-rust-sdk", + "rev": "340f42d41008488d912257e7836789795adbaeb7", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-rust-sdk", + "rev": "340f42d41008488d912257e7836789795adbaeb7", + "type": "github" + } + }, + "logos-rust-sdk_2": { + "inputs": { + "logos-logoscore-cli": [ + "logos-module-builder", + "logos-cpp-sdk" + ], + "logos-module-builder": [ + "logos-module-builder", + "logos-cpp-sdk" + ], + "logos-module-client": [ + "logos-module-builder", + "logos-cpp-sdk" + ], + "logos-nix": [ + "logos-module-builder", + "logos-nix" + ], + "nixpkgs": [ + "logos-module-builder", + "logos-rust-sdk", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1781550278, + "narHash": "sha256-j3CZSeGvvw+X5qRLlaHh1UfUNFc2hNs756hSN04J/XQ=", + "owner": "logos-co", + "repo": "logos-rust-sdk", + "rev": "340f42d41008488d912257e7836789795adbaeb7", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-rust-sdk", + "rev": "340f42d41008488d912257e7836789795adbaeb7", + "type": "github" + } + }, + "logos-standalone-app": { + "inputs": { + "logos-capability-module": "logos-capability-module_2", + "logos-cpp-sdk": "logos-cpp-sdk_2", + "logos-design-system": "logos-design-system", + "logos-liblogos": "logos-liblogos_2", + "logos-nix": "logos-nix_24", + "logos-qt-mcp": "logos-qt-mcp", + "logos-view-module-runtime": "logos-view-module-runtime", + "nix-bundle-lgx": "nix-bundle-lgx", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778177364, + "narHash": "sha256-k05qvbRM2fR7SAEKaElXZNtneWJx/IN/yEx4JMnxv1A=", + "owner": "logos-co", + "repo": "logos-standalone-app", + "rev": "a749953e0e9f3d716856d2bd818cd5757aeb065d", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-standalone-app", + "type": "github" + } + }, + "logos-standalone-app_2": { + "inputs": { + "logos-capability-module": "logos-capability-module_4", + "logos-cpp-sdk": "logos-cpp-sdk_11", + "logos-design-system": "logos-design-system_3", + "logos-liblogos": "logos-liblogos_4", + "logos-nix": "logos-nix_156", + "logos-qt-mcp": "logos-qt-mcp_4", + "logos-view-module-runtime": "logos-view-module-runtime_4", + "nix-bundle-lgx": "nix-bundle-lgx_10", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1779725202, + "narHash": "sha256-7IqnkRG1CkOKfiw5qf1o+Kg9ci+MKlcJNXgrg6GyYXk=", + "owner": "logos-co", + "repo": "logos-standalone-app", + "rev": "f812b43f73f3c264ee0f8a8354f40721431d6846", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-standalone-app", + "type": "github" + } + }, + "logos-standalone-app_3": { + "inputs": { + "logos-capability-module": "logos-capability-module_5", + "logos-cpp-sdk": "logos-cpp-sdk_8", + "logos-design-system": "logos-design-system_2", + "logos-liblogos": "logos-liblogos_3", + "logos-nix": "logos-nix_84", + "logos-qt-mcp": "logos-qt-mcp_2", + "logos-view-module-runtime": "logos-view-module-runtime_2", + "nix-bundle-lgx": "nix-bundle-lgx_4", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778177364, + "narHash": "sha256-k05qvbRM2fR7SAEKaElXZNtneWJx/IN/yEx4JMnxv1A=", + "owner": "logos-co", + "repo": "logos-standalone-app", + "rev": "a749953e0e9f3d716856d2bd818cd5757aeb065d", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-standalone-app", + "type": "github" + } + }, + "logos-standalone-app_4": { + "inputs": { + "logos-capability-module": "logos-capability-module_8", + "logos-cpp-sdk": "logos-cpp-sdk_13", + "logos-design-system": "logos-design-system_4", + "logos-liblogos": "logos-liblogos_5", + "logos-nix": "logos-nix_128", + "logos-qt-mcp": "logos-qt-mcp_3", + "logos-view-module-runtime": "logos-view-module-runtime_3", + "nix-bundle-lgx": "nix-bundle-lgx_7", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778177364, + "narHash": "sha256-k05qvbRM2fR7SAEKaElXZNtneWJx/IN/yEx4JMnxv1A=", + "owner": "logos-co", + "repo": "logos-standalone-app", + "rev": "a749953e0e9f3d716856d2bd818cd5757aeb065d", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-standalone-app", + "type": "github" + } + }, + "logos-standalone-app_5": { + "inputs": { + "logos-capability-module": "logos-capability-module_10", + "logos-cpp-sdk": "logos-cpp-sdk_23", + "logos-design-system": "logos-design-system_6", + "logos-liblogos": "logos-liblogos_7", + "logos-nix": "logos-nix_279", + "logos-qt-mcp": "logos-qt-mcp_7", + "logos-view-module-runtime": "logos-view-module-runtime_7", + "nix-bundle-lgx": "nix-bundle-lgx_19", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1779725202, + "narHash": "sha256-7IqnkRG1CkOKfiw5qf1o+Kg9ci+MKlcJNXgrg6GyYXk=", + "owner": "logos-co", + "repo": "logos-standalone-app", + "rev": "f812b43f73f3c264ee0f8a8354f40721431d6846", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-standalone-app", + "type": "github" + } + }, + "logos-standalone-app_6": { + "inputs": { + "logos-capability-module": "logos-capability-module_11", + "logos-cpp-sdk": "logos-cpp-sdk_20", + "logos-design-system": "logos-design-system_5", + "logos-liblogos": "logos-liblogos_6", + "logos-nix": "logos-nix_207", + "logos-qt-mcp": "logos-qt-mcp_5", + "logos-view-module-runtime": "logos-view-module-runtime_5", + "nix-bundle-lgx": "nix-bundle-lgx_13", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778177364, + "narHash": "sha256-k05qvbRM2fR7SAEKaElXZNtneWJx/IN/yEx4JMnxv1A=", + "owner": "logos-co", + "repo": "logos-standalone-app", + "rev": "a749953e0e9f3d716856d2bd818cd5757aeb065d", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-standalone-app", + "type": "github" + } + }, + "logos-standalone-app_7": { + "inputs": { + "logos-capability-module": "logos-capability-module_14", + "logos-cpp-sdk": "logos-cpp-sdk_25", + "logos-design-system": "logos-design-system_7", + "logos-liblogos": "logos-liblogos_8", + "logos-nix": "logos-nix_251", + "logos-qt-mcp": "logos-qt-mcp_6", + "logos-view-module-runtime": "logos-view-module-runtime_6", + "nix-bundle-lgx": "nix-bundle-lgx_16", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778177364, + "narHash": "sha256-k05qvbRM2fR7SAEKaElXZNtneWJx/IN/yEx4JMnxv1A=", + "owner": "logos-co", + "repo": "logos-standalone-app", + "rev": "a749953e0e9f3d716856d2bd818cd5757aeb065d", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-standalone-app", + "type": "github" + } + }, + "logos-test-framework": { + "inputs": { + "logos-cpp-sdk": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-cpp-sdk" + ], + "logos-nix": "logos-nix_30", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-test-framework", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778168561, + "narHash": "sha256-BINVw7hztdrDkoDSdmnKZes7A15g1SmXKjIHpjZv/3I=", + "owner": "logos-co", + "repo": "logos-test-framework", + "rev": "44816073a437fde4203e140b896e70a387c0678a", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-test-framework", + "type": "github" + } + }, + "logos-test-framework_2": { + "inputs": { + "logos-cpp-sdk": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-cpp-sdk" + ], + "logos-nix": "logos-nix_90", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-test-framework", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778168561, + "narHash": "sha256-BINVw7hztdrDkoDSdmnKZes7A15g1SmXKjIHpjZv/3I=", + "owner": "logos-co", + "repo": "logos-test-framework", + "rev": "44816073a437fde4203e140b896e70a387c0678a", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-test-framework", + "type": "github" + } + }, + "logos-test-framework_3": { + "inputs": { + "logos-cpp-sdk": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-cpp-sdk" + ], + "logos-nix": "logos-nix_134", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-test-framework", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778168561, + "narHash": "sha256-BINVw7hztdrDkoDSdmnKZes7A15g1SmXKjIHpjZv/3I=", + "owner": "logos-co", + "repo": "logos-test-framework", + "rev": "44816073a437fde4203e140b896e70a387c0678a", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-test-framework", + "type": "github" + } + }, + "logos-test-framework_4": { + "inputs": { + "logos-cpp-sdk": [ + "lez_indexer_module", + "logos-module-builder", + "logos-cpp-sdk" + ], + "logos-nix": "logos-nix_162", + "logos-protocol": "logos-protocol_2", + "logos-qt-sdk": "logos-qt-sdk_2", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-test-framework", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1781118884, + "narHash": "sha256-bM8Deqf6soZeUqWy3RdyY0APRKLWmjD/78g1fbEObaY=", + "owner": "logos-co", + "repo": "logos-test-framework", + "rev": "5b8fcc9ffdc5c66511a95a6bf6b41dd74fbbacc9", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-test-framework", + "type": "github" + } + }, + "logos-test-framework_5": { + "inputs": { + "logos-cpp-sdk": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-cpp-sdk" + ], + "logos-nix": "logos-nix_213", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-test-framework", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778168561, + "narHash": "sha256-BINVw7hztdrDkoDSdmnKZes7A15g1SmXKjIHpjZv/3I=", + "owner": "logos-co", + "repo": "logos-test-framework", + "rev": "44816073a437fde4203e140b896e70a387c0678a", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-test-framework", + "type": "github" + } + }, + "logos-test-framework_6": { + "inputs": { + "logos-cpp-sdk": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-cpp-sdk" + ], + "logos-nix": "logos-nix_257", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-test-framework", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778168561, + "narHash": "sha256-BINVw7hztdrDkoDSdmnKZes7A15g1SmXKjIHpjZv/3I=", + "owner": "logos-co", + "repo": "logos-test-framework", + "rev": "44816073a437fde4203e140b896e70a387c0678a", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-test-framework", + "type": "github" + } + }, + "logos-test-framework_7": { + "inputs": { + "logos-cpp-sdk": [ + "logos-module-builder", + "logos-cpp-sdk" + ], + "logos-nix": "logos-nix_285", + "logos-protocol": "logos-protocol_4", + "logos-qt-sdk": "logos-qt-sdk_4", + "nixpkgs": [ + "logos-module-builder", + "logos-test-framework", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1781118884, + "narHash": "sha256-bM8Deqf6soZeUqWy3RdyY0APRKLWmjD/78g1fbEObaY=", + "owner": "logos-co", + "repo": "logos-test-framework", + "rev": "5b8fcc9ffdc5c66511a95a6bf6b41dd74fbbacc9", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-test-framework", + "type": "github" + } + }, + "logos-view-module-runtime": { + "inputs": { + "logos-cpp-sdk": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-cpp-sdk" + ], + "logos-nix": "logos-nix_26", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778168591, + "narHash": "sha256-gHapkm3yh3YNuM8EaFvThrJ2qVjcKKr5KA6wFfE0M7Q=", + "owner": "logos-co", + "repo": "logos-view-module-runtime", + "rev": "3c3735c25c8d66cc713623420dc74e445442592a", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-view-module-runtime", + "type": "github" + } + }, + "logos-view-module-runtime_2": { + "inputs": { + "logos-cpp-sdk": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-cpp-sdk" + ], + "logos-nix": "logos-nix_86", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778168591, + "narHash": "sha256-gHapkm3yh3YNuM8EaFvThrJ2qVjcKKr5KA6wFfE0M7Q=", + "owner": "logos-co", + "repo": "logos-view-module-runtime", + "rev": "3c3735c25c8d66cc713623420dc74e445442592a", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-view-module-runtime", + "type": "github" + } + }, + "logos-view-module-runtime_3": { + "inputs": { + "logos-cpp-sdk": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-cpp-sdk" + ], + "logos-nix": "logos-nix_130", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778168591, + "narHash": "sha256-gHapkm3yh3YNuM8EaFvThrJ2qVjcKKr5KA6wFfE0M7Q=", + "owner": "logos-co", + "repo": "logos-view-module-runtime", + "rev": "3c3735c25c8d66cc713623420dc74e445442592a", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-view-module-runtime", + "type": "github" + } + }, + "logos-view-module-runtime_4": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk_17", + "logos-nix": "logos-nix_158", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-view-module-runtime", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1779723114, + "narHash": "sha256-6NNZG9FTaLRKwJZxtFWySlfiTanh25AmJK5Ru+S9HrM=", + "owner": "logos-co", + "repo": "logos-view-module-runtime", + "rev": "21dddc380eca36e7e865cf5a437f63e0e16f30d3", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-view-module-runtime", + "type": "github" + } + }, + "logos-view-module-runtime_5": { + "inputs": { + "logos-cpp-sdk": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-cpp-sdk" + ], + "logos-nix": "logos-nix_209", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778168591, + "narHash": "sha256-gHapkm3yh3YNuM8EaFvThrJ2qVjcKKr5KA6wFfE0M7Q=", + "owner": "logos-co", + "repo": "logos-view-module-runtime", + "rev": "3c3735c25c8d66cc713623420dc74e445442592a", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-view-module-runtime", + "type": "github" + } + }, + "logos-view-module-runtime_6": { + "inputs": { + "logos-cpp-sdk": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-cpp-sdk" + ], + "logos-nix": "logos-nix_253", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1778168591, + "narHash": "sha256-gHapkm3yh3YNuM8EaFvThrJ2qVjcKKr5KA6wFfE0M7Q=", + "owner": "logos-co", + "repo": "logos-view-module-runtime", + "rev": "3c3735c25c8d66cc713623420dc74e445442592a", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-view-module-runtime", + "type": "github" + } + }, + "logos-view-module-runtime_7": { + "inputs": { + "logos-cpp-sdk": "logos-cpp-sdk_29", + "logos-nix": "logos-nix_281", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-view-module-runtime", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1779723114, + "narHash": "sha256-6NNZG9FTaLRKwJZxtFWySlfiTanh25AmJK5Ru+S9HrM=", + "owner": "logos-co", + "repo": "logos-view-module-runtime", + "rev": "21dddc380eca36e7e865cf5a437f63e0e16f30d3", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-view-module-runtime", + "type": "github" + } + }, + "nix-bundle-appimage": { + "inputs": { + "logos-nix": "logos-nix_20", + "nix-bundle-dir": "nix-bundle-dir", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "nix-bundle-appimage", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455478, + "narHash": "sha256-S8IMfdDc+2Wwri0krLDsIUwSqmwanmvHAJWHOFo8ykk=", + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "rev": "2428125a4a1b34ad9119efa97edb98676283e3da", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "type": "github" + } + }, + "nix-bundle-appimage_10": { + "inputs": { + "logos-nix": "logos-nix_203", + "nix-bundle-dir": "nix-bundle-dir_31", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "nix-bundle-appimage", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455478, + "narHash": "sha256-S8IMfdDc+2Wwri0krLDsIUwSqmwanmvHAJWHOFo8ykk=", + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "rev": "2428125a4a1b34ad9119efa97edb98676283e3da", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "type": "github" + } + }, + "nix-bundle-appimage_11": { + "inputs": { + "logos-nix": "logos-nix_220", + "nix-bundle-dir": "nix-bundle-dir_35", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "nix-bundle-appimage", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455478, + "narHash": "sha256-S8IMfdDc+2Wwri0krLDsIUwSqmwanmvHAJWHOFo8ykk=", + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "rev": "2428125a4a1b34ad9119efa97edb98676283e3da", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "type": "github" + } + }, + "nix-bundle-appimage_12": { + "inputs": { + "logos-nix": "logos-nix_247", + "nix-bundle-dir": "nix-bundle-dir_38", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "nix-bundle-appimage", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455478, + "narHash": "sha256-S8IMfdDc+2Wwri0krLDsIUwSqmwanmvHAJWHOFo8ykk=", + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "rev": "2428125a4a1b34ad9119efa97edb98676283e3da", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "type": "github" + } + }, + "nix-bundle-appimage_13": { + "inputs": { + "logos-nix": "logos-nix_264", + "nix-bundle-dir": "nix-bundle-dir_42", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "nix-bundle-appimage", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455478, + "narHash": "sha256-S8IMfdDc+2Wwri0krLDsIUwSqmwanmvHAJWHOFo8ykk=", + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "rev": "2428125a4a1b34ad9119efa97edb98676283e3da", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "type": "github" + } + }, + "nix-bundle-appimage_14": { + "inputs": { + "logos-nix": "logos-nix_275", + "nix-bundle-dir": "nix-bundle-dir_45", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "nix-bundle-appimage", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455478, + "narHash": "sha256-S8IMfdDc+2Wwri0krLDsIUwSqmwanmvHAJWHOFo8ykk=", + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "rev": "2428125a4a1b34ad9119efa97edb98676283e3da", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "type": "github" + } + }, + "nix-bundle-appimage_15": { + "inputs": { + "logos-nix": "logos-nix_292", + "nix-bundle-dir": "nix-bundle-dir_49", + "nixpkgs": [ + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "nix-bundle-appimage", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455478, + "narHash": "sha256-S8IMfdDc+2Wwri0krLDsIUwSqmwanmvHAJWHOFo8ykk=", + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "rev": "2428125a4a1b34ad9119efa97edb98676283e3da", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "type": "github" + } + }, + "nix-bundle-appimage_2": { + "inputs": { + "logos-nix": "logos-nix_37", + "nix-bundle-dir": "nix-bundle-dir_5", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "nix-bundle-appimage", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455478, + "narHash": "sha256-S8IMfdDc+2Wwri0krLDsIUwSqmwanmvHAJWHOFo8ykk=", + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "rev": "2428125a4a1b34ad9119efa97edb98676283e3da", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "type": "github" + } + }, + "nix-bundle-appimage_3": { + "inputs": { + "logos-nix": "logos-nix_48", + "nix-bundle-dir": "nix-bundle-dir_8", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-package-manager", + "nix-bundle-appimage", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455478, + "narHash": "sha256-S8IMfdDc+2Wwri0krLDsIUwSqmwanmvHAJWHOFo8ykk=", + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "rev": "2428125a4a1b34ad9119efa97edb98676283e3da", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "type": "github" + } + }, + "nix-bundle-appimage_4": { + "inputs": { + "logos-nix": "logos-nix_80", + "nix-bundle-dir": "nix-bundle-dir_10", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "nix-bundle-appimage", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455478, + "narHash": "sha256-S8IMfdDc+2Wwri0krLDsIUwSqmwanmvHAJWHOFo8ykk=", + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "rev": "2428125a4a1b34ad9119efa97edb98676283e3da", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "type": "github" + } + }, + "nix-bundle-appimage_5": { + "inputs": { + "logos-nix": "logos-nix_97", + "nix-bundle-dir": "nix-bundle-dir_14", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "nix-bundle-appimage", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455478, + "narHash": "sha256-S8IMfdDc+2Wwri0krLDsIUwSqmwanmvHAJWHOFo8ykk=", + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "rev": "2428125a4a1b34ad9119efa97edb98676283e3da", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "type": "github" + } + }, + "nix-bundle-appimage_6": { + "inputs": { + "logos-nix": "logos-nix_124", + "nix-bundle-dir": "nix-bundle-dir_17", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "nix-bundle-appimage", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455478, + "narHash": "sha256-S8IMfdDc+2Wwri0krLDsIUwSqmwanmvHAJWHOFo8ykk=", + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "rev": "2428125a4a1b34ad9119efa97edb98676283e3da", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "type": "github" + } + }, + "nix-bundle-appimage_7": { + "inputs": { + "logos-nix": "logos-nix_141", + "nix-bundle-dir": "nix-bundle-dir_21", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "nix-bundle-appimage", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455478, + "narHash": "sha256-S8IMfdDc+2Wwri0krLDsIUwSqmwanmvHAJWHOFo8ykk=", + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "rev": "2428125a4a1b34ad9119efa97edb98676283e3da", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "type": "github" + } + }, + "nix-bundle-appimage_8": { + "inputs": { + "logos-nix": "logos-nix_152", + "nix-bundle-dir": "nix-bundle-dir_24", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "nix-bundle-appimage", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455478, + "narHash": "sha256-S8IMfdDc+2Wwri0krLDsIUwSqmwanmvHAJWHOFo8ykk=", + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "rev": "2428125a4a1b34ad9119efa97edb98676283e3da", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "type": "github" + } + }, + "nix-bundle-appimage_9": { + "inputs": { + "logos-nix": "logos-nix_169", + "nix-bundle-dir": "nix-bundle-dir_28", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "nix-bundle-appimage", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455478, + "narHash": "sha256-S8IMfdDc+2Wwri0krLDsIUwSqmwanmvHAJWHOFo8ykk=", + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "rev": "2428125a4a1b34ad9119efa97edb98676283e3da", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-appimage", + "type": "github" + } + }, + "nix-bundle-dir": { + "inputs": { + "logos-nix": "logos-nix_21", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "nix-bundle-appimage", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773961179, + "narHash": "sha256-bpaTvz//R8WFP5xnnDLv3a9l7unDmBwJjCewx3wCjzM=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "cd214dbf15487d80967389847ae2210468be6ebf", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_10": { + "inputs": { + "logos-nix": "logos-nix_81", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "nix-bundle-appimage", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773961179, + "narHash": "sha256-bpaTvz//R8WFP5xnnDLv3a9l7unDmBwJjCewx3wCjzM=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "cd214dbf15487d80967389847ae2210468be6ebf", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_11": { + "inputs": { + "logos-nix": "logos-nix_82", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_12": { + "inputs": { + "logos-nix": "logos-nix_89", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "nix-bundle-lgx", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_13": { + "inputs": { + "logos-nix": "logos-nix_93", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-lgx", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_14": { + "inputs": { + "logos-nix": "logos-nix_98", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "nix-bundle-appimage", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773961179, + "narHash": "sha256-bpaTvz//R8WFP5xnnDLv3a9l7unDmBwJjCewx3wCjzM=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "cd214dbf15487d80967389847ae2210468be6ebf", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_15": { + "inputs": { + "logos-nix": "logos-nix_99", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_16": { + "inputs": { + "logos-nix": "logos-nix_102", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "nix-bundle-lgx", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_17": { + "inputs": { + "logos-nix": "logos-nix_125", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "nix-bundle-appimage", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773961179, + "narHash": "sha256-bpaTvz//R8WFP5xnnDLv3a9l7unDmBwJjCewx3wCjzM=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "cd214dbf15487d80967389847ae2210468be6ebf", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_18": { + "inputs": { + "logos-nix": "logos-nix_126", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_19": { + "inputs": { + "logos-nix": "logos-nix_133", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "nix-bundle-lgx", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_2": { + "inputs": { + "logos-nix": "logos-nix_22", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_20": { + "inputs": { + "logos-nix": "logos-nix_137", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-lgx", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_21": { + "inputs": { + "logos-nix": "logos-nix_142", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "nix-bundle-appimage", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773961179, + "narHash": "sha256-bpaTvz//R8WFP5xnnDLv3a9l7unDmBwJjCewx3wCjzM=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "cd214dbf15487d80967389847ae2210468be6ebf", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_22": { + "inputs": { + "logos-nix": "logos-nix_143", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_23": { + "inputs": { + "logos-nix": "logos-nix_146", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "nix-bundle-lgx", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_24": { + "inputs": { + "logos-nix": "logos-nix_153", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "nix-bundle-appimage", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773961179, + "narHash": "sha256-bpaTvz//R8WFP5xnnDLv3a9l7unDmBwJjCewx3wCjzM=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "cd214dbf15487d80967389847ae2210468be6ebf", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_25": { + "inputs": { + "logos-nix": "logos-nix_154", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_26": { + "inputs": { + "logos-nix": "logos-nix_161", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "nix-bundle-lgx", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_27": { + "inputs": { + "logos-nix": "logos-nix_165", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "nix-bundle-lgx", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_28": { + "inputs": { + "logos-nix": "logos-nix_170", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "nix-bundle-appimage", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773961179, + "narHash": "sha256-bpaTvz//R8WFP5xnnDLv3a9l7unDmBwJjCewx3wCjzM=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "cd214dbf15487d80967389847ae2210468be6ebf", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_29": { + "inputs": { + "logos-nix": "logos-nix_171", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_3": { + "inputs": { + "logos-nix": "logos-nix_29", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "nix-bundle-lgx", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_30": { + "inputs": { + "logos-nix": "logos-nix_174", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "nix-bundle-lgx", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_31": { + "inputs": { + "logos-nix": "logos-nix_204", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "nix-bundle-appimage", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773961179, + "narHash": "sha256-bpaTvz//R8WFP5xnnDLv3a9l7unDmBwJjCewx3wCjzM=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "cd214dbf15487d80967389847ae2210468be6ebf", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_32": { + "inputs": { + "logos-nix": "logos-nix_205", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_33": { + "inputs": { + "logos-nix": "logos-nix_212", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "nix-bundle-lgx", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_34": { + "inputs": { + "logos-nix": "logos-nix_216", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-lgx", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_35": { + "inputs": { + "logos-nix": "logos-nix_221", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "nix-bundle-appimage", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773961179, + "narHash": "sha256-bpaTvz//R8WFP5xnnDLv3a9l7unDmBwJjCewx3wCjzM=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "cd214dbf15487d80967389847ae2210468be6ebf", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_36": { + "inputs": { + "logos-nix": "logos-nix_222", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_37": { + "inputs": { + "logos-nix": "logos-nix_225", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "nix-bundle-lgx", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_38": { + "inputs": { + "logos-nix": "logos-nix_248", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "nix-bundle-appimage", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773961179, + "narHash": "sha256-bpaTvz//R8WFP5xnnDLv3a9l7unDmBwJjCewx3wCjzM=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "cd214dbf15487d80967389847ae2210468be6ebf", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_39": { + "inputs": { + "logos-nix": "logos-nix_249", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_4": { + "inputs": { + "logos-nix": "logos-nix_33", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-lgx", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_40": { + "inputs": { + "logos-nix": "logos-nix_256", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "nix-bundle-lgx", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_41": { + "inputs": { + "logos-nix": "logos-nix_260", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-lgx", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_42": { + "inputs": { + "logos-nix": "logos-nix_265", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "nix-bundle-appimage", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773961179, + "narHash": "sha256-bpaTvz//R8WFP5xnnDLv3a9l7unDmBwJjCewx3wCjzM=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "cd214dbf15487d80967389847ae2210468be6ebf", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_43": { + "inputs": { + "logos-nix": "logos-nix_266", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_44": { + "inputs": { + "logos-nix": "logos-nix_269", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "nix-bundle-lgx", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_45": { + "inputs": { + "logos-nix": "logos-nix_276", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "nix-bundle-appimage", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773961179, + "narHash": "sha256-bpaTvz//R8WFP5xnnDLv3a9l7unDmBwJjCewx3wCjzM=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "cd214dbf15487d80967389847ae2210468be6ebf", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_46": { + "inputs": { + "logos-nix": "logos-nix_277", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-package-manager", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_47": { + "inputs": { + "logos-nix": "logos-nix_284", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "nix-bundle-lgx", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_48": { + "inputs": { + "logos-nix": "logos-nix_288", + "nixpkgs": [ + "logos-module-builder", + "nix-bundle-lgx", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_49": { + "inputs": { + "logos-nix": "logos-nix_293", + "nixpkgs": [ + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "nix-bundle-appimage", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773961179, + "narHash": "sha256-bpaTvz//R8WFP5xnnDLv3a9l7unDmBwJjCewx3wCjzM=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "cd214dbf15487d80967389847ae2210468be6ebf", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_5": { + "inputs": { + "logos-nix": "logos-nix_38", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "nix-bundle-appimage", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773961179, + "narHash": "sha256-bpaTvz//R8WFP5xnnDLv3a9l7unDmBwJjCewx3wCjzM=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "cd214dbf15487d80967389847ae2210468be6ebf", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_50": { + "inputs": { + "logos-nix": "logos-nix_294", + "nixpkgs": [ + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_51": { + "inputs": { + "logos-nix": "logos-nix_297", + "nixpkgs": [ + "logos-module-builder", + "nix-bundle-logos-module-install", + "nix-bundle-lgx", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_6": { + "inputs": { + "logos-nix": "logos-nix_39", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-package-manager", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_7": { + "inputs": { + "logos-nix": "logos-nix_42", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "nix-bundle-lgx", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_8": { + "inputs": { + "logos-nix": "logos-nix_49", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-package-manager", + "nix-bundle-appimage", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1773961179, + "narHash": "sha256-bpaTvz//R8WFP5xnnDLv3a9l7unDmBwJjCewx3wCjzM=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "cd214dbf15487d80967389847ae2210468be6ebf", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-dir_9": { + "inputs": { + "logos-nix": "logos-nix_50", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-package-manager", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, + "nix-bundle-lgx": { + "inputs": { + "logos-nix": "logos-nix_27", + "logos-package": "logos-package_2", + "nix-bundle-dir": "nix-bundle-dir_3", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777575520, + "narHash": "sha256-HOwg1N4NfGYq579IppVPpVjPDZfYQGndXGlcl1VRXXo=", + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "rev": "3c44d99b9d8dbd8a135b44b5b328e6175650305e", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "type": "github" + } + }, + "nix-bundle-lgx_10": { + "inputs": { + "logos-nix": "logos-nix_159", + "logos-package": "logos-package_18", + "nix-bundle-dir": "nix-bundle-dir_26", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "nix-bundle-lgx", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777575520, + "narHash": "sha256-HOwg1N4NfGYq579IppVPpVjPDZfYQGndXGlcl1VRXXo=", + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "rev": "3c44d99b9d8dbd8a135b44b5b328e6175650305e", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "type": "github" + } + }, + "nix-bundle-lgx_11": { + "inputs": { + "logos-nix": "logos-nix_163", + "logos-package": "logos-package_19", + "nix-bundle-dir": "nix-bundle-dir_27", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "nix-bundle-lgx", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777575520, + "narHash": "sha256-HOwg1N4NfGYq579IppVPpVjPDZfYQGndXGlcl1VRXXo=", + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "rev": "3c44d99b9d8dbd8a135b44b5b328e6175650305e", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "type": "github" + } + }, + "nix-bundle-lgx_12": { + "inputs": { + "logos-nix": "logos-nix_172", + "logos-package": "logos-package_21", + "nix-bundle-dir": "nix-bundle-dir_30", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "nix-bundle-lgx", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775836380, + "narHash": "sha256-XbBPcMuDFA/SxYVw9TIRQbhie5Vj5MqwdU+Gh1iR1LA=", + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "rev": "9d8f8602b1574ec9ac4c9b31ae0c92570221c268", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "type": "github" + } + }, + "nix-bundle-lgx_13": { + "inputs": { + "logos-nix": "logos-nix_210", + "logos-package": "logos-package_23", + "nix-bundle-dir": "nix-bundle-dir_33", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777575520, + "narHash": "sha256-HOwg1N4NfGYq579IppVPpVjPDZfYQGndXGlcl1VRXXo=", + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "rev": "3c44d99b9d8dbd8a135b44b5b328e6175650305e", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "type": "github" + } + }, + "nix-bundle-lgx_14": { + "inputs": { + "logos-nix": "logos-nix_214", + "logos-package": "logos-package_24", + "nix-bundle-dir": "nix-bundle-dir_34", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-lgx", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777575520, + "narHash": "sha256-HOwg1N4NfGYq579IppVPpVjPDZfYQGndXGlcl1VRXXo=", + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "rev": "3c44d99b9d8dbd8a135b44b5b328e6175650305e", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "type": "github" + } + }, + "nix-bundle-lgx_15": { + "inputs": { + "logos-nix": "logos-nix_223", + "logos-package": "logos-package_26", + "nix-bundle-dir": "nix-bundle-dir_37", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "nix-bundle-lgx", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775836380, + "narHash": "sha256-XbBPcMuDFA/SxYVw9TIRQbhie5Vj5MqwdU+Gh1iR1LA=", + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "rev": "9d8f8602b1574ec9ac4c9b31ae0c92570221c268", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "type": "github" + } + }, + "nix-bundle-lgx_16": { + "inputs": { + "logos-nix": "logos-nix_254", + "logos-package": "logos-package_28", + "nix-bundle-dir": "nix-bundle-dir_40", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777575520, + "narHash": "sha256-HOwg1N4NfGYq579IppVPpVjPDZfYQGndXGlcl1VRXXo=", + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "rev": "3c44d99b9d8dbd8a135b44b5b328e6175650305e", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "type": "github" + } + }, + "nix-bundle-lgx_17": { + "inputs": { + "logos-nix": "logos-nix_258", + "logos-package": "logos-package_29", + "nix-bundle-dir": "nix-bundle-dir_41", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-lgx", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777575520, + "narHash": "sha256-HOwg1N4NfGYq579IppVPpVjPDZfYQGndXGlcl1VRXXo=", + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "rev": "3c44d99b9d8dbd8a135b44b5b328e6175650305e", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "type": "github" + } + }, + "nix-bundle-lgx_18": { + "inputs": { + "logos-nix": "logos-nix_267", + "logos-package": "logos-package_31", + "nix-bundle-dir": "nix-bundle-dir_44", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "nix-bundle-lgx", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775836380, + "narHash": "sha256-XbBPcMuDFA/SxYVw9TIRQbhie5Vj5MqwdU+Gh1iR1LA=", + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "rev": "9d8f8602b1574ec9ac4c9b31ae0c92570221c268", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "type": "github" + } + }, + "nix-bundle-lgx_19": { + "inputs": { + "logos-nix": "logos-nix_282", + "logos-package": "logos-package_33", + "nix-bundle-dir": "nix-bundle-dir_47", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "nix-bundle-lgx", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777575520, + "narHash": "sha256-HOwg1N4NfGYq579IppVPpVjPDZfYQGndXGlcl1VRXXo=", + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "rev": "3c44d99b9d8dbd8a135b44b5b328e6175650305e", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "type": "github" + } + }, + "nix-bundle-lgx_2": { + "inputs": { + "logos-nix": "logos-nix_31", + "logos-package": "logos-package_3", + "nix-bundle-dir": "nix-bundle-dir_4", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-lgx", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777575520, + "narHash": "sha256-HOwg1N4NfGYq579IppVPpVjPDZfYQGndXGlcl1VRXXo=", + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "rev": "3c44d99b9d8dbd8a135b44b5b328e6175650305e", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "type": "github" + } + }, + "nix-bundle-lgx_20": { + "inputs": { + "logos-nix": "logos-nix_286", + "logos-package": "logos-package_34", + "nix-bundle-dir": "nix-bundle-dir_48", + "nixpkgs": [ + "logos-module-builder", + "nix-bundle-lgx", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777575520, + "narHash": "sha256-HOwg1N4NfGYq579IppVPpVjPDZfYQGndXGlcl1VRXXo=", + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "rev": "3c44d99b9d8dbd8a135b44b5b328e6175650305e", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "type": "github" + } + }, + "nix-bundle-lgx_21": { + "inputs": { + "logos-nix": "logos-nix_295", + "logos-package": "logos-package_36", + "nix-bundle-dir": "nix-bundle-dir_51", + "nixpkgs": [ + "logos-module-builder", + "nix-bundle-logos-module-install", + "nix-bundle-lgx", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775836380, + "narHash": "sha256-XbBPcMuDFA/SxYVw9TIRQbhie5Vj5MqwdU+Gh1iR1LA=", + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "rev": "9d8f8602b1574ec9ac4c9b31ae0c92570221c268", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "type": "github" + } + }, + "nix-bundle-lgx_3": { + "inputs": { + "logos-nix": "logos-nix_40", + "logos-package": "logos-package_5", + "nix-bundle-dir": "nix-bundle-dir_7", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "nix-bundle-lgx", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775836380, + "narHash": "sha256-XbBPcMuDFA/SxYVw9TIRQbhie5Vj5MqwdU+Gh1iR1LA=", + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "rev": "9d8f8602b1574ec9ac4c9b31ae0c92570221c268", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "type": "github" + } + }, + "nix-bundle-lgx_4": { + "inputs": { + "logos-nix": "logos-nix_87", + "logos-package": "logos-package_8", + "nix-bundle-dir": "nix-bundle-dir_12", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777575520, + "narHash": "sha256-HOwg1N4NfGYq579IppVPpVjPDZfYQGndXGlcl1VRXXo=", + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "rev": "3c44d99b9d8dbd8a135b44b5b328e6175650305e", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "type": "github" + } + }, + "nix-bundle-lgx_5": { + "inputs": { + "logos-nix": "logos-nix_91", + "logos-package": "logos-package_9", + "nix-bundle-dir": "nix-bundle-dir_13", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-lgx", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777575520, + "narHash": "sha256-HOwg1N4NfGYq579IppVPpVjPDZfYQGndXGlcl1VRXXo=", + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "rev": "3c44d99b9d8dbd8a135b44b5b328e6175650305e", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "type": "github" + } + }, + "nix-bundle-lgx_6": { + "inputs": { + "logos-nix": "logos-nix_100", + "logos-package": "logos-package_11", + "nix-bundle-dir": "nix-bundle-dir_16", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "nix-bundle-lgx", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775836380, + "narHash": "sha256-XbBPcMuDFA/SxYVw9TIRQbhie5Vj5MqwdU+Gh1iR1LA=", + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "rev": "9d8f8602b1574ec9ac4c9b31ae0c92570221c268", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "type": "github" + } + }, + "nix-bundle-lgx_7": { + "inputs": { + "logos-nix": "logos-nix_131", + "logos-package": "logos-package_13", + "nix-bundle-dir": "nix-bundle-dir_19", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777575520, + "narHash": "sha256-HOwg1N4NfGYq579IppVPpVjPDZfYQGndXGlcl1VRXXo=", + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "rev": "3c44d99b9d8dbd8a135b44b5b328e6175650305e", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "type": "github" + } + }, + "nix-bundle-lgx_8": { + "inputs": { + "logos-nix": "logos-nix_135", + "logos-package": "logos-package_14", + "nix-bundle-dir": "nix-bundle-dir_20", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-lgx", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777575520, + "narHash": "sha256-HOwg1N4NfGYq579IppVPpVjPDZfYQGndXGlcl1VRXXo=", + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "rev": "3c44d99b9d8dbd8a135b44b5b328e6175650305e", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "type": "github" + } + }, + "nix-bundle-lgx_9": { + "inputs": { + "logos-nix": "logos-nix_144", + "logos-package": "logos-package_16", + "nix-bundle-dir": "nix-bundle-dir_23", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "nix-bundle-lgx", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775836380, + "narHash": "sha256-XbBPcMuDFA/SxYVw9TIRQbhie5Vj5MqwdU+Gh1iR1LA=", + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "rev": "9d8f8602b1574ec9ac4c9b31ae0c92570221c268", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "type": "github" + } + }, + "nix-bundle-logos-module-install": { + "inputs": { + "logos-nix": "logos-nix_34", + "logos-package-manager": "logos-package-manager_2", + "nix-bundle-lgx": "nix-bundle-lgx_3", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775839388, + "narHash": "sha256-0QH146bzL2kKBYJq2yA35iPwug55j2xjEyKCS7tjhvg=", + "owner": "logos-co", + "repo": "nix-bundle-logos-module-install", + "rev": "89cc9ea91275396d589c767d76926459ac77ef20", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-logos-module-install", + "type": "github" + } + }, + "nix-bundle-logos-module-install_2": { + "inputs": { + "logos-nix": "logos-nix_94", + "logos-package-manager": "logos-package-manager_5", + "nix-bundle-lgx": "nix-bundle-lgx_6", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775839388, + "narHash": "sha256-0QH146bzL2kKBYJq2yA35iPwug55j2xjEyKCS7tjhvg=", + "owner": "logos-co", + "repo": "nix-bundle-logos-module-install", + "rev": "89cc9ea91275396d589c767d76926459ac77ef20", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-logos-module-install", + "type": "github" + } + }, + "nix-bundle-logos-module-install_3": { + "inputs": { + "logos-nix": "logos-nix_138", + "logos-package-manager": "logos-package-manager_7", + "nix-bundle-lgx": "nix-bundle-lgx_9", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775839388, + "narHash": "sha256-0QH146bzL2kKBYJq2yA35iPwug55j2xjEyKCS7tjhvg=", + "owner": "logos-co", + "repo": "nix-bundle-logos-module-install", + "rev": "89cc9ea91275396d589c767d76926459ac77ef20", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-logos-module-install", + "type": "github" + } + }, + "nix-bundle-logos-module-install_4": { + "inputs": { + "logos-nix": "logos-nix_166", + "logos-package-manager": "logos-package-manager_9", + "nix-bundle-lgx": "nix-bundle-lgx_12", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775839388, + "narHash": "sha256-0QH146bzL2kKBYJq2yA35iPwug55j2xjEyKCS7tjhvg=", + "owner": "logos-co", + "repo": "nix-bundle-logos-module-install", + "rev": "89cc9ea91275396d589c767d76926459ac77ef20", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-logos-module-install", + "type": "github" + } + }, + "nix-bundle-logos-module-install_5": { + "inputs": { + "logos-nix": "logos-nix_217", + "logos-package-manager": "logos-package-manager_11", + "nix-bundle-lgx": "nix-bundle-lgx_15", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775839388, + "narHash": "sha256-0QH146bzL2kKBYJq2yA35iPwug55j2xjEyKCS7tjhvg=", + "owner": "logos-co", + "repo": "nix-bundle-logos-module-install", + "rev": "89cc9ea91275396d589c767d76926459ac77ef20", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-logos-module-install", + "type": "github" + } + }, + "nix-bundle-logos-module-install_6": { + "inputs": { + "logos-nix": "logos-nix_261", + "logos-package-manager": "logos-package-manager_13", + "nix-bundle-lgx": "nix-bundle-lgx_18", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775839388, + "narHash": "sha256-0QH146bzL2kKBYJq2yA35iPwug55j2xjEyKCS7tjhvg=", + "owner": "logos-co", + "repo": "nix-bundle-logos-module-install", + "rev": "89cc9ea91275396d589c767d76926459ac77ef20", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-logos-module-install", + "type": "github" + } + }, + "nix-bundle-logos-module-install_7": { + "inputs": { + "logos-nix": "logos-nix_289", + "logos-package-manager": "logos-package-manager_15", + "nix-bundle-lgx": "nix-bundle-lgx_21", + "nixpkgs": [ + "logos-module-builder", + "nix-bundle-logos-module-install", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775839388, + "narHash": "sha256-0QH146bzL2kKBYJq2yA35iPwug55j2xjEyKCS7tjhvg=", + "owner": "logos-co", + "repo": "nix-bundle-logos-module-install", + "rev": "89cc9ea91275396d589c767d76926459ac77ef20", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-logos-module-install", + "type": "github" + } + }, "nixpkgs": { + "locked": { + "lastModified": 1769461804, + "narHash": "sha256-msG8SU5WsBUfVVa/9RPLaymvi5bI8edTavbIq3vRlhI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "bfc1b8a4574108ceef22f02bafcf6611380c100d", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_10": { "locked": { "lastModified": 1759036355, "narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=", @@ -10,15 +14557,5003 @@ "type": "github" }, "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_100": { + "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_101": { + "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_102": { + "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_103": { + "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_104": { + "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_105": { + "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_106": { + "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_107": { + "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_108": { + "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_109": { + "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_110": { + "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_111": { + "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_112": { + "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_113": { + "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_114": { + "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_115": { + "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_116": { + "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_117": { + "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_118": { + "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_119": { + "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_120": { + "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_121": { + "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_122": { + "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_123": { + "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_124": { + "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_125": { + "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_126": { + "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_127": { + "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_128": { + "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_129": { + "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": 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_130": { + "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_131": { + "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_132": { + "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_133": { + "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_134": { + "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_135": { + "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_136": { + "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_137": { + "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_138": { + "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_139": { + "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_14": { + "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_140": { + "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_141": { + "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_142": { + "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_143": { + "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_144": { + "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_145": { + "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_146": { + "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_147": { + "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_148": { + "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_149": { + "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_15": { + "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_150": { + "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_151": { + "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_152": { + "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_153": { + "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_154": { + "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_155": { + "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_156": { + "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_157": { + "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_158": { + "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_159": { + "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_16": { + "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_160": { + "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_161": { + "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_162": { + "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_163": { + "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_164": { + "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_165": { + "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_166": { + "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_167": { + "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_168": { + "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_169": { + "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_17": { + "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_170": { + "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_171": { + "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_172": { + "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_173": { + "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_174": { + "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_175": { + "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_176": { + "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_177": { + "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_178": { + "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_179": { + "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_18": { + "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_180": { + "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_181": { + "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_182": { + "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_183": { + "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_184": { + "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_185": { + "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_186": { + "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_187": { + "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_188": { + "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_189": { + "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_19": { + "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_190": { + "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_191": { + "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_192": { + "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_193": { + "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_194": { + "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_195": { + "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_196": { + "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_197": { + "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_198": { + "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_199": { + "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_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_20": { + "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_200": { + "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_201": { + "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_202": { + "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_203": { + "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_204": { + "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_205": { + "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_206": { + "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_207": { + "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_208": { + "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_209": { + "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_21": { + "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_210": { + "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_211": { + "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_212": { + "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_213": { + "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_214": { + "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_215": { + "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_216": { + "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_217": { + "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_218": { + "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_219": { + "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_22": { + "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_220": { + "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_221": { + "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_222": { + "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_223": { + "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_224": { + "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_225": { + "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_226": { + "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_227": { + "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_228": { + "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_229": { + "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_23": { + "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_230": { + "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_231": { + "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_232": { + "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_233": { + "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_234": { + "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_235": { + "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_236": { + "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_237": { + "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_238": { + "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_239": { + "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_24": { + "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_240": { + "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_241": { + "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_242": { + "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_243": { + "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_244": { + "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_245": { + "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_246": { + "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_247": { + "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_248": { + "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_249": { + "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_25": { + "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_250": { + "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_251": { + "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_252": { + "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_253": { + "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_254": { + "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_255": { + "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_256": { + "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_257": { + "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_258": { + "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_259": { + "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_26": { + "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_260": { + "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_261": { + "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_262": { + "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_263": { + "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_264": { + "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_265": { + "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_266": { + "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_267": { + "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_268": { + "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_269": { + "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_27": { + "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_270": { + "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_271": { + "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_272": { + "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_273": { + "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_274": { + "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_275": { + "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_276": { + "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_277": { + "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_278": { + "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_279": { + "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_28": { + "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_280": { + "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_281": { + "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_282": { + "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_283": { + "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_284": { + "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_285": { + "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_286": { + "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_287": { + "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_288": { + "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_289": { + "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_29": { + "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_290": { + "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_291": { + "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_292": { + "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_293": { + "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_294": { + "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_295": { + "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_296": { + "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_297": { + "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_298": { + "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_30": { + "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_31": { + "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_32": { + "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_33": { + "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_34": { + "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_35": { + "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_36": { + "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_37": { + "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_38": { + "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_39": { + "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_40": { + "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_41": { + "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_42": { + "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_43": { + "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_44": { + "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_45": { + "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_46": { + "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_47": { + "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_48": { + "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_49": { + "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_50": { + "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_51": { + "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_52": { + "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_53": { + "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_54": { + "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_55": { + "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_56": { + "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_57": { + "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_58": { + "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_59": { + "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": 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_60": { + "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_61": { + "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_62": { + "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_63": { + "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_64": { + "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_65": { + "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_66": { + "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_67": { + "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_68": { + "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_69": { + "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_7": { + "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_70": { + "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_71": { + "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_72": { + "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_73": { + "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_74": { + "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_75": { + "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_76": { + "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_77": { + "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_78": { + "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_79": { + "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_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_80": { + "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_81": { + "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_82": { + "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_83": { + "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_84": { + "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_85": { + "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_86": { + "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_87": { + "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_88": { + "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_89": { + "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" + } + }, + "nixpkgs_90": { + "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_91": { + "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_92": { + "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_93": { + "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_94": { + "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_95": { + "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_96": { + "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_97": { + "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_98": { + "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_99": { + "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" + } + }, + "process-stats": { + "inputs": { + "logos-nix": "logos-nix_23", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "process-stats", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775744159, + "narHash": "sha256-hTVAnDREBQOVHML6KU3K7Ge0CRBqnFIg7uYL7qDnD8o=", + "owner": "logos-co", + "repo": "process-stats", + "rev": "33ace1270f90c89b3565e803139c0970fcd1ce8f", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "process-stats", + "type": "github" + } + }, + "process-stats_2": { + "inputs": { + "logos-nix": "logos-nix_51", + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "logos-liblogos", + "process-stats", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775744159, + "narHash": "sha256-hTVAnDREBQOVHML6KU3K7Ge0CRBqnFIg7uYL7qDnD8o=", + "owner": "logos-co", + "repo": "process-stats", + "rev": "33ace1270f90c89b3565e803139c0970fcd1ce8f", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "process-stats", + "type": "github" + } + }, + "process-stats_3": { + "inputs": { + "logos-nix": "logos-nix_83", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "process-stats", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775744159, + "narHash": "sha256-hTVAnDREBQOVHML6KU3K7Ge0CRBqnFIg7uYL7qDnD8o=", + "owner": "logos-co", + "repo": "process-stats", + "rev": "33ace1270f90c89b3565e803139c0970fcd1ce8f", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "process-stats", + "type": "github" + } + }, + "process-stats_4": { + "inputs": { + "logos-nix": "logos-nix_127", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "process-stats", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775744159, + "narHash": "sha256-hTVAnDREBQOVHML6KU3K7Ge0CRBqnFIg7uYL7qDnD8o=", + "owner": "logos-co", + "repo": "process-stats", + "rev": "33ace1270f90c89b3565e803139c0970fcd1ce8f", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "process-stats", + "type": "github" + } + }, + "process-stats_5": { + "inputs": { + "logos-nix": "logos-nix_155", + "nixpkgs": [ + "lez_indexer_module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "process-stats", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775744159, + "narHash": "sha256-hTVAnDREBQOVHML6KU3K7Ge0CRBqnFIg7uYL7qDnD8o=", + "owner": "logos-co", + "repo": "process-stats", + "rev": "33ace1270f90c89b3565e803139c0970fcd1ce8f", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "process-stats", + "type": "github" + } + }, + "process-stats_6": { + "inputs": { + "logos-nix": "logos-nix_206", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "process-stats", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775744159, + "narHash": "sha256-hTVAnDREBQOVHML6KU3K7Ge0CRBqnFIg7uYL7qDnD8o=", + "owner": "logos-co", + "repo": "process-stats", + "rev": "33ace1270f90c89b3565e803139c0970fcd1ce8f", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "process-stats", + "type": "github" + } + }, + "process-stats_7": { + "inputs": { + "logos-nix": "logos-nix_250", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "logos-capability-module", + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "process-stats", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775744159, + "narHash": "sha256-hTVAnDREBQOVHML6KU3K7Ge0CRBqnFIg7uYL7qDnD8o=", + "owner": "logos-co", + "repo": "process-stats", + "rev": "33ace1270f90c89b3565e803139c0970fcd1ce8f", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "process-stats", + "type": "github" + } + }, + "process-stats_8": { + "inputs": { + "logos-nix": "logos-nix_278", + "nixpkgs": [ + "logos-module-builder", + "logos-standalone-app", + "logos-liblogos", + "process-stats", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1775744159, + "narHash": "sha256-hTVAnDREBQOVHML6KU3K7Ge0CRBqnFIg7uYL7qDnD8o=", + "owner": "logos-co", + "repo": "process-stats", + "rev": "33ace1270f90c89b3565e803139c0970fcd1ce8f", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "process-stats", + "type": "github" } }, "root": { "inputs": { - "nixpkgs": "nixpkgs" + "lez_indexer_module": "lez_indexer_module", + "logos-module-builder": "logos-module-builder_5" + } + }, + "rust-overlay": { + "inputs": { + "nixpkgs": [ + "lez_indexer_module", + "logos-execution-zone", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776395632, + "narHash": "sha256-Mi1uF5f2FsdBIvy+v7MtsqxD3Xjhd0ARJdwoqqqPtJo=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "8087ff1f47fff983a1fba70fa88b759f2fd8ae97", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" } } }, diff --git a/flake.nix b/flake.nix index 7cc5aee..50a6cff 100644 --- a/flake.nix +++ b/flake.nix @@ -1,61 +1,22 @@ { - description = "LEZ Explorer UI - A Qt block explorer for the Logos Execution Zone"; + description = "LEZ Explorer UI - a Qt block explorer for the Logos Execution Zone"; inputs = { - # Pinned to the EXACT nixpkgs revision basecamp resolves via logos-nix, so this - # in-process `type: ui` module links the identical qtbase (6.9.2) and does not - # load a second QtCore into basecamp's process (which aborts with "Must construct - # a QApplication before a QWidget"). Matching the version string is not enough — - # the store path must match, so this must be re-pinned whenever basecamp bumps its - # logos-nix/nixpkgs lock. - nixpkgs.url = "github:NixOS/nixpkgs/e9f00bd893984bc8ce46c895c3bf7cac95331127"; + logos-module-builder.url = "github:logos-co/logos-module-builder"; + + # The provider it reads from, over the Logos protocol. Input name MUST match + # the metadata.json "dependencies" entry. For local development against an + # un-pushed branch, override with a path: + # lez_indexer_module.url = "path:../logos-execution-zone-indexer-module"; + # TODO: use the correct branch & repo name afterwards + lez_indexer_module.url = "github:logos-blockchain/logos-execution-zone-indexer-module/erhant/migr-to-logos-module-builder"; }; - outputs = { self, nixpkgs }: - let - systems = [ "aarch64-darwin" "x86_64-darwin" "aarch64-linux" "x86_64-linux" ]; - forAllSystems = f: nixpkgs.lib.genAttrs systems (system: f { - pkgs = import nixpkgs { inherit system; }; - }); - in - { - packages = forAllSystems ({ pkgs }: - let - common = import ./nix/default.nix { inherit pkgs; }; - src = ./.; - - lib = import ./nix/lib.nix { inherit pkgs common src; }; - - app = import ./nix/app.nix { - inherit pkgs common src; - lezExplorerUI = lib; - }; - in - { - lez-explorer-ui-lib = lib; - app = app; - lib = lib; - default = lib; - } - ); - - devShells = forAllSystems ({ pkgs }: { - default = pkgs.mkShell { - nativeBuildInputs = [ - pkgs.cmake - pkgs.ninja - pkgs.pkg-config - ]; - buildInputs = [ - pkgs.qt6.qtbase - pkgs.qt6.qtsvg - pkgs.qt6.qtwebsockets - ]; - - shellHook = '' - echo "LEZ Explorer UI development environment" - ''; - }; - }); + outputs = + inputs@{ logos-module-builder, ... }: + logos-module-builder.lib.mkLogosModule { + src = ./.; + configFile = ./metadata.json; + flakeInputs = inputs; }; } diff --git a/metadata.json b/metadata.json index 0907f1f..e976608 100644 --- a/metadata.json +++ b/metadata.json @@ -1,10 +1,22 @@ { "name": "lez_explorer_ui", "version": "1.0.0", - "description": "LEZ Explorer UI - A block explorer for the Logos Execution Zone", "type": "ui", - "main": "lez_explorer_ui", - "dependencies": [], "category": "explorer", - "capabilities": ["ui_components"] + "description": "LEZ Explorer UI - A block explorer for the Logos Execution Zone", + "main": "lez_explorer_ui_plugin", + "dependencies": ["lez_indexer_module"], + "nix": { + "packages": { + "build": ["qt6.qtsvg"], + "runtime": ["qt6.qtsvg"] + }, + "external_libraries": [], + "cmake": { + "find_packages": ["Qt6Widgets", "Qt6Svg", "Qt6SvgWidgets", "Qt6Network"], + "extra_sources": [], + "extra_include_dirs": ["interfaces"], + "extra_link_libraries": ["Qt6::Widgets", "Qt6::Svg", "Qt6::SvgWidgets", "Qt6::Network"] + } + } } diff --git a/nix/app.nix b/nix/app.nix deleted file mode 100644 index aa087f3..0000000 --- a/nix/app.nix +++ /dev/null @@ -1,65 +0,0 @@ -# Builds the lez-explorer-ui-app standalone application -{ pkgs, common, src, lezExplorerUI }: - -pkgs.stdenv.mkDerivation rec { - pname = "lez-explorer-ui-app"; - version = common.version; - - inherit src; - inherit (common) buildInputs meta; - - nativeBuildInputs = common.nativeBuildInputs ++ pkgs.lib.optionals pkgs.stdenv.isLinux [ pkgs.patchelf ]; - - # This is a GUI application, enable Qt wrapping - dontWrapQtApps = false; - - qtLibPath = pkgs.lib.makeLibraryPath ([ - pkgs.qt6.qtbase - pkgs.qt6.qtwebsockets - ] ++ pkgs.lib.optionals pkgs.stdenv.isLinux [ - pkgs.libglvnd - ]); - - qtPluginPath = "${pkgs.qt6.qtbase}/lib/qt-6/plugins:${pkgs.qt6.qtsvg}/lib/qt-6/plugins"; - - qtWrapperArgs = [ - "--prefix" "LD_LIBRARY_PATH" ":" qtLibPath - "--prefix" "QT_PLUGIN_PATH" ":" qtPluginPath - ]; - - configurePhase = '' - runHook preConfigure - cmake -S app -B build \ - -GNinja \ - -DCMAKE_BUILD_TYPE=Release - runHook postConfigure - ''; - - buildPhase = '' - runHook preBuild - cmake --build build - runHook postBuild - ''; - - installPhase = '' - runHook preInstall - - mkdir -p $out/bin $out/lib - - # Install the app binary - cp build/bin/lez-explorer-ui-app $out/bin/ - - # Determine platform-specific plugin extension - OS_EXT="so" - case "$(uname -s)" in - Darwin) OS_EXT="dylib";; - esac - - # Copy the explorer UI plugin to root directory (loaded relative to binary) - if [ -f "${lezExplorerUI}/lib/lez_explorer_ui.$OS_EXT" ]; then - cp -L "${lezExplorerUI}/lib/lez_explorer_ui.$OS_EXT" "$out/" - fi - - runHook postInstall - ''; -} diff --git a/nix/default.nix b/nix/default.nix deleted file mode 100644 index 5cdd511..0000000 --- a/nix/default.nix +++ /dev/null @@ -1,29 +0,0 @@ -# Common build configuration shared across all packages -{ pkgs }: - -{ - pname = "lez-explorer-ui"; - version = "1.0.0"; - - nativeBuildInputs = [ - pkgs.cmake - pkgs.ninja - pkgs.pkg-config - pkgs.qt6.wrapQtAppsHook - ]; - - buildInputs = [ - pkgs.qt6.qtbase - pkgs.qt6.qtsvg - pkgs.qt6.qtwebsockets - ]; - - cmakeFlags = [ - "-GNinja" - ]; - - meta = with pkgs.lib; { - description = "LEZ Explorer UI - A Qt block explorer for the Logos Execution Zone"; - platforms = platforms.unix; - }; -} diff --git a/nix/lib.nix b/nix/lib.nix deleted file mode 100644 index 1eb260e..0000000 --- a/nix/lib.nix +++ /dev/null @@ -1,45 +0,0 @@ -# Builds the lez-explorer-ui library (Qt plugin) -{ pkgs, common, src }: - -pkgs.stdenv.mkDerivation { - pname = "${common.pname}-lib"; - version = common.version; - - inherit src; - inherit (common) buildInputs cmakeFlags meta; - nativeBuildInputs = common.nativeBuildInputs; - - # Library (Qt plugin), not an app — no Qt wrapper - dontWrapQtApps = true; - - configurePhase = '' - runHook preConfigure - cmake -S . -B build \ - -GNinja \ - -DCMAKE_BUILD_TYPE=Release - runHook postConfigure - ''; - - buildPhase = '' - runHook preBuild - cmake --build build - runHook postBuild - ''; - - installPhase = '' - runHook preInstall - - mkdir -p $out/lib - if [ -f build/modules/lez_explorer_ui.dylib ]; then - cp build/modules/lez_explorer_ui.dylib $out/lib/ - elif [ -f build/modules/lez_explorer_ui.so ]; then - cp build/modules/lez_explorer_ui.so $out/lib/ - else - echo "Error: No library file found in build/modules/" - ls -la build/modules/ 2>/dev/null || true - exit 1 - fi - - runHook postInstall - ''; -} diff --git a/src/ExplorerPlugin.cpp b/src/ExplorerPlugin.cpp index 58aaeb5..c547f52 100644 --- a/src/ExplorerPlugin.cpp +++ b/src/ExplorerPlugin.cpp @@ -6,9 +6,9 @@ ExplorerPlugin::ExplorerPlugin(QObject* parent) { } -QWidget* ExplorerPlugin::createWidget(LogosAPI* /*logosAPI*/) +QWidget* ExplorerPlugin::createWidget(LogosAPI* logosAPI) { - return new ExplorerWidget(); + return new ExplorerWidget(logosAPI); } void ExplorerPlugin::destroyWidget(QWidget* widget) diff --git a/src/ExplorerWidget.cpp b/src/ExplorerWidget.cpp index 4859933..4576f5e 100644 --- a/src/ExplorerWidget.cpp +++ b/src/ExplorerWidget.cpp @@ -1,6 +1,6 @@ #include "ExplorerWidget.h" #include "Style.h" -#include "services/RpcIndexerService.h" +#include "services/LpIndexerService.h" #include "widgets/NavigationBar.h" #include "widgets/SearchBar.h" #include "pages/MainPage.h" @@ -12,9 +12,9 @@ #include #include -ExplorerWidget::ExplorerWidget(QWidget* parent) +ExplorerWidget::ExplorerWidget(LogosAPI* logosAPI, QWidget* parent) : QWidget(parent) - , m_indexer(std::make_unique()) + , m_indexer(std::make_unique(logosAPI)) { setStyleSheet(Style::appBackground()); diff --git a/src/ExplorerWidget.h b/src/ExplorerWidget.h index b91f885..bbe91e3 100644 --- a/src/ExplorerWidget.h +++ b/src/ExplorerWidget.h @@ -11,6 +11,7 @@ class QStackedWidget; class NavigationBar; class SearchBar; class MainPage; +class LogosAPI; struct NavHome {}; struct NavBlock { quint64 blockId; }; @@ -23,7 +24,7 @@ class ExplorerWidget : public QWidget { Q_OBJECT public: - explicit ExplorerWidget(QWidget* parent = nullptr); + explicit ExplorerWidget(LogosAPI* logosAPI = nullptr, QWidget* parent = nullptr); ~ExplorerWidget() override; private: diff --git a/src/models/Block.h b/src/models/Block.h index 6c9acce..e47a6ca 100644 --- a/src/models/Block.h +++ b/src/models/Block.h @@ -30,5 +30,4 @@ struct Block { QString signature; QVector transactions; BedrockStatus bedrockStatus = BedrockStatus::Pending; - QString bedrockParentId; }; diff --git a/src/pages/MainPage.cpp b/src/pages/MainPage.cpp index 8dbdb0b..5d5ee48 100644 --- a/src/pages/MainPage.cpp +++ b/src/pages/MainPage.cpp @@ -24,12 +24,12 @@ MainPage::MainPage(IndexerService* indexer, QWidget* parent) auto* endpointRow = new QHBoxLayout(); endpointRow->setSpacing(8); - auto* endpointLabel = new QLabel("Indexer RPC", this); + auto* endpointLabel = new QLabel("Indexer config", this); endpointLabel->setStyleSheet(Style::mutedText() + " font-weight: bold;"); m_indexerEndpointInput = new QLineEdit(this); m_indexerEndpointInput->setText(m_indexer->endpoint()); - m_indexerEndpointInput->setPlaceholderText(IndexerService::defaultEndpoint()); + m_indexerEndpointInput->setPlaceholderText("absolute path to indexer_config.json (blank = already running)"); m_indexerEndpointInput->setMinimumHeight(34); m_indexerEndpointInput->setStyleSheet(Style::searchInput()); @@ -358,13 +358,10 @@ void MainPage::loadMoreBlocks() void MainPage::applyIndexerEndpoint() { - QString endpoint = m_indexerEndpointInput->text().trimmed(); - if (endpoint.isEmpty()) { - endpoint = IndexerService::defaultEndpoint(); - m_indexerEndpointInput->setText(endpoint); - } - - m_indexer->setEndpoint(endpoint); + // The "endpoint" is the indexer config path now; blank is valid and means + // "the indexer is already running" (start is idempotent provider-side). + const QString configPath = m_indexerEndpointInput->text().trimmed(); + m_indexer->setEndpoint(configPath); clearSearchResults(); refresh(); } diff --git a/src/services/IndexerService.h b/src/services/IndexerService.h index 565104e..a5ffc8a 100644 --- a/src/services/IndexerService.h +++ b/src/services/IndexerService.h @@ -21,9 +21,12 @@ public: explicit IndexerService(QObject* parent = nullptr) : QObject(parent) {} ~IndexerService() override = default; + // Over the Logos protocol the "endpoint" is repurposed to the indexer + // config path (absolute path to indexer_config.json); blank means the + // indexer is already running. No network URL is involved anymore. static QString defaultEndpoint() { - return "ws://localhost:8779"; + return QString(); } virtual QString endpoint() const = 0; diff --git a/src/services/LpIndexerService.cpp b/src/services/LpIndexerService.cpp new file mode 100644 index 0000000..4e5097e --- /dev/null +++ b/src/services/LpIndexerService.cpp @@ -0,0 +1,438 @@ +#include "LpIndexerService.h" + +#include "logos_api.h" +#include "logos_api_client.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +namespace { + +constexpr auto kModuleName = "lez_indexer_module"; +constexpr int kPollIntervalMs = 2000; + +// 64/128-bit values arrive as decimal strings (to dodge JSON double precision +// loss), but be lenient and also accept a JSON number. +quint64 jsonU64(const QJsonValue& value) +{ + if (value.isString()) { + bool ok = false; + const qulonglong parsed = value.toString().toULongLong(&ok); + return ok ? parsed : 0; + } + if (value.isDouble()) { + const double number = value.toDouble(); + return number > 0.0 ? static_cast(number) : 0; + } + return 0; +} + +QString jsonStr(const QJsonValue& value) +{ + if (value.isString()) { + return value.toString(); + } + if (value.isDouble()) { + return QString::number(static_cast(value.toDouble())); + } + return {}; +} + +QDateTime timestampFromSeconds(quint64 timestamp) +{ + QDateTime dt; + // Tolerate either seconds or milliseconds since epoch. + if (timestamp > 1000000000000ULL) { + dt = QDateTime::fromMSecsSinceEpoch(static_cast(timestamp), QTimeZone::UTC); + } else { + dt = QDateTime::fromSecsSinceEpoch(static_cast(timestamp), QTimeZone::UTC); + } + return dt.isValid() ? dt : QDateTime::currentDateTimeUtc(); +} + +} // namespace + +LpIndexerService::LpIndexerService(LogosAPI* logosAPI, const QString& configPath, const QString& port, QObject* parent) + : IndexerService(parent) + , m_logosAPI(logosAPI) + , m_configPath(configPath.trimmed()) + , m_port(port.trimmed()) +{ + if (m_logosAPI) { + m_client = m_logosAPI->getClient(kModuleName); + } + if (!m_client) { + qWarning() << "LpIndexerService: no LogosAPI client for" << kModuleName; + } + + // Best-effort boot (no-op provider-side if already running, or if no config). + startIndexer(); + + // The provider has no push event — poll the tip for live head updates. + m_pollTimer = new QTimer(this); + m_pollTimer->setInterval(kPollIntervalMs); + connect(m_pollTimer, &QTimer::timeout, this, &LpIndexerService::pollForNewBlocks); + m_pollTimer->start(); +} + +LpIndexerService::~LpIndexerService() = default; + +QString LpIndexerService::endpoint() const +{ + return m_configPath; +} + +void LpIndexerService::setEndpoint(const QString& endpoint) +{ + const QString trimmed = endpoint.trimmed(); + if (trimmed == m_configPath) { + return; + } + m_configPath = trimmed; + // Re-baseline the live poller; the (re)started indexer may ingest afresh. + m_lastNotifiedBlockId = 0; + m_polledOnce = false; + startIndexer(); +} + +void LpIndexerService::startIndexer() +{ + if (!m_client || m_configPath.isEmpty()) { + return; // assume the indexer was started elsewhere + } + const QVariant result = m_client->invokeRemoteMethod(kModuleName, "start_indexer", m_configPath, m_port); + const int code = result.isValid() ? result.toInt() : -1; + if (code != 0) { + qWarning() << "LpIndexerService: start_indexer returned" << code << "for" << m_configPath; + } +} + +std::optional LpIndexerService::getAccount(const QString& accountId) +{ + if (!m_client) { + return std::nullopt; + } + const QVariant r = m_client->invokeRemoteMethod(kModuleName, "getAccount", accountId); + return parseAccount(accountId, r.isValid() ? r.toString() : QString()); +} + +std::optional LpIndexerService::getBlockById(quint64 blockId) +{ + if (!m_client) { + return std::nullopt; + } + const QVariant r = m_client->invokeRemoteMethod(kModuleName, "getBlockById", QString::number(blockId)); + return parseBlock(r.isValid() ? r.toString() : QString()); +} + +std::optional LpIndexerService::getBlockByHash(const QString& hash) +{ + if (!m_client) { + return std::nullopt; + } + const QVariant r = m_client->invokeRemoteMethod(kModuleName, "getBlockByHash", hash); + return parseBlock(r.isValid() ? r.toString() : QString()); +} + +std::optional LpIndexerService::getTransaction(const QString& hash) +{ + if (!m_client) { + return std::nullopt; + } + const QVariant r = m_client->invokeRemoteMethod(kModuleName, "getTransaction", hash); + const QString json = r.isValid() ? r.toString() : QString(); + if (json.isEmpty()) { + return std::nullopt; + } + const QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8()); + if (!doc.isObject()) { + return std::nullopt; + } + return parseTransaction(doc.object()); +} + +QVector LpIndexerService::getBlocks(std::optional before, int limit) +{ + if (!m_client) { + return {}; + } + const QString beforeArg = before.has_value() ? QString::number(*before) : QString(); + const QVariant r = m_client->invokeRemoteMethod(kModuleName, "getBlocks", beforeArg, QString::number(limit)); + const QString json = r.isValid() ? r.toString() : QString(); + if (json.isEmpty()) { + return {}; + } + + const QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8()); + if (!doc.isArray()) { + return {}; + } + + QVector blocks; + const QJsonArray array = doc.array(); + blocks.reserve(array.size()); + for (const auto& item : array) { + if (auto block = parseBlockObject(item.toObject())) { + blocks.append(*block); + } + } + return blocks; +} + +quint64 LpIndexerService::getLastFinalizedBlockId() +{ + if (!m_client) { + return 0; + } + const QVariant r = m_client->invokeRemoteMethod(kModuleName, "getLastFinalizedBlockId"); + if (!r.isValid()) { + return 0; + } + bool ok = false; + const qulonglong parsed = r.toString().toULongLong(&ok); + return ok ? parsed : 0; +} + +QVector LpIndexerService::getTransactionsByAccount(const QString& accountId, int offset, int limit) +{ + if (!m_client) { + return {}; + } + const QVariant r = m_client->invokeRemoteMethod( + kModuleName, "getTransactionsByAccount", accountId, QString::number(offset), QString::number(limit)); + const QString json = r.isValid() ? r.toString() : QString(); + if (json.isEmpty()) { + return {}; + } + + const QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8()); + if (!doc.isArray()) { + return {}; + } + + QVector transactions; + const QJsonArray array = doc.array(); + transactions.reserve(array.size()); + for (const auto& item : array) { + if (auto tx = parseTransaction(item.toObject())) { + transactions.append(*tx); + } + } + return transactions; +} + +SearchResults LpIndexerService::search(const QString& query) +{ + SearchResults results; + const QString trimmed = query.trimmed(); + if (trimmed.isEmpty()) { + return results; + } + + static const QRegularExpression hashRegex(QStringLiteral("^[0-9a-fA-F]{64}$")); + if (hashRegex.match(trimmed).hasMatch()) { + if (auto block = getBlockByHash(trimmed)) { + results.blocks.append(*block); + } + if (auto tx = getTransaction(trimmed)) { + results.transactions.append(*tx); + } + if (auto account = getAccount(trimmed)) { + results.accounts.append(*account); + } + } + + bool ok = false; + const quint64 blockId = trimmed.toULongLong(&ok); + if (ok) { + if (auto block = getBlockById(blockId)) { + const bool duplicate = std::any_of(results.blocks.begin(), results.blocks.end(), + [blockId](const Block& existing) { return existing.blockId == blockId; }); + if (!duplicate) { + results.blocks.append(*block); + } + } + } + + return results; +} + +void LpIndexerService::pollForNewBlocks() +{ + const quint64 latest = getLastFinalizedBlockId(); + if (latest == 0) { + return; + } + + // First successful poll establishes a baseline without re-emitting blocks + // the initial MainPage::refresh already loaded. + if (!m_polledOnce) { + m_polledOnce = true; + m_lastNotifiedBlockId = latest; + return; + } + + if (latest <= m_lastNotifiedBlockId) { + return; + } + + // For a large jump (or a gap), emit only the new head: MainPage::onNewBlock + // detects the discontinuity and rebuilds the recent list from the backend. + if (latest - m_lastNotifiedBlockId > 8) { + if (auto block = getBlockById(latest)) { + m_lastNotifiedBlockId = latest; + emit newBlockAdded(*block); + } + return; + } + + for (quint64 id = m_lastNotifiedBlockId + 1; id <= latest; ++id) { + if (auto block = getBlockById(id)) { + emit newBlockAdded(*block); + } + } + m_lastNotifiedBlockId = latest; +} + +std::optional LpIndexerService::parseBlock(const QString& json) const +{ + if (json.isEmpty()) { + return std::nullopt; + } + const QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8()); + if (!doc.isObject()) { + return std::nullopt; + } + return parseBlockObject(doc.object()); +} + +std::optional LpIndexerService::parseBlockObject(const QJsonObject& obj) const +{ + if (obj.isEmpty()) { + return std::nullopt; + } + + Block block; + block.blockId = jsonU64(obj.value("block_id")); + block.hash = jsonStr(obj.value("hash")); + block.prevBlockHash = jsonStr(obj.value("prev_block_hash")); + block.signature = jsonStr(obj.value("signature")); + block.timestamp = timestampFromSeconds(jsonU64(obj.value("timestamp"))); + + const QString status = obj.value("bedrock_status").toString("Pending"); + if (status == "Finalized") { + block.bedrockStatus = BedrockStatus::Finalized; + } else if (status == "Safe") { + block.bedrockStatus = BedrockStatus::Safe; + } else { + block.bedrockStatus = BedrockStatus::Pending; + } + + const QJsonArray txArray = obj.value("transactions").toArray(); + block.transactions.reserve(txArray.size()); + for (const auto& txValue : txArray) { + if (auto tx = parseTransaction(txValue.toObject())) { + block.transactions.append(*tx); + } + } + + return block; +} + +std::optional LpIndexerService::parseTransaction(const QJsonObject& obj) const +{ + if (obj.isEmpty()) { + return std::nullopt; + } + + Transaction tx; + tx.hash = jsonStr(obj.value("hash")); + + const QString type = obj.value("type").toString(); + + auto appendAccounts = [&tx](const QJsonArray& accounts) { + for (const auto& entry : accounts) { + const QJsonObject account = entry.toObject(); + AccountRef ref; + ref.accountId = jsonStr(account.value("account_id")); + ref.nonce = jsonStr(account.value("nonce")); + if (ref.nonce.isEmpty()) { + ref.nonce = "0"; + } + tx.accounts.append(ref); + } + }; + + if (type == "Public") { + tx.type = TransactionType::Public; + tx.programId = jsonStr(obj.value("program_id")); + appendAccounts(obj.value("accounts").toArray()); + + const QJsonArray instructionData = obj.value("instruction_data").toArray(); + tx.instructionData.reserve(instructionData.size()); + for (const auto& v : instructionData) { + tx.instructionData.append(static_cast(jsonU64(v))); + } + tx.signatureCount = obj.value("signature_count").toInt(); + return tx; + } + + if (type == "PrivacyPreserving") { + tx.type = TransactionType::PrivacyPreserving; + appendAccounts(obj.value("accounts").toArray()); + tx.newCommitmentsCount = obj.value("new_commitments_count").toInt(); + tx.nullifiersCount = obj.value("nullifiers_count").toInt(); + tx.encryptedStatesCount = obj.value("encrypted_states_count").toInt(); + tx.validityWindowStart = jsonU64(obj.value("validity_window_start")); + tx.validityWindowEnd = jsonU64(obj.value("validity_window_end")); + tx.signatureCount = obj.value("signature_count").toInt(); + tx.proofSizeBytes = obj.value("proof_size").toInt(); + return tx; + } + + if (type == "ProgramDeployment") { + tx.type = TransactionType::ProgramDeployment; + tx.bytecodeSizeBytes = obj.value("bytecode_size").toInt(); + return tx; + } + + return std::nullopt; +} + +std::optional LpIndexerService::parseAccount(const QString& accountId, const QString& json) const +{ + if (json.isEmpty()) { + return std::nullopt; + } + const QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8()); + if (!doc.isObject()) { + return std::nullopt; + } + const QJsonObject obj = doc.object(); + + Account account; + account.accountId = accountId; // provider payload omits it; inject the queried id + account.programOwner = jsonStr(obj.value("program_owner")); + account.balance = jsonStr(obj.value("balance")); + account.nonce = jsonStr(obj.value("nonce")); + account.dataSizeBytes = obj.value("data_size").toInt(); + + if (account.balance.isEmpty()) { + account.balance = "0"; + } + if (account.nonce.isEmpty()) { + account.nonce = "0"; + } + + return account; +} diff --git a/src/services/LpIndexerService.h b/src/services/LpIndexerService.h new file mode 100644 index 0000000..3d94754 --- /dev/null +++ b/src/services/LpIndexerService.h @@ -0,0 +1,69 @@ +#pragma once + +#include "IndexerService.h" + +#include +#include + +class LogosAPI; +class LogosAPIClient; +class QTimer; +class QJsonObject; + +// IndexerService implementation that talks to `lez_indexer_module` IN-PROCESS +// over the Logos protocol (Qt Remote Objects), via +// LogosAPI::getClient(...)->invokeRemoteMethod(...). Replaces the old WebSocket +// JSON-RPC RpcIndexerService. +// +// The provider returns a flat, compact JSON schema (hex hashes; 64/128-bit +// values as decimal strings; counts/sizes as numbers; "" == not-found), which +// differs from the old RPC schema — so this class carries its OWN parsers. +// +// The provider exposes no new-block push event, so live head updates are POLLED +// on a 2 s timer over getLastFinalizedBlockId. +// +// `endpoint()`/`setEndpoint()` are repurposed to the indexer CONFIG PATH (an +// absolute path to indexer_config.json) used to best-effort start the indexer; +// blank means "the indexer is already running" (start is idempotent provider-side). +class LpIndexerService : public IndexerService { + Q_OBJECT + +public: + explicit LpIndexerService( + LogosAPI* logosAPI, + const QString& configPath = QString(), + const QString& port = QStringLiteral("8779"), + QObject* parent = nullptr + ); + ~LpIndexerService() override; + + QString endpoint() const override; // the indexer config path + void setEndpoint(const QString& endpoint) override; // set config path + (re)start + + std::optional getAccount(const QString& accountId) override; + std::optional getBlockById(quint64 blockId) override; + std::optional getBlockByHash(const QString& hash) override; + std::optional getTransaction(const QString& hash) override; + QVector getBlocks(std::optional before, int limit) override; + quint64 getLastFinalizedBlockId() override; + QVector getTransactionsByAccount(const QString& accountId, int offset, int limit) override; + SearchResults search(const QString& query) override; + +private: + void startIndexer(); + void pollForNewBlocks(); + + // Parsers for the provider's compact schema. + std::optional parseBlock(const QString& json) const; + std::optional parseBlockObject(const QJsonObject& obj) const; + std::optional parseTransaction(const QJsonObject& obj) const; + std::optional parseAccount(const QString& accountId, const QString& json) const; + + LogosAPI* m_logosAPI = nullptr; + LogosAPIClient* m_client = nullptr; + QString m_configPath; + QString m_port; + QTimer* m_pollTimer = nullptr; + quint64 m_lastNotifiedBlockId = 0; + bool m_polledOnce = false; +}; diff --git a/src/services/MockIndexerService.cpp b/src/services/MockIndexerService.cpp index 2ec3059..2176feb 100644 --- a/src/services/MockIndexerService.cpp +++ b/src/services/MockIndexerService.cpp @@ -63,7 +63,6 @@ Block MockIndexerService::generateBlock(quint64 blockId, const QString& prevHash block.hash = randomHash(); block.timestamp = QDateTime::currentDateTimeUtc(); block.signature = randomHexString(64); - block.bedrockParentId = randomHexString(32); block.bedrockStatus = BedrockStatus::Pending; int txCount = rng->bounded(1, 6); @@ -218,7 +217,6 @@ void MockIndexerService::generateData() block.hash = randomHash(); block.timestamp = timestamp; block.signature = randomHexString(64); - block.bedrockParentId = randomHexString(32); // Older blocks are finalized, middle ones safe, recent ones pending if (id <= 15) { diff --git a/src/services/RpcIndexerService.cpp b/src/services/RpcIndexerService.cpp deleted file mode 100644 index 690af73..0000000 --- a/src/services/RpcIndexerService.cpp +++ /dev/null @@ -1,741 +0,0 @@ -#include "RpcIndexerService.h" - -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -namespace { - -QString compactJson(const QJsonValue& value) -{ - if (value.isObject()) { - return QString::fromUtf8(QJsonDocument(value.toObject()).toJson(QJsonDocument::Compact)); - } - if (value.isArray()) { - return QString::fromUtf8(QJsonDocument(value.toArray()).toJson(QJsonDocument::Compact)); - } - return {}; -} - -quint64 extractFinalizedBlockId(const QJsonValue& value) -{ - if (value.isDouble()) { - const double number = value.toDouble(); - if (number <= 0.0) { - return 0; - } - return static_cast(number); - } - - if (value.isString()) { - bool ok = false; - const qulonglong parsed = value.toString().toULongLong(&ok); - return ok ? parsed : 0; - } - - if (value.isObject()) { - const QJsonObject obj = value.toObject(); - if (obj.contains("block_id")) { - return extractFinalizedBlockId(obj.value("block_id")); - } - if (obj.contains("blockId")) { - return extractFinalizedBlockId(obj.value("blockId")); - } - if (obj.contains("id")) { - return extractFinalizedBlockId(obj.value("id")); - } - if (obj.contains("result")) { - return extractFinalizedBlockId(obj.value("result")); - } - if (obj.contains("header")) { - return extractFinalizedBlockId(obj.value("header").toObject().value("block_id")); - } - } - - if (value.isArray()) { - const QJsonArray arr = value.toArray(); - for (const auto& item : arr) { - const quint64 blockId = extractFinalizedBlockId(item); - if (blockId) { - return blockId; - } - } - } - - return 0; -} - -} // namespace - -RpcIndexerService::RpcIndexerService(const QString& endpoint, QObject* parent) - : IndexerService(parent) - , m_endpoint(QUrl(endpoint.trimmed())) -{ - connect(&m_socket, &QWebSocket::connected, this, &RpcIndexerService::onConnected); - connect(&m_socket, &QWebSocket::disconnected, this, &RpcIndexerService::onDisconnected); - connect(&m_socket, &QWebSocket::textMessageReceived, this, &RpcIndexerService::onTextMessageReceived); -#if QT_VERSION >= QT_VERSION_CHECK(6, 5, 0) - connect(&m_socket, &QWebSocket::errorOccurred, this, &RpcIndexerService::onSocketError); -#else - connect(&m_socket, - QOverload::of(&QWebSocket::error), - this, - &RpcIndexerService::onSocketError); -#endif -} - -RpcIndexerService::~RpcIndexerService() -{ - m_socket.close(); -} - -QString RpcIndexerService::endpoint() const -{ - return m_endpoint.toString(); -} - -void RpcIndexerService::setEndpoint(const QString& endpoint) -{ - const QString trimmed = endpoint.trimmed(); - const QUrl newEndpoint(trimmed.isEmpty() ? IndexerService::defaultEndpoint() : trimmed); - if (!newEndpoint.isValid()) { - qWarning() << "Invalid indexer endpoint URL:" << endpoint; - return; - } - - if (newEndpoint == m_endpoint) { - return; - } - - m_endpoint = newEndpoint; - m_nextRequestId = 1; - m_responses.clear(); - m_subscriptionRequestId = 0; - m_subscriptionId = QJsonValue(); - m_subscriptionActive = false; - m_lastNotifiedBlockId = 0; - - for (auto it = m_waiters.begin(); it != m_waiters.end(); ++it) { - if (it.value()) { - it.value()->quit(); - } - } - m_waiters.clear(); - - if (m_socket.state() != QAbstractSocket::UnconnectedState) { - m_socket.close(); - } -} - -std::optional RpcIndexerService::getAccount(const QString& accountId) -{ - auto result = callRpc("getAccount", QJsonArray{accountId}); - if (!result) { - return std::nullopt; - } - return parseAccount(accountId, *result); -} - -std::optional RpcIndexerService::getBlockById(quint64 blockId) -{ - auto result = callRpc("getBlockById", QJsonArray{static_cast(blockId)}); - if (!result || result->isNull()) { - return std::nullopt; - } - return parseBlock(*result); -} - -std::optional RpcIndexerService::getBlockByHash(const QString& hash) -{ - auto result = callRpc("getBlockByHash", QJsonArray{hash}); - if (!result || result->isNull()) { - return std::nullopt; - } - return parseBlock(*result); -} - -std::optional RpcIndexerService::getTransaction(const QString& hash) -{ - auto result = callRpc("getTransaction", QJsonArray{hash}); - if (!result || result->isNull()) { - return std::nullopt; - } - return parseTransaction(*result); -} - -QVector RpcIndexerService::getBlocks(std::optional before, int limit) -{ - QJsonArray params; - if (before.has_value()) { - params.append(static_cast(*before)); - } else { - params.append(QJsonValue::Null); - } - params.append(limit); - - auto result = callRpc("getBlocks", params); - if (!result || !result->isArray()) { - return {}; - } - - QVector blocks; - const QJsonArray array = result->toArray(); - blocks.reserve(array.size()); - for (const auto& item : array) { - auto block = parseBlock(item); - if (block) { - blocks.append(*block); - } - } - return blocks; -} - -quint64 RpcIndexerService::getLastFinalizedBlockId() -{ - auto result = callRpc("getLastFinalizedBlockId"); - if (!result) { - return 0; - } - - const quint64 latestFinalized = jsonValueToU64(*result); - if (latestFinalized > m_lastNotifiedBlockId) { - m_lastNotifiedBlockId = latestFinalized; - } - - return latestFinalized; -} - -QVector RpcIndexerService::getTransactionsByAccount(const QString& accountId, int offset, int limit) -{ - auto result = callRpc("getTransactionsByAccount", QJsonArray{accountId, offset, limit}); - if (!result || !result->isArray()) { - return {}; - } - - QVector transactions; - const QJsonArray array = result->toArray(); - transactions.reserve(array.size()); - for (const auto& item : array) { - auto tx = parseTransaction(item); - if (tx) { - transactions.append(*tx); - } - } - return transactions; -} - -SearchResults RpcIndexerService::search(const QString& query) -{ - SearchResults results; - const QString trimmed = query.trimmed(); - if (trimmed.isEmpty()) { - return results; - } - - static const QRegularExpression hashRegex(QStringLiteral("^[0-9a-fA-F]{64}$")); - if (hashRegex.match(trimmed).hasMatch()) { - if (auto block = getBlockByHash(trimmed)) { - results.blocks.append(*block); - } - if (auto tx = getTransaction(trimmed)) { - results.transactions.append(*tx); - } - } - - if (auto account = getAccount(trimmed)) { - results.accounts.append(*account); - } - - bool ok = false; - const quint64 blockId = trimmed.toULongLong(&ok); - if (ok) { - if (auto block = getBlockById(blockId)) { - const auto duplicate = std::any_of(results.blocks.begin(), results.blocks.end(), - [blockId](const Block& existing) { - return existing.blockId == blockId; - }); - if (!duplicate) { - results.blocks.append(*block); - } - } - } - - return results; -} - -void RpcIndexerService::onConnected() -{ - qInfo() << "Connected to indexer RPC:" << m_endpoint; - ensureFinalizedBlocksSubscription(); -} - -void RpcIndexerService::onDisconnected() -{ - m_subscriptionRequestId = 0; - m_subscriptionId = QJsonValue(); - m_subscriptionActive = false; - - for (auto it = m_waiters.begin(); it != m_waiters.end(); ++it) { - if (it.value()) { - it.value()->quit(); - } - } - m_waiters.clear(); -} - -void RpcIndexerService::onSocketError(QAbstractSocket::SocketError error) -{ - Q_UNUSED(error); - qWarning() << "Indexer RPC socket error:" << m_socket.errorString(); -} - -void RpcIndexerService::onTextMessageReceived(const QString& message) -{ - QJsonParseError parseError; - const QJsonDocument doc = QJsonDocument::fromJson(message.toUtf8(), &parseError); - if (parseError.error != QJsonParseError::NoError || !doc.isObject()) { - qWarning() << "Invalid JSON-RPC payload:" << parseError.errorString(); - return; - } - - const QJsonObject payload = doc.object(); - - const QString method = payload.value("method").toString(); - if (method == "subscribeToFinalizedBlocks") { - const QJsonObject params = payload.value("params").toObject(); - if (params.isEmpty()) { - return; - } - - if (!m_subscriptionId.isNull() && params.contains("subscription")) { - const QJsonValue subscriptionValue = params.value("subscription"); - if (subscriptionValue != m_subscriptionId) { - return; - } - } - - handleFinalizedBlockNotification(params.value("result")); - return; - } - - if (!payload.contains("id")) { - return; - } - - const quint64 id = jsonValueToU64(payload.value("id")); - if (!id) { - return; - } - - if (id == m_subscriptionRequestId) { - m_subscriptionRequestId = 0; - if (payload.contains("error")) { - m_subscriptionActive = false; - m_subscriptionId = QJsonValue(); - qWarning() << "Failed to subscribe to finalized blocks:" << compactJson(payload.value("error")); - } else { - m_subscriptionId = payload.value("result"); - m_subscriptionActive = !m_subscriptionId.isUndefined() && !m_subscriptionId.isNull(); - if (!m_subscriptionActive) { - qWarning() << "Unexpected finalized blocks subscription result"; - } - } - } - - m_responses.insert(id, payload); - auto* waiter = m_waiters.value(id, nullptr); - if (waiter) { - waiter->quit(); - } -} - -void RpcIndexerService::handleFinalizedBlockNotification(const QJsonValue& result) -{ - const quint64 blockId = extractFinalizedBlockId(result); - if (!blockId || blockId <= m_lastNotifiedBlockId) { - return; - } - - QTimer::singleShot(0, this, [this, blockId]() { - fetchAndEmitFinalizedBlock(blockId); - }); -} - -void RpcIndexerService::fetchAndEmitFinalizedBlock(quint64 blockId) -{ - auto block = getBlockById(blockId); - if (block) { - if (blockId <= m_lastNotifiedBlockId) { - return; - } - m_lastNotifiedBlockId = blockId; - emit newBlockAdded(*block); - return; - } - - // Fallback to latest block snapshot if the specific id is briefly unavailable. - auto latestBlocks = getBlocks(std::nullopt, 1); - if (!latestBlocks.isEmpty()) { - const Block& latest = latestBlocks.first(); - if (latest.blockId >= blockId && latest.blockId > m_lastNotifiedBlockId) { - m_lastNotifiedBlockId = latest.blockId; - emit newBlockAdded(latest); - return; - } - } - - qWarning() << "Finalized block announced but not yet available:" << blockId; -} - -bool RpcIndexerService::ensureConnected() -{ - if (!m_endpoint.isValid() || m_endpoint.scheme().isEmpty()) { - qWarning() << "Invalid indexer RPC URL:" << m_endpoint; - return false; - } - - if (m_socket.state() == QAbstractSocket::ConnectedState) { - ensureFinalizedBlocksSubscription(); - return true; - } - - if (m_socket.state() == QAbstractSocket::UnconnectedState) { - m_socket.open(m_endpoint); - } - - QEventLoop waitLoop; - QTimer timeout; - bool timedOut = false; - - timeout.setSingleShot(true); - connect(&timeout, &QTimer::timeout, &waitLoop, [&]() { - timedOut = true; - waitLoop.quit(); - }); - - connect(&m_socket, &QWebSocket::connected, &waitLoop, &QEventLoop::quit); - connect(&m_socket, &QWebSocket::disconnected, &waitLoop, &QEventLoop::quit); -#if QT_VERSION >= QT_VERSION_CHECK(6, 5, 0) - connect(&m_socket, &QWebSocket::errorOccurred, &waitLoop, &QEventLoop::quit); -#else - connect(&m_socket, - QOverload::of(&QWebSocket::error), - &waitLoop, - &QEventLoop::quit); -#endif - - timeout.start(4000); - waitLoop.exec(); - - if (timedOut) { - qWarning() << "Timeout connecting to indexer RPC:" << m_endpoint; - m_socket.abort(); - return false; - } - - const bool isConnected = m_socket.state() == QAbstractSocket::ConnectedState; - if (isConnected) { - ensureFinalizedBlocksSubscription(); - } - - return isConnected; -} - -void RpcIndexerService::ensureFinalizedBlocksSubscription() -{ - if (m_socket.state() != QAbstractSocket::ConnectedState) { - return; - } - if (m_subscriptionActive || m_subscriptionRequestId != 0) { - return; - } - - const quint64 requestId = m_nextRequestId++; - m_subscriptionRequestId = requestId; - - QJsonObject request; - request.insert("jsonrpc", "2.0"); - request.insert("id", static_cast(requestId)); - request.insert("method", "subscribeToFinalizedBlocks"); - request.insert("params", QJsonArray()); - - m_socket.sendTextMessage(QString::fromUtf8(QJsonDocument(request).toJson(QJsonDocument::Compact))); -} - -std::optional RpcIndexerService::callRpc(const QString& method, const QJsonArray& params) -{ - if (!ensureConnected()) { - return std::nullopt; - } - - const quint64 id = m_nextRequestId++; - QJsonObject request; - request.insert("jsonrpc", "2.0"); - request.insert("id", static_cast(id)); - request.insert("method", method); - request.insert("params", params); - - QEventLoop waitLoop; - QTimer timeout; - bool timedOut = false; - - timeout.setSingleShot(true); - connect(&timeout, &QTimer::timeout, &waitLoop, [&]() { - timedOut = true; - waitLoop.quit(); - }); - connect(&m_socket, &QWebSocket::disconnected, &waitLoop, &QEventLoop::quit); - - m_waiters.insert(id, &waitLoop); - m_socket.sendTextMessage(QString::fromUtf8(QJsonDocument(request).toJson(QJsonDocument::Compact))); - - timeout.start(5000); - waitLoop.exec(); - m_waiters.remove(id); - - if (timedOut) { - qWarning() << "RPC call timeout:" << method; - return std::nullopt; - } - - if (!m_responses.contains(id)) { - qWarning() << "No RPC response for" << method; - return std::nullopt; - } - - const QJsonObject response = m_responses.take(id); - if (response.contains("error")) { - qWarning() << "RPC error for" << method << compactJson(response.value("error")); - return std::nullopt; - } - if (!response.contains("result")) { - qWarning() << "RPC result missing for" << method; - return std::nullopt; - } - - const std::optional result = response.value("result"); - qDebug() << "RPC call result for" << method << "(" << params << "):" << jsonValueToString(*result); - return result; -} - -std::optional RpcIndexerService::parseBlock(const QJsonValue& value) const -{ - if (!value.isObject()) { - return std::nullopt; - } - - const QJsonObject blockObj = value.toObject(); - const QJsonObject headerObj = blockObj.value("header").toObject(); - const QJsonObject bodyObj = blockObj.value("body").toObject(); - if (headerObj.isEmpty()) { - return std::nullopt; - } - - Block block; - block.blockId = jsonValueToU64(headerObj.value("block_id")); - block.hash = jsonValueToString(headerObj.value("hash")); - block.prevBlockHash = jsonValueToString(headerObj.value("prev_block_hash")); - block.signature = jsonValueToString(headerObj.value("signature")); - block.bedrockParentId = jsonValueToString(blockObj.value("bedrock_parent_id")); - - const quint64 timestamp = jsonValueToU64(headerObj.value("timestamp")); - if (timestamp > 1000000000000ULL) { - block.timestamp = QDateTime::fromMSecsSinceEpoch(static_cast(timestamp), QTimeZone::UTC); - } else { - block.timestamp = QDateTime::fromSecsSinceEpoch(static_cast(timestamp), QTimeZone::UTC); - } - if (!block.timestamp.isValid()) { - block.timestamp = QDateTime::currentDateTimeUtc(); - } - - const QString status = blockObj.value("bedrock_status").toString("Pending"); - if (status == "Finalized") { - block.bedrockStatus = BedrockStatus::Finalized; - } else if (status == "Safe") { - block.bedrockStatus = BedrockStatus::Safe; - } else { - block.bedrockStatus = BedrockStatus::Pending; - } - - const QJsonArray txArray = bodyObj.value("transactions").toArray(); - block.transactions.reserve(txArray.size()); - for (const auto& txValue : txArray) { - auto tx = parseTransaction(txValue); - if (tx) { - block.transactions.append(*tx); - } - } - - return block; -} - -std::optional RpcIndexerService::parseTransaction(const QJsonValue& value) const -{ - if (!value.isObject()) { - return std::nullopt; - } - - const QJsonObject wrapper = value.toObject(); - Transaction tx; - - auto appendAccounts = [&tx](const QJsonArray& accountIds, const QJsonArray& nonces) { - const int pairedCount = std::min(accountIds.size(), nonces.size()); - for (int i = 0; i < pairedCount; ++i) { - AccountRef account; - account.accountId = jsonValueToString(accountIds.at(i)); - account.nonce = jsonValueToString(nonces.at(i)); - tx.accounts.append(account); - } - for (int i = pairedCount; i < accountIds.size(); ++i) { - AccountRef account; - account.accountId = jsonValueToString(accountIds.at(i)); - account.nonce = "0"; - tx.accounts.append(account); - } - }; - - auto fillWitnessFields = [&tx](const QJsonObject& witnessSet) { - tx.signatureCount = witnessSet.value("signatures_and_public_keys").toArray().size(); - if (witnessSet.value("proof").isString()) { - tx.proofSizeBytes = base64Size(witnessSet.value("proof").toString()); - } - }; - - if (wrapper.contains("Public")) { - const QJsonObject publicTx = wrapper.value("Public").toObject(); - const QJsonObject message = publicTx.value("message").toObject(); - - tx.type = TransactionType::Public; - tx.hash = jsonValueToString(publicTx.value("hash")); - tx.programId = jsonValueToString(message.value("program_id")); - appendAccounts(message.value("account_ids").toArray(), message.value("nonces").toArray()); - - const QJsonArray instructionData = message.value("instruction_data").toArray(); - tx.instructionData.reserve(instructionData.size()); - for (const auto& v : instructionData) { - tx.instructionData.append(static_cast(jsonValueToU64(v))); - } - - fillWitnessFields(publicTx.value("witness_set").toObject()); - return tx; - } - - if (wrapper.contains("PrivacyPreserving")) { - const QJsonObject privateTx = wrapper.value("PrivacyPreserving").toObject(); - const QJsonObject message = privateTx.value("message").toObject(); - - tx.type = TransactionType::PrivacyPreserving; - tx.hash = jsonValueToString(privateTx.value("hash")); - appendAccounts(message.value("public_account_ids").toArray(), message.value("nonces").toArray()); - - tx.newCommitmentsCount = message.value("new_commitments").toArray().size(); - tx.nullifiersCount = message.value("new_nullifiers").toArray().size(); - tx.encryptedStatesCount = message.value("encrypted_private_post_states").toArray().size(); - - const QJsonArray validityWindow = message.value("block_validity_window").toArray(); - if (!validityWindow.isEmpty()) { - tx.validityWindowStart = jsonValueToU64(validityWindow.at(0)); - } - if (validityWindow.size() > 1) { - tx.validityWindowEnd = jsonValueToU64(validityWindow.at(1)); - } - - fillWitnessFields(privateTx.value("witness_set").toObject()); - return tx; - } - - if (wrapper.contains("ProgramDeployment")) { - const QJsonObject deployTx = wrapper.value("ProgramDeployment").toObject(); - const QJsonObject message = deployTx.value("message").toObject(); - - tx.type = TransactionType::ProgramDeployment; - tx.hash = jsonValueToString(deployTx.value("hash")); - tx.bytecodeSizeBytes = base64Size(message.value("bytecode").toString()); - tx.signatureCount = 0; - tx.proofSizeBytes = 0; - return tx; - } - - return std::nullopt; -} - -std::optional RpcIndexerService::parseAccount(const QString& accountId, const QJsonValue& value) const -{ - if (!value.isObject()) { - return std::nullopt; - } - - const QJsonObject accountObj = value.toObject(); - - Account account; - account.accountId = accountId; - account.programOwner = jsonValueToString(accountObj.value("program_owner")); - account.balance = jsonValueToString(accountObj.value("balance")); - account.nonce = jsonValueToString(accountObj.value("nonce")); - account.dataSizeBytes = base64Size(accountObj.value("data").toString()); - - if (account.balance.isEmpty()) { - account.balance = "0"; - } - if (account.nonce.isEmpty()) { - account.nonce = "0"; - } - - return account; -} - -QString RpcIndexerService::jsonValueToString(const QJsonValue& value) -{ - if (value.isString()) { - return value.toString(); - } - - if (value.isDouble()) { - const double number = value.toDouble(); - const qulonglong integer = static_cast(number); - if (number == static_cast(integer)) { - return QString::number(integer); - } - return QString::number(number, 'g', 16); - } - - if (value.isBool()) { - return value.toBool() ? "true" : "false"; - } - - return compactJson(value); -} - -quint64 RpcIndexerService::jsonValueToU64(const QJsonValue& value) -{ - if (value.isDouble()) { - const double number = value.toDouble(); - if (number <= 0.0) { - return 0; - } - return static_cast(number); - } - - if (value.isString()) { - bool ok = false; - const qulonglong parsed = value.toString().toULongLong(&ok); - return ok ? parsed : 0; - } - - return 0; -} - -int RpcIndexerService::base64Size(const QString& value) -{ - if (value.isEmpty()) { - return 0; - } - return QByteArray::fromBase64(value.toUtf8()).size(); -} diff --git a/src/services/RpcIndexerService.h b/src/services/RpcIndexerService.h deleted file mode 100644 index 23b3ba4..0000000 --- a/src/services/RpcIndexerService.h +++ /dev/null @@ -1,66 +0,0 @@ -#pragma once - -#include "IndexerService.h" - -#include -#include -#include -#include -#include -#include - -#include - -class QEventLoop; - -class RpcIndexerService : public IndexerService { - Q_OBJECT - -public: - explicit RpcIndexerService(const QString& endpoint = IndexerService::defaultEndpoint(), QObject* parent = nullptr); - ~RpcIndexerService() override; - - QString endpoint() const override; - void setEndpoint(const QString& endpoint) override; - - std::optional getAccount(const QString& accountId) override; - std::optional getBlockById(quint64 blockId) override; - std::optional getBlockByHash(const QString& hash) override; - std::optional getTransaction(const QString& hash) override; - QVector getBlocks(std::optional before, int limit) override; - quint64 getLastFinalizedBlockId() override; - QVector getTransactionsByAccount(const QString& accountId, int offset, int limit) override; - SearchResults search(const QString& query) override; - -private slots: - void onConnected(); - void onDisconnected(); - void onSocketError(QAbstractSocket::SocketError error); - void onTextMessageReceived(const QString& message); - -private: - void handleFinalizedBlockNotification(const QJsonValue& result); - void fetchAndEmitFinalizedBlock(quint64 blockId); - - bool ensureConnected(); - void ensureFinalizedBlocksSubscription(); - std::optional callRpc(const QString& method, const QJsonArray& params = QJsonArray()); - - std::optional parseBlock(const QJsonValue& value) const; - std::optional parseTransaction(const QJsonValue& value) const; - std::optional parseAccount(const QString& accountId, const QJsonValue& value) const; - - static QString jsonValueToString(const QJsonValue& value); - static quint64 jsonValueToU64(const QJsonValue& value); - static int base64Size(const QString& value); - - QWebSocket m_socket; - QUrl m_endpoint; - quint64 m_nextRequestId = 1; - QHash m_responses; - QHash m_waiters; - quint64 m_subscriptionRequestId = 0; - QJsonValue m_subscriptionId; - bool m_subscriptionActive = false; - quint64 m_lastNotifiedBlockId = 0; -}; From a5fe1b89afbfcc826aa362795a36df9b06b01eaa Mon Sep 17 00:00:00 2001 From: erhant Date: Thu, 18 Jun 2026 14:19:43 +0300 Subject: [PATCH 2/8] fix: nix path for github with slash in branch name --- .gitignore | 5 ++++- flake.lock | 16 ++++++++++------ flake.nix | 6 ++++-- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index e4da180..7a976e0 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,7 @@ result build # ignore lgx builds -lez-explorer-ui-*-lgx-* \ No newline at end of file +lez-explorer-ui-*-lgx-* + +# ignore rocksdb (may appear here during indexer tests) +rocksdb \ No newline at end of file diff --git a/flake.lock b/flake.lock index 8e95248..1c917de 100644 --- a/flake.lock +++ b/flake.lock @@ -21,14 +21,18 @@ "logos-module-builder": "logos-module-builder_2" }, "locked": { - "lastModified": 1781779306, - "narHash": "sha256-dPnC5t4PohfEALyvJqHjc9QlVPse0GhLue1mczt90So=", - "path": "/Users/erhant/logos/logos-execution-zone-indexer-module", - "type": "path" + "lastModified": 1781780348, + "narHash": "sha256-XBipaTgJQk4jl17RJLMhVbdEJKfSC2BdWHgTVZN9UG8=", + "ref": "erhant/migr-to-logos-module-builder", + "rev": "31e176a09be44bcaf7a0b8846df69fb38564bb88", + "revCount": 35, + "type": "git", + "url": "https://github.com/logos-blockchain/logos-execution-zone-indexer-module" }, "original": { - "path": "/Users/erhant/logos/logos-execution-zone-indexer-module", - "type": "path" + "ref": "erhant/migr-to-logos-module-builder", + "type": "git", + "url": "https://github.com/logos-blockchain/logos-execution-zone-indexer-module" } }, "logos-blockchain-circuits": { diff --git a/flake.nix b/flake.nix index 50a6cff..796e0fb 100644 --- a/flake.nix +++ b/flake.nix @@ -8,8 +8,10 @@ # the metadata.json "dependencies" entry. For local development against an # un-pushed branch, override with a path: # lez_indexer_module.url = "path:../logos-execution-zone-indexer-module"; - # TODO: use the correct branch & repo name afterwards - lez_indexer_module.url = "github:logos-blockchain/logos-execution-zone-indexer-module/erhant/migr-to-logos-module-builder"; + # NOTE: git+https (not github:) because the branch name contains a slash — + # the github: fetcher mis-routes slashed refs through the commits API (404). + # TODO: repoint to the merge target once this branch lands. + lez_indexer_module.url = "git+https://github.com/logos-blockchain/logos-execution-zone-indexer-module?ref=erhant/migr-to-logos-module-builder"; }; outputs = From 3f94b81c36adf3f5dfe43609d2478b89f6e7d8d6 Mon Sep 17 00:00:00 2001 From: erhant Date: Thu, 18 Jun 2026 17:07:29 +0300 Subject: [PATCH 3/8] feat!: grand migration to QML, update readme as well --- CMakeLists.txt | 55 +--- README.md | 58 ++-- app/CMakeLists.txt | 44 --- app/main.cpp | 13 - app/mainwindow.cpp | 60 ---- app/mainwindow.h | 14 - flake.lock | 186 ++++++++++- flake.nix | 7 +- interfaces/IComponent.h | 17 - metadata.json | 16 +- src/ExplorerPlugin.cpp | 17 - src/ExplorerPlugin.h | 18 -- src/ExplorerWidget.cpp | 213 ------------- src/ExplorerWidget.h | 50 --- src/Style.h | 142 --------- src/explorer_resources.qrc | 12 - src/lez_explorer_ui.rep | 43 +++ src/lez_explorer_ui_backend.cpp | 438 ++++++++++++++++++++++++++ src/lez_explorer_ui_backend.h | 62 ++++ src/models/Account.h | 11 - src/models/Block.h | 33 -- src/models/Transaction.h | 47 --- src/pages/AccountPage.cpp | 160 ---------- src/pages/AccountPage.h | 16 - src/pages/BlockPage.cpp | 218 ------------- src/pages/BlockPage.h | 16 - src/pages/MainPage.cpp | 453 --------------------------- src/pages/MainPage.h | 52 --- src/pages/TransactionPage.cpp | 185 ----------- src/pages/TransactionPage.h | 15 - src/qml/Main.qml | 145 +++++++++ src/qml/components/AccountRow.qml | 57 ++++ src/qml/components/Badge.qml | 27 ++ src/qml/components/BlockRow.qml | 59 ++++ src/qml/components/Card.qml | 30 ++ src/qml/components/FieldLabel.qml | 13 + src/qml/components/IconButton.qml | 33 ++ src/qml/components/InfoRow.qml | 39 +++ src/qml/components/MonoText.qml | 12 + src/qml/components/NavigationBar.qml | 43 +++ src/qml/components/SearchBar.qml | 70 +++++ src/qml/components/SectionHeader.qml | 11 + src/qml/components/StatusBadge.qml | 11 + src/qml/components/TxRow.qml | 43 +++ src/qml/components/TxTypeBadge.qml | 13 + src/{ => qml}/icons/activity.svg | 0 src/{ => qml}/icons/arrow-left.svg | 0 src/{ => qml}/icons/arrow-right.svg | 0 src/{ => qml}/icons/box.svg | 0 src/{ => qml}/icons/file-text.svg | 0 src/{ => qml}/icons/home.svg | 0 src/{ => qml}/icons/search.svg | 0 src/{ => qml}/icons/user.svg | 0 src/qml/pages/AccountPage.qml | 113 +++++++ src/qml/pages/BlockPage.qml | 118 +++++++ src/qml/pages/HomePage.qml | 172 ++++++++++ src/qml/pages/SearchResultsPage.qml | 88 ++++++ src/qml/pages/TransactionPage.qml | 143 +++++++++ src/services/IndexerService.h | 46 --- src/services/LpIndexerService.cpp | 438 -------------------------- src/services/LpIndexerService.h | 69 ---- src/services/MockIndexerService.cpp | 378 ---------------------- src/services/MockIndexerService.h | 44 --- src/widgets/ClickableFrame.h | 47 --- src/widgets/NavigationBar.cpp | 63 ---- src/widgets/NavigationBar.h | 24 -- src/widgets/SearchBar.cpp | 38 --- src/widgets/SearchBar.h | 20 -- 68 files changed, 2021 insertions(+), 3057 deletions(-) delete mode 100644 app/CMakeLists.txt delete mode 100644 app/main.cpp delete mode 100644 app/mainwindow.cpp delete mode 100644 app/mainwindow.h delete mode 100644 interfaces/IComponent.h delete mode 100644 src/ExplorerPlugin.cpp delete mode 100644 src/ExplorerPlugin.h delete mode 100644 src/ExplorerWidget.cpp delete mode 100644 src/ExplorerWidget.h delete mode 100644 src/Style.h delete mode 100644 src/explorer_resources.qrc create mode 100644 src/lez_explorer_ui.rep create mode 100644 src/lez_explorer_ui_backend.cpp create mode 100644 src/lez_explorer_ui_backend.h delete mode 100644 src/models/Account.h delete mode 100644 src/models/Block.h delete mode 100644 src/models/Transaction.h delete mode 100644 src/pages/AccountPage.cpp delete mode 100644 src/pages/AccountPage.h delete mode 100644 src/pages/BlockPage.cpp delete mode 100644 src/pages/BlockPage.h delete mode 100644 src/pages/MainPage.cpp delete mode 100644 src/pages/MainPage.h delete mode 100644 src/pages/TransactionPage.cpp delete mode 100644 src/pages/TransactionPage.h create mode 100644 src/qml/Main.qml create mode 100644 src/qml/components/AccountRow.qml create mode 100644 src/qml/components/Badge.qml create mode 100644 src/qml/components/BlockRow.qml create mode 100644 src/qml/components/Card.qml create mode 100644 src/qml/components/FieldLabel.qml create mode 100644 src/qml/components/IconButton.qml create mode 100644 src/qml/components/InfoRow.qml create mode 100644 src/qml/components/MonoText.qml create mode 100644 src/qml/components/NavigationBar.qml create mode 100644 src/qml/components/SearchBar.qml create mode 100644 src/qml/components/SectionHeader.qml create mode 100644 src/qml/components/StatusBadge.qml create mode 100644 src/qml/components/TxRow.qml create mode 100644 src/qml/components/TxTypeBadge.qml rename src/{ => qml}/icons/activity.svg (100%) rename src/{ => qml}/icons/arrow-left.svg (100%) rename src/{ => qml}/icons/arrow-right.svg (100%) rename src/{ => qml}/icons/box.svg (100%) rename src/{ => qml}/icons/file-text.svg (100%) rename src/{ => qml}/icons/home.svg (100%) rename src/{ => qml}/icons/search.svg (100%) rename src/{ => qml}/icons/user.svg (100%) create mode 100644 src/qml/pages/AccountPage.qml create mode 100644 src/qml/pages/BlockPage.qml create mode 100644 src/qml/pages/HomePage.qml create mode 100644 src/qml/pages/SearchResultsPage.qml create mode 100644 src/qml/pages/TransactionPage.qml delete mode 100644 src/services/IndexerService.h delete mode 100644 src/services/LpIndexerService.cpp delete mode 100644 src/services/LpIndexerService.h delete mode 100644 src/services/MockIndexerService.cpp delete mode 100644 src/services/MockIndexerService.h delete mode 100644 src/widgets/ClickableFrame.h delete mode 100644 src/widgets/NavigationBar.cpp delete mode 100644 src/widgets/NavigationBar.h delete mode 100644 src/widgets/SearchBar.cpp delete mode 100644 src/widgets/SearchBar.h diff --git a/CMakeLists.txt b/CMakeLists.txt index e56a8fe..ff36c49 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,10 +3,6 @@ project(LezExplorerUiPlugin LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) -# Hand-written Q_OBJECT classes (widgets/pages/services) need MOC; -# explorer_resources.qrc -> compiled icons via AUTORCC. -set(CMAKE_AUTOMOC ON) -set(CMAKE_AUTORCC ON) # Logos Module CMake helper. For nix builds this is provided via # LOGOS_MODULE_BUILDER_ROOT. @@ -18,51 +14,18 @@ else() message(FATAL_ERROR "LogosModule.cmake not found. Set LOGOS_MODULE_BUILDER_ROOT.") endif() -# Legacy `type: ui` QWidget plugin (hand-written ExplorerPlugin / IComponent — -# no `interface: universal`, so no codegen). The builder links the logos -# SDK/protocol (logos_api.h / getClient) automatically; we add the Qt widget -# stack the explorer needs on top of the default Core/RemoteObjects. +# Universal ui_qml module: we author only the .rep view contract + the *Backend +# class. REP_FILE runs repc; the generated *Plugin / *Interface glue in +# generated_code/ (Q_PLUGIN_METADATA, initLogos wiring, QtRO registration) is +# compiled automatically. The QML view (src/qml/) is delivered by the host +# alongside the plugin — no Qt Widgets, no .qrc. The logos SDK/protocol (incl. +# the typed lez_indexer_module wrappers) is linked by the builder. logos_module( NAME lez_explorer_ui + REP_FILE src/lez_explorer_ui.rep SOURCES - src/ExplorerPlugin.cpp - src/ExplorerPlugin.h - src/ExplorerWidget.cpp - src/ExplorerWidget.h - src/Style.h - src/services/IndexerService.h - src/services/LpIndexerService.cpp - src/services/LpIndexerService.h - src/services/MockIndexerService.cpp - src/services/MockIndexerService.h - src/models/Block.h - src/models/Transaction.h - src/models/Account.h - src/widgets/SearchBar.cpp - src/widgets/SearchBar.h - src/widgets/NavigationBar.cpp - src/widgets/NavigationBar.h - src/widgets/ClickableFrame.h - src/pages/MainPage.cpp - src/pages/MainPage.h - src/pages/BlockPage.cpp - src/pages/BlockPage.h - src/pages/TransactionPage.cpp - src/pages/TransactionPage.h - src/pages/AccountPage.cpp - src/pages/AccountPage.h - src/explorer_resources.qrc - FIND_PACKAGES - Qt6Widgets - Qt6Svg - Qt6SvgWidgets - Qt6Network - LINK_LIBRARIES - Qt6::Widgets - Qt6::Svg - Qt6::SvgWidgets - Qt6::Network + src/lez_explorer_ui_backend.h + src/lez_explorer_ui_backend.cpp INCLUDE_DIRS src - interfaces ) diff --git a/README.md b/README.md index 1dff78f..66e7612 100644 --- a/README.md +++ b/README.md @@ -1,39 +1,49 @@ # LEZ Explorer UI -A Qt6/C++ block explorer for the **Logos Execution Zone** (LEZ). Builds as both a shared library (Qt plugin) and a standalone desktop application. +A QML block explorer for the **Logos Execution Zone** (LEZ), packaged as a +`logos-module-builder` **`ui_qml`** module (universal authoring model). The QML +view runs process-isolated in a `ui-host`, backed by a small C++ backend that +reads from the [`lez_indexer_module`](https://github.com/logos-blockchain/logos-execution-zone-indexer-module) +**in-process over the Logos protocol** (Qt Remote Objects) — no WebSocket, no +external RPC socket. ## Features -- Browse recent blocks with live streaming of new blocks -- View block details: hash, previous hash, timestamp, status, signature, transactions -- Navigate to previous blocks via clickable hash links -- View transaction details (Public, Privacy-Preserving, Program Deployment) -- View account details with paginated transaction history -- Full-text search by block ID, block hash, transaction hash, or account ID +- Browse recent blocks with a live tip poll (new heads appear automatically) +- Block details: hash, previous hash, timestamp, Bedrock status, signature, transactions +- Navigate to the previous block via a clickable hash link +- Transaction details (Public, Privacy-Preserving, Program Deployment) +- Account details with recent transaction history +- Search by block id, block hash, transaction hash, or account id - Browser-style back/forward navigation -- Pagination with "Load more" for older blocks -- Dark theme (Catppuccin Mocha) +- "Load more" pagination for older blocks +- Styled with the shared `Logos.Theme` / `Logos.Controls` design system + +## Architecture + +- `src/lez_explorer_ui.rep` — the QtRO view contract (PROPs / SLOTs / SIGNALs). +- `src/lez_explorer_ui_backend.{h,cpp}` — the only hand-written C++: derives the + generated `LezExplorerUiSimpleSource` + `LogosUiPluginContext`, calls the + indexer with typed `modules().lez_indexer_module.*`, converts its compact JSON + into QVariant for the view, and polls the chain tip for live updates. +- `src/qml/` — the view (`Main.qml`, `pages/`, `components/`, `icons/`). + +The `*Plugin` / `*Interface` glue is generated by the builder from the `.rep` + +`metadata.json` (`interface: "universal"`). ## Building with Nix -### Standalone application - ```sh -nix build '.#app' -nix run '.#app' +git add -A # nix only sees git-tracked files +nix build # runs repc + compiles → result/lib/lez_explorer_ui_plugin.{so,dylib} +nix run . # preview in logos-standalone-app (spawns the ui-host) +nix build .#lgx # bundle as a .lgx for logos-basecamp ``` -### Shared library (Qt plugin) - -```sh -nix build '.#lib' -``` - -### Development shell - -```sh -nix develop -``` +Running against live data needs the indexer reachable; enter its +`indexer_config.json` path in the explorer's config field (leave blank if the +indexer is already running). Load the explorer and indexer `.lgx` bundles +together in logos-basecamp for the full experience. ## License diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt deleted file mode 100644 index 88bb6fc..0000000 --- a/app/CMakeLists.txt +++ /dev/null @@ -1,44 +0,0 @@ -cmake_minimum_required(VERSION 3.16) -project(LEZExplorerUIApp LANGUAGES CXX) - -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_AUTOMOC ON) -set(CMAKE_INCLUDE_CURRENT_DIR ON) - -# Find Qt packages -find_package(Qt6 REQUIRED COMPONENTS Core Widgets) - -# Set output directories -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) - -# Create the executable -add_executable(lez-explorer-ui-app - main.cpp - mainwindow.cpp - mainwindow.h -) - -# Link libraries -target_link_libraries(lez-explorer-ui-app PRIVATE - Qt6::Core - Qt6::Widgets -) - -# Set RPATH settings for the executable -if(APPLE) - set_target_properties(lez-explorer-ui-app PROPERTIES - INSTALL_RPATH "@executable_path/../lib" - BUILD_WITH_INSTALL_RPATH TRUE - ) -elseif(UNIX) - set_target_properties(lez-explorer-ui-app PROPERTIES - INSTALL_RPATH "$ORIGIN/../lib" - BUILD_WITH_INSTALL_RPATH TRUE - ) -endif() - -# Install rules -install(TARGETS lez-explorer-ui-app - RUNTIME DESTINATION bin -) diff --git a/app/main.cpp b/app/main.cpp deleted file mode 100644 index 8d904da..0000000 --- a/app/main.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include "mainwindow.h" - -#include - -int main(int argc, char* argv[]) -{ - QApplication app(argc, argv); - - MainWindow window; - window.show(); - - return app.exec(); -} diff --git a/app/mainwindow.cpp b/app/mainwindow.cpp deleted file mode 100644 index 67ea477..0000000 --- a/app/mainwindow.cpp +++ /dev/null @@ -1,60 +0,0 @@ -#include "mainwindow.h" - -#include - -MainWindow::MainWindow(QWidget* parent) - : QMainWindow(parent) -{ - setupUi(); -} - -MainWindow::~MainWindow() = default; - -void MainWindow::setupUi() -{ - // Determine the appropriate plugin extension based on the platform - QString pluginExtension; -#if defined(Q_OS_WIN) - pluginExtension = ".dll"; -#elif defined(Q_OS_MAC) - pluginExtension = ".dylib"; -#else - pluginExtension = ".so"; -#endif - - QString pluginPath = QCoreApplication::applicationDirPath() + "/../lez_explorer_ui" + pluginExtension; - QPluginLoader loader(pluginPath); - - QWidget* explorerWidget = nullptr; - - if (loader.load()) { - QObject* plugin = loader.instance(); - if (plugin) { - QMetaObject::invokeMethod(plugin, "createWidget", - Qt::DirectConnection, - Q_RETURN_ARG(QWidget*, explorerWidget)); - } - } - - if (explorerWidget) { - setCentralWidget(explorerWidget); - } else { - qWarning() << "Failed to load LEZ Explorer UI plugin from:" << pluginPath; - qWarning() << "Error:" << loader.errorString(); - - auto* fallbackWidget = new QWidget(this); - auto* layout = new QVBoxLayout(fallbackWidget); - - auto* messageLabel = new QLabel("LEZ Explorer UI module not loaded", fallbackWidget); - QFont font = messageLabel->font(); - font.setPointSize(14); - messageLabel->setFont(font); - messageLabel->setAlignment(Qt::AlignCenter); - - layout->addWidget(messageLabel); - setCentralWidget(fallbackWidget); - } - - setWindowTitle("LEZ Explorer"); - resize(1024, 768); -} diff --git a/app/mainwindow.h b/app/mainwindow.h deleted file mode 100644 index 90a9e50..0000000 --- a/app/mainwindow.h +++ /dev/null @@ -1,14 +0,0 @@ -#pragma once - -#include - -class MainWindow : public QMainWindow { - Q_OBJECT - -public: - explicit MainWindow(QWidget* parent = nullptr); - ~MainWindow() override; - -private: - void setupUi(); -}; diff --git a/flake.lock b/flake.lock index 1c917de..c4375e9 100644 --- a/flake.lock +++ b/flake.lock @@ -21,11 +21,11 @@ "logos-module-builder": "logos-module-builder_2" }, "locked": { - "lastModified": 1781780348, - "narHash": "sha256-XBipaTgJQk4jl17RJLMhVbdEJKfSC2BdWHgTVZN9UG8=", + "lastModified": 1781791313, + "narHash": "sha256-dRwDkySQQZfup1A9fb6e5Z59R59NgWGnM+/UFIHStkc=", "ref": "erhant/migr-to-logos-module-builder", - "rev": "31e176a09be44bcaf7a0b8846df69fb38564bb88", - "revCount": 35, + "rev": "7ba107e7f5b46ba871210f28a562863198b9b8a8", + "revCount": 36, "type": "git", "url": "https://github.com/logos-blockchain/logos-execution-zone-indexer-module" }, @@ -7256,6 +7256,42 @@ "type": "github" } }, + "logos-nix_298": { + "inputs": { + "nixpkgs": "nixpkgs_299" + }, + "locked": { + "lastModified": 1774455309, + "narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, + "logos-nix_299": { + "inputs": { + "nixpkgs": "nixpkgs_300" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, "logos-nix_3": { "inputs": { "nixpkgs": "nixpkgs_4" @@ -7292,6 +7328,24 @@ "type": "github" } }, + "logos-nix_300": { + "inputs": { + "nixpkgs": "nixpkgs_301" + }, + "locked": { + "lastModified": 1773955630, + "narHash": "sha256-KqzMoWYIVp2xMgphs7v02T/BE54RKMFxpdC2duhJKG0=", + "owner": "logos-co", + "repo": "logos-nix", + "rev": "0e9e6d66ab8eb34f59e45ed448f7dc29130feb88", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-nix", + "type": "github" + } + }, "logos-nix_31": { "inputs": { "nixpkgs": "nixpkgs_32" @@ -9977,6 +10031,30 @@ "type": "github" } }, + "logos-package_37": { + "inputs": { + "logos-nix": "logos-nix_299", + "nixpkgs": [ + "nix-bundle-lgx", + "logos-package", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777575342, + "narHash": "sha256-l/tL39ZVNz3nWpE9zWpC/kg11QHSQJ2HHp3W3yv1pNI=", + "owner": "logos-co", + "repo": "logos-package", + "rev": "118ccc4efd04eb0c4d541be8db7f1075e014ac39", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "logos-package", + "type": "github" + } + }, "logos-package_4": { "inputs": { "logos-nix": "logos-nix_36", @@ -13601,6 +13679,30 @@ "type": "github" } }, + "nix-bundle-dir_52": { + "inputs": { + "logos-nix": "logos-nix_300", + "nixpkgs": [ + "nix-bundle-lgx", + "nix-bundle-dir", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1774455641, + "narHash": "sha256-HrVJguPxhIoZMCH+x8Wooa0tE6slUhgNOU6P89t2uQc=", + "owner": "logos-co", + "repo": "nix-bundle-dir", + "rev": "3d155cab09051703a0b02ff2de166a53c30cbca8", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-dir", + "type": "github" + } + }, "nix-bundle-dir_6": { "inputs": { "logos-nix": "logos-nix_39", @@ -14116,6 +14218,31 @@ "type": "github" } }, + "nix-bundle-lgx_22": { + "inputs": { + "logos-nix": "logos-nix_298", + "logos-package": "logos-package_37", + "nix-bundle-dir": "nix-bundle-dir_52", + "nixpkgs": [ + "nix-bundle-lgx", + "logos-nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777575520, + "narHash": "sha256-HOwg1N4NfGYq579IppVPpVjPDZfYQGndXGlcl1VRXXo=", + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "rev": "3c44d99b9d8dbd8a135b44b5b328e6175650305e", + "type": "github" + }, + "original": { + "owner": "logos-co", + "repo": "nix-bundle-lgx", + "type": "github" + } + }, "nix-bundle-lgx_3": { "inputs": { "logos-nix": "logos-nix_40", @@ -18071,6 +18198,22 @@ "type": "github" } }, + "nixpkgs_299": { + "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, @@ -18103,6 +18246,38 @@ "type": "github" } }, + "nixpkgs_300": { + "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_301": { + "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_31": { "locked": { "lastModified": 1759036355, @@ -19535,7 +19710,8 @@ "root": { "inputs": { "lez_indexer_module": "lez_indexer_module", - "logos-module-builder": "logos-module-builder_5" + "logos-module-builder": "logos-module-builder_5", + "nix-bundle-lgx": "nix-bundle-lgx_22" } }, "rust-overlay": { diff --git a/flake.nix b/flake.nix index 796e0fb..b6cf57b 100644 --- a/flake.nix +++ b/flake.nix @@ -1,8 +1,9 @@ { - description = "LEZ Explorer UI - a Qt block explorer for the Logos Execution Zone"; + description = "LEZ Explorer UI - a QML block explorer for the Logos Execution Zone"; inputs = { logos-module-builder.url = "github:logos-co/logos-module-builder"; + nix-bundle-lgx.url = "github:logos-co/nix-bundle-lgx"; # The provider it reads from, over the Logos protocol. Input name MUST match # the metadata.json "dependencies" entry. For local development against an @@ -10,13 +11,13 @@ # lez_indexer_module.url = "path:../logos-execution-zone-indexer-module"; # NOTE: git+https (not github:) because the branch name contains a slash — # the github: fetcher mis-routes slashed refs through the commits API (404). - # TODO: repoint to the merge target once this branch lands. + # TODO: repoint to the merge target once this branch lands / goes public. lez_indexer_module.url = "git+https://github.com/logos-blockchain/logos-execution-zone-indexer-module?ref=erhant/migr-to-logos-module-builder"; }; outputs = inputs@{ logos-module-builder, ... }: - logos-module-builder.lib.mkLogosModule { + logos-module-builder.lib.mkLogosQmlModule { src = ./.; configFile = ./metadata.json; flakeInputs = inputs; diff --git a/interfaces/IComponent.h b/interfaces/IComponent.h deleted file mode 100644 index 06ad57a..0000000 --- a/interfaces/IComponent.h +++ /dev/null @@ -1,17 +0,0 @@ -#pragma once - -#include -#include -#include - -class LogosAPI; - -class IComponent { -public: - virtual ~IComponent() = default; - virtual QWidget* createWidget(LogosAPI* logosAPI = nullptr) = 0; - virtual void destroyWidget(QWidget* widget) = 0; -}; - -#define IComponent_iid "com.logos.component.IComponent" -Q_DECLARE_INTERFACE(IComponent, IComponent_iid) diff --git a/metadata.json b/metadata.json index e976608..f8b2de6 100644 --- a/metadata.json +++ b/metadata.json @@ -1,22 +1,26 @@ { "name": "lez_explorer_ui", "version": "1.0.0", - "type": "ui", + "type": "ui_qml", + "interface": "universal", "category": "explorer", "description": "LEZ Explorer UI - A block explorer for the Logos Execution Zone", "main": "lez_explorer_ui_plugin", + "icon": "src/qml/icons/box.svg", + "view": "qml/Main.qml", "dependencies": ["lez_indexer_module"], + "codegen": { "rep": "src/lez_explorer_ui.rep" }, "nix": { "packages": { - "build": ["qt6.qtsvg"], - "runtime": ["qt6.qtsvg"] + "build": [], + "runtime": ["qt6.qtdeclarative", "zstd", "krb5", "abseil-cpp"] }, "external_libraries": [], "cmake": { - "find_packages": ["Qt6Widgets", "Qt6Svg", "Qt6SvgWidgets", "Qt6Network"], + "find_packages": [], "extra_sources": [], - "extra_include_dirs": ["interfaces"], - "extra_link_libraries": ["Qt6::Widgets", "Qt6::Svg", "Qt6::SvgWidgets", "Qt6::Network"] + "extra_include_dirs": [], + "extra_link_libraries": [] } } } diff --git a/src/ExplorerPlugin.cpp b/src/ExplorerPlugin.cpp deleted file mode 100644 index c547f52..0000000 --- a/src/ExplorerPlugin.cpp +++ /dev/null @@ -1,17 +0,0 @@ -#include "ExplorerPlugin.h" -#include "ExplorerWidget.h" - -ExplorerPlugin::ExplorerPlugin(QObject* parent) - : QObject(parent) -{ -} - -QWidget* ExplorerPlugin::createWidget(LogosAPI* logosAPI) -{ - return new ExplorerWidget(logosAPI); -} - -void ExplorerPlugin::destroyWidget(QWidget* widget) -{ - delete widget; -} diff --git a/src/ExplorerPlugin.h b/src/ExplorerPlugin.h deleted file mode 100644 index 458b9ec..0000000 --- a/src/ExplorerPlugin.h +++ /dev/null @@ -1,18 +0,0 @@ -#pragma once - -#include "IComponent.h" - -#include -#include - -class ExplorerPlugin : public QObject, public IComponent { - Q_OBJECT - Q_INTERFACES(IComponent) - Q_PLUGIN_METADATA(IID IComponent_iid FILE "metadata.json") - -public: - explicit ExplorerPlugin(QObject* parent = nullptr); - - Q_INVOKABLE QWidget* createWidget(LogosAPI* logosAPI = nullptr) override; - void destroyWidget(QWidget* widget) override; -}; diff --git a/src/ExplorerWidget.cpp b/src/ExplorerWidget.cpp deleted file mode 100644 index 4576f5e..0000000 --- a/src/ExplorerWidget.cpp +++ /dev/null @@ -1,213 +0,0 @@ -#include "ExplorerWidget.h" -#include "Style.h" -#include "services/LpIndexerService.h" -#include "widgets/NavigationBar.h" -#include "widgets/SearchBar.h" -#include "pages/MainPage.h" -#include "pages/BlockPage.h" -#include "pages/TransactionPage.h" -#include "pages/AccountPage.h" - -#include -#include -#include - -ExplorerWidget::ExplorerWidget(LogosAPI* logosAPI, QWidget* parent) - : QWidget(parent) - , m_indexer(std::make_unique(logosAPI)) -{ - setStyleSheet(Style::appBackground()); - - auto* layout = new QVBoxLayout(this); - layout->setContentsMargins(16, 12, 16, 12); - layout->setSpacing(8); - - // Navigation bar - m_navBar = new NavigationBar(this); - layout->addWidget(m_navBar); - - // Search bar - m_searchBar = new SearchBar(this); - layout->addWidget(m_searchBar); - - // Page stack - m_stack = new QStackedWidget(this); - layout->addWidget(m_stack, 1); - - // Create main page - m_mainPage = new MainPage(m_indexer.get(), this); - m_stack->addWidget(m_mainPage); - connectPageSignals(m_mainPage); - - m_currentTarget = NavHome{}; - - // Connect navigation - connect(m_navBar, &NavigationBar::backClicked, this, &ExplorerWidget::navigateBack); - connect(m_navBar, &NavigationBar::forwardClicked, this, &ExplorerWidget::navigateForward); - connect(m_navBar, &NavigationBar::homeClicked, this, &ExplorerWidget::navigateHome); - connect(m_searchBar, &SearchBar::searchRequested, this, &ExplorerWidget::onSearch); - - connect(m_indexer.get(), &IndexerService::newBlockAdded, this, [this](const Block& block) { - m_mainPage->onNewBlock(block); - }); - - updateNavButtons(); -} - -ExplorerWidget::~ExplorerWidget() = default; - -void ExplorerWidget::connectPageSignals(QWidget* page) -{ - if (auto* mainPage = qobject_cast(page)) { - connect(mainPage, &MainPage::blockClicked, this, [this](quint64 id) { - navigateTo(NavBlock{id}); - }); - connect(mainPage, &MainPage::transactionClicked, this, [this](const QString& hash) { - navigateTo(NavTransaction{hash}); - }); - connect(mainPage, &MainPage::accountClicked, this, [this](const QString& id) { - navigateTo(NavAccount{id}); - }); - } else if (auto* blockPage = qobject_cast(page)) { - connect(blockPage, &BlockPage::blockClicked, this, [this](quint64 id) { - navigateTo(NavBlock{id}); - }); - connect(blockPage, &BlockPage::transactionClicked, this, [this](const QString& hash) { - navigateTo(NavTransaction{hash}); - }); - } else if (auto* txPage = qobject_cast(page)) { - connect(txPage, &TransactionPage::accountClicked, this, [this](const QString& id) { - navigateTo(NavAccount{id}); - }); - } else if (auto* accPage = qobject_cast(page)) { - connect(accPage, &AccountPage::transactionClicked, this, [this](const QString& hash) { - navigateTo(NavTransaction{hash}); - }); - } -} - -void ExplorerWidget::showPage(QWidget* page) -{ - // Remove all pages except main page - while (m_stack->count() > 1) { - auto* w = m_stack->widget(1); - m_stack->removeWidget(w); - w->deleteLater(); - } - - if (page == m_mainPage) { - m_stack->setCurrentWidget(m_mainPage); - } else { - m_stack->addWidget(page); - m_stack->setCurrentWidget(page); - } -} - -void ExplorerWidget::navigateTo(const NavTarget& target, bool addToHistory) -{ - if (addToHistory) { - m_backHistory.push(m_currentTarget); - m_forwardHistory.clear(); - } - - m_currentTarget = target; - - std::visit([this](auto&& t) { - using T = std::decay_t; - - if constexpr (std::is_same_v) { - m_mainPage->clearSearchResults(); - m_mainPage->refresh(); - showPage(m_mainPage); - } else if constexpr (std::is_same_v) { - auto block = m_indexer->getBlockById(t.blockId); - if (block) { - auto* page = new BlockPage(*block, this); - connectPageSignals(page); - showPage(page); - } else { - qWarning("Block #%llu not found", static_cast(t.blockId)); - showPage(m_mainPage); - } - } else if constexpr (std::is_same_v) { - auto tx = m_indexer->getTransaction(t.hash); - if (tx) { - auto* page = new TransactionPage(*tx, this); - connectPageSignals(page); - showPage(page); - } else { - qWarning("Transaction %s not found", qPrintable(t.hash)); - showPage(m_mainPage); - } - } else if constexpr (std::is_same_v) { - auto account = m_indexer->getAccount(t.accountId); - if (account) { - auto* page = new AccountPage(*account, m_indexer.get(), this); - connectPageSignals(page); - showPage(page); - } else { - qWarning("Account %s not found", qPrintable(t.accountId)); - showPage(m_mainPage); - } - } - }, target); - - updateNavButtons(); -} - -void ExplorerWidget::navigateBack() -{ - if (m_backHistory.isEmpty()) return; - - m_forwardHistory.push(m_currentTarget); - NavTarget target = m_backHistory.pop(); - navigateTo(target, false); -} - -void ExplorerWidget::navigateForward() -{ - if (m_forwardHistory.isEmpty()) return; - - m_backHistory.push(m_currentTarget); - NavTarget target = m_forwardHistory.pop(); - navigateTo(target, false); -} - -void ExplorerWidget::navigateHome() -{ - navigateTo(NavHome{}); -} - -void ExplorerWidget::onSearch(const QString& query) -{ - if (query.trimmed().isEmpty()) return; - - auto results = m_indexer->search(query); - - // If exactly one result, navigate directly to it - int totalResults = results.blocks.size() + results.transactions.size() + results.accounts.size(); - if (totalResults == 1) { - if (!results.blocks.isEmpty()) { - navigateTo(NavBlock{results.blocks.first().blockId}); - return; - } - if (!results.transactions.isEmpty()) { - navigateTo(NavTransaction{results.transactions.first().hash}); - return; - } - if (!results.accounts.isEmpty()) { - navigateTo(NavAccount{results.accounts.first().accountId}); - return; - } - } - - // Show results on main page - navigateTo(NavHome{}); - m_mainPage->showSearchResults(results); -} - -void ExplorerWidget::updateNavButtons() -{ - m_navBar->setBackEnabled(!m_backHistory.isEmpty()); - m_navBar->setForwardEnabled(!m_forwardHistory.isEmpty()); -} diff --git a/src/ExplorerWidget.h b/src/ExplorerWidget.h deleted file mode 100644 index bbe91e3..0000000 --- a/src/ExplorerWidget.h +++ /dev/null @@ -1,50 +0,0 @@ -#pragma once - -#include "services/IndexerService.h" - -#include -#include -#include -#include - -class QStackedWidget; -class NavigationBar; -class SearchBar; -class MainPage; -class LogosAPI; - -struct NavHome {}; -struct NavBlock { quint64 blockId; }; -struct NavTransaction { QString hash; }; -struct NavAccount { QString accountId; }; - -using NavTarget = std::variant; - -class ExplorerWidget : public QWidget { - Q_OBJECT - -public: - explicit ExplorerWidget(LogosAPI* logosAPI = nullptr, QWidget* parent = nullptr); - ~ExplorerWidget() override; - -private: - void navigateTo(const NavTarget& target, bool addToHistory = true); - void navigateBack(); - void navigateForward(); - void navigateHome(); - void onSearch(const QString& query); - void updateNavButtons(); - - void showPage(QWidget* page); - void connectPageSignals(QWidget* page); - - std::unique_ptr m_indexer; - NavigationBar* m_navBar = nullptr; - SearchBar* m_searchBar = nullptr; - QStackedWidget* m_stack = nullptr; - MainPage* m_mainPage = nullptr; - - QStack m_backHistory; - QStack m_forwardHistory; - NavTarget m_currentTarget; -}; diff --git a/src/Style.h b/src/Style.h deleted file mode 100644 index e38d75c..0000000 --- a/src/Style.h +++ /dev/null @@ -1,142 +0,0 @@ -#pragma once - -#include - -namespace Style { - -// --- Color palette --- - -namespace Color { - inline const char* bg() { return "#1e1e2e"; } - inline const char* surface() { return "#2a2a3c"; } - inline const char* surfaceHover() { return "#33334a"; } - inline const char* border() { return "#3b3b52"; } - inline const char* text() { return "#cdd6f4"; } - inline const char* subtext() { return "#7f849c"; } - inline const char* accent() { return "#89b4fa"; } - inline const char* green() { return "#a6e3a1"; } - inline const char* yellow() { return "#f9e2af"; } - inline const char* red() { return "#f38ba8"; } - inline const char* blue() { return "#89b4fa"; } - inline const char* mauve() { return "#cba6f7"; } - inline const char* peach() { return "#fab387"; } - inline const char* teal() { return "#94e2d5"; } -} - -// --- Base font size applied to the entire app --- - -inline int baseFontSize() { return 14; } - -// --- Widget styles --- - -inline QString appBackground() -{ - return QString("background-color: %1; color: %2; font-size: %3px;") - .arg(Color::bg(), Color::text()) - .arg(baseFontSize()); -} - -inline QString cardFrame() -{ - return QString( - "background: %1; border: 1px solid %2; border-radius: 8px; padding: 18px;" - ).arg(Color::surface(), Color::border()); -} - -inline QString cardFrameWithLabels() -{ - return QString( - "QFrame { background: %1; border: 1px solid %2; border-radius: 8px; padding: 18px; }" - " QFrame QLabel { color: %3; font-size: %4px; }" - ).arg(Color::surface(), Color::border(), Color::text()) - .arg(baseFontSize()); -} - -inline QString clickableRowWithLabels(const QString& selector) -{ - return QString( - "%1 { background: %2; border: 1px solid %3; border-radius: 8px; padding: 12px 16px; margin: 3px 0; }" - " %1 QLabel { color: %4; font-size: %5px; }" - ).arg(selector, Color::surface(), Color::border(), Color::text()) - .arg(baseFontSize()); -} - -inline QString mutedText() -{ - return QString("color: %1;").arg(Color::subtext()); -} - -inline QString monoText() -{ - return QString("font-family: 'Menlo', 'Courier New'; font-size: %1px; color: %2;") - .arg(baseFontSize() - 1) - .arg(Color::accent()); -} - -inline QString badge(const QString& bgColor) -{ - return QString("color: %1; background: %2; border-radius: 4px; padding: 3px 12px; font-weight: bold; font-size: %3px;") - .arg(Color::bg(), bgColor) - .arg(baseFontSize() - 1); -} - -inline QString sectionHeader() -{ - return QString("color: %1;").arg(Color::text()); -} - -inline QString navButton() -{ - return QString( - "QPushButton { background: %1; color: %2; border: 1px solid %3; border-radius: 6px; padding: 6px 14px; font-size: %7px; }" - " QPushButton:hover { background: %4; border-color: %5; }" - " QPushButton:disabled { color: %6; background: %1; border-color: %3; opacity: 0.4; }" - ).arg(Color::surface(), Color::text(), Color::border(), Color::surfaceHover(), Color::accent(), Color::subtext()) - .arg(baseFontSize() + 2); -} - -inline QString searchInput() -{ - return QString( - "QLineEdit { background: %1; color: %2; border: 1px solid %3; border-radius: 6px; padding: 10px 14px; font-size: %6px; }" - " QLineEdit:focus { border-color: %4; }" - " QLineEdit::placeholder { color: %5; }" - ).arg(Color::surface(), Color::text(), Color::border(), Color::accent(), Color::subtext()) - .arg(baseFontSize()); -} - -inline QString searchButton() -{ - return QString( - "QPushButton { background: %1; color: %2; border: none; border-radius: 6px; padding: 10px 20px; font-size: %4px; font-weight: bold; }" - " QPushButton:hover { background: %3; }" - ).arg(Color::accent(), Color::bg(), Color::mauve()) - .arg(baseFontSize()); -} - -inline QString healthLabel() -{ - return QString("color: %1; font-weight: bold; font-size: %2px;") - .arg(Color::green()) - .arg(baseFontSize()); -} - -// --- Status colors --- - -inline QString statusColor(const QString& status) -{ - if (status == "Finalized") return Color::green(); - if (status == "Safe") return Color::yellow(); - return Color::subtext(); // Pending -} - -// --- Transaction type colors --- - -inline QString txTypeColor(const QString& type) -{ - if (type == "Public") return Color::blue(); - if (type == "Privacy-Preserving") return Color::mauve(); - return Color::peach(); // Program Deployment -} - -} // namespace Style diff --git a/src/explorer_resources.qrc b/src/explorer_resources.qrc deleted file mode 100644 index 9060833..0000000 --- a/src/explorer_resources.qrc +++ /dev/null @@ -1,12 +0,0 @@ - - - icons/arrow-left.svg - icons/arrow-right.svg - icons/home.svg - icons/search.svg - icons/box.svg - icons/file-text.svg - icons/user.svg - icons/activity.svg - - diff --git a/src/lez_explorer_ui.rep b/src/lez_explorer_ui.rep new file mode 100644 index 0000000..79bc24b --- /dev/null +++ b/src/lez_explorer_ui.rep @@ -0,0 +1,43 @@ +#include +#include + +// QtRO view contract for the LEZ block explorer. The QML view talks to this +// surface; the *Plugin / *Interface glue is generated (interface: universal). +// +// State the view binds to is exposed as auto-synced PROPs; one-shot lookups are +// SLOTs whose return value is delivered to QML via logos.watch(...). Everything +// is Qt-typed (the QtRO wire contract); the backend converts the indexer's +// compact JSON into QVariantMap/QVariantList before it crosses this boundary. +class LezExplorerUi +{ + // Recent-blocks feed shown on the home page (newest first). Backend-owned: + // the 2 s poll prepends new heads and "Load more" appends older pages. + PROP(QVariantList recentBlocks READONLY) + // Tip block id (from getLastFinalizedBlockId). + PROP(qlonglong chainHeight=0 READONLY) + // Absolute path of the indexer config currently in use ("" if none set). + PROP(QString indexerConfig READONLY) + // "Connecting" / "Connected" / "Error" — drives the health indicator. + PROP(QString connectionStatus READONLY) + + // Point the indexer at a config and (re)start ingestion, then refresh the + // feed. port is the indexer RPC port. Returns true on success. A blank + // configPath skips start_indexer (the indexer is assumed already running). + SLOT(bool applyIndexerConfig(QString configPath, QString port)) + // Reload the latest page into recentBlocks and re-baseline the poller. + SLOT(void refreshBlocks()) + // Append the next older page of blocks to recentBlocks. + SLOT(void loadMoreBlocks()) + + // Detail lookups — each returns an empty map/list when not found. + SLOT(QVariantMap getBlockById(QString id)) + SLOT(QVariantMap getBlockByHash(QString hash)) + SLOT(QVariantMap getTransaction(QString hash)) + SLOT(QVariantMap getAccount(QString accountId)) + SLOT(QVariantList getTransactionsByAccount(QString accountId, int offset, int limit)) + // Composed client-side: { blocks: [...], transactions: [...], accounts: [...] }. + SLOT(QVariantMap search(QString query)) + + // Surfaced to the view for transient failures (e.g. a failed start_indexer). + SIGNAL(error(QString message)) +} diff --git a/src/lez_explorer_ui_backend.cpp b/src/lez_explorer_ui_backend.cpp new file mode 100644 index 0000000..929e2ac --- /dev/null +++ b/src/lez_explorer_ui_backend.cpp @@ -0,0 +1,438 @@ +#include "lez_explorer_ui_backend.h" + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +// Generated umbrella: LogosModules (behind modules()) built from +// metadata.json#dependencies — the Qt-typed wrappers for lez_indexer_module. +#include "logos_sdk.h" + +namespace { + +constexpr int kPollIntervalMs = 2000; +// Above this gap we rebuild the feed from the backend rather than fetch every +// missing block one by one (matches the former LpIndexerService threshold). +constexpr quint64 kGapRebuildThreshold = 8; + +// 64/128-bit values arrive as decimal strings (to dodge JSON double precision +// loss), but be lenient and also accept a JSON number. +quint64 jsonU64(const QJsonValue& value) +{ + if (value.isString()) { + bool ok = false; + const qulonglong parsed = value.toString().toULongLong(&ok); + return ok ? parsed : 0; + } + if (value.isDouble()) { + const double number = value.toDouble(); + return number > 0.0 ? static_cast(number) : 0; + } + return 0; +} + +QString jsonStr(const QJsonValue& value) +{ + if (value.isString()) { + return value.toString(); + } + if (value.isDouble()) { + return QString::number(static_cast(value.toDouble())); + } + return {}; +} + +QString timestampText(quint64 timestamp) +{ + QDateTime dt; + // Tolerate either seconds or milliseconds since epoch. + if (timestamp > 1000000000000ULL) { + dt = QDateTime::fromMSecsSinceEpoch(static_cast(timestamp), QTimeZone::UTC); + } else { + dt = QDateTime::fromSecsSinceEpoch(static_cast(timestamp), QTimeZone::UTC); + } + if (!dt.isValid()) { + dt = QDateTime::currentDateTimeUtc(); + } + return dt.toString(QStringLiteral("yyyy-MM-dd hh:mm:ss")) + QStringLiteral(" UTC"); +} + +QVariantMap txObjectToMap(const QJsonObject& obj) +{ + QVariantMap tx; + if (obj.isEmpty()) { + return tx; + } + + tx.insert(QStringLiteral("hash"), jsonStr(obj.value(QStringLiteral("hash")))); + const QString type = obj.value(QStringLiteral("type")).toString(); + tx.insert(QStringLiteral("type"), type); + + const auto accountsOf = [](const QJsonArray& arr) { + QVariantList accounts; + for (const auto& entry : arr) { + const QJsonObject account = entry.toObject(); + QVariantMap ref; + ref.insert(QStringLiteral("accountId"), jsonStr(account.value(QStringLiteral("account_id")))); + QString nonce = jsonStr(account.value(QStringLiteral("nonce"))); + ref.insert(QStringLiteral("nonce"), nonce.isEmpty() ? QStringLiteral("0") : nonce); + accounts.append(ref); + } + return accounts; + }; + + if (type == QLatin1String("Public")) { + tx.insert(QStringLiteral("programId"), jsonStr(obj.value(QStringLiteral("program_id")))); + tx.insert(QStringLiteral("accounts"), accountsOf(obj.value(QStringLiteral("accounts")).toArray())); + tx.insert(QStringLiteral("instructionDataCount"), + obj.value(QStringLiteral("instruction_data")).toArray().size()); + tx.insert(QStringLiteral("signatureCount"), obj.value(QStringLiteral("signature_count")).toInt()); + } else if (type == QLatin1String("PrivacyPreserving")) { + tx.insert(QStringLiteral("accounts"), accountsOf(obj.value(QStringLiteral("accounts")).toArray())); + tx.insert(QStringLiteral("newCommitmentsCount"), obj.value(QStringLiteral("new_commitments_count")).toInt()); + tx.insert(QStringLiteral("nullifiersCount"), obj.value(QStringLiteral("nullifiers_count")).toInt()); + tx.insert(QStringLiteral("encryptedStatesCount"), obj.value(QStringLiteral("encrypted_states_count")).toInt()); + tx.insert(QStringLiteral("validityWindowStart"), + static_cast(jsonU64(obj.value(QStringLiteral("validity_window_start"))))); + tx.insert(QStringLiteral("validityWindowEnd"), + static_cast(jsonU64(obj.value(QStringLiteral("validity_window_end"))))); + tx.insert(QStringLiteral("signatureCount"), obj.value(QStringLiteral("signature_count")).toInt()); + tx.insert(QStringLiteral("proofSizeBytes"), obj.value(QStringLiteral("proof_size")).toInt()); + } else if (type == QLatin1String("ProgramDeployment")) { + tx.insert(QStringLiteral("bytecodeSizeBytes"), obj.value(QStringLiteral("bytecode_size")).toInt()); + } + + return tx; +} + +QVariantMap blockObjectToMap(const QJsonObject& obj) +{ + QVariantMap block; + if (obj.isEmpty()) { + return block; + } + + block.insert(QStringLiteral("blockId"), static_cast(jsonU64(obj.value(QStringLiteral("block_id"))))); + block.insert(QStringLiteral("hash"), jsonStr(obj.value(QStringLiteral("hash")))); + block.insert(QStringLiteral("prevBlockHash"), jsonStr(obj.value(QStringLiteral("prev_block_hash")))); + block.insert(QStringLiteral("signature"), jsonStr(obj.value(QStringLiteral("signature")))); + block.insert(QStringLiteral("timestampText"), timestampText(jsonU64(obj.value(QStringLiteral("timestamp"))))); + + const QString status = obj.value(QStringLiteral("bedrock_status")).toString(QStringLiteral("Pending")); + block.insert(QStringLiteral("status"), status); + + const QJsonArray txArray = obj.value(QStringLiteral("transactions")).toArray(); + QVariantList transactions; + transactions.reserve(txArray.size()); + for (const auto& txValue : txArray) { + const QVariantMap tx = txObjectToMap(txValue.toObject()); + if (!tx.isEmpty()) { + transactions.append(tx); + } + } + block.insert(QStringLiteral("transactions"), transactions); + block.insert(QStringLiteral("txCount"), transactions.size()); + + return block; +} + +QVariantMap blockJsonToMap(const QString& json) +{ + if (json.isEmpty()) { + return {}; + } + const QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8()); + return doc.isObject() ? blockObjectToMap(doc.object()) : QVariantMap(); +} + +QVariantMap accountJsonToMap(const QString& accountId, const QString& json) +{ + if (json.isEmpty()) { + return {}; + } + const QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8()); + if (!doc.isObject()) { + return {}; + } + const QJsonObject obj = doc.object(); + + QVariantMap account; + account.insert(QStringLiteral("accountId"), accountId); // payload omits it; inject the queried id + account.insert(QStringLiteral("programOwner"), jsonStr(obj.value(QStringLiteral("program_owner")))); + QString balance = jsonStr(obj.value(QStringLiteral("balance"))); + account.insert(QStringLiteral("balance"), balance.isEmpty() ? QStringLiteral("0") : balance); + QString nonce = jsonStr(obj.value(QStringLiteral("nonce"))); + account.insert(QStringLiteral("nonce"), nonce.isEmpty() ? QStringLiteral("0") : nonce); + account.insert(QStringLiteral("dataSizeBytes"), obj.value(QStringLiteral("data_size")).toInt()); + return account; +} + +QVariantMap txJsonToMap(const QString& json) +{ + if (json.isEmpty()) { + return {}; + } + const QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8()); + return doc.isObject() ? txObjectToMap(doc.object()) : QVariantMap(); +} + +} // namespace + +LezExplorerUiBackend::LezExplorerUiBackend() = default; + +LezExplorerUiBackend::~LezExplorerUiBackend() = default; + +void LezExplorerUiBackend::onContextReady() +{ + setConnectionStatus(QStringLiteral("Connecting")); + + // The indexer pushes no events — poll the tip for live head updates. + m_pollTimer = new QTimer(this); + m_pollTimer->setInterval(kPollIntervalMs); + connect(m_pollTimer, &QTimer::timeout, this, &LezExplorerUiBackend::pollTip); + m_pollTimer->start(); + + // Kick an immediate poll so the view fills without waiting a full interval. + pollTip(); +} + +bool LezExplorerUiBackend::applyIndexerConfig(QString configPath, QString port) +{ + const QString trimmedConfig = configPath.trimmed(); + const QString trimmedPort = port.trimmed(); + if (!trimmedPort.isEmpty()) { + m_port = trimmedPort; + } + setIndexerConfig(trimmedConfig); + + bool started = true; + if (!trimmedConfig.isEmpty()) { + const qlonglong code = modules().lez_indexer_module.start_indexer(trimmedConfig, m_port); + started = (code == 0); + if (!started) { + emit error(QStringLiteral("start_indexer failed (code %1) for %2").arg(code).arg(trimmedConfig)); + } + } + + // Re-baseline the poller; a (re)started indexer may ingest afresh. + m_lastPolledTip = 0; + m_polledOnce = false; + refreshBlocks(); + return started; +} + +void LezExplorerUiBackend::refreshBlocks() +{ + const QString json = modules().lez_indexer_module.getBlocks(QString(), QStringLiteral("10")); + m_recentBlocks = parseBlockArrayJson(json); + + m_newestLoadedId = 0; + m_oldestLoadedId = 0; + for (const QVariant& entry : std::as_const(m_recentBlocks)) { + const quint64 id = entry.toMap().value(QStringLiteral("blockId")).toULongLong(); + if (m_newestLoadedId == 0 || id > m_newestLoadedId) { + m_newestLoadedId = id; + } + if (m_oldestLoadedId == 0 || id < m_oldestLoadedId) { + m_oldestLoadedId = id; + } + } + setRecentBlocks(m_recentBlocks); +} + +void LezExplorerUiBackend::loadMoreBlocks() +{ + if (m_oldestLoadedId <= 1) { + return; // already at genesis + } + const QString json + = modules().lez_indexer_module.getBlocks(QString::number(m_oldestLoadedId), QStringLiteral("10")); + const QVariantList older = parseBlockArrayJson(json); + if (older.isEmpty()) { + return; + } + + m_recentBlocks.append(older); + for (const QVariant& entry : older) { + const quint64 id = entry.toMap().value(QStringLiteral("blockId")).toULongLong(); + if (id != 0 && (m_oldestLoadedId == 0 || id < m_oldestLoadedId)) { + m_oldestLoadedId = id; + } + } + setRecentBlocks(m_recentBlocks); +} + +QVariantMap LezExplorerUiBackend::getBlockById(QString id) +{ + return blockJsonToMap(modules().lez_indexer_module.getBlockById(id)); +} + +QVariantMap LezExplorerUiBackend::getBlockByHash(QString hash) +{ + return blockJsonToMap(modules().lez_indexer_module.getBlockByHash(hash)); +} + +QVariantMap LezExplorerUiBackend::getTransaction(QString hash) +{ + return txJsonToMap(modules().lez_indexer_module.getTransaction(hash)); +} + +QVariantMap LezExplorerUiBackend::getAccount(QString accountId) +{ + return accountJsonToMap(accountId, modules().lez_indexer_module.getAccount(accountId)); +} + +QVariantList LezExplorerUiBackend::getTransactionsByAccount(QString accountId, int offset, int limit) +{ + const QString json = modules().lez_indexer_module.getTransactionsByAccount( + accountId, QString::number(offset), QString::number(limit)); + if (json.isEmpty()) { + return {}; + } + const QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8()); + if (!doc.isArray()) { + return {}; + } + + QVariantList result; + const QJsonArray array = doc.array(); + result.reserve(array.size()); + for (const auto& item : array) { + const QVariantMap tx = txObjectToMap(item.toObject()); + if (!tx.isEmpty()) { + result.append(tx); + } + } + return result; +} + +QVariantMap LezExplorerUiBackend::search(QString query) +{ + QVariantList blocks; + QVariantList transactions; + QVariantList accounts; + + const QString trimmed = query.trimmed(); + if (!trimmed.isEmpty()) { + static const QRegularExpression hashRegex(QStringLiteral("^[0-9a-fA-F]{64}$")); + if (hashRegex.match(trimmed).hasMatch()) { + const QVariantMap block = getBlockByHash(trimmed); + if (!block.isEmpty()) { + blocks.append(block); + } + const QVariantMap tx = getTransaction(trimmed); + if (!tx.isEmpty()) { + transactions.append(tx); + } + const QVariantMap account = getAccount(trimmed); + // getAccount always injects the id; treat "no payload fields" as miss. + if (account.size() > 1) { + accounts.append(account); + } + } + + bool ok = false; + const quint64 blockId = trimmed.toULongLong(&ok); + if (ok) { + const QVariantMap block = getBlockById(QString::number(blockId)); + if (!block.isEmpty()) { + const bool duplicate = std::any_of(blocks.cbegin(), blocks.cend(), [blockId](const QVariant& e) { + return e.toMap().value(QStringLiteral("blockId")).toULongLong() == blockId; + }); + if (!duplicate) { + blocks.append(block); + } + } + } + } + + QVariantMap results; + results.insert(QStringLiteral("blocks"), blocks); + results.insert(QStringLiteral("transactions"), transactions); + results.insert(QStringLiteral("accounts"), accounts); + return results; +} + +void LezExplorerUiBackend::pollTip() +{ + const QString tipStr = modules().lez_indexer_module.getLastFinalizedBlockId(); + bool ok = false; + const quint64 tip = tipStr.toULongLong(&ok); + if (!ok || tip == 0) { + setConnectionStatus(QStringLiteral("Connecting")); + return; + } + + setConnectionStatus(QStringLiteral("Connected")); + setChainHeight(static_cast(tip)); + + // First successful poll: fill the feed and baseline without double-loading. + if (!m_polledOnce) { + m_polledOnce = true; + m_lastPolledTip = tip; + refreshBlocks(); + return; + } + + if (tip <= m_lastPolledTip) { + return; + } + + // Large jump / gap: rebuild the recent list from the backend. + if (tip - m_lastPolledTip > kGapRebuildThreshold) { + m_lastPolledTip = tip; + refreshBlocks(); + return; + } + + // Contiguous growth: fetch the new heads and prepend (newest first). + for (quint64 id = m_lastPolledTip + 1; id <= tip; ++id) { + const QVariantMap block = fetchBlock(id); + if (!block.isEmpty()) { + m_recentBlocks.prepend(block); + if (id > m_newestLoadedId) { + m_newestLoadedId = id; + } + if (m_oldestLoadedId == 0) { + m_oldestLoadedId = id; + } + } + } + m_lastPolledTip = tip; + setRecentBlocks(m_recentBlocks); +} + +QVariantMap LezExplorerUiBackend::fetchBlock(quint64 blockId) +{ + return blockJsonToMap(modules().lez_indexer_module.getBlockById(QString::number(blockId))); +} + +QVariantList LezExplorerUiBackend::parseBlockArrayJson(const QString& json) const +{ + if (json.isEmpty()) { + return {}; + } + const QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8()); + if (!doc.isArray()) { + return {}; + } + + QVariantList blocks; + const QJsonArray array = doc.array(); + blocks.reserve(array.size()); + for (const auto& item : array) { + const QVariantMap block = blockObjectToMap(item.toObject()); + if (!block.isEmpty()) { + blocks.append(block); + } + } + return blocks; +} diff --git a/src/lez_explorer_ui_backend.h b/src/lez_explorer_ui_backend.h new file mode 100644 index 0000000..8bf49ec --- /dev/null +++ b/src/lez_explorer_ui_backend.h @@ -0,0 +1,62 @@ +#pragma once + +#include +#include +#include + +#include "logos_ui_plugin_context.h" +#include "rep_lez_explorer_ui_source.h" + +class QTimer; + +/** + * @brief Backend for the LEZ block explorer ui_qml view (universal model). + * + * The only hand-written C++ in this module: it derives the repc-generated + * `LezExplorerUiSimpleSource` (so it implements the `.rep` view contract) and + * `LogosUiPluginContext` (which supplies `onContextReady()` and the Qt-typed + * `modules()` accessors for the `lez_indexer_module` dependency). The + * `*Plugin` / `*Interface` glue is generated. + * + * It reads from the indexer with typed calls — `modules().lez_indexer_module.*` + * — which return the indexer's compact JSON as QString. This class converts + * that JSON into QVariantMap / QVariantList (schema preserved from the former + * `LpIndexerService`) for the QML view, and runs a 2 s poll on the chain tip to + * keep `recentBlocks` / `chainHeight` live (the indexer emits no events). + */ +class LezExplorerUiBackend : public LezExplorerUiSimpleSource, public LogosUiPluginContext { +public: + LezExplorerUiBackend(); + ~LezExplorerUiBackend() override; + + // Fires when ui-host wires the plugin's LogosAPI: modules() is live, so we + // start the poll here. + void onContextReady() override; + + // .rep SLOTs. + bool applyIndexerConfig(QString configPath, QString port) override; + void refreshBlocks() override; + void loadMoreBlocks() override; + QVariantMap getBlockById(QString id) override; + QVariantMap getBlockByHash(QString hash) override; + QVariantMap getTransaction(QString hash) override; + QVariantMap getAccount(QString accountId) override; + QVariantList getTransactionsByAccount(QString accountId, int offset, int limit) override; + QVariantMap search(QString query) override; + +private: + // Tip poll: detect new heads and append/rebuild the recent-blocks feed. + void pollTip(); + // Fetch a single block as a normalized map ({} if missing). + QVariantMap fetchBlock(quint64 blockId); + // Parse a getBlocks(...) JSON array payload into a list of block maps. + QVariantList parseBlockArrayJson(const QString& json) const; + + QString m_port = QStringLiteral("8779"); + QVariantList m_recentBlocks; + quint64 m_newestLoadedId = 0; // highest block id currently in m_recentBlocks + quint64 m_oldestLoadedId = 0; // lowest block id currently in m_recentBlocks + quint64 m_lastPolledTip = 0; + bool m_polledOnce = false; + QTimer* m_pollTimer = nullptr; +}; diff --git a/src/models/Account.h b/src/models/Account.h deleted file mode 100644 index d7eaaa1..0000000 --- a/src/models/Account.h +++ /dev/null @@ -1,11 +0,0 @@ -#pragma once - -#include - -struct Account { - QString accountId; - QString programOwner; - QString balance; - QString nonce; - int dataSizeBytes = 0; -}; diff --git a/src/models/Block.h b/src/models/Block.h deleted file mode 100644 index e47a6ca..0000000 --- a/src/models/Block.h +++ /dev/null @@ -1,33 +0,0 @@ -#pragma once - -#include -#include -#include - -#include "Transaction.h" - -enum class BedrockStatus { - Pending, - Safe, - Finalized -}; - -inline QString bedrockStatusToString(BedrockStatus status) -{ - switch (status) { - case BedrockStatus::Pending: return "Pending"; - case BedrockStatus::Safe: return "Safe"; - case BedrockStatus::Finalized: return "Finalized"; - } - return "Unknown"; -} - -struct Block { - quint64 blockId = 0; - QString hash; - QString prevBlockHash; - QDateTime timestamp; - QString signature; - QVector transactions; - BedrockStatus bedrockStatus = BedrockStatus::Pending; -}; diff --git a/src/models/Transaction.h b/src/models/Transaction.h deleted file mode 100644 index 09a9246..0000000 --- a/src/models/Transaction.h +++ /dev/null @@ -1,47 +0,0 @@ -#pragma once - -#include -#include - -enum class TransactionType { - Public, - PrivacyPreserving, - ProgramDeployment -}; - -inline QString transactionTypeToString(TransactionType type) -{ - switch (type) { - case TransactionType::Public: return "Public"; - case TransactionType::PrivacyPreserving: return "Privacy-Preserving"; - case TransactionType::ProgramDeployment: return "Program Deployment"; - } - return "Unknown"; -} - -struct AccountRef { - QString accountId; - QString nonce; -}; - -struct Transaction { - QString hash; - TransactionType type = TransactionType::Public; - - // Public transaction fields - QString programId; - QVector accounts; - QVector instructionData; - int signatureCount = 0; - int proofSizeBytes = 0; - - // Privacy-preserving transaction fields - int newCommitmentsCount = 0; - int nullifiersCount = 0; - int encryptedStatesCount = 0; - quint64 validityWindowStart = 0; - quint64 validityWindowEnd = 0; - - // Program deployment fields - int bytecodeSizeBytes = 0; -}; diff --git a/src/pages/AccountPage.cpp b/src/pages/AccountPage.cpp deleted file mode 100644 index c8afb76..0000000 --- a/src/pages/AccountPage.cpp +++ /dev/null @@ -1,160 +0,0 @@ -#include "AccountPage.h" -#include "Style.h" -#include "widgets/ClickableFrame.h" - -#include -#include -#include -#include -#include -#include -#include - -namespace { - -QLabel* makeFieldLabel(const QString& text) -{ - auto* label = new QLabel(text); - label->setStyleSheet(Style::mutedText() + " font-weight: bold;"); - return label; -} - -QLabel* makeValueLabel(const QString& text) -{ - auto* label = new QLabel(text); - label->setTextInteractionFlags(Qt::TextSelectableByMouse); - label->setWordWrap(true); - return label; -} - -} // namespace - -AccountPage::AccountPage(const Account& account, IndexerService* indexer, QWidget* parent) - : QWidget(parent) -{ - auto* outerLayout = new QVBoxLayout(this); - outerLayout->setContentsMargins(0, 0, 0, 0); - - auto* scrollArea = new QScrollArea(this); - scrollArea->setWidgetResizable(true); - scrollArea->setFrameShape(QFrame::NoFrame); - scrollArea->setStyleSheet("QScrollArea { background: transparent; border: none; } QWidget#scrollContent { background: transparent; }"); - - auto* scrollContent = new QWidget(); - scrollContent->setObjectName("scrollContent"); - auto* layout = new QVBoxLayout(scrollContent); - layout->setAlignment(Qt::AlignTop); - layout->setContentsMargins(0, 0, 0, 0); - - // Title with icon - auto* titleRow = new QHBoxLayout(); - titleRow->setSpacing(10); - auto* titleIcon = new QLabel(); - titleIcon->setPixmap(QIcon(":/icons/user.svg").pixmap(30, 30)); - auto* title = new QLabel("Account Details"); - QFont titleFont = title->font(); - titleFont.setPointSize(24); - titleFont.setBold(true); - title->setFont(titleFont); - title->setStyleSheet(QString("color: %1;").arg(Style::Color::text())); - titleRow->addWidget(titleIcon); - titleRow->addWidget(title); - titleRow->addStretch(); - layout->addLayout(titleRow); - layout->addSpacing(8); - - // Account info grid - auto* infoFrame = new QFrame(); - infoFrame->setFrameShape(QFrame::NoFrame); - infoFrame->setStyleSheet(Style::cardFrameWithLabels()); - - auto* grid = new QGridLayout(infoFrame); - grid->setColumnStretch(1, 1); - grid->setVerticalSpacing(10); - grid->setHorizontalSpacing(20); - int row = 0; - - grid->addWidget(makeFieldLabel("Account ID"), row, 0); - auto* idVal = makeValueLabel(account.accountId); - idVal->setStyleSheet(Style::monoText()); - grid->addWidget(idVal, row++, 1); - - grid->addWidget(makeFieldLabel("Balance"), row, 0); - auto* balVal = makeValueLabel(account.balance); - balVal->setStyleSheet(QString("color: %1; font-weight: bold;").arg(Style::Color::green())); - grid->addWidget(balVal, row++, 1); - - grid->addWidget(makeFieldLabel("Program Owner"), row, 0); - auto* ownerVal = makeValueLabel(account.programOwner); - ownerVal->setStyleSheet(Style::monoText()); - grid->addWidget(ownerVal, row++, 1); - - grid->addWidget(makeFieldLabel("Nonce"), row, 0); - grid->addWidget(makeValueLabel(account.nonce), row++, 1); - - grid->addWidget(makeFieldLabel("Data Size"), row, 0); - grid->addWidget(makeValueLabel(QString("%1 bytes").arg(account.dataSizeBytes)), row++, 1); - - layout->addWidget(infoFrame); - - // Transaction history - auto transactions = indexer->getTransactionsByAccount(account.accountId, 0, 10); - - if (!transactions.isEmpty()) { - auto* headerRow = new QHBoxLayout(); - headerRow->setContentsMargins(0, 16, 0, 6); - headerRow->setSpacing(8); - auto* headerIcon = new QLabel(); - headerIcon->setPixmap(QIcon(":/icons/file-text.svg").pixmap(24, 24)); - auto* txHeader = new QLabel("Transaction History"); - QFont headerFont = txHeader->font(); - headerFont.setPointSize(20); - headerFont.setBold(true); - txHeader->setFont(headerFont); - txHeader->setStyleSheet(Style::sectionHeader()); - headerRow->addWidget(headerIcon); - headerRow->addWidget(txHeader); - headerRow->addStretch(); - layout->addLayout(headerRow); - - for (const auto& tx : transactions) { - auto* frame = new ClickableFrame(); - frame->setFrameShape(QFrame::NoFrame); - frame->setStyleSheet(Style::clickableRowWithLabels("ClickableFrame")); - - auto* txRow = new QHBoxLayout(frame); - txRow->setSpacing(10); - - auto* icon = new QLabel(); - icon->setPixmap(QIcon(":/icons/file-text.svg").pixmap(20, 20)); - txRow->addWidget(icon); - - auto* hashLabel = new QLabel(tx.hash); - QFont boldFont = hashLabel->font(); - boldFont.setBold(true); - hashLabel->setFont(boldFont); - - QString typeStr = transactionTypeToString(tx.type); - auto* typeLabel = new QLabel(typeStr); - typeLabel->setStyleSheet(Style::badge(Style::txTypeColor(typeStr))); - - txRow->addWidget(hashLabel); - txRow->addWidget(typeLabel); - txRow->addStretch(); - - QString txHash = tx.hash; - connect(frame, &ClickableFrame::clicked, this, [this, txHash]() { - emit transactionClicked(txHash); - }); - - layout->addWidget(frame); - } - } else { - auto* noTx = new QLabel("No transactions found for this account."); - noTx->setStyleSheet(Style::mutedText() + " margin-top: 16px;"); - layout->addWidget(noTx); - } - - scrollArea->setWidget(scrollContent); - outerLayout->addWidget(scrollArea); -} diff --git a/src/pages/AccountPage.h b/src/pages/AccountPage.h deleted file mode 100644 index 083216f..0000000 --- a/src/pages/AccountPage.h +++ /dev/null @@ -1,16 +0,0 @@ -#pragma once - -#include "models/Account.h" -#include "services/IndexerService.h" - -#include - -class AccountPage : public QWidget { - Q_OBJECT - -public: - explicit AccountPage(const Account& account, IndexerService* indexer, QWidget* parent = nullptr); - -signals: - void transactionClicked(const QString& hash); -}; diff --git a/src/pages/BlockPage.cpp b/src/pages/BlockPage.cpp deleted file mode 100644 index d9396e9..0000000 --- a/src/pages/BlockPage.cpp +++ /dev/null @@ -1,218 +0,0 @@ -#include "BlockPage.h" -#include "Style.h" -#include "widgets/ClickableFrame.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace { - -class PrevHashClickFilter : public QObject { -public: - PrevHashClickFilter(quint64 blockId, BlockPage* page, QObject* parent) - : QObject(parent), m_blockId(blockId), m_page(page) {} - -protected: - bool eventFilter(QObject* obj, QEvent* event) override { - if (event->type() == QEvent::MouseButtonRelease) { - auto* me = static_cast(event); - if (me->button() == Qt::LeftButton) { - emit m_page->blockClicked(m_blockId); - return true; - } - } - return QObject::eventFilter(obj, event); - } - -private: - quint64 m_blockId; - BlockPage* m_page; -}; - -QLabel* makeFieldLabel(const QString& text) -{ - auto* label = new QLabel(text); - label->setStyleSheet(Style::mutedText() + " font-weight: bold;"); - return label; -} - -QLabel* makeValueLabel(const QString& text) -{ - auto* label = new QLabel(text); - label->setTextInteractionFlags(Qt::TextSelectableByMouse); - label->setWordWrap(true); - return label; -} - -} // namespace - -BlockPage::BlockPage(const Block& block, QWidget* parent) - : QWidget(parent) -{ - auto* outerLayout = new QVBoxLayout(this); - outerLayout->setContentsMargins(0, 0, 0, 0); - - auto* scrollArea = new QScrollArea(this); - scrollArea->setWidgetResizable(true); - scrollArea->setFrameShape(QFrame::NoFrame); - scrollArea->setStyleSheet("QScrollArea { background: transparent; border: none; } QWidget#scrollContent { background: transparent; }"); - - auto* scrollContent = new QWidget(); - scrollContent->setObjectName("scrollContent"); - auto* layout = new QVBoxLayout(scrollContent); - layout->setAlignment(Qt::AlignTop); - layout->setContentsMargins(0, 0, 0, 0); - - // Title with icon - auto* titleRow = new QHBoxLayout(); - titleRow->setSpacing(10); - auto* titleIcon = new QLabel(); - titleIcon->setPixmap(QIcon(":/icons/box.svg").pixmap(30, 30)); - auto* title = new QLabel(QString("Block #%1").arg(block.blockId)); - QFont titleFont = title->font(); - titleFont.setPointSize(24); - titleFont.setBold(true); - title->setFont(titleFont); - title->setStyleSheet(QString("color: %1;").arg(Style::Color::text())); - titleRow->addWidget(titleIcon); - titleRow->addWidget(title); - titleRow->addStretch(); - layout->addLayout(titleRow); - layout->addSpacing(8); - - // Block info grid - auto* infoFrame = new QFrame(); - infoFrame->setFrameShape(QFrame::NoFrame); - infoFrame->setStyleSheet(Style::cardFrameWithLabels()); - - auto* grid = new QGridLayout(infoFrame); - grid->setColumnStretch(1, 1); - grid->setVerticalSpacing(10); - grid->setHorizontalSpacing(20); - int row = 0; - - grid->addWidget(makeFieldLabel("Block ID"), row, 0); - grid->addWidget(makeValueLabel(QString::number(block.blockId)), row++, 1); - - grid->addWidget(makeFieldLabel("Hash"), row, 0); - auto* hashVal = makeValueLabel(block.hash); - hashVal->setStyleSheet(Style::monoText()); - grid->addWidget(hashVal, row++, 1); - - grid->addWidget(makeFieldLabel("Previous Hash"), row, 0); - if (block.blockId > 1) { - auto* prevHashLabel = new QLabel(block.prevBlockHash); - prevHashLabel->setStyleSheet(QString("color: %1; text-decoration: underline;").arg(Style::Color::accent())); - prevHashLabel->setCursor(Qt::PointingHandCursor); - prevHashLabel->setWordWrap(true); - prevHashLabel->setTextInteractionFlags(Qt::TextSelectableByMouse); - quint64 prevBlockId = block.blockId - 1; - prevHashLabel->installEventFilter(new PrevHashClickFilter(prevBlockId, this, this)); - grid->addWidget(prevHashLabel, row++, 1); - } else { - grid->addWidget(makeValueLabel(block.prevBlockHash), row++, 1); - } - - grid->addWidget(makeFieldLabel("Timestamp"), row, 0); - grid->addWidget(makeValueLabel(block.timestamp.toString("yyyy-MM-dd hh:mm:ss UTC")), row++, 1); - - grid->addWidget(makeFieldLabel("Status"), row, 0); - QString statusStr = bedrockStatusToString(block.bedrockStatus); - auto* statusLabel = new QLabel(statusStr); - statusLabel->setStyleSheet(Style::badge(Style::statusColor(statusStr))); - statusLabel->setMaximumWidth(120); - grid->addWidget(statusLabel, row++, 1); - - grid->addWidget(makeFieldLabel("Signature"), row, 0); - // Insert zero-width spaces every 32 chars so QLabel can word-wrap the long hex string - QString wrappableSig = block.signature; - for (int i = 32; i < wrappableSig.size(); i += 33) { - wrappableSig.insert(i, QChar(0x200B)); - } - auto* sigLabel = new QLabel(wrappableSig); - sigLabel->setStyleSheet(Style::monoText()); - sigLabel->setTextInteractionFlags(Qt::TextSelectableByMouse); - sigLabel->setWordWrap(true); - grid->addWidget(sigLabel, row++, 1); - - grid->addWidget(makeFieldLabel("Transactions"), row, 0); - grid->addWidget(makeValueLabel(QString::number(block.transactions.size())), row++, 1); - - layout->addWidget(infoFrame); - - // Transactions section - if (!block.transactions.isEmpty()) { - auto* headerRow = new QHBoxLayout(); - headerRow->setContentsMargins(0, 16, 0, 6); - headerRow->setSpacing(8); - auto* headerIcon = new QLabel(); - headerIcon->setPixmap(QIcon(":/icons/file-text.svg").pixmap(24, 24)); - auto* txHeader = new QLabel("Transactions"); - QFont headerFont = txHeader->font(); - headerFont.setPointSize(20); - headerFont.setBold(true); - txHeader->setFont(headerFont); - txHeader->setStyleSheet(Style::sectionHeader()); - headerRow->addWidget(headerIcon); - headerRow->addWidget(txHeader); - headerRow->addStretch(); - layout->addLayout(headerRow); - - for (const auto& tx : block.transactions) { - auto* frame = new ClickableFrame(); - frame->setFrameShape(QFrame::NoFrame); - frame->setStyleSheet(Style::clickableRowWithLabels("ClickableFrame")); - - auto* txRow = new QHBoxLayout(frame); - txRow->setSpacing(10); - - auto* icon = new QLabel(); - icon->setPixmap(QIcon(":/icons/file-text.svg").pixmap(20, 20)); - txRow->addWidget(icon); - - auto* hashLabel = new QLabel(tx.hash); - QFont boldFont = hashLabel->font(); - boldFont.setBold(true); - hashLabel->setFont(boldFont); - - QString typeStr = transactionTypeToString(tx.type); - auto* typeLabel = new QLabel(typeStr); - typeLabel->setStyleSheet(Style::badge(Style::txTypeColor(typeStr))); - - auto* metaLabel = new QLabel(); - switch (tx.type) { - case TransactionType::Public: - metaLabel->setText(QString("%1 accounts").arg(tx.accounts.size())); - break; - case TransactionType::PrivacyPreserving: - metaLabel->setText(QString("%1 accounts, %2 commitments").arg(tx.accounts.size()).arg(tx.newCommitmentsCount)); - break; - case TransactionType::ProgramDeployment: - metaLabel->setText(QString("%1 bytes").arg(tx.bytecodeSizeBytes)); - break; - } - metaLabel->setStyleSheet(Style::mutedText()); - - txRow->addWidget(hashLabel); - txRow->addWidget(typeLabel); - txRow->addWidget(metaLabel, 1); - - QString txHash = tx.hash; - connect(frame, &ClickableFrame::clicked, this, [this, txHash]() { - emit transactionClicked(txHash); - }); - - layout->addWidget(frame); - } - } - - scrollArea->setWidget(scrollContent); - outerLayout->addWidget(scrollArea); -} diff --git a/src/pages/BlockPage.h b/src/pages/BlockPage.h deleted file mode 100644 index d870e0f..0000000 --- a/src/pages/BlockPage.h +++ /dev/null @@ -1,16 +0,0 @@ -#pragma once - -#include "models/Block.h" - -#include - -class BlockPage : public QWidget { - Q_OBJECT - -public: - explicit BlockPage(const Block& block, QWidget* parent = nullptr); - -signals: - void blockClicked(quint64 blockId); - void transactionClicked(const QString& hash); -}; diff --git a/src/pages/MainPage.cpp b/src/pages/MainPage.cpp deleted file mode 100644 index 5d5ee48..0000000 --- a/src/pages/MainPage.cpp +++ /dev/null @@ -1,453 +0,0 @@ -#include "MainPage.h" -#include "Style.h" -#include "widgets/ClickableFrame.h" - -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -MainPage::MainPage(IndexerService* indexer, QWidget* parent) - : QWidget(parent) - , m_indexer(indexer) -{ - auto* outerLayout = new QVBoxLayout(this); - outerLayout->setContentsMargins(0, 0, 0, 0); - - // Indexer endpoint selector - auto* endpointRow = new QHBoxLayout(); - endpointRow->setSpacing(8); - - auto* endpointLabel = new QLabel("Indexer config", this); - endpointLabel->setStyleSheet(Style::mutedText() + " font-weight: bold;"); - - m_indexerEndpointInput = new QLineEdit(this); - m_indexerEndpointInput->setText(m_indexer->endpoint()); - m_indexerEndpointInput->setPlaceholderText("absolute path to indexer_config.json (blank = already running)"); - m_indexerEndpointInput->setMinimumHeight(34); - m_indexerEndpointInput->setStyleSheet(Style::searchInput()); - - auto* applyEndpointBtn = new QPushButton("Apply", this); - applyEndpointBtn->setMinimumHeight(34); - applyEndpointBtn->setStyleSheet(Style::searchButton()); - - endpointRow->addWidget(endpointLabel); - endpointRow->addWidget(m_indexerEndpointInput, 1); - endpointRow->addWidget(applyEndpointBtn); - outerLayout->addLayout(endpointRow); - - connect(applyEndpointBtn, &QPushButton::clicked, this, &MainPage::applyIndexerEndpoint); - connect(m_indexerEndpointInput, &QLineEdit::returnPressed, this, &MainPage::applyIndexerEndpoint); - - // Health indicator - auto* healthRow = new QHBoxLayout(); - auto* healthIcon = new QLabel(this); - healthIcon->setPixmap(QIcon(":/icons/activity.svg").pixmap(20, 20)); - m_healthLabel = new QLabel(this); - healthRow->addWidget(healthIcon); - healthRow->addWidget(m_healthLabel); - healthRow->addStretch(); - outerLayout->addLayout(healthRow); - - // Scroll area for content - auto* scrollArea = new QScrollArea(this); - scrollArea->setWidgetResizable(true); - scrollArea->setFrameShape(QFrame::NoFrame); - scrollArea->setStyleSheet("QScrollArea { background: transparent; border: none; } QWidget#scrollContent { background: transparent; }"); - - auto* scrollContent = new QWidget(); - scrollContent->setObjectName("scrollContent"); - m_contentLayout = new QVBoxLayout(scrollContent); - m_contentLayout->setAlignment(Qt::AlignTop); - m_contentLayout->setContentsMargins(0, 0, 0, 0); - - scrollArea->setWidget(scrollContent); - outerLayout->addWidget(scrollArea); - - refresh(); -} - -QWidget* MainPage::createSectionHeader(const QString& title, const QString& iconPath) -{ - auto* container = new QWidget(); - auto* layout = new QHBoxLayout(container); - layout->setContentsMargins(0, 12, 0, 6); - layout->setSpacing(8); - layout->setAlignment(Qt::AlignVCenter); - - if (!iconPath.isEmpty()) { - auto* icon = new QLabel(); - icon->setPixmap(QIcon(iconPath).pixmap(24, 24)); - icon->setFixedSize(24, 24); - layout->addWidget(icon); - } - - auto* label = new QLabel(title); - QFont font = label->font(); - font.setPointSize(20); - font.setBold(true); - label->setFont(font); - label->setStyleSheet(Style::sectionHeader()); - layout->addWidget(label); - layout->addStretch(); - - return container; -} - -void MainPage::addBlockRow(QVBoxLayout* layout, const Block& block, int insertIndex) -{ - auto* frame = new ClickableFrame(); - frame->setFrameShape(QFrame::NoFrame); - frame->setStyleSheet(Style::clickableRowWithLabels("ClickableFrame")); - frame->setProperty("blockId", QVariant::fromValue(block.blockId)); - - auto* row = new QHBoxLayout(frame); - row->setSpacing(10); - - auto* icon = new QLabel(); - icon->setPixmap(QIcon(":/icons/box.svg").pixmap(20, 20)); - row->addWidget(icon); - - auto* idLabel = new QLabel(QString("Block #%1").arg(block.blockId)); - QFont boldFont = idLabel->font(); - boldFont.setBold(true); - idLabel->setFont(boldFont); - - QString statusStr = bedrockStatusToString(block.bedrockStatus); - auto* statusLabel = new QLabel(statusStr); - statusLabel->setStyleSheet(Style::badge(Style::statusColor(statusStr))); - - auto* hashLabel = new QLabel(block.hash); - hashLabel->setStyleSheet(Style::mutedText() + " font-family: 'Menlo', 'Courier New'; font-size: 11px;"); - hashLabel->setFixedWidth(470); - - auto* txIcon = new QLabel(); - txIcon->setPixmap(QIcon(":/icons/file-text.svg").pixmap(18, 18)); - - auto* txCount = new QLabel(QString::number(block.transactions.size())); - - auto* timeLabel = new QLabel(block.timestamp.toString("yyyy-MM-dd hh:mm:ss UTC")); - timeLabel->setStyleSheet(Style::mutedText()); - - statusLabel->setFixedWidth(90); - statusLabel->setAlignment(Qt::AlignCenter); - - row->addWidget(idLabel); - row->addWidget(hashLabel); - row->addStretch(1); - row->addWidget(txIcon); - row->addWidget(txCount); - row->addWidget(timeLabel); - row->addWidget(statusLabel); - - quint64 blockId = block.blockId; - connect(frame, &ClickableFrame::clicked, this, [this, blockId]() { - emit blockClicked(blockId); - }); - - if (insertIndex >= 0) { - layout->insertWidget(insertIndex, frame); - } else { - layout->addWidget(frame); - } -} - -void MainPage::insertRecentBlock(const Block& block) -{ - if (!m_blocksLayout || m_displayedBlockIds.contains(block.blockId)) { - return; - } - - int insertIndex = m_blocksLayout->count(); - for (int i = 0; i < m_blocksLayout->count(); ++i) { - QLayoutItem* item = m_blocksLayout->itemAt(i); - if (!item || !item->widget()) { - continue; - } - - bool ok = false; - const quint64 existingId = item->widget()->property("blockId").toULongLong(&ok); - if (ok && block.blockId > existingId) { - insertIndex = i; - break; - } - } - - addBlockRow(m_blocksLayout, block, insertIndex); - m_displayedBlockIds.insert(block.blockId); - - if (!m_newestLoadedBlockId || block.blockId > *m_newestLoadedBlockId) { - m_newestLoadedBlockId = block.blockId; - } - - if (!m_oldestLoadedBlockId || block.blockId < *m_oldestLoadedBlockId) { - m_oldestLoadedBlockId = block.blockId; - } -} - -QVector MainPage::fetchRecentBlocks(int limit) -{ - if (limit <= 0) { - return {}; - } - - auto blocks = m_indexer->getBlocks(std::nullopt, limit); - - std::sort(blocks.begin(), blocks.end(), [](const Block& lhs, const Block& rhs) { - return lhs.blockId > rhs.blockId; - }); - - if (blocks.size() > limit) { - blocks.resize(limit); - } - - return blocks; -} - -void MainPage::addTransactionRow(QVBoxLayout* layout, const Transaction& tx) -{ - auto* frame = new ClickableFrame(); - frame->setFrameShape(QFrame::NoFrame); - frame->setStyleSheet(Style::clickableRowWithLabels("ClickableFrame")); - - auto* row = new QHBoxLayout(frame); - row->setSpacing(10); - - auto* icon = new QLabel(); - icon->setPixmap(QIcon(":/icons/file-text.svg").pixmap(20, 20)); - row->addWidget(icon); - - auto* hashLabel = new QLabel(tx.hash); - QFont boldFont = hashLabel->font(); - boldFont.setBold(true); - hashLabel->setFont(boldFont); - - QString typeStr = transactionTypeToString(tx.type); - auto* typeLabel = new QLabel(typeStr); - typeLabel->setStyleSheet(Style::badge(Style::txTypeColor(typeStr))); - - auto* metaLabel = new QLabel(); - switch (tx.type) { - case TransactionType::Public: - metaLabel->setText(QString("%1 accounts").arg(tx.accounts.size())); - break; - case TransactionType::PrivacyPreserving: - metaLabel->setText(QString("%1 accounts, %2 commitments").arg(tx.accounts.size()).arg(tx.newCommitmentsCount)); - break; - case TransactionType::ProgramDeployment: - metaLabel->setText(QString("%1 bytes").arg(tx.bytecodeSizeBytes)); - break; - } - metaLabel->setStyleSheet(Style::mutedText()); - - row->addWidget(hashLabel); - row->addWidget(typeLabel); - row->addWidget(metaLabel, 1); - - QString txHash = tx.hash; - connect(frame, &ClickableFrame::clicked, this, [this, txHash]() { - emit transactionClicked(txHash); - }); - - layout->addWidget(frame); -} - -void MainPage::addAccountRow(QVBoxLayout* layout, const Account& account) -{ - auto* frame = new ClickableFrame(); - frame->setFrameShape(QFrame::NoFrame); - frame->setStyleSheet(Style::clickableRowWithLabels("ClickableFrame")); - - auto* row = new QHBoxLayout(frame); - row->setSpacing(10); - - auto* icon = new QLabel(); - icon->setPixmap(QIcon(":/icons/user.svg").pixmap(20, 20)); - row->addWidget(icon); - - auto* idLabel = new QLabel(account.accountId); - QFont boldFont = idLabel->font(); - boldFont.setBold(true); - idLabel->setFont(boldFont); - - auto* balanceLabel = new QLabel(QString("Balance: %1").arg(account.balance)); - auto* nonceLabel = new QLabel(QString("Nonce: %1").arg(account.nonce)); - nonceLabel->setStyleSheet(Style::mutedText()); - - row->addWidget(idLabel); - row->addWidget(balanceLabel, 1); - row->addWidget(nonceLabel); - - QString accId = account.accountId; - connect(frame, &ClickableFrame::clicked, this, [this, accId]() { - emit accountClicked(accId); - }); - - layout->addWidget(frame); -} - -void MainPage::refresh() -{ - clearSearchResults(); - - quint64 latestId = m_indexer->getLastFinalizedBlockId(); - m_latestKnownBlockId = latestId; - m_healthLabel->setText(QString("Chain height: %1").arg(m_latestKnownBlockId)); - m_healthLabel->setStyleSheet(Style::healthLabel()); - - if (m_recentBlocksWidget) { - m_contentLayout->removeWidget(m_recentBlocksWidget); - m_recentBlocksWidget->deleteLater(); - m_recentBlocksWidget = nullptr; - m_blocksLayout = nullptr; - m_loadMoreBtn = nullptr; - } - - m_newestLoadedBlockId = std::nullopt; - m_oldestLoadedBlockId = std::nullopt; - m_displayedBlockIds.clear(); - - m_recentBlocksWidget = new QWidget(); - auto* outerLayout = new QVBoxLayout(m_recentBlocksWidget); - outerLayout->setContentsMargins(0, 0, 0, 0); - outerLayout->addWidget(createSectionHeader("Recent Blocks", ":/icons/box.svg")); - - // Dedicated layout for block rows — button is appended after this in outerLayout - auto* blockRowsWidget = new QWidget(); - m_blocksLayout = new QVBoxLayout(blockRowsWidget); - m_blocksLayout->setContentsMargins(0, 0, 0, 0); - outerLayout->addWidget(blockRowsWidget); - - auto blocks = fetchRecentBlocks(10); - - for (const auto& block : blocks) { - insertRecentBlock(block); - } - - m_loadMoreBtn = new QPushButton("Load more"); - m_loadMoreBtn->setStyleSheet(Style::searchButton()); - m_loadMoreBtn->setVisible(m_oldestLoadedBlockId && *m_oldestLoadedBlockId > 1); - connect(m_loadMoreBtn, &QPushButton::clicked, this, &MainPage::loadMoreBlocks); - outerLayout->addWidget(m_loadMoreBtn, 0, Qt::AlignHCenter); - - m_contentLayout->addWidget(m_recentBlocksWidget); -} - -void MainPage::loadMoreBlocks() -{ - if (!m_oldestLoadedBlockId || *m_oldestLoadedBlockId <= 1) - return; - - auto blocks = m_indexer->getBlocks(m_oldestLoadedBlockId, 10); - std::sort(blocks.begin(), blocks.end(), [](const Block& lhs, const Block& rhs) { - return lhs.blockId > rhs.blockId; - }); - - for (const auto& block : blocks) { - insertRecentBlock(block); - } - - m_loadMoreBtn->setVisible(m_oldestLoadedBlockId && *m_oldestLoadedBlockId > 1 && !blocks.isEmpty()); -} - -void MainPage::applyIndexerEndpoint() -{ - // The "endpoint" is the indexer config path now; blank is valid and means - // "the indexer is already running" (start is idempotent provider-side). - const QString configPath = m_indexerEndpointInput->text().trimmed(); - m_indexer->setEndpoint(configPath); - clearSearchResults(); - refresh(); -} - -void MainPage::showSearchResults(const SearchResults& results) -{ - clearSearchResults(); - - if (m_recentBlocksWidget) { - m_recentBlocksWidget->hide(); - } - - m_searchResultsWidget = new QWidget(); - auto* layout = new QVBoxLayout(m_searchResultsWidget); - layout->setContentsMargins(0, 0, 0, 0); - - bool hasResults = false; - - if (!results.blocks.isEmpty()) { - layout->addWidget(createSectionHeader("Blocks", ":/icons/box.svg")); - for (const auto& block : results.blocks) { - addBlockRow(layout, block); - } - hasResults = true; - } - - if (!results.transactions.isEmpty()) { - layout->addWidget(createSectionHeader("Transactions", ":/icons/file-text.svg")); - for (const auto& tx : results.transactions) { - addTransactionRow(layout, tx); - } - hasResults = true; - } - - if (!results.accounts.isEmpty()) { - layout->addWidget(createSectionHeader("Accounts", ":/icons/user.svg")); - for (const auto& acc : results.accounts) { - addAccountRow(layout, acc); - } - hasResults = true; - } - - if (!hasResults) { - auto* noResults = new QLabel("No results found."); - noResults->setAlignment(Qt::AlignCenter); - noResults->setStyleSheet(Style::mutedText() + " padding: 20px; font-size: 14px;"); - layout->addWidget(noResults); - } - - m_contentLayout->insertWidget(0, m_searchResultsWidget); -} - -void MainPage::onNewBlock(const Block& block) -{ - if (!m_blocksLayout) return; - - m_latestKnownBlockId = std::max(m_latestKnownBlockId, block.blockId); - m_healthLabel->setText(QString("Chain height: %1").arg(m_latestKnownBlockId)); - - // If notifications jump ahead, rebuild recent list from backend - // so we do not mix one fresh head block with stale rows. - if (!m_newestLoadedBlockId) { - refresh(); - return; - } - - if (block.blockId > *m_newestLoadedBlockId && (block.blockId - *m_newestLoadedBlockId) > 1) { - refresh(); - return; - } - - insertRecentBlock(block); - - if (m_loadMoreBtn) { - m_loadMoreBtn->setVisible(m_oldestLoadedBlockId && *m_oldestLoadedBlockId > 1); - } -} - -void MainPage::clearSearchResults() -{ - if (m_searchResultsWidget) { - m_contentLayout->removeWidget(m_searchResultsWidget); - m_searchResultsWidget->deleteLater(); - m_searchResultsWidget = nullptr; - } - if (m_recentBlocksWidget) { - m_recentBlocksWidget->show(); - } -} diff --git a/src/pages/MainPage.h b/src/pages/MainPage.h deleted file mode 100644 index 8d151a1..0000000 --- a/src/pages/MainPage.h +++ /dev/null @@ -1,52 +0,0 @@ -#pragma once - -#include "services/IndexerService.h" - -#include -#include -#include - -class QVBoxLayout; -class QLabel; -class QPushButton; -class QLineEdit; - -class MainPage : public QWidget { - Q_OBJECT - -public: - explicit MainPage(IndexerService* indexer, QWidget* parent = nullptr); - - void refresh(); - void showSearchResults(const SearchResults& results); - void clearSearchResults(); - void onNewBlock(const Block& block); - -signals: - void blockClicked(quint64 blockId); - void transactionClicked(const QString& hash); - void accountClicked(const QString& accountId); - -private: - void addBlockRow(QVBoxLayout* layout, const Block& block, int insertIndex = -1); - void addTransactionRow(QVBoxLayout* layout, const Transaction& tx); - void addAccountRow(QVBoxLayout* layout, const Account& account); - QWidget* createSectionHeader(const QString& title, const QString& iconPath = {}); - QVector fetchRecentBlocks(int limit); - void insertRecentBlock(const Block& block); - void loadMoreBlocks(); - void applyIndexerEndpoint(); - - IndexerService* m_indexer = nullptr; - QVBoxLayout* m_contentLayout = nullptr; - QWidget* m_searchResultsWidget = nullptr; - QWidget* m_recentBlocksWidget = nullptr; - QVBoxLayout* m_blocksLayout = nullptr; - QPushButton* m_loadMoreBtn = nullptr; - QLabel* m_healthLabel = nullptr; - QLineEdit* m_indexerEndpointInput = nullptr; - std::optional m_newestLoadedBlockId; - std::optional m_oldestLoadedBlockId; - QSet m_displayedBlockIds; - quint64 m_latestKnownBlockId = 0; -}; diff --git a/src/pages/TransactionPage.cpp b/src/pages/TransactionPage.cpp deleted file mode 100644 index 9e514bc..0000000 --- a/src/pages/TransactionPage.cpp +++ /dev/null @@ -1,185 +0,0 @@ -#include "TransactionPage.h" -#include "Style.h" -#include "widgets/ClickableFrame.h" - -#include -#include -#include -#include -#include -#include -#include - -namespace { - -QLabel* makeFieldLabel(const QString& text) -{ - auto* label = new QLabel(text); - label->setStyleSheet(Style::mutedText() + " font-weight: bold;"); - return label; -} - -QLabel* makeValueLabel(const QString& text) -{ - auto* label = new QLabel(text); - label->setTextInteractionFlags(Qt::TextSelectableByMouse); - label->setWordWrap(true); - return label; -} - -} // namespace - -TransactionPage::TransactionPage(const Transaction& tx, QWidget* parent) - : QWidget(parent) -{ - auto* outerLayout = new QVBoxLayout(this); - outerLayout->setContentsMargins(0, 0, 0, 0); - - auto* scrollArea = new QScrollArea(this); - scrollArea->setWidgetResizable(true); - scrollArea->setFrameShape(QFrame::NoFrame); - scrollArea->setStyleSheet("QScrollArea { background: transparent; border: none; } QWidget#scrollContent { background: transparent; }"); - - auto* scrollContent = new QWidget(); - scrollContent->setObjectName("scrollContent"); - auto* layout = new QVBoxLayout(scrollContent); - layout->setAlignment(Qt::AlignTop); - layout->setContentsMargins(0, 0, 0, 0); - - // Title with icon - auto* titleRow = new QHBoxLayout(); - titleRow->setSpacing(10); - auto* titleIcon = new QLabel(); - titleIcon->setPixmap(QIcon(":/icons/file-text.svg").pixmap(30, 30)); - auto* title = new QLabel("Transaction Details"); - QFont titleFont = title->font(); - titleFont.setPointSize(24); - titleFont.setBold(true); - title->setFont(titleFont); - title->setStyleSheet(QString("color: %1;").arg(Style::Color::text())); - titleRow->addWidget(titleIcon); - titleRow->addWidget(title); - titleRow->addStretch(); - layout->addLayout(titleRow); - layout->addSpacing(8); - - // Transaction info grid - auto* infoFrame = new QFrame(); - infoFrame->setFrameShape(QFrame::NoFrame); - infoFrame->setStyleSheet(Style::cardFrameWithLabels()); - - auto* grid = new QGridLayout(infoFrame); - grid->setColumnStretch(1, 1); - grid->setVerticalSpacing(10); - grid->setHorizontalSpacing(20); - int row = 0; - - grid->addWidget(makeFieldLabel("Hash"), row, 0); - auto* hashVal = makeValueLabel(tx.hash); - hashVal->setStyleSheet(Style::monoText()); - grid->addWidget(hashVal, row++, 1); - - grid->addWidget(makeFieldLabel("Type"), row, 0); - QString typeStr = transactionTypeToString(tx.type); - auto* typeLabel = new QLabel(typeStr); - typeLabel->setStyleSheet(Style::badge(Style::txTypeColor(typeStr))); - typeLabel->setMaximumWidth(180); - grid->addWidget(typeLabel, row++, 1); - - // Type-specific fields - switch (tx.type) { - case TransactionType::Public: - grid->addWidget(makeFieldLabel("Program ID"), row, 0); - { auto* v = makeValueLabel(tx.programId); v->setStyleSheet(Style::monoText()); grid->addWidget(v, row++, 1); } - - grid->addWidget(makeFieldLabel("Instruction Data"), row, 0); - grid->addWidget(makeValueLabel(QString("%1 items").arg(tx.instructionData.size())), row++, 1); - - grid->addWidget(makeFieldLabel("Proof Size"), row, 0); - grid->addWidget(makeValueLabel(QString("%1 bytes").arg(tx.proofSizeBytes)), row++, 1); - - grid->addWidget(makeFieldLabel("Signatures"), row, 0); - grid->addWidget(makeValueLabel(QString::number(tx.signatureCount)), row++, 1); - break; - - case TransactionType::PrivacyPreserving: - grid->addWidget(makeFieldLabel("Public Accounts"), row, 0); - grid->addWidget(makeValueLabel(QString::number(tx.accounts.size())), row++, 1); - - grid->addWidget(makeFieldLabel("New Commitments"), row, 0); - grid->addWidget(makeValueLabel(QString::number(tx.newCommitmentsCount)), row++, 1); - - grid->addWidget(makeFieldLabel("Nullifiers"), row, 0); - grid->addWidget(makeValueLabel(QString::number(tx.nullifiersCount)), row++, 1); - - grid->addWidget(makeFieldLabel("Encrypted States"), row, 0); - grid->addWidget(makeValueLabel(QString::number(tx.encryptedStatesCount)), row++, 1); - - grid->addWidget(makeFieldLabel("Proof Size"), row, 0); - grid->addWidget(makeValueLabel(QString("%1 bytes").arg(tx.proofSizeBytes)), row++, 1); - - grid->addWidget(makeFieldLabel("Validity Window"), row, 0); - grid->addWidget(makeValueLabel(QString("[%1, %2)").arg(tx.validityWindowStart).arg(tx.validityWindowEnd)), row++, 1); - break; - - case TransactionType::ProgramDeployment: - grid->addWidget(makeFieldLabel("Bytecode Size"), row, 0); - grid->addWidget(makeValueLabel(QString("%1 bytes").arg(tx.bytecodeSizeBytes)), row++, 1); - break; - } - - layout->addWidget(infoFrame); - - // Accounts section - if (!tx.accounts.isEmpty()) { - auto* headerRow = new QHBoxLayout(); - headerRow->setContentsMargins(0, 16, 0, 6); - headerRow->setSpacing(8); - auto* headerIcon = new QLabel(); - headerIcon->setPixmap(QIcon(":/icons/user.svg").pixmap(24, 24)); - auto* accHeader = new QLabel("Accounts"); - QFont headerFont = accHeader->font(); - headerFont.setPointSize(20); - headerFont.setBold(true); - accHeader->setFont(headerFont); - accHeader->setStyleSheet(Style::sectionHeader()); - headerRow->addWidget(headerIcon); - headerRow->addWidget(accHeader); - headerRow->addStretch(); - layout->addLayout(headerRow); - - for (const auto& accRef : tx.accounts) { - auto* frame = new ClickableFrame(); - frame->setFrameShape(QFrame::NoFrame); - frame->setStyleSheet(Style::clickableRowWithLabels("ClickableFrame")); - - auto* accRow = new QHBoxLayout(frame); - accRow->setSpacing(10); - - auto* icon = new QLabel(); - icon->setPixmap(QIcon(":/icons/user.svg").pixmap(20, 20)); - accRow->addWidget(icon); - - auto* idLabel = new QLabel(accRef.accountId); - QFont boldFont = idLabel->font(); - boldFont.setBold(true); - idLabel->setFont(boldFont); - - auto* nonceLabel = new QLabel(QString("Nonce: %1").arg(accRef.nonce)); - nonceLabel->setStyleSheet(Style::mutedText()); - - accRow->addWidget(idLabel, 1); - accRow->addWidget(nonceLabel); - - QString accId = accRef.accountId; - connect(frame, &ClickableFrame::clicked, this, [this, accId]() { - emit accountClicked(accId); - }); - - layout->addWidget(frame); - } - } - - scrollArea->setWidget(scrollContent); - outerLayout->addWidget(scrollArea); -} diff --git a/src/pages/TransactionPage.h b/src/pages/TransactionPage.h deleted file mode 100644 index 7f6d978..0000000 --- a/src/pages/TransactionPage.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include "models/Transaction.h" - -#include - -class TransactionPage : public QWidget { - Q_OBJECT - -public: - explicit TransactionPage(const Transaction& tx, QWidget* parent = nullptr); - -signals: - void accountClicked(const QString& accountId); -}; diff --git a/src/qml/Main.qml b/src/qml/Main.qml new file mode 100644 index 0000000..1074b7c --- /dev/null +++ b/src/qml/Main.qml @@ -0,0 +1,145 @@ +import QtQuick +import QtQuick.Controls +import QtQuick.Layouts +import Logos.Controls +import Logos.Theme +import "components" + +Rectangle { + id: root + color: Theme.palette.background + + // Typed replica of the backend; non-null once the plugin is registered, + // `ready` tracks the live connection. + readonly property var backend: logos.module("lez_explorer_ui") + property bool ready: false + + // Self-managed navigation history (browser-style back/forward). Each entry + // is a descriptor { type, param?, query? }. + property var history: [] + property int histIndex: -1 + + // --- Navigation API (pages call these via the injected `explorer`) --- + function navigateTo(desc) { + var h = root.history.slice(0, root.histIndex + 1); + h.push(desc); + root.history = h; + root.histIndex = h.length - 1; + root.render(); + } + function navigateBlock(id) { root.navigateTo({ type: "block", param: id }); } + function navigateTx(hash) { root.navigateTo({ type: "tx", param: hash }); } + function navigateAccount(id) { root.navigateTo({ type: "account", param: id }); } + function showSearchResults(results, query) { + root.navigateTo({ type: "search", param: results, query: query }); + } + function goHome() { root.navigateTo({ type: "home" }); } + function goBack() { if (root.histIndex > 0) { root.histIndex--; root.render(); } } + function goForward() { if (root.histIndex < root.history.length - 1) { root.histIndex++; root.render(); } } + + function render() { + if (root.histIndex < 0) + return; + var d = root.history[root.histIndex]; + var props = { explorer: root }; + var url = "pages/HomePage.qml"; + if (d.type === "block") { + url = "pages/BlockPage.qml"; + props.blockId = d.param; + } else if (d.type === "tx") { + url = "pages/TransactionPage.qml"; + props.txHash = d.param; + } else if (d.type === "account") { + url = "pages/AccountPage.qml"; + props.accountId = d.param; + } else if (d.type === "search") { + url = "pages/SearchResultsPage.qml"; + props.results = d.param; + props.query = d.query || ""; + } + pageLoader.setSource(Qt.resolvedUrl(url), props); + navBar.canGoBack = root.histIndex > 0; + navBar.canGoForward = root.histIndex < root.history.length - 1; + } + + Connections { + target: logos + function onViewModuleReadyChanged(moduleName, isReady) { + if (moduleName === "lez_explorer_ui") + root.ready = isReady && root.backend !== null; + } + } + Component.onCompleted: { + root.ready = root.backend !== null && logos.isViewModuleReady("lez_explorer_ui"); + root.goHome(); + } + + ColumnLayout { + anchors.fill: parent + anchors.margins: Theme.spacing.large + spacing: Theme.spacing.medium + + NavigationBar { + id: navBar + Layout.fillWidth: true + onBackClicked: root.goBack() + onForwardClicked: root.goForward() + onHomeClicked: root.goHome() + } + + SearchBar { + Layout.fillWidth: true + onSearchRequested: function (query) { + if (!root.backend || query.trim().length === 0) + return; + logos.watch(root.backend.search(query), function (results) { + var blocks = results && results.blocks ? results.blocks : []; + var txs = results && results.transactions ? results.transactions : []; + var accts = results && results.accounts ? results.accounts : []; + var total = blocks.length + txs.length + accts.length; + if (total === 1) { + if (blocks.length === 1) + root.navigateBlock(blocks[0].blockId); + else if (txs.length === 1) + root.navigateTx(txs[0].hash); + else + root.navigateAccount(accts[0].accountId); + } else { + root.showSearchResults(results, query); + } + }, function (err) { + root.showSearchResults({ blocks: [], transactions: [], accounts: [] }, query); + }); + } + } + + Loader { + id: pageLoader + Layout.fillWidth: true + Layout.fillHeight: true + } + } + + // Readiness overlay — covers the view until the backend connects. + Rectangle { + anchors.fill: parent + visible: !root.ready + color: Theme.palette.background + + ColumnLayout { + anchors.centerIn: parent + spacing: Theme.spacing.medium + + BusyIndicator { + running: !root.ready + Layout.alignment: Qt.AlignHCenter + } + LogosText { + text: "Connecting to indexer backend…" + color: Theme.palette.textSecondary + font.pixelSize: Theme.typography.secondaryText + Layout.alignment: Qt.AlignHCenter + } + } + } +} diff --git a/src/qml/components/AccountRow.qml b/src/qml/components/AccountRow.qml new file mode 100644 index 0000000..2666ac4 --- /dev/null +++ b/src/qml/components/AccountRow.qml @@ -0,0 +1,57 @@ +import QtQuick +import QtQuick.Layouts +import Logos.Controls +import Logos.Theme + +// Clickable row for an account reference ({ accountId, nonce?, balance? }). +// Used for tx account lists and account search results. +Rectangle { + id: root + + property var account: ({}) + signal clicked() + + height: layout.implicitHeight + Theme.spacing.medium * 2 + radius: Theme.spacing.radiusMedium + color: hover.hovered ? Theme.palette.backgroundSecondary : "transparent" + border.width: 1 + border.color: hover.hovered ? Theme.palette.borderInteractive : Theme.palette.borderSecondary + + HoverHandler { id: hover } + TapHandler { onTapped: root.clicked() } + + RowLayout { + id: layout + anchors.fill: parent + anchors.margins: Theme.spacing.medium + spacing: Theme.spacing.medium + + ColumnLayout { + Layout.fillWidth: true + spacing: Theme.spacing.tiny + + MonoText { + text: root.account.accountId || "" + color: Theme.palette.text + wrapMode: Text.NoWrap + elide: Text.ElideMiddle + Layout.fillWidth: true + } + LogosText { + visible: root.account.nonce !== undefined + text: "Nonce: " + (root.account.nonce !== undefined ? root.account.nonce : "") + color: Theme.palette.textMuted + font.pixelSize: Theme.typography.secondaryText + } + } + + LogosText { + visible: root.account.balance !== undefined + text: (root.account.balance !== undefined ? root.account.balance : "") + color: Theme.palette.success + font.pixelSize: Theme.typography.secondaryText + font.weight: Theme.typography.weightBold + Layout.alignment: Qt.AlignVCenter + } + } +} diff --git a/src/qml/components/Badge.qml b/src/qml/components/Badge.qml new file mode 100644 index 0000000..e3af582 --- /dev/null +++ b/src/qml/components/Badge.qml @@ -0,0 +1,27 @@ +import QtQuick +import Logos.Controls +import Logos.Theme + +// A small coloured pill. `accent` tints both the text and a translucent fill. +Rectangle { + id: root + + property string text: "" + property color accent: Theme.palette.textSecondary + + implicitWidth: label.implicitWidth + Theme.spacing.medium * 2 + implicitHeight: label.implicitHeight + Theme.spacing.small + radius: Theme.spacing.radiusSmall + color: Qt.rgba(root.accent.r, root.accent.g, root.accent.b, 0.15) + border.width: 1 + border.color: Qt.rgba(root.accent.r, root.accent.g, root.accent.b, 0.4) + + LogosText { + id: label + anchors.centerIn: parent + text: root.text + color: root.accent + font.pixelSize: Theme.typography.badgeText + font.weight: Theme.typography.weightBold + } +} diff --git a/src/qml/components/BlockRow.qml b/src/qml/components/BlockRow.qml new file mode 100644 index 0000000..0135d39 --- /dev/null +++ b/src/qml/components/BlockRow.qml @@ -0,0 +1,59 @@ +import QtQuick +import QtQuick.Layouts +import Logos.Controls +import Logos.Theme + +// Clickable summary row for a block map ({ blockId, hash, txCount, +// timestampText, status }). Used on the home feed and in search results. +Rectangle { + id: root + + property var block: ({}) + signal clicked() + + height: layout.implicitHeight + Theme.spacing.medium * 2 + radius: Theme.spacing.radiusMedium + color: hover.hovered ? Theme.palette.backgroundSecondary : "transparent" + border.width: 1 + border.color: hover.hovered ? Theme.palette.borderInteractive : Theme.palette.borderSecondary + + HoverHandler { id: hover } + TapHandler { onTapped: root.clicked() } + + RowLayout { + id: layout + anchors.fill: parent + anchors.margins: Theme.spacing.medium + spacing: Theme.spacing.medium + + ColumnLayout { + Layout.fillWidth: true + spacing: Theme.spacing.tiny + + LogosText { + text: "Block #" + (root.block.blockId !== undefined ? root.block.blockId : "?") + color: Theme.palette.text + font.pixelSize: Theme.typography.primaryText + font.weight: Theme.typography.weightBold + } + MonoText { + text: root.block.hash || "" + color: Theme.palette.textSecondary + wrapMode: Text.NoWrap + elide: Text.ElideMiddle + Layout.fillWidth: true + } + LogosText { + text: (root.block.txCount !== undefined ? root.block.txCount : 0) + " txs · " + + (root.block.timestampText || "") + color: Theme.palette.textMuted + font.pixelSize: Theme.typography.secondaryText + } + } + + StatusBadge { + status: root.block.status || "Pending" + Layout.alignment: Qt.AlignVCenter + } + } +} diff --git a/src/qml/components/Card.qml b/src/qml/components/Card.qml new file mode 100644 index 0000000..a293d59 --- /dev/null +++ b/src/qml/components/Card.qml @@ -0,0 +1,30 @@ +import QtQuick +import QtQuick.Layouts +import Logos.Theme + +// A themed surface panel that sizes to its content. Children are stacked +// vertically (they become items of the inner ColumnLayout). +Rectangle { + id: root + + property int padding: Theme.spacing.large + property int spacing: Theme.spacing.medium + default property alias content: inner.data + + implicitHeight: inner.implicitHeight + padding * 2 + implicitWidth: inner.implicitWidth + padding * 2 + + color: Theme.palette.backgroundElevated + border.color: Theme.palette.borderSecondary + border.width: 1 + radius: Theme.spacing.radiusLarge + + ColumnLayout { + id: inner + anchors.left: parent.left + anchors.right: parent.right + anchors.top: parent.top + anchors.margins: root.padding + spacing: root.spacing + } +} diff --git a/src/qml/components/FieldLabel.qml b/src/qml/components/FieldLabel.qml new file mode 100644 index 0000000..1946f79 --- /dev/null +++ b/src/qml/components/FieldLabel.qml @@ -0,0 +1,13 @@ +import QtQuick +import QtQuick.Layouts +import Logos.Controls +import Logos.Theme + +// The fixed-width label used at the start of a detail-card row. Pairs with +// InfoRow (plain values) or a custom delegate built inline in a page. +LogosText { + color: Theme.palette.textSecondary + font.pixelSize: Theme.typography.secondaryText + Layout.preferredWidth: 150 + Layout.alignment: Qt.AlignTop +} diff --git a/src/qml/components/IconButton.qml b/src/qml/components/IconButton.qml new file mode 100644 index 0000000..28d0cc1 --- /dev/null +++ b/src/qml/components/IconButton.qml @@ -0,0 +1,33 @@ +import QtQuick +import Logos.Theme + +// Themed square icon button. `source` is an SVG url; emits clicked(). +Rectangle { + id: root + + property url source + property bool enabled: true + property int size: 40 + signal clicked() + + implicitWidth: size + implicitHeight: size + radius: Theme.spacing.radiusMedium + opacity: root.enabled ? 1.0 : 0.4 + color: hover.hovered && root.enabled ? Theme.palette.backgroundSecondary : Theme.palette.backgroundElevated + border.width: 1 + border.color: Theme.palette.borderSecondary + + HoverHandler { id: hover; enabled: root.enabled } + TapHandler { enabled: root.enabled; onTapped: root.clicked() } + + Image { + anchors.centerIn: parent + source: root.source + sourceSize.width: Math.round(root.size * 0.5) + sourceSize.height: Math.round(root.size * 0.5) + width: Math.round(root.size * 0.5) + height: Math.round(root.size * 0.5) + fillMode: Image.PreserveAspectFit + } +} diff --git a/src/qml/components/InfoRow.qml b/src/qml/components/InfoRow.qml new file mode 100644 index 0000000..04d4a9f --- /dev/null +++ b/src/qml/components/InfoRow.qml @@ -0,0 +1,39 @@ +import QtQuick +import QtQuick.Layouts +import Logos.Controls +import Logos.Theme + +// One "Label value" row in a detail card. The value can be monospace. For +// non-text values (badges, clickable links) build a small RowLayout in the page +// with a FieldLabel instead. +RowLayout { + id: root + + property string label: "" + property string value: "" + property bool mono: false + property color valueColor: Theme.palette.text + + spacing: Theme.spacing.medium + Layout.fillWidth: true + + FieldLabel { text: root.label } + + LogosText { + visible: !root.mono + text: root.value + color: root.valueColor + font.pixelSize: Theme.typography.secondaryText + wrapMode: Text.WrapAnywhere + Layout.fillWidth: true + Layout.alignment: Qt.AlignTop + } + + MonoText { + visible: root.mono + text: root.value + color: root.valueColor + Layout.fillWidth: true + Layout.alignment: Qt.AlignTop + } +} diff --git a/src/qml/components/MonoText.qml b/src/qml/components/MonoText.qml new file mode 100644 index 0000000..3a82b93 --- /dev/null +++ b/src/qml/components/MonoText.qml @@ -0,0 +1,12 @@ +import QtQuick +import Logos.Controls +import Logos.Theme + +// Monospace, selectable text for hashes / ids / signatures. +LogosText { + font.family: "Menlo, Monaco, Courier New, monospace" + font.pixelSize: Theme.typography.secondaryText + color: Theme.palette.text + textFormat: Text.PlainText + wrapMode: Text.WrapAnywhere +} diff --git a/src/qml/components/NavigationBar.qml b/src/qml/components/NavigationBar.qml new file mode 100644 index 0000000..5f64c11 --- /dev/null +++ b/src/qml/components/NavigationBar.qml @@ -0,0 +1,43 @@ +import QtQuick +import QtQuick.Layouts +import Logos.Controls +import Logos.Theme + +// Top navigation: back / forward / home + title. +RowLayout { + id: root + + property bool canGoBack: false + property bool canGoForward: false + signal backClicked() + signal forwardClicked() + signal homeClicked() + + spacing: Theme.spacing.small + + IconButton { + source: Qt.resolvedUrl("../icons/arrow-left.svg") + enabled: root.canGoBack + onClicked: root.backClicked() + } + IconButton { + source: Qt.resolvedUrl("../icons/arrow-right.svg") + enabled: root.canGoForward + onClicked: root.forwardClicked() + } + IconButton { + source: Qt.resolvedUrl("../icons/home.svg") + onClicked: root.homeClicked() + } + + LogosText { + text: "LEZ Explorer" + color: Theme.palette.primary + font.pixelSize: Theme.typography.titleText + font.weight: Theme.typography.weightBold + Layout.leftMargin: Theme.spacing.small + Layout.alignment: Qt.AlignVCenter + } + + Item { Layout.fillWidth: true } +} diff --git a/src/qml/components/SearchBar.qml b/src/qml/components/SearchBar.qml new file mode 100644 index 0000000..0f2b023 --- /dev/null +++ b/src/qml/components/SearchBar.qml @@ -0,0 +1,70 @@ +import QtQuick +import QtQuick.Controls +import QtQuick.Layouts +import Logos.Controls +import Logos.Theme + +// Search input + button. Emits searchRequested(query) on Enter or button click. +RowLayout { + id: root + + signal searchRequested(string query) + + spacing: Theme.spacing.small + + Rectangle { + Layout.fillWidth: true + Layout.preferredHeight: 40 + radius: Theme.spacing.radiusMedium + color: Theme.palette.backgroundElevated + border.width: 1 + border.color: field.activeFocus ? Theme.palette.borderInteractive : Theme.palette.borderSecondary + + RowLayout { + anchors.fill: parent + anchors.leftMargin: Theme.spacing.medium + anchors.rightMargin: Theme.spacing.medium + spacing: Theme.spacing.small + + Image { + source: Qt.resolvedUrl("../icons/search.svg") + sourceSize.width: 18 + sourceSize.height: 18 + width: 18 + height: 18 + fillMode: Image.PreserveAspectFit + Layout.alignment: Qt.AlignVCenter + } + + TextField { + id: field + Layout.fillWidth: true + Layout.alignment: Qt.AlignVCenter + placeholderText: "Search by block id / block hash / tx hash / account id…" + color: Theme.palette.text + placeholderTextColor: Theme.palette.textMuted + font.pixelSize: Theme.typography.secondaryText + background: Item {} + onAccepted: root.searchRequested(field.text) + } + } + } + + Rectangle { + Layout.preferredHeight: 40 + Layout.preferredWidth: 92 + radius: Theme.spacing.radiusMedium + color: btnHover.hovered ? Qt.lighter(Theme.palette.primary, 1.1) : Theme.palette.primary + + HoverHandler { id: btnHover } + TapHandler { onTapped: root.searchRequested(field.text) } + + LogosText { + anchors.centerIn: parent + text: "Search" + color: Theme.palette.background + font.pixelSize: Theme.typography.secondaryText + font.weight: Theme.typography.weightBold + } + } +} diff --git a/src/qml/components/SectionHeader.qml b/src/qml/components/SectionHeader.qml new file mode 100644 index 0000000..6e66aea --- /dev/null +++ b/src/qml/components/SectionHeader.qml @@ -0,0 +1,11 @@ +import QtQuick +import Logos.Controls +import Logos.Theme + +LogosText { + property string title: "" + text: title + color: Theme.palette.text + font.pixelSize: Theme.typography.titleText + font.weight: Theme.typography.weightBold +} diff --git a/src/qml/components/StatusBadge.qml b/src/qml/components/StatusBadge.qml new file mode 100644 index 0000000..a1f524f --- /dev/null +++ b/src/qml/components/StatusBadge.qml @@ -0,0 +1,11 @@ +import QtQuick +import Logos.Theme + +// Bedrock status pill: Finalized (success), Safe (warning), Pending (muted). +Badge { + property string status: "Pending" + text: status + accent: status === "Finalized" ? Theme.palette.success + : status === "Safe" ? Theme.palette.warning + : Theme.palette.textMuted +} diff --git a/src/qml/components/TxRow.qml b/src/qml/components/TxRow.qml new file mode 100644 index 0000000..12dca6e --- /dev/null +++ b/src/qml/components/TxRow.qml @@ -0,0 +1,43 @@ +import QtQuick +import QtQuick.Layouts +import Logos.Controls +import Logos.Theme + +// Clickable summary row for a transaction map ({ hash, type, ... }). Used in +// the block-detail tx list, account history, and search results. +Rectangle { + id: root + + property var tx: ({}) + signal clicked() + + height: layout.implicitHeight + Theme.spacing.medium * 2 + radius: Theme.spacing.radiusMedium + color: hover.hovered ? Theme.palette.backgroundSecondary : "transparent" + border.width: 1 + border.color: hover.hovered ? Theme.palette.borderInteractive : Theme.palette.borderSecondary + + HoverHandler { id: hover } + TapHandler { onTapped: root.clicked() } + + RowLayout { + id: layout + anchors.fill: parent + anchors.margins: Theme.spacing.medium + spacing: Theme.spacing.medium + + MonoText { + text: root.tx.hash || "" + color: Theme.palette.text + wrapMode: Text.NoWrap + elide: Text.ElideMiddle + Layout.fillWidth: true + Layout.alignment: Qt.AlignVCenter + } + + TxTypeBadge { + type: root.tx.type || "Public" + Layout.alignment: Qt.AlignVCenter + } + } +} diff --git a/src/qml/components/TxTypeBadge.qml b/src/qml/components/TxTypeBadge.qml new file mode 100644 index 0000000..48be5d0 --- /dev/null +++ b/src/qml/components/TxTypeBadge.qml @@ -0,0 +1,13 @@ +import QtQuick +import Logos.Theme + +// Transaction-type pill, with a friendly label per kind. +Badge { + property string type: "Public" + text: type === "PrivacyPreserving" ? "Privacy-Preserving" + : type === "ProgramDeployment" ? "Program Deployment" + : type + accent: type === "PrivacyPreserving" ? Theme.palette.primary + : type === "ProgramDeployment" ? Theme.palette.accentOrange + : Theme.palette.info +} diff --git a/src/icons/activity.svg b/src/qml/icons/activity.svg similarity index 100% rename from src/icons/activity.svg rename to src/qml/icons/activity.svg diff --git a/src/icons/arrow-left.svg b/src/qml/icons/arrow-left.svg similarity index 100% rename from src/icons/arrow-left.svg rename to src/qml/icons/arrow-left.svg diff --git a/src/icons/arrow-right.svg b/src/qml/icons/arrow-right.svg similarity index 100% rename from src/icons/arrow-right.svg rename to src/qml/icons/arrow-right.svg diff --git a/src/icons/box.svg b/src/qml/icons/box.svg similarity index 100% rename from src/icons/box.svg rename to src/qml/icons/box.svg diff --git a/src/icons/file-text.svg b/src/qml/icons/file-text.svg similarity index 100% rename from src/icons/file-text.svg rename to src/qml/icons/file-text.svg diff --git a/src/icons/home.svg b/src/qml/icons/home.svg similarity index 100% rename from src/icons/home.svg rename to src/qml/icons/home.svg diff --git a/src/icons/search.svg b/src/qml/icons/search.svg similarity index 100% rename from src/icons/search.svg rename to src/qml/icons/search.svg diff --git a/src/icons/user.svg b/src/qml/icons/user.svg similarity index 100% rename from src/icons/user.svg rename to src/qml/icons/user.svg diff --git a/src/qml/pages/AccountPage.qml b/src/qml/pages/AccountPage.qml new file mode 100644 index 0000000..a597ce5 --- /dev/null +++ b/src/qml/pages/AccountPage.qml @@ -0,0 +1,113 @@ +import QtQuick +import QtQuick.Controls +import QtQuick.Layouts +import Logos.Controls +import Logos.Theme +import "../components" + +Item { + id: page + + property var explorer + readonly property var backend: explorer ? explorer.backend : null + property string accountId: "" + + property var account: ({}) + property bool loaded: false + property var txs: [] + property bool txsLoaded: false + + Component.onCompleted: page.fetch() + + Flickable { + anchors.fill: parent + contentWidth: width + contentHeight: col.implicitHeight + clip: true + + ColumnLayout { + id: col + width: parent.width + spacing: Theme.spacing.medium + + SectionHeader { title: "Account Details" } + + LogosText { + visible: !page.loaded + text: "Loading…" + color: Theme.palette.textMuted + font.pixelSize: Theme.typography.secondaryText + } + LogosText { + visible: page.loaded && Object.keys(page.account).length <= 1 + text: "Account not found." + color: Theme.palette.textMuted + font.pixelSize: Theme.typography.secondaryText + } + + Card { + Layout.fillWidth: true + visible: page.loaded && Object.keys(page.account).length > 1 + + InfoRow { label: "Account ID"; value: page.account.accountId || ""; mono: true } + InfoRow { + label: "Balance" + value: page.account.balance || "0" + valueColor: Theme.palette.success + } + InfoRow { label: "Program Owner"; value: page.account.programOwner || ""; mono: true } + InfoRow { label: "Nonce"; value: page.account.nonce || "0" } + InfoRow { + label: "Data Size" + value: (page.account.dataSizeBytes !== undefined ? page.account.dataSizeBytes : 0) + " bytes" + } + } + + SectionHeader { + visible: page.loaded && Object.keys(page.account).length > 1 + title: "Transaction History" + } + + LogosText { + visible: page.txsLoaded && page.txs.length === 0 && Object.keys(page.account).length > 1 + text: "No transactions found." + color: Theme.palette.textMuted + font.pixelSize: Theme.typography.secondaryText + } + + Repeater { + model: page.txs + delegate: TxRow { + Layout.fillWidth: true + tx: modelData + onClicked: page.explorer.navigateTx(modelData.hash) + } + } + + Item { Layout.preferredHeight: Theme.spacing.large } + } + } + + function fetch() { + if (!page.backend) + return; + logos.watch(page.backend.getAccount(page.accountId), + function (result) { + page.account = result || ({}); + page.loaded = true; + }, + function (err) { + page.account = ({}); + page.loaded = true; + }); + logos.watch(page.backend.getTransactionsByAccount(page.accountId, 0, 10), + function (result) { + page.txs = result || []; + page.txsLoaded = true; + }, + function (err) { + page.txs = []; + page.txsLoaded = true; + }); + } +} diff --git a/src/qml/pages/BlockPage.qml b/src/qml/pages/BlockPage.qml new file mode 100644 index 0000000..cf55d36 --- /dev/null +++ b/src/qml/pages/BlockPage.qml @@ -0,0 +1,118 @@ +import QtQuick +import QtQuick.Controls +import QtQuick.Layouts +import Logos.Controls +import Logos.Theme +import "../components" + +Item { + id: page + + property var explorer + readonly property var backend: explorer ? explorer.backend : null + property var blockId: 0 + + property var block: ({}) + property bool loaded: false + + Component.onCompleted: page.fetch() + + Flickable { + anchors.fill: parent + contentWidth: width + contentHeight: col.implicitHeight + clip: true + + ColumnLayout { + id: col + width: parent.width + spacing: Theme.spacing.medium + + SectionHeader { title: "Block #" + page.blockId } + + LogosText { + visible: !page.loaded + text: "Loading…" + color: Theme.palette.textMuted + font.pixelSize: Theme.typography.secondaryText + } + + LogosText { + visible: page.loaded && Object.keys(page.block).length === 0 + text: "Block not found." + color: Theme.palette.textMuted + font.pixelSize: Theme.typography.secondaryText + } + + Card { + Layout.fillWidth: true + visible: page.loaded && Object.keys(page.block).length > 0 + + InfoRow { label: "Block ID"; value: String(page.block.blockId !== undefined ? page.block.blockId : "") } + InfoRow { label: "Hash"; value: page.block.hash || ""; mono: true } + + // Previous hash — a clickable link to the previous block when not genesis. + RowLayout { + Layout.fillWidth: true + spacing: Theme.spacing.medium + FieldLabel { text: "Previous Hash" } + MonoText { + Layout.fillWidth: true + Layout.alignment: Qt.AlignTop + text: page.block.prevBlockHash || "" + color: page.blockId > 1 ? Theme.palette.primary : Theme.palette.text + font.underline: page.blockId > 1 && prevHover.hovered + HoverHandler { id: prevHover; enabled: page.blockId > 1 } + TapHandler { + enabled: page.blockId > 1 + onTapped: page.explorer.navigateBlock(Number(page.blockId) - 1) + } + } + } + + InfoRow { label: "Timestamp"; value: page.block.timestampText || "" } + + RowLayout { + Layout.fillWidth: true + spacing: Theme.spacing.medium + FieldLabel { text: "Status" } + StatusBadge { status: page.block.status || "Pending"; Layout.alignment: Qt.AlignTop } + Item { Layout.fillWidth: true } + } + + InfoRow { label: "Signature"; value: page.block.signature || ""; mono: true } + InfoRow { label: "Transactions"; value: String(page.block.txCount !== undefined ? page.block.txCount : 0) } + } + + SectionHeader { + visible: page.loaded && page.block.transactions !== undefined && page.block.transactions.length > 0 + title: "Transactions (" + (page.block.transactions ? page.block.transactions.length : 0) + ")" + } + + Repeater { + model: page.block.transactions !== undefined ? page.block.transactions : [] + delegate: TxRow { + Layout.fillWidth: true + tx: modelData + onClicked: page.explorer.navigateTx(modelData.hash) + } + } + + Item { Layout.preferredHeight: Theme.spacing.large } + } + } + + function fetch() { + if (!page.backend) + return; + logos.watch(page.backend.getBlockById(String(page.blockId)), + function (result) { + page.block = result || ({}); + page.loaded = true; + }, + function (err) { + page.block = ({}); + page.loaded = true; + }); + } +} diff --git a/src/qml/pages/HomePage.qml b/src/qml/pages/HomePage.qml new file mode 100644 index 0000000..fa39ccb --- /dev/null +++ b/src/qml/pages/HomePage.qml @@ -0,0 +1,172 @@ +import QtQuick +import QtQuick.Controls +import QtQuick.Layouts +import Logos.Controls +import Logos.Theme +import "../components" + +Item { + id: page + + // Injected by Main: the controller (navigation + backend access). + property var explorer + readonly property var backend: explorer ? explorer.backend : null + + ColumnLayout { + anchors.fill: parent + spacing: Theme.spacing.medium + + // Indexer config + health. + Card { + Layout.fillWidth: true + + RowLayout { + Layout.fillWidth: true + spacing: Theme.spacing.medium + + LogosText { + text: "Indexer config" + color: Theme.palette.textSecondary + font.pixelSize: Theme.typography.secondaryText + Layout.alignment: Qt.AlignVCenter + } + + Rectangle { + Layout.fillWidth: true + Layout.preferredHeight: 38 + radius: Theme.spacing.radiusMedium + color: Theme.palette.backgroundSecondary + border.width: 1 + border.color: configField.activeFocus ? Theme.palette.borderInteractive + : Theme.palette.borderSecondary + + TextField { + id: configField + anchors.fill: parent + anchors.leftMargin: Theme.spacing.medium + anchors.rightMargin: Theme.spacing.medium + verticalAlignment: TextInput.AlignVCenter + text: page.backend ? page.backend.indexerConfig : "" + placeholderText: "absolute path to indexer_config.json (blank = already running)" + color: Theme.palette.text + placeholderTextColor: Theme.palette.textMuted + font.pixelSize: Theme.typography.secondaryText + background: Item {} + onAccepted: page.applyConfig() + } + } + + Rectangle { + Layout.preferredHeight: 38 + Layout.preferredWidth: 84 + radius: Theme.spacing.radiusMedium + color: applyHover.hovered ? Qt.lighter(Theme.palette.primary, 1.1) : Theme.palette.primary + + HoverHandler { id: applyHover } + TapHandler { onTapped: page.applyConfig() } + + LogosText { + anchors.centerIn: parent + text: "Apply" + color: Theme.palette.background + font.pixelSize: Theme.typography.secondaryText + font.weight: Theme.typography.weightBold + } + } + } + + RowLayout { + Layout.fillWidth: true + spacing: Theme.spacing.small + + Rectangle { + width: 9 + height: 9 + radius: 4.5 + Layout.alignment: Qt.AlignVCenter + color: page.backend && page.backend.connectionStatus === "Connected" + ? Theme.palette.success + : Theme.palette.warning + } + LogosText { + text: { + if (!page.backend) + return ""; + var height = page.backend.chainHeight > 0 ? page.backend.chainHeight : "—"; + return "Chain height: " + height + " · " + page.backend.connectionStatus; + } + color: Theme.palette.textMuted + font.pixelSize: Theme.typography.secondaryText + } + } + } + + SectionHeader { title: "Recent Blocks" } + + ListView { + id: blockList + Layout.fillWidth: true + Layout.fillHeight: true + clip: true + spacing: Theme.spacing.small + model: page.backend ? page.backend.recentBlocks : [] + + delegate: BlockRow { + width: ListView.view.width + block: modelData + onClicked: page.explorer.navigateBlock(modelData.blockId) + } + + footer: Item { + width: blockList.width + height: loadMore.visible ? loadMore.implicitHeight + Theme.spacing.large : 0 + + Rectangle { + id: loadMore + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: parent.top + anchors.topMargin: Theme.spacing.medium + visible: blockList.count > 0 + implicitHeight: 36 + implicitWidth: 140 + radius: Theme.spacing.radiusMedium + color: moreHover.hovered ? Theme.palette.backgroundSecondary : Theme.palette.backgroundElevated + border.width: 1 + border.color: Theme.palette.borderSecondary + + HoverHandler { id: moreHover } + TapHandler { onTapped: if (page.backend) page.backend.loadMoreBlocks() } + + LogosText { + anchors.centerIn: parent + text: "Load more" + color: Theme.palette.textSecondary + font.pixelSize: Theme.typography.secondaryText + } + } + } + + // Empty state. + LogosText { + anchors.centerIn: parent + visible: blockList.count === 0 + width: parent.width * 0.8 + horizontalAlignment: Text.AlignHCenter + wrapMode: Text.WordWrap + text: page.backend && page.backend.connectionStatus === "Connected" + ? "No blocks indexed yet." + : "Waiting for the indexer… set the config path above if it isn't running." + color: Theme.palette.textMuted + font.pixelSize: Theme.typography.secondaryText + } + } + } + + function applyConfig() { + if (!page.backend) + return; + // Empty port → backend keeps its default (8779). + logos.watch(page.backend.applyIndexerConfig(configField.text, ""), + function (ok) {}, function (err) {}); + } +} diff --git a/src/qml/pages/SearchResultsPage.qml b/src/qml/pages/SearchResultsPage.qml new file mode 100644 index 0000000..5b74826 --- /dev/null +++ b/src/qml/pages/SearchResultsPage.qml @@ -0,0 +1,88 @@ +import QtQuick +import QtQuick.Controls +import QtQuick.Layouts +import Logos.Controls +import Logos.Theme +import "../components" + +Item { + id: page + + property var explorer + readonly property var backend: explorer ? explorer.backend : null + property var results: ({ blocks: [], transactions: [], accounts: [] }) + property string query: "" + + readonly property var blocks: results && results.blocks ? results.blocks : [] + readonly property var transactions: results && results.transactions ? results.transactions : [] + readonly property var accounts: results && results.accounts ? results.accounts : [] + readonly property int total: blocks.length + transactions.length + accounts.length + + Flickable { + anchors.fill: parent + contentWidth: width + contentHeight: col.implicitHeight + clip: true + + ColumnLayout { + id: col + width: parent.width + spacing: Theme.spacing.medium + + SectionHeader { title: "Search Results" } + + LogosText { + visible: page.total === 0 + text: page.query.length > 0 + ? "No results for \"" + page.query + "\"." + : "No results." + color: Theme.palette.textMuted + font.pixelSize: Theme.typography.secondaryText + } + + SectionHeader { + visible: page.blocks.length > 0 + title: "Blocks (" + page.blocks.length + ")" + font.pixelSize: Theme.typography.subtitleText + } + Repeater { + model: page.blocks + delegate: BlockRow { + Layout.fillWidth: true + block: modelData + onClicked: page.explorer.navigateBlock(modelData.blockId) + } + } + + SectionHeader { + visible: page.transactions.length > 0 + title: "Transactions (" + page.transactions.length + ")" + font.pixelSize: Theme.typography.subtitleText + } + Repeater { + model: page.transactions + delegate: TxRow { + Layout.fillWidth: true + tx: modelData + onClicked: page.explorer.navigateTx(modelData.hash) + } + } + + SectionHeader { + visible: page.accounts.length > 0 + title: "Accounts (" + page.accounts.length + ")" + font.pixelSize: Theme.typography.subtitleText + } + Repeater { + model: page.accounts + delegate: AccountRow { + Layout.fillWidth: true + account: modelData + onClicked: page.explorer.navigateAccount(modelData.accountId) + } + } + + Item { Layout.preferredHeight: Theme.spacing.large } + } + } +} diff --git a/src/qml/pages/TransactionPage.qml b/src/qml/pages/TransactionPage.qml new file mode 100644 index 0000000..b540a6e --- /dev/null +++ b/src/qml/pages/TransactionPage.qml @@ -0,0 +1,143 @@ +import QtQuick +import QtQuick.Controls +import QtQuick.Layouts +import Logos.Controls +import Logos.Theme +import "../components" + +Item { + id: page + + property var explorer + readonly property var backend: explorer ? explorer.backend : null + property string txHash: "" + + property var tx: ({}) + property bool loaded: false + readonly property string txType: tx.type || "" + + Component.onCompleted: page.fetch() + + Flickable { + anchors.fill: parent + contentWidth: width + contentHeight: col.implicitHeight + clip: true + + ColumnLayout { + id: col + width: parent.width + spacing: Theme.spacing.medium + + SectionHeader { title: "Transaction Details" } + + LogosText { + visible: !page.loaded + text: "Loading…" + color: Theme.palette.textMuted + font.pixelSize: Theme.typography.secondaryText + } + LogosText { + visible: page.loaded && Object.keys(page.tx).length === 0 + text: "Transaction not found." + color: Theme.palette.textMuted + font.pixelSize: Theme.typography.secondaryText + } + + Card { + Layout.fillWidth: true + visible: page.loaded && Object.keys(page.tx).length > 0 + + InfoRow { label: "Hash"; value: page.tx.hash || ""; mono: true } + RowLayout { + Layout.fillWidth: true + spacing: Theme.spacing.medium + FieldLabel { text: "Type" } + TxTypeBadge { type: page.txType || "Public"; Layout.alignment: Qt.AlignTop } + Item { Layout.fillWidth: true } + } + + // Public. + InfoRow { + visible: page.txType === "Public" + label: "Program ID"; value: page.tx.programId || ""; mono: true + } + InfoRow { + visible: page.txType === "Public" + label: "Instruction Data" + value: (page.tx.instructionDataCount !== undefined ? page.tx.instructionDataCount : 0) + " words" + } + InfoRow { + visible: page.txType === "Public" || page.txType === "PrivacyPreserving" + label: "Signatures" + value: String(page.tx.signatureCount !== undefined ? page.tx.signatureCount : 0) + } + + // Privacy-preserving. + InfoRow { + visible: page.txType === "PrivacyPreserving" + label: "New Commitments" + value: String(page.tx.newCommitmentsCount !== undefined ? page.tx.newCommitmentsCount : 0) + } + InfoRow { + visible: page.txType === "PrivacyPreserving" + label: "Nullifiers" + value: String(page.tx.nullifiersCount !== undefined ? page.tx.nullifiersCount : 0) + } + InfoRow { + visible: page.txType === "PrivacyPreserving" + label: "Encrypted States" + value: String(page.tx.encryptedStatesCount !== undefined ? page.tx.encryptedStatesCount : 0) + } + InfoRow { + visible: page.txType === "PrivacyPreserving" + label: "Proof Size" + value: (page.tx.proofSizeBytes !== undefined ? page.tx.proofSizeBytes : 0) + " bytes" + } + InfoRow { + visible: page.txType === "PrivacyPreserving" + label: "Validity Window" + value: "[" + (page.tx.validityWindowStart !== undefined ? page.tx.validityWindowStart : 0) + + ", " + (page.tx.validityWindowEnd !== undefined ? page.tx.validityWindowEnd : 0) + ")" + } + + // Program deployment. + InfoRow { + visible: page.txType === "ProgramDeployment" + label: "Bytecode Size" + value: (page.tx.bytecodeSizeBytes !== undefined ? page.tx.bytecodeSizeBytes : 0) + " bytes" + } + } + + SectionHeader { + visible: page.loaded && page.tx.accounts !== undefined && page.tx.accounts.length > 0 + title: "Accounts (" + (page.tx.accounts ? page.tx.accounts.length : 0) + ")" + } + + Repeater { + model: page.tx.accounts !== undefined ? page.tx.accounts : [] + delegate: AccountRow { + Layout.fillWidth: true + account: modelData + onClicked: page.explorer.navigateAccount(modelData.accountId) + } + } + + Item { Layout.preferredHeight: Theme.spacing.large } + } + } + + function fetch() { + if (!page.backend) + return; + logos.watch(page.backend.getTransaction(page.txHash), + function (result) { + page.tx = result || ({}); + page.loaded = true; + }, + function (err) { + page.tx = ({}); + page.loaded = true; + }); + } +} diff --git a/src/services/IndexerService.h b/src/services/IndexerService.h deleted file mode 100644 index a5ffc8a..0000000 --- a/src/services/IndexerService.h +++ /dev/null @@ -1,46 +0,0 @@ -#pragma once - -#include "models/Block.h" -#include "models/Transaction.h" -#include "models/Account.h" - -#include -#include -#include - -struct SearchResults { - QVector blocks; - QVector transactions; - QVector accounts; -}; - -class IndexerService : public QObject { - Q_OBJECT - -public: - explicit IndexerService(QObject* parent = nullptr) : QObject(parent) {} - ~IndexerService() override = default; - - // Over the Logos protocol the "endpoint" is repurposed to the indexer - // config path (absolute path to indexer_config.json); blank means the - // indexer is already running. No network URL is involved anymore. - static QString defaultEndpoint() - { - return QString(); - } - - virtual QString endpoint() const = 0; - virtual void setEndpoint(const QString& endpoint) = 0; - - virtual std::optional getAccount(const QString& accountId) = 0; - virtual std::optional getBlockById(quint64 blockId) = 0; - virtual std::optional getBlockByHash(const QString& hash) = 0; - virtual std::optional getTransaction(const QString& hash) = 0; - virtual QVector getBlocks(std::optional before, int limit) = 0; - virtual quint64 getLastFinalizedBlockId() = 0; - virtual QVector getTransactionsByAccount(const QString& accountId, int offset, int limit) = 0; - virtual SearchResults search(const QString& query) = 0; - -signals: - void newBlockAdded(Block block); -}; diff --git a/src/services/LpIndexerService.cpp b/src/services/LpIndexerService.cpp deleted file mode 100644 index 4e5097e..0000000 --- a/src/services/LpIndexerService.cpp +++ /dev/null @@ -1,438 +0,0 @@ -#include "LpIndexerService.h" - -#include "logos_api.h" -#include "logos_api_client.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -namespace { - -constexpr auto kModuleName = "lez_indexer_module"; -constexpr int kPollIntervalMs = 2000; - -// 64/128-bit values arrive as decimal strings (to dodge JSON double precision -// loss), but be lenient and also accept a JSON number. -quint64 jsonU64(const QJsonValue& value) -{ - if (value.isString()) { - bool ok = false; - const qulonglong parsed = value.toString().toULongLong(&ok); - return ok ? parsed : 0; - } - if (value.isDouble()) { - const double number = value.toDouble(); - return number > 0.0 ? static_cast(number) : 0; - } - return 0; -} - -QString jsonStr(const QJsonValue& value) -{ - if (value.isString()) { - return value.toString(); - } - if (value.isDouble()) { - return QString::number(static_cast(value.toDouble())); - } - return {}; -} - -QDateTime timestampFromSeconds(quint64 timestamp) -{ - QDateTime dt; - // Tolerate either seconds or milliseconds since epoch. - if (timestamp > 1000000000000ULL) { - dt = QDateTime::fromMSecsSinceEpoch(static_cast(timestamp), QTimeZone::UTC); - } else { - dt = QDateTime::fromSecsSinceEpoch(static_cast(timestamp), QTimeZone::UTC); - } - return dt.isValid() ? dt : QDateTime::currentDateTimeUtc(); -} - -} // namespace - -LpIndexerService::LpIndexerService(LogosAPI* logosAPI, const QString& configPath, const QString& port, QObject* parent) - : IndexerService(parent) - , m_logosAPI(logosAPI) - , m_configPath(configPath.trimmed()) - , m_port(port.trimmed()) -{ - if (m_logosAPI) { - m_client = m_logosAPI->getClient(kModuleName); - } - if (!m_client) { - qWarning() << "LpIndexerService: no LogosAPI client for" << kModuleName; - } - - // Best-effort boot (no-op provider-side if already running, or if no config). - startIndexer(); - - // The provider has no push event — poll the tip for live head updates. - m_pollTimer = new QTimer(this); - m_pollTimer->setInterval(kPollIntervalMs); - connect(m_pollTimer, &QTimer::timeout, this, &LpIndexerService::pollForNewBlocks); - m_pollTimer->start(); -} - -LpIndexerService::~LpIndexerService() = default; - -QString LpIndexerService::endpoint() const -{ - return m_configPath; -} - -void LpIndexerService::setEndpoint(const QString& endpoint) -{ - const QString trimmed = endpoint.trimmed(); - if (trimmed == m_configPath) { - return; - } - m_configPath = trimmed; - // Re-baseline the live poller; the (re)started indexer may ingest afresh. - m_lastNotifiedBlockId = 0; - m_polledOnce = false; - startIndexer(); -} - -void LpIndexerService::startIndexer() -{ - if (!m_client || m_configPath.isEmpty()) { - return; // assume the indexer was started elsewhere - } - const QVariant result = m_client->invokeRemoteMethod(kModuleName, "start_indexer", m_configPath, m_port); - const int code = result.isValid() ? result.toInt() : -1; - if (code != 0) { - qWarning() << "LpIndexerService: start_indexer returned" << code << "for" << m_configPath; - } -} - -std::optional LpIndexerService::getAccount(const QString& accountId) -{ - if (!m_client) { - return std::nullopt; - } - const QVariant r = m_client->invokeRemoteMethod(kModuleName, "getAccount", accountId); - return parseAccount(accountId, r.isValid() ? r.toString() : QString()); -} - -std::optional LpIndexerService::getBlockById(quint64 blockId) -{ - if (!m_client) { - return std::nullopt; - } - const QVariant r = m_client->invokeRemoteMethod(kModuleName, "getBlockById", QString::number(blockId)); - return parseBlock(r.isValid() ? r.toString() : QString()); -} - -std::optional LpIndexerService::getBlockByHash(const QString& hash) -{ - if (!m_client) { - return std::nullopt; - } - const QVariant r = m_client->invokeRemoteMethod(kModuleName, "getBlockByHash", hash); - return parseBlock(r.isValid() ? r.toString() : QString()); -} - -std::optional LpIndexerService::getTransaction(const QString& hash) -{ - if (!m_client) { - return std::nullopt; - } - const QVariant r = m_client->invokeRemoteMethod(kModuleName, "getTransaction", hash); - const QString json = r.isValid() ? r.toString() : QString(); - if (json.isEmpty()) { - return std::nullopt; - } - const QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8()); - if (!doc.isObject()) { - return std::nullopt; - } - return parseTransaction(doc.object()); -} - -QVector LpIndexerService::getBlocks(std::optional before, int limit) -{ - if (!m_client) { - return {}; - } - const QString beforeArg = before.has_value() ? QString::number(*before) : QString(); - const QVariant r = m_client->invokeRemoteMethod(kModuleName, "getBlocks", beforeArg, QString::number(limit)); - const QString json = r.isValid() ? r.toString() : QString(); - if (json.isEmpty()) { - return {}; - } - - const QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8()); - if (!doc.isArray()) { - return {}; - } - - QVector blocks; - const QJsonArray array = doc.array(); - blocks.reserve(array.size()); - for (const auto& item : array) { - if (auto block = parseBlockObject(item.toObject())) { - blocks.append(*block); - } - } - return blocks; -} - -quint64 LpIndexerService::getLastFinalizedBlockId() -{ - if (!m_client) { - return 0; - } - const QVariant r = m_client->invokeRemoteMethod(kModuleName, "getLastFinalizedBlockId"); - if (!r.isValid()) { - return 0; - } - bool ok = false; - const qulonglong parsed = r.toString().toULongLong(&ok); - return ok ? parsed : 0; -} - -QVector LpIndexerService::getTransactionsByAccount(const QString& accountId, int offset, int limit) -{ - if (!m_client) { - return {}; - } - const QVariant r = m_client->invokeRemoteMethod( - kModuleName, "getTransactionsByAccount", accountId, QString::number(offset), QString::number(limit)); - const QString json = r.isValid() ? r.toString() : QString(); - if (json.isEmpty()) { - return {}; - } - - const QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8()); - if (!doc.isArray()) { - return {}; - } - - QVector transactions; - const QJsonArray array = doc.array(); - transactions.reserve(array.size()); - for (const auto& item : array) { - if (auto tx = parseTransaction(item.toObject())) { - transactions.append(*tx); - } - } - return transactions; -} - -SearchResults LpIndexerService::search(const QString& query) -{ - SearchResults results; - const QString trimmed = query.trimmed(); - if (trimmed.isEmpty()) { - return results; - } - - static const QRegularExpression hashRegex(QStringLiteral("^[0-9a-fA-F]{64}$")); - if (hashRegex.match(trimmed).hasMatch()) { - if (auto block = getBlockByHash(trimmed)) { - results.blocks.append(*block); - } - if (auto tx = getTransaction(trimmed)) { - results.transactions.append(*tx); - } - if (auto account = getAccount(trimmed)) { - results.accounts.append(*account); - } - } - - bool ok = false; - const quint64 blockId = trimmed.toULongLong(&ok); - if (ok) { - if (auto block = getBlockById(blockId)) { - const bool duplicate = std::any_of(results.blocks.begin(), results.blocks.end(), - [blockId](const Block& existing) { return existing.blockId == blockId; }); - if (!duplicate) { - results.blocks.append(*block); - } - } - } - - return results; -} - -void LpIndexerService::pollForNewBlocks() -{ - const quint64 latest = getLastFinalizedBlockId(); - if (latest == 0) { - return; - } - - // First successful poll establishes a baseline without re-emitting blocks - // the initial MainPage::refresh already loaded. - if (!m_polledOnce) { - m_polledOnce = true; - m_lastNotifiedBlockId = latest; - return; - } - - if (latest <= m_lastNotifiedBlockId) { - return; - } - - // For a large jump (or a gap), emit only the new head: MainPage::onNewBlock - // detects the discontinuity and rebuilds the recent list from the backend. - if (latest - m_lastNotifiedBlockId > 8) { - if (auto block = getBlockById(latest)) { - m_lastNotifiedBlockId = latest; - emit newBlockAdded(*block); - } - return; - } - - for (quint64 id = m_lastNotifiedBlockId + 1; id <= latest; ++id) { - if (auto block = getBlockById(id)) { - emit newBlockAdded(*block); - } - } - m_lastNotifiedBlockId = latest; -} - -std::optional LpIndexerService::parseBlock(const QString& json) const -{ - if (json.isEmpty()) { - return std::nullopt; - } - const QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8()); - if (!doc.isObject()) { - return std::nullopt; - } - return parseBlockObject(doc.object()); -} - -std::optional LpIndexerService::parseBlockObject(const QJsonObject& obj) const -{ - if (obj.isEmpty()) { - return std::nullopt; - } - - Block block; - block.blockId = jsonU64(obj.value("block_id")); - block.hash = jsonStr(obj.value("hash")); - block.prevBlockHash = jsonStr(obj.value("prev_block_hash")); - block.signature = jsonStr(obj.value("signature")); - block.timestamp = timestampFromSeconds(jsonU64(obj.value("timestamp"))); - - const QString status = obj.value("bedrock_status").toString("Pending"); - if (status == "Finalized") { - block.bedrockStatus = BedrockStatus::Finalized; - } else if (status == "Safe") { - block.bedrockStatus = BedrockStatus::Safe; - } else { - block.bedrockStatus = BedrockStatus::Pending; - } - - const QJsonArray txArray = obj.value("transactions").toArray(); - block.transactions.reserve(txArray.size()); - for (const auto& txValue : txArray) { - if (auto tx = parseTransaction(txValue.toObject())) { - block.transactions.append(*tx); - } - } - - return block; -} - -std::optional LpIndexerService::parseTransaction(const QJsonObject& obj) const -{ - if (obj.isEmpty()) { - return std::nullopt; - } - - Transaction tx; - tx.hash = jsonStr(obj.value("hash")); - - const QString type = obj.value("type").toString(); - - auto appendAccounts = [&tx](const QJsonArray& accounts) { - for (const auto& entry : accounts) { - const QJsonObject account = entry.toObject(); - AccountRef ref; - ref.accountId = jsonStr(account.value("account_id")); - ref.nonce = jsonStr(account.value("nonce")); - if (ref.nonce.isEmpty()) { - ref.nonce = "0"; - } - tx.accounts.append(ref); - } - }; - - if (type == "Public") { - tx.type = TransactionType::Public; - tx.programId = jsonStr(obj.value("program_id")); - appendAccounts(obj.value("accounts").toArray()); - - const QJsonArray instructionData = obj.value("instruction_data").toArray(); - tx.instructionData.reserve(instructionData.size()); - for (const auto& v : instructionData) { - tx.instructionData.append(static_cast(jsonU64(v))); - } - tx.signatureCount = obj.value("signature_count").toInt(); - return tx; - } - - if (type == "PrivacyPreserving") { - tx.type = TransactionType::PrivacyPreserving; - appendAccounts(obj.value("accounts").toArray()); - tx.newCommitmentsCount = obj.value("new_commitments_count").toInt(); - tx.nullifiersCount = obj.value("nullifiers_count").toInt(); - tx.encryptedStatesCount = obj.value("encrypted_states_count").toInt(); - tx.validityWindowStart = jsonU64(obj.value("validity_window_start")); - tx.validityWindowEnd = jsonU64(obj.value("validity_window_end")); - tx.signatureCount = obj.value("signature_count").toInt(); - tx.proofSizeBytes = obj.value("proof_size").toInt(); - return tx; - } - - if (type == "ProgramDeployment") { - tx.type = TransactionType::ProgramDeployment; - tx.bytecodeSizeBytes = obj.value("bytecode_size").toInt(); - return tx; - } - - return std::nullopt; -} - -std::optional LpIndexerService::parseAccount(const QString& accountId, const QString& json) const -{ - if (json.isEmpty()) { - return std::nullopt; - } - const QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8()); - if (!doc.isObject()) { - return std::nullopt; - } - const QJsonObject obj = doc.object(); - - Account account; - account.accountId = accountId; // provider payload omits it; inject the queried id - account.programOwner = jsonStr(obj.value("program_owner")); - account.balance = jsonStr(obj.value("balance")); - account.nonce = jsonStr(obj.value("nonce")); - account.dataSizeBytes = obj.value("data_size").toInt(); - - if (account.balance.isEmpty()) { - account.balance = "0"; - } - if (account.nonce.isEmpty()) { - account.nonce = "0"; - } - - return account; -} diff --git a/src/services/LpIndexerService.h b/src/services/LpIndexerService.h deleted file mode 100644 index 3d94754..0000000 --- a/src/services/LpIndexerService.h +++ /dev/null @@ -1,69 +0,0 @@ -#pragma once - -#include "IndexerService.h" - -#include -#include - -class LogosAPI; -class LogosAPIClient; -class QTimer; -class QJsonObject; - -// IndexerService implementation that talks to `lez_indexer_module` IN-PROCESS -// over the Logos protocol (Qt Remote Objects), via -// LogosAPI::getClient(...)->invokeRemoteMethod(...). Replaces the old WebSocket -// JSON-RPC RpcIndexerService. -// -// The provider returns a flat, compact JSON schema (hex hashes; 64/128-bit -// values as decimal strings; counts/sizes as numbers; "" == not-found), which -// differs from the old RPC schema — so this class carries its OWN parsers. -// -// The provider exposes no new-block push event, so live head updates are POLLED -// on a 2 s timer over getLastFinalizedBlockId. -// -// `endpoint()`/`setEndpoint()` are repurposed to the indexer CONFIG PATH (an -// absolute path to indexer_config.json) used to best-effort start the indexer; -// blank means "the indexer is already running" (start is idempotent provider-side). -class LpIndexerService : public IndexerService { - Q_OBJECT - -public: - explicit LpIndexerService( - LogosAPI* logosAPI, - const QString& configPath = QString(), - const QString& port = QStringLiteral("8779"), - QObject* parent = nullptr - ); - ~LpIndexerService() override; - - QString endpoint() const override; // the indexer config path - void setEndpoint(const QString& endpoint) override; // set config path + (re)start - - std::optional getAccount(const QString& accountId) override; - std::optional getBlockById(quint64 blockId) override; - std::optional getBlockByHash(const QString& hash) override; - std::optional getTransaction(const QString& hash) override; - QVector getBlocks(std::optional before, int limit) override; - quint64 getLastFinalizedBlockId() override; - QVector getTransactionsByAccount(const QString& accountId, int offset, int limit) override; - SearchResults search(const QString& query) override; - -private: - void startIndexer(); - void pollForNewBlocks(); - - // Parsers for the provider's compact schema. - std::optional parseBlock(const QString& json) const; - std::optional parseBlockObject(const QJsonObject& obj) const; - std::optional parseTransaction(const QJsonObject& obj) const; - std::optional parseAccount(const QString& accountId, const QString& json) const; - - LogosAPI* m_logosAPI = nullptr; - LogosAPIClient* m_client = nullptr; - QString m_configPath; - QString m_port; - QTimer* m_pollTimer = nullptr; - quint64 m_lastNotifiedBlockId = 0; - bool m_polledOnce = false; -}; diff --git a/src/services/MockIndexerService.cpp b/src/services/MockIndexerService.cpp deleted file mode 100644 index 2176feb..0000000 --- a/src/services/MockIndexerService.cpp +++ /dev/null @@ -1,378 +0,0 @@ -#include "MockIndexerService.h" - -#include -#include - -namespace { - -QString randomHexString(int bytes) -{ - QString result; - result.reserve(bytes * 2); - auto* rng = QRandomGenerator::global(); - for (int i = 0; i < bytes; ++i) { - result += QString("%1").arg(rng->bounded(256), 2, 16, QChar('0')); - } - return result; -} - -// Generate a base58-like string (simplified — uses alphanumeric chars without 0/O/I/l) -QString randomBase58String(int length) -{ - static const char chars[] = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; - QString result; - result.reserve(length); - auto* rng = QRandomGenerator::global(); - for (int i = 0; i < length; ++i) { - result += chars[rng->bounded(static_cast(sizeof(chars) - 1))]; - } - return result; -} - -} // namespace - -MockIndexerService::MockIndexerService(QObject* parent) - : IndexerService(parent) -{ - generateData(); - - connect(&m_blockTimer, &QTimer::timeout, this, &MockIndexerService::onGenerateBlock); - m_blockTimer.start(30000); // 30 seconds -} - -QString MockIndexerService::endpoint() const -{ - return m_endpoint; -} - -void MockIndexerService::setEndpoint(const QString& endpoint) -{ - m_endpoint = endpoint.trimmed(); - if (m_endpoint.isEmpty()) { - m_endpoint = IndexerService::defaultEndpoint(); - } -} - -Block MockIndexerService::generateBlock(quint64 blockId, const QString& prevHash) -{ - auto* rng = QRandomGenerator::global(); - - Block block; - block.blockId = blockId; - block.prevBlockHash = prevHash; - block.hash = randomHash(); - block.timestamp = QDateTime::currentDateTimeUtc(); - block.signature = randomHexString(64); - block.bedrockStatus = BedrockStatus::Pending; - - int txCount = rng->bounded(1, 6); - for (int t = 0; t < txCount; ++t) { - Transaction tx; - int typeRoll = rng->bounded(100); - if (typeRoll < 60) { - tx = generatePublicTransaction(); - } else if (typeRoll < 85) { - tx = generatePrivacyPreservingTransaction(); - } else { - tx = generateProgramDeploymentTransaction(); - } - block.transactions.append(tx); - m_transactionsByHash[tx.hash] = tx; - - for (const auto& accRef : tx.accounts) { - if (!m_accounts.contains(accRef.accountId)) { - Account acc; - acc.accountId = accRef.accountId; - acc.programOwner = randomBase58String(44); - acc.balance = QString::number(rng->bounded(0, 1000000)); - acc.nonce = accRef.nonce; - acc.dataSizeBytes = rng->bounded(0, 4096); - m_accounts[acc.accountId] = acc; - } - } - } - - return block; -} - -void MockIndexerService::onGenerateBlock() -{ - quint64 newId = m_blocks.isEmpty() ? 1 : m_blocks.last().blockId + 1; - QString prevHash = m_blocks.isEmpty() ? QString(64, '0') : m_blocks.last().hash; - - Block block = generateBlock(newId, prevHash); - m_blocks.append(block); - m_blocksByHash[block.hash] = block; - - emit newBlockAdded(block); -} - -QString MockIndexerService::randomHash() -{ - return randomHexString(32); -} - -QString MockIndexerService::randomAccountId() -{ - return randomBase58String(44); -} - -Transaction MockIndexerService::generatePublicTransaction() -{ - auto* rng = QRandomGenerator::global(); - - Transaction tx; - tx.hash = randomHash(); - tx.type = TransactionType::Public; - tx.programId = randomBase58String(44); - tx.signatureCount = rng->bounded(1, 4); - tx.proofSizeBytes = rng->bounded(0, 2048); - - int accountCount = rng->bounded(1, 5); - for (int i = 0; i < accountCount; ++i) { - // Reuse existing accounts sometimes - QString accId; - if (!m_accounts.isEmpty() && rng->bounded(100) < 60) { - auto keys = m_accounts.keys(); - accId = keys[rng->bounded(keys.size())]; - } else { - accId = randomAccountId(); - } - tx.accounts.append({accId, QString::number(rng->bounded(1, 100))}); - } - - int instrCount = rng->bounded(1, 8); - for (int i = 0; i < instrCount; ++i) { - tx.instructionData.append(rng->generate()); - } - - return tx; -} - -Transaction MockIndexerService::generatePrivacyPreservingTransaction() -{ - auto* rng = QRandomGenerator::global(); - - Transaction tx; - tx.hash = randomHash(); - tx.type = TransactionType::PrivacyPreserving; - tx.proofSizeBytes = rng->bounded(512, 4096); - tx.newCommitmentsCount = rng->bounded(1, 6); - tx.nullifiersCount = rng->bounded(1, 4); - tx.encryptedStatesCount = rng->bounded(1, 3); - tx.validityWindowStart = rng->bounded(1, 50); - tx.validityWindowEnd = tx.validityWindowStart + rng->bounded(50, 200); - - int accountCount = rng->bounded(1, 4); - for (int i = 0; i < accountCount; ++i) { - QString accId; - if (!m_accounts.isEmpty() && rng->bounded(100) < 60) { - auto keys = m_accounts.keys(); - accId = keys[rng->bounded(keys.size())]; - } else { - accId = randomAccountId(); - } - tx.accounts.append({accId, QString::number(rng->bounded(1, 100))}); - } - - return tx; -} - -Transaction MockIndexerService::generateProgramDeploymentTransaction() -{ - auto* rng = QRandomGenerator::global(); - - Transaction tx; - tx.hash = randomHash(); - tx.type = TransactionType::ProgramDeployment; - tx.bytecodeSizeBytes = rng->bounded(1024, 65536); - tx.signatureCount = 1; - - return tx; -} - -void MockIndexerService::generateData() -{ - auto* rng = QRandomGenerator::global(); - - // Generate accounts - for (int i = 0; i < 15; ++i) { - Account acc; - acc.accountId = randomAccountId(); - acc.programOwner = randomBase58String(44); - acc.balance = QString::number(rng->bounded(0, 1000000)); - acc.nonce = QString::number(rng->bounded(0, 500)); - acc.dataSizeBytes = rng->bounded(0, 4096); - m_accounts[acc.accountId] = acc; - } - - // Generate blocks - QString prevHash = QString(64, '0'); - QDateTime timestamp = QDateTime::currentDateTimeUtc().addSecs(-25 * 12); // ~5 min ago - - for (quint64 id = 1; id <= 25; ++id) { - Block block; - block.blockId = id; - block.prevBlockHash = prevHash; - block.hash = randomHash(); - block.timestamp = timestamp; - block.signature = randomHexString(64); - - // Older blocks are finalized, middle ones safe, recent ones pending - if (id <= 15) { - block.bedrockStatus = BedrockStatus::Finalized; - } else if (id <= 22) { - block.bedrockStatus = BedrockStatus::Safe; - } else { - block.bedrockStatus = BedrockStatus::Pending; - } - - // Generate 1-5 transactions per block - int txCount = rng->bounded(1, 6); - for (int t = 0; t < txCount; ++t) { - Transaction tx; - int typeRoll = rng->bounded(100); - if (typeRoll < 60) { - tx = generatePublicTransaction(); - } else if (typeRoll < 85) { - tx = generatePrivacyPreservingTransaction(); - } else { - tx = generateProgramDeploymentTransaction(); - } - block.transactions.append(tx); - m_transactionsByHash[tx.hash] = tx; - - // Ensure accounts referenced in transactions exist - for (const auto& accRef : tx.accounts) { - if (!m_accounts.contains(accRef.accountId)) { - Account acc; - acc.accountId = accRef.accountId; - acc.programOwner = randomBase58String(44); - acc.balance = QString::number(rng->bounded(0, 1000000)); - acc.nonce = accRef.nonce; - acc.dataSizeBytes = rng->bounded(0, 4096); - m_accounts[acc.accountId] = acc; - } - } - } - - m_blocks.append(block); - m_blocksByHash[block.hash] = block; - prevHash = block.hash; - timestamp = timestamp.addSecs(12); - } -} - -std::optional MockIndexerService::getAccount(const QString& accountId) -{ - auto it = m_accounts.find(accountId); - if (it != m_accounts.end()) { - return *it; - } - return std::nullopt; -} - -std::optional MockIndexerService::getBlockById(quint64 blockId) -{ - if (blockId >= 1 && blockId <= static_cast(m_blocks.size())) { - return m_blocks[static_cast(blockId - 1)]; - } - return std::nullopt; -} - -std::optional MockIndexerService::getBlockByHash(const QString& hash) -{ - auto it = m_blocksByHash.find(hash); - if (it != m_blocksByHash.end()) { - return *it; - } - return std::nullopt; -} - -std::optional MockIndexerService::getTransaction(const QString& hash) -{ - auto it = m_transactionsByHash.find(hash); - if (it != m_transactionsByHash.end()) { - return *it; - } - return std::nullopt; -} - -QVector MockIndexerService::getBlocks(std::optional before, int limit) -{ - QVector result; - int startIdx = m_blocks.size() - 1; - - if (before.has_value()) { - startIdx = static_cast(*before) - 2; // -1 for 0-index, -1 for "before" - } - - for (int i = startIdx; i >= 0 && result.size() < limit; --i) { - result.append(m_blocks[i]); - } - - return result; -} - -quint64 MockIndexerService::getLastFinalizedBlockId() -{ - if (m_blocks.isEmpty()) return 0; - return m_blocks.last().blockId; -} - -QVector MockIndexerService::getTransactionsByAccount(const QString& accountId, int offset, int limit) -{ - QVector result; - - // Search all transactions for ones referencing this account - for (auto it = m_transactionsByHash.begin(); it != m_transactionsByHash.end(); ++it) { - for (const auto& accRef : it->accounts) { - if (accRef.accountId == accountId) { - result.append(*it); - break; - } - } - } - - // Apply offset and limit - if (offset >= result.size()) return {}; - return result.mid(offset, limit); -} - -SearchResults MockIndexerService::search(const QString& query) -{ - SearchResults results; - QString trimmed = query.trimmed(); - - if (trimmed.isEmpty()) return results; - - // Try as block ID (numeric) - bool ok = false; - quint64 blockId = trimmed.toULongLong(&ok); - if (ok) { - auto block = getBlockById(blockId); - if (block) { - results.blocks.append(*block); - } - } - - // Try as hash (hex string, 64 chars) - if (trimmed.size() == 64) { - auto block = getBlockByHash(trimmed); - if (block) { - results.blocks.append(*block); - } - auto tx = getTransaction(trimmed); - if (tx) { - results.transactions.append(*tx); - } - } - - // Try as account ID - auto account = getAccount(trimmed); - if (account) { - results.accounts.append(*account); - } - - return results; -} diff --git a/src/services/MockIndexerService.h b/src/services/MockIndexerService.h deleted file mode 100644 index 5c57c3e..0000000 --- a/src/services/MockIndexerService.h +++ /dev/null @@ -1,44 +0,0 @@ -#pragma once - -#include "IndexerService.h" - -#include -#include - -class MockIndexerService : public IndexerService { - Q_OBJECT - -public: - explicit MockIndexerService(QObject* parent = nullptr); - - QString endpoint() const override; - void setEndpoint(const QString& endpoint) override; - - std::optional getAccount(const QString& accountId) override; - std::optional getBlockById(quint64 blockId) override; - std::optional getBlockByHash(const QString& hash) override; - std::optional getTransaction(const QString& hash) override; - QVector getBlocks(std::optional before, int limit) override; - quint64 getLastFinalizedBlockId() override; - QVector getTransactionsByAccount(const QString& accountId, int offset, int limit) override; - SearchResults search(const QString& query) override; - -private slots: - void onGenerateBlock(); - -private: - void generateData(); - QString randomHash(); - QString randomAccountId(); - Transaction generatePublicTransaction(); - Transaction generatePrivacyPreservingTransaction(); - Transaction generateProgramDeploymentTransaction(); - Block generateBlock(quint64 blockId, const QString& prevHash); - - QVector m_blocks; - QMap m_blocksByHash; - QMap m_transactionsByHash; - QMap m_accounts; - QTimer m_blockTimer; - QString m_endpoint = IndexerService::defaultEndpoint(); -}; diff --git a/src/widgets/ClickableFrame.h b/src/widgets/ClickableFrame.h deleted file mode 100644 index c250672..0000000 --- a/src/widgets/ClickableFrame.h +++ /dev/null @@ -1,47 +0,0 @@ -#pragma once - -#include "Style.h" - -#include -#include - -class ClickableFrame : public QFrame { - Q_OBJECT - -public: - explicit ClickableFrame(QWidget* parent = nullptr) - : QFrame(parent) - { - setCursor(Qt::PointingHandCursor); - } - -signals: - void clicked(); - -protected: - void mousePressEvent(QMouseEvent* event) override - { - if (event->button() == Qt::LeftButton) { - emit clicked(); - } - QFrame::mousePressEvent(event); - } - - void enterEvent(QEnterEvent* event) override - { - m_baseStyleSheet = styleSheet(); - setStyleSheet(m_baseStyleSheet + - QString(" ClickableFrame { background: %1 !important; border-color: %2 !important; }") - .arg(Style::Color::surfaceHover(), Style::Color::accent())); - QFrame::enterEvent(event); - } - - void leaveEvent(QEvent* event) override - { - setStyleSheet(m_baseStyleSheet); - QFrame::leaveEvent(event); - } - -private: - QString m_baseStyleSheet; -}; diff --git a/src/widgets/NavigationBar.cpp b/src/widgets/NavigationBar.cpp deleted file mode 100644 index c45045e..0000000 --- a/src/widgets/NavigationBar.cpp +++ /dev/null @@ -1,63 +0,0 @@ -#include "NavigationBar.h" -#include "Style.h" - -#include -#include -#include -#include - -NavigationBar::NavigationBar(QWidget* parent) - : QWidget(parent) -{ - auto* layout = new QHBoxLayout(this); - layout->setContentsMargins(0, 0, 0, 0); - layout->setSpacing(6); - - const QSize iconSize(22, 22); - - m_backBtn = new QPushButton(this); - m_backBtn->setIcon(QIcon(":/icons/arrow-left.svg")); - m_backBtn->setIconSize(iconSize); - m_backBtn->setFixedSize(42, 42); - m_backBtn->setEnabled(false); - m_backBtn->setToolTip("Back"); - m_backBtn->setStyleSheet(Style::navButton()); - - m_forwardBtn = new QPushButton(this); - m_forwardBtn->setIcon(QIcon(":/icons/arrow-right.svg")); - m_forwardBtn->setIconSize(iconSize); - m_forwardBtn->setFixedSize(42, 42); - m_forwardBtn->setEnabled(false); - m_forwardBtn->setToolTip("Forward"); - m_forwardBtn->setStyleSheet(Style::navButton()); - - auto* homeBtn = new QPushButton(this); - homeBtn->setIcon(QIcon(":/icons/home.svg")); - homeBtn->setIconSize(iconSize); - homeBtn->setFixedSize(42, 42); - homeBtn->setToolTip("Home"); - homeBtn->setStyleSheet(Style::navButton()); - - auto* titleLabel = new QLabel("LEZ Explorer"); - titleLabel->setStyleSheet(QString("color: %1; font-size: 14px; font-weight: bold; margin-left: 8px;").arg(Style::Color::accent())); - - layout->addWidget(m_backBtn); - layout->addWidget(m_forwardBtn); - layout->addWidget(homeBtn); - layout->addWidget(titleLabel); - layout->addStretch(); - - connect(m_backBtn, &QPushButton::clicked, this, &NavigationBar::backClicked); - connect(m_forwardBtn, &QPushButton::clicked, this, &NavigationBar::forwardClicked); - connect(homeBtn, &QPushButton::clicked, this, &NavigationBar::homeClicked); -} - -void NavigationBar::setBackEnabled(bool enabled) -{ - m_backBtn->setEnabled(enabled); -} - -void NavigationBar::setForwardEnabled(bool enabled) -{ - m_forwardBtn->setEnabled(enabled); -} diff --git a/src/widgets/NavigationBar.h b/src/widgets/NavigationBar.h deleted file mode 100644 index 836efe3..0000000 --- a/src/widgets/NavigationBar.h +++ /dev/null @@ -1,24 +0,0 @@ -#pragma once - -#include - -class QPushButton; - -class NavigationBar : public QWidget { - Q_OBJECT - -public: - explicit NavigationBar(QWidget* parent = nullptr); - - void setBackEnabled(bool enabled); - void setForwardEnabled(bool enabled); - -signals: - void backClicked(); - void forwardClicked(); - void homeClicked(); - -private: - QPushButton* m_backBtn = nullptr; - QPushButton* m_forwardBtn = nullptr; -}; diff --git a/src/widgets/SearchBar.cpp b/src/widgets/SearchBar.cpp deleted file mode 100644 index 3f9aece..0000000 --- a/src/widgets/SearchBar.cpp +++ /dev/null @@ -1,38 +0,0 @@ -#include "SearchBar.h" -#include "Style.h" - -#include -#include -#include - -SearchBar::SearchBar(QWidget* parent) - : QWidget(parent) -{ - auto* layout = new QHBoxLayout(this); - layout->setContentsMargins(0, 4, 0, 4); - layout->setSpacing(8); - - m_input = new QLineEdit(this); - m_input->setPlaceholderText("Search by block ID / block hash / tx hash / account ID..."); - m_input->setMinimumHeight(38); - m_input->setStyleSheet(Style::searchInput()); - - auto* searchBtn = new QPushButton("Search", this); - searchBtn->setMinimumHeight(38); - searchBtn->setStyleSheet(Style::searchButton()); - - layout->addWidget(m_input, 1); - layout->addWidget(searchBtn); - - connect(m_input, &QLineEdit::returnPressed, this, [this]() { - emit searchRequested(m_input->text()); - }); - connect(searchBtn, &QPushButton::clicked, this, [this]() { - emit searchRequested(m_input->text()); - }); -} - -void SearchBar::clear() -{ - m_input->clear(); -} diff --git a/src/widgets/SearchBar.h b/src/widgets/SearchBar.h deleted file mode 100644 index 09a7235..0000000 --- a/src/widgets/SearchBar.h +++ /dev/null @@ -1,20 +0,0 @@ -#pragma once - -#include - -class QLineEdit; - -class SearchBar : public QWidget { - Q_OBJECT - -public: - explicit SearchBar(QWidget* parent = nullptr); - - void clear(); - -signals: - void searchRequested(const QString& query); - -private: - QLineEdit* m_input = nullptr; -}; From 205938088ca437c7c4abc802809ac7ee214a8b90 Mon Sep 17 00:00:00 2001 From: erhant Date: Thu, 18 Jun 2026 18:06:44 +0300 Subject: [PATCH 4/8] chore: add integration test --- README.md | 31 +++++++++++++++++++------------ tests/ui-tests.mjs | 28 ++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 12 deletions(-) create mode 100644 tests/ui-tests.mjs diff --git a/README.md b/README.md index 66e7612..21626a0 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,6 @@ # LEZ Explorer UI -A QML block explorer for the **Logos Execution Zone** (LEZ), packaged as a -`logos-module-builder` **`ui_qml`** module (universal authoring model). The QML -view runs process-isolated in a `ui-host`, backed by a small C++ backend that -reads from the [`lez_indexer_module`](https://github.com/logos-blockchain/logos-execution-zone-indexer-module) -**in-process over the Logos protocol** (Qt Remote Objects) — no WebSocket, no -external RPC socket. +A QML block explorer for the **Logos Execution Zone** (LEZ), packaged as a `logos-module-builder` **`ui_qml`** module (universal authoring model). The QML view runs process-isolated in a `ui-host`, backed by a small C++ backend that reads from the [`lez_indexer_module`](https://github.com/logos-blockchain/logos-execution-zone-indexer-module) **in-process over the Logos protocol** (Qt Remote Objects) — no WebSocket, no external RPC socket. ## Features @@ -28,8 +23,7 @@ external RPC socket. into QVariant for the view, and polls the chain tip for live updates. - `src/qml/` — the view (`Main.qml`, `pages/`, `components/`, `icons/`). -The `*Plugin` / `*Interface` glue is generated by the builder from the `.rep` + -`metadata.json` (`interface: "universal"`). +The `*Plugin` / `*Interface` glue is generated by the builder from the `.rep` + `metadata.json` (`interface: "universal"`). ## Building with Nix @@ -40,10 +34,23 @@ nix run . # preview in logos-standalone-app (spawns the ui-host) nix build .#lgx # bundle as a .lgx for logos-basecamp ``` -Running against live data needs the indexer reachable; enter its -`indexer_config.json` path in the explorer's config field (leave blank if the -indexer is already running). Load the explorer and indexer `.lgx` bundles -together in logos-basecamp for the full experience. +Running against live data needs the indexer reachable; enter its `indexer_config.json` path in the explorer's config field (leave blank if the indexer is already running). Load the explorer and indexer `.lgx` bundles together in logos-basecamp for the full experience. + +## Testing + +`tests/ui-tests.mjs` holds UI smoke tests (auto-detected by `mkLogosQmlModule`): they launch the view, wait for it to come up, and check the home page renders. They don't require a running indexer — with none ingesting, the backend stays in its "Connecting" empty state, which is expected. + +```sh +git add -A # nix only sees tracked files +nix build .#integration-test -L # build + run the tests (logs streamed with -L) +``` + +To iterate interactively against a local, un-pushed indexer branch, add the override used during development: + +```sh +nix build .#integration-test -L \ + --override-input lez_indexer_module path:../logos-execution-zone-indexer-module +``` ## License diff --git a/tests/ui-tests.mjs b/tests/ui-tests.mjs new file mode 100644 index 0000000..4147571 --- /dev/null +++ b/tests/ui-tests.mjs @@ -0,0 +1,28 @@ +import { resolve } from "node:path"; + +// CI sets LOGOS_QT_MCP automatically; for interactive use: +// nix build .#test-framework -o result-mcp +const root = process.env.LOGOS_QT_MCP || new URL("../result-mcp", import.meta.url).pathname; +const { test, run } = await import(resolve(root, "test-framework/framework.mjs")); + +// Smoke tests: the view loads and the home page renders. They do NOT assert a +// live indexer connection — with no indexer ingesting, the backend stays in +// "Connecting" (chain tip is 0), which is the correct empty state. They only +// verify the QML view comes up and the backend is wired (readiness overlay +// clears, revealing the navigation bar + home page). + +test("lez_explorer_ui: loads the view", async (app) => { + await app.waitFor( + async () => { await app.expectTexts(["LEZ Explorer"]); }, + { timeout: 30000, interval: 500, description: "the explorer view to load" } + ); +}); + +test("lez_explorer_ui: renders the home page", async (app) => { + await app.waitFor( + async () => { await app.expectTexts(["Recent Blocks", "Indexer config"]); }, + { timeout: 15000, interval: 500, description: "the home page to render" } + ); +}); + +run(); From e77bf6153c52203186d3ee6e078a04eab00d12a0 Mon Sep 17 00:00:00 2001 From: erhant Date: Thu, 18 Jun 2026 18:15:57 +0300 Subject: [PATCH 5/8] chore: update repo name for indexer module --- README.md | 16 +++++++++------- flake.lock | 4 ++-- flake.nix | 6 +----- 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 21626a0..ce66e39 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # LEZ Explorer UI -A QML block explorer for the **Logos Execution Zone** (LEZ), packaged as a `logos-module-builder` **`ui_qml`** module (universal authoring model). The QML view runs process-isolated in a `ui-host`, backed by a small C++ backend that reads from the [`lez_indexer_module`](https://github.com/logos-blockchain/logos-execution-zone-indexer-module) **in-process over the Logos protocol** (Qt Remote Objects) — no WebSocket, no external RPC socket. +A QML block explorer for the **Logos Execution Zone** (LEZ), packaged as a `logos-module-builder` **`ui_qml`** module (universal authoring model). The QML view runs process-isolated in a `ui-host`, backed by a small C++ backend that reads from the [`lez_indexer_module`](https://github.com/logos-blockchain/lez-indexer-module) **in-process over the Logos protocol** (Qt Remote Objects) — no WebSocket, no external RPC socket. ## Features @@ -45,12 +45,14 @@ git add -A # nix only sees tracked files nix build .#integration-test -L # build + run the tests (logs streamed with -L) ``` -To iterate interactively against a local, un-pushed indexer branch, add the override used during development: - -```sh -nix build .#integration-test -L \ - --override-input lez_indexer_module path:../logos-execution-zone-indexer-module -``` +> [!TIP] +> +> To iterate interactively against a local, un-pushed indexer branch, add the override used during development: +> +> ```sh +> nix build .#integration-test -L \ +> --override-input lez_indexer_module path:../lez-indexer-module +> ``` ## License diff --git a/flake.lock b/flake.lock index c4375e9..214dca6 100644 --- a/flake.lock +++ b/flake.lock @@ -27,12 +27,12 @@ "rev": "7ba107e7f5b46ba871210f28a562863198b9b8a8", "revCount": 36, "type": "git", - "url": "https://github.com/logos-blockchain/logos-execution-zone-indexer-module" + "url": "https://github.com/logos-blockchain/lez-indexer-module" }, "original": { "ref": "erhant/migr-to-logos-module-builder", "type": "git", - "url": "https://github.com/logos-blockchain/logos-execution-zone-indexer-module" + "url": "https://github.com/logos-blockchain/lez-indexer-module" } }, "logos-blockchain-circuits": { diff --git a/flake.nix b/flake.nix index b6cf57b..e5359fe 100644 --- a/flake.nix +++ b/flake.nix @@ -5,14 +5,10 @@ logos-module-builder.url = "github:logos-co/logos-module-builder"; nix-bundle-lgx.url = "github:logos-co/nix-bundle-lgx"; - # The provider it reads from, over the Logos protocol. Input name MUST match - # the metadata.json "dependencies" entry. For local development against an - # un-pushed branch, override with a path: - # lez_indexer_module.url = "path:../logos-execution-zone-indexer-module"; # NOTE: git+https (not github:) because the branch name contains a slash — # the github: fetcher mis-routes slashed refs through the commits API (404). # TODO: repoint to the merge target once this branch lands / goes public. - lez_indexer_module.url = "git+https://github.com/logos-blockchain/logos-execution-zone-indexer-module?ref=erhant/migr-to-logos-module-builder"; + lez_indexer_module.url = "git+https://github.com/logos-blockchain/lez-indexer-module?ref=erhant/migr-to-logos-module-builder"; }; outputs = From ec2ba7791266881646d09f216593784474ee078d Mon Sep 17 00:00:00 2001 From: erhant Date: Thu, 18 Jun 2026 18:31:51 +0300 Subject: [PATCH 6/8] fix: existing ui bugs fixed + polished --- src/qml/Main.qml | 16 +++++++++ src/qml/components/CopyButton.qml | 55 +++++++++++++++++++++++++++++++ src/qml/components/InfoRow.qml | 7 ++++ src/qml/icons/check.svg | 3 ++ src/qml/icons/copy.svg | 4 +++ src/qml/pages/AccountPage.qml | 4 +-- src/qml/pages/BlockPage.qml | 9 +++-- src/qml/pages/TransactionPage.qml | 4 +-- 8 files changed, 96 insertions(+), 6 deletions(-) create mode 100644 src/qml/components/CopyButton.qml create mode 100644 src/qml/icons/check.svg create mode 100644 src/qml/icons/copy.svg diff --git a/src/qml/Main.qml b/src/qml/Main.qml index 1074b7c..11c5800 100644 --- a/src/qml/Main.qml +++ b/src/qml/Main.qml @@ -20,7 +20,23 @@ Rectangle { property int histIndex: -1 // --- Navigation API (pages call these via the injected `explorer`) --- + function sameDescriptor(a, b) { + if (!a || !b) + return false; + if (a.type !== b.type) + return false; + if (a.type === "home") + return true; + if (a.type === "search") + return a.query === b.query; + return a.param === b.param; + } function navigateTo(desc) { + // Navigating to the page we're already on is a no-op — don't grow the + // history (so e.g. Home-while-home doesn't wake the Back button). + var current = root.histIndex >= 0 ? root.history[root.histIndex] : null; + if (root.sameDescriptor(current, desc)) + return; var h = root.history.slice(0, root.histIndex + 1); h.push(desc); root.history = h; diff --git a/src/qml/components/CopyButton.qml b/src/qml/components/CopyButton.qml new file mode 100644 index 0000000..7ba6d66 --- /dev/null +++ b/src/qml/components/CopyButton.qml @@ -0,0 +1,55 @@ +import QtQuick +import Logos.Theme + +// Tiny copy-to-clipboard button. Self-contained: writes `value` to the system +// clipboard via a hidden TextEdit (which runs in the host GUI process, so it +// reaches the real desktop clipboard), then flips to a check mark briefly as +// confirmation. +Item { + id: root + + property string value: "" + property int size: 22 + implicitWidth: size + implicitHeight: size + + // Off-screen helper used purely to push text onto the clipboard. + TextEdit { id: clip; visible: false } + + Rectangle { + anchors.fill: parent + radius: Theme.spacing.radiusSmall + color: hover.hovered ? Theme.palette.backgroundSecondary : "transparent" + + HoverHandler { id: hover } + TapHandler { + onTapped: { + clip.text = root.value; + clip.selectAll(); + clip.copy(); + clip.text = ""; + icon.source = icon.checkUrl; + resetTimer.restart(); + } + } + + Image { + id: icon + anchors.centerIn: parent + property url copyUrl: Qt.resolvedUrl("../icons/copy.svg") + property url checkUrl: Qt.resolvedUrl("../icons/check.svg") + source: copyUrl + sourceSize.width: Math.round(root.size * 0.72) + sourceSize.height: Math.round(root.size * 0.72) + width: Math.round(root.size * 0.72) + height: Math.round(root.size * 0.72) + fillMode: Image.PreserveAspectFit + } + + Timer { + id: resetTimer + interval: 1200 + onTriggered: icon.source = icon.copyUrl + } + } +} diff --git a/src/qml/components/InfoRow.qml b/src/qml/components/InfoRow.qml index 04d4a9f..f6b83f4 100644 --- a/src/qml/components/InfoRow.qml +++ b/src/qml/components/InfoRow.qml @@ -12,6 +12,7 @@ RowLayout { property string label: "" property string value: "" property bool mono: false + property bool copyable: false property color valueColor: Theme.palette.text spacing: Theme.spacing.medium @@ -36,4 +37,10 @@ RowLayout { Layout.fillWidth: true Layout.alignment: Qt.AlignTop } + + CopyButton { + visible: root.copyable && root.value.length > 0 + value: root.value + Layout.alignment: Qt.AlignTop + } } diff --git a/src/qml/icons/check.svg b/src/qml/icons/check.svg new file mode 100644 index 0000000..41ec420 --- /dev/null +++ b/src/qml/icons/check.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/qml/icons/copy.svg b/src/qml/icons/copy.svg new file mode 100644 index 0000000..3f133fb --- /dev/null +++ b/src/qml/icons/copy.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/qml/pages/AccountPage.qml b/src/qml/pages/AccountPage.qml index a597ce5..32a6ff6 100644 --- a/src/qml/pages/AccountPage.qml +++ b/src/qml/pages/AccountPage.qml @@ -49,13 +49,13 @@ Item { Layout.fillWidth: true visible: page.loaded && Object.keys(page.account).length > 1 - InfoRow { label: "Account ID"; value: page.account.accountId || ""; mono: true } + InfoRow { label: "Account ID"; value: page.account.accountId || ""; mono: true; copyable: true } InfoRow { label: "Balance" value: page.account.balance || "0" valueColor: Theme.palette.success } - InfoRow { label: "Program Owner"; value: page.account.programOwner || ""; mono: true } + InfoRow { label: "Program Owner"; value: page.account.programOwner || ""; mono: true; copyable: true } InfoRow { label: "Nonce"; value: page.account.nonce || "0" } InfoRow { label: "Data Size" diff --git a/src/qml/pages/BlockPage.qml b/src/qml/pages/BlockPage.qml index cf55d36..9c37d8d 100644 --- a/src/qml/pages/BlockPage.qml +++ b/src/qml/pages/BlockPage.qml @@ -49,7 +49,7 @@ Item { visible: page.loaded && Object.keys(page.block).length > 0 InfoRow { label: "Block ID"; value: String(page.block.blockId !== undefined ? page.block.blockId : "") } - InfoRow { label: "Hash"; value: page.block.hash || ""; mono: true } + InfoRow { label: "Hash"; value: page.block.hash || ""; mono: true; copyable: true } // Previous hash — a clickable link to the previous block when not genesis. RowLayout { @@ -68,6 +68,11 @@ Item { onTapped: page.explorer.navigateBlock(Number(page.blockId) - 1) } } + CopyButton { + visible: (page.block.prevBlockHash || "").length > 0 + value: page.block.prevBlockHash || "" + Layout.alignment: Qt.AlignTop + } } InfoRow { label: "Timestamp"; value: page.block.timestampText || "" } @@ -80,7 +85,7 @@ Item { Item { Layout.fillWidth: true } } - InfoRow { label: "Signature"; value: page.block.signature || ""; mono: true } + InfoRow { label: "Signature"; value: page.block.signature || ""; mono: true; copyable: true } InfoRow { label: "Transactions"; value: String(page.block.txCount !== undefined ? page.block.txCount : 0) } } diff --git a/src/qml/pages/TransactionPage.qml b/src/qml/pages/TransactionPage.qml index b540a6e..35747ba 100644 --- a/src/qml/pages/TransactionPage.qml +++ b/src/qml/pages/TransactionPage.qml @@ -48,7 +48,7 @@ Item { Layout.fillWidth: true visible: page.loaded && Object.keys(page.tx).length > 0 - InfoRow { label: "Hash"; value: page.tx.hash || ""; mono: true } + InfoRow { label: "Hash"; value: page.tx.hash || ""; mono: true; copyable: true } RowLayout { Layout.fillWidth: true spacing: Theme.spacing.medium @@ -60,7 +60,7 @@ Item { // Public. InfoRow { visible: page.txType === "Public" - label: "Program ID"; value: page.tx.programId || ""; mono: true + label: "Program ID"; value: page.tx.programId || ""; mono: true; copyable: true } InfoRow { visible: page.txType === "Public" From 42d60930100eb56a7da935ee1f896cf8413b9bec Mon Sep 17 00:00:00 2001 From: erhant Date: Thu, 18 Jun 2026 20:19:13 +0300 Subject: [PATCH 7/8] feat: copy buttons and add config editor --- README.md | 3 +- src/lez_explorer_ui.rep | 17 ++- src/lez_explorer_ui_backend.cpp | 134 +++++++++++++++++-- src/lez_explorer_ui_backend.h | 18 ++- src/qml/Main.qml | 4 + src/qml/components/NavigationBar.qml | 6 + src/qml/icons/settings.svg | 4 + src/qml/pages/HomePage.qml | 133 ++++++++----------- src/qml/pages/SettingsPage.qml | 191 +++++++++++++++++++++++++++ tests/ui-tests.mjs | 2 +- 10 files changed, 415 insertions(+), 97 deletions(-) create mode 100644 src/qml/icons/settings.svg create mode 100644 src/qml/pages/SettingsPage.qml diff --git a/README.md b/README.md index ce66e39..baba6d2 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ A QML block explorer for the **Logos Execution Zone** (LEZ), packaged as a `logo - Search by block id, block hash, transaction hash, or account id - Browser-style back/forward navigation - "Load more" pagination for older blocks +- Copy buttons on hashes / ids; in-app **Settings** JSON editor to configure & (re)start the indexer (no file paths; persists across launches) - Styled with the shared `Logos.Theme` / `Logos.Controls` design system ## Architecture @@ -34,7 +35,7 @@ nix run . # preview in logos-standalone-app (spawns the ui-host) nix build .#lgx # bundle as a .lgx for logos-basecamp ``` -Running against live data needs the indexer reachable; enter its `indexer_config.json` path in the explorer's config field (leave blank if the indexer is already running). Load the explorer and indexer `.lgx` bundles together in logos-basecamp for the full experience. +Running against live data: open **Settings** (gear icon, top-right), edit the indexer config JSON (pre-filled with a working template) and press **Save & Start** — the explorer persists the config and (re)starts the indexer from it, so no file paths are involved, and it auto-restarts from the saved config on the next launch. Load the explorer and indexer `.lgx` bundles together in logos-basecamp for the full experience. ## Testing diff --git a/src/lez_explorer_ui.rep b/src/lez_explorer_ui.rep index 79bc24b..dead461 100644 --- a/src/lez_explorer_ui.rep +++ b/src/lez_explorer_ui.rep @@ -15,15 +15,20 @@ class LezExplorerUi PROP(QVariantList recentBlocks READONLY) // Tip block id (from getLastFinalizedBlockId). PROP(qlonglong chainHeight=0 READONLY) - // Absolute path of the indexer config currently in use ("" if none set). - PROP(QString indexerConfig READONLY) // "Connecting" / "Connected" / "Error" — drives the health indicator. PROP(QString connectionStatus READONLY) + // The indexer config JSON currently in effect ("" until one is saved). The + // Settings editor seeds from this (falling back to defaultConfig). + PROP(QString configText READONLY) + // Built-in starter config template (seeded by the backend) for the Settings + // editor's "Reset to default". + PROP(QString defaultConfig READONLY) - // Point the indexer at a config and (re)start ingestion, then refresh the - // feed. port is the indexer RPC port. Returns true on success. A blank - // configPath skips start_indexer (the indexer is assumed already running). - SLOT(bool applyIndexerConfig(QString configPath, QString port)) + // Persist `json` as the indexer config and (re)start ingestion from it, then + // refresh the feed. `port` is the indexer RPC port (blank keeps the current + // one). The backend writes the JSON to a file itself — the UI never deals + // with paths. Returns true on success. + SLOT(bool applyConfigJson(QString json, QString port)) // Reload the latest page into recentBlocks and re-baseline the poller. SLOT(void refreshBlocks()) // Append the next older page of blocks to recentBlocks. diff --git a/src/lez_explorer_ui_backend.cpp b/src/lez_explorer_ui_backend.cpp index 929e2ac..cb02799 100644 --- a/src/lez_explorer_ui_backend.cpp +++ b/src/lez_explorer_ui_backend.cpp @@ -4,11 +4,16 @@ #include #include +#include +#include +#include #include #include #include +#include #include #include +#include #include #include @@ -23,6 +28,31 @@ constexpr int kPollIntervalMs = 2000; // missing block one by one (matches the former LpIndexerService threshold). constexpr quint64 kGapRebuildThreshold = 8; +// Starter config shown in the Settings editor (and its "Reset to default"). +// A working local-dev indexer config; the user edits the fields (bedrock addr, +// channel id, initial accounts/commitments, signing key, ...) and saves. +const char* const kDefaultConfig = R"JSON({ + "home": ".", + "consensus_info_polling_interval": "1s", + "bedrock_config": { + "addr": "http://localhost:8080", + "backoff": { + "start_delay": "100ms", + "max_retries": 5 + } + }, + "channel_id": "0101010101010101010101010101010101010101010101010101010101010101", + "initial_accounts": [ + { "account_id": "CbgR6tj5kWx5oziiFptM7jMvrQeYY3Mzaao6ciuhSr2r", "balance": 10000 }, + { "account_id": "2RHZhw9h534Zr3eq2RGhQete2Hh667foECzXPmSkGni2", "balance": 20000 } + ], + "initial_commitments": [], + "signing_key": [ + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37 + ] +})JSON"; + // 64/128-bit values arrive as decimal strings (to dodge JSON double precision // loss), but be lenient and also accept a JSON number. quint64 jsonU64(const QJsonValue& value) @@ -186,7 +216,10 @@ QVariantMap txJsonToMap(const QString& json) } // namespace -LezExplorerUiBackend::LezExplorerUiBackend() = default; +LezExplorerUiBackend::LezExplorerUiBackend() +{ + setDefaultConfig(QString::fromUtf8(kDefaultConfig)); +} LezExplorerUiBackend::~LezExplorerUiBackend() = default; @@ -194,6 +227,13 @@ void LezExplorerUiBackend::onContextReady() { setConnectionStatus(QStringLiteral("Connecting")); + // Reload + auto-start the previously-saved config, if any (set-once UX). + const QString saved = readConfigFile(); + if (!saved.isEmpty()) { + setConfigText(saved); + startIndexerFromFile(); + } + // The indexer pushes no events — poll the tip for live head updates. m_pollTimer = new QTimer(this); m_pollTimer->setInterval(kPollIntervalMs); @@ -204,29 +244,39 @@ void LezExplorerUiBackend::onContextReady() pollTip(); } -bool LezExplorerUiBackend::applyIndexerConfig(QString configPath, QString port) +bool LezExplorerUiBackend::applyConfigJson(QString json, QString port) { - const QString trimmedConfig = configPath.trimmed(); const QString trimmedPort = port.trimmed(); if (!trimmedPort.isEmpty()) { m_port = trimmedPort; } - setIndexerConfig(trimmedConfig); - bool started = true; - if (!trimmedConfig.isEmpty()) { - const qlonglong code = modules().lez_indexer_module.start_indexer(trimmedConfig, m_port); - started = (code == 0); - if (!started) { - emit error(QStringLiteral("start_indexer failed (code %1) for %2").arg(code).arg(trimmedConfig)); - } + const QString trimmed = json.trimmed(); + if (trimmed.isEmpty()) { + emit error(QStringLiteral("Config is empty.")); + return false; } + // Reject invalid JSON up front so we never start the indexer from garbage. + QJsonParseError parseError; + QJsonDocument::fromJson(trimmed.toUtf8(), &parseError); + if (parseError.error != QJsonParseError::NoError) { + emit error(QStringLiteral("Invalid JSON: %1").arg(parseError.errorString())); + return false; + } + + if (!writeConfigFile(json)) { + emit error(QStringLiteral("Could not write config to %1").arg(configFilePath())); + return false; + } + setConfigText(json); + + const bool ok = startIndexerFromFile(); // Re-baseline the poller; a (re)started indexer may ingest afresh. m_lastPolledTip = 0; m_polledOnce = false; refreshBlocks(); - return started; + return ok; } void LezExplorerUiBackend::refreshBlocks() @@ -436,3 +486,63 @@ QVariantList LezExplorerUiBackend::parseBlockArrayJson(const QString& json) cons } return blocks; } + +namespace { +// The writable path where the edited config JSON is persisted and the indexer +// is started from (so the UI never deals with paths). Same logic, shared by the +// const and non-const accessors. +QString resolveConfigFilePath() +{ + QString dir = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); + if (dir.isEmpty()) { + dir = QDir::tempPath(); + } + return QDir(dir).filePath(QStringLiteral("indexer_config.json")); +} +} // namespace + +QString LezExplorerUiBackend::configFilePath() +{ + if (m_configFilePath.isEmpty()) { + m_configFilePath = resolveConfigFilePath(); + } + return m_configFilePath; +} + +bool LezExplorerUiBackend::writeConfigFile(const QString& json) +{ + const QString path = configFilePath(); + const QDir dir = QFileInfo(path).dir(); + if (!dir.exists() && !dir.mkpath(QStringLiteral("."))) { + return false; + } + QFile file(path); + if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text)) { + return false; + } + const QByteArray bytes = json.toUtf8(); + const bool ok = file.write(bytes) == bytes.size(); + file.close(); + return ok; +} + +QString LezExplorerUiBackend::readConfigFile() const +{ + QFile file(m_configFilePath.isEmpty() ? resolveConfigFilePath() : m_configFilePath); + if (!file.exists() || !file.open(QIODevice::ReadOnly | QIODevice::Text)) { + return {}; + } + const QString content = QString::fromUtf8(file.readAll()); + file.close(); + return content; +} + +bool LezExplorerUiBackend::startIndexerFromFile() +{ + const qlonglong code = modules().lez_indexer_module.start_indexer(configFilePath(), m_port); + if (code != 0) { + emit error(QStringLiteral("start_indexer failed (code %1)").arg(code)); + return false; + } + return true; +} diff --git a/src/lez_explorer_ui_backend.h b/src/lez_explorer_ui_backend.h index 8bf49ec..d056294 100644 --- a/src/lez_explorer_ui_backend.h +++ b/src/lez_explorer_ui_backend.h @@ -23,6 +23,11 @@ class QTimer; * that JSON into QVariantMap / QVariantList (schema preserved from the former * `LpIndexerService`) for the QML view, and runs a 2 s poll on the chain tip to * keep `recentBlocks` / `chainHeight` live (the indexer emits no events). + * + * Config is edited in-app (Settings page) as JSON, not as a path: the indexer's + * `start_indexer` takes a file path, so this class persists the edited JSON to a + * writable file and starts the indexer from there. The last-saved config is + * reloaded and auto-started on the next launch. */ class LezExplorerUiBackend : public LezExplorerUiSimpleSource, public LogosUiPluginContext { public: @@ -30,11 +35,11 @@ public: ~LezExplorerUiBackend() override; // Fires when ui-host wires the plugin's LogosAPI: modules() is live, so we - // start the poll here. + // load any saved config, start it, and start the poll here. void onContextReady() override; // .rep SLOTs. - bool applyIndexerConfig(QString configPath, QString port) override; + bool applyConfigJson(QString json, QString port) override; void refreshBlocks() override; void loadMoreBlocks() override; QVariantMap getBlockById(QString id) override; @@ -52,7 +57,16 @@ private: // Parse a getBlocks(...) JSON array payload into a list of block maps. QVariantList parseBlockArrayJson(const QString& json) const; + // Writable path where the edited config JSON is persisted, and where the + // indexer is started from. Computed once (lazily). + QString configFilePath(); + bool writeConfigFile(const QString& json); + QString readConfigFile() const; + // start_indexer from configFilePath(); returns true on success. + bool startIndexerFromFile(); + QString m_port = QStringLiteral("8779"); + QString m_configFilePath; QVariantList m_recentBlocks; quint64 m_newestLoadedId = 0; // highest block id currently in m_recentBlocks quint64 m_oldestLoadedId = 0; // lowest block id currently in m_recentBlocks diff --git a/src/qml/Main.qml b/src/qml/Main.qml index 11c5800..7001b52 100644 --- a/src/qml/Main.qml +++ b/src/qml/Main.qml @@ -46,6 +46,7 @@ Rectangle { function navigateBlock(id) { root.navigateTo({ type: "block", param: id }); } function navigateTx(hash) { root.navigateTo({ type: "tx", param: hash }); } function navigateAccount(id) { root.navigateTo({ type: "account", param: id }); } + function navigateSettings() { root.navigateTo({ type: "settings" }); } function showSearchResults(results, query) { root.navigateTo({ type: "search", param: results, query: query }); } @@ -72,6 +73,8 @@ Rectangle { url = "pages/SearchResultsPage.qml"; props.results = d.param; props.query = d.query || ""; + } else if (d.type === "settings") { + url = "pages/SettingsPage.qml"; } pageLoader.setSource(Qt.resolvedUrl(url), props); navBar.canGoBack = root.histIndex > 0; @@ -101,6 +104,7 @@ Rectangle { onBackClicked: root.goBack() onForwardClicked: root.goForward() onHomeClicked: root.goHome() + onSettingsClicked: root.navigateSettings() } SearchBar { diff --git a/src/qml/components/NavigationBar.qml b/src/qml/components/NavigationBar.qml index 5f64c11..d587560 100644 --- a/src/qml/components/NavigationBar.qml +++ b/src/qml/components/NavigationBar.qml @@ -12,6 +12,7 @@ RowLayout { signal backClicked() signal forwardClicked() signal homeClicked() + signal settingsClicked() spacing: Theme.spacing.small @@ -40,4 +41,9 @@ RowLayout { } Item { Layout.fillWidth: true } + + IconButton { + source: Qt.resolvedUrl("../icons/settings.svg") + onClicked: root.settingsClicked() + } } diff --git a/src/qml/icons/settings.svg b/src/qml/icons/settings.svg new file mode 100644 index 0000000..12516d8 --- /dev/null +++ b/src/qml/icons/settings.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/qml/pages/HomePage.qml b/src/qml/pages/HomePage.qml index fa39ccb..eeec57e 100644 --- a/src/qml/pages/HomePage.qml +++ b/src/qml/pages/HomePage.qml @@ -11,70 +11,16 @@ Item { // Injected by Main: the controller (navigation + backend access). property var explorer readonly property var backend: explorer ? explorer.backend : null + readonly property bool connected: backend && backend.connectionStatus === "Connected" ColumnLayout { anchors.fill: parent spacing: Theme.spacing.medium - // Indexer config + health. + // Health bar. Card { Layout.fillWidth: true - RowLayout { - Layout.fillWidth: true - spacing: Theme.spacing.medium - - LogosText { - text: "Indexer config" - color: Theme.palette.textSecondary - font.pixelSize: Theme.typography.secondaryText - Layout.alignment: Qt.AlignVCenter - } - - Rectangle { - Layout.fillWidth: true - Layout.preferredHeight: 38 - radius: Theme.spacing.radiusMedium - color: Theme.palette.backgroundSecondary - border.width: 1 - border.color: configField.activeFocus ? Theme.palette.borderInteractive - : Theme.palette.borderSecondary - - TextField { - id: configField - anchors.fill: parent - anchors.leftMargin: Theme.spacing.medium - anchors.rightMargin: Theme.spacing.medium - verticalAlignment: TextInput.AlignVCenter - text: page.backend ? page.backend.indexerConfig : "" - placeholderText: "absolute path to indexer_config.json (blank = already running)" - color: Theme.palette.text - placeholderTextColor: Theme.palette.textMuted - font.pixelSize: Theme.typography.secondaryText - background: Item {} - onAccepted: page.applyConfig() - } - } - - Rectangle { - Layout.preferredHeight: 38 - Layout.preferredWidth: 84 - radius: Theme.spacing.radiusMedium - color: applyHover.hovered ? Qt.lighter(Theme.palette.primary, 1.1) : Theme.palette.primary - - HoverHandler { id: applyHover } - TapHandler { onTapped: page.applyConfig() } - - LogosText { - anchors.centerIn: parent - text: "Apply" - color: Theme.palette.background - font.pixelSize: Theme.typography.secondaryText - font.weight: Theme.typography.weightBold - } - } - } - RowLayout { Layout.fillWidth: true spacing: Theme.spacing.small @@ -84,9 +30,7 @@ Item { height: 9 radius: 4.5 Layout.alignment: Qt.AlignVCenter - color: page.backend && page.backend.connectionStatus === "Connected" - ? Theme.palette.success - : Theme.palette.warning + color: page.connected ? Theme.palette.success : Theme.palette.warning } LogosText { text: { @@ -97,6 +41,28 @@ Item { } color: Theme.palette.textMuted font.pixelSize: Theme.typography.secondaryText + Layout.alignment: Qt.AlignVCenter + } + + Item { Layout.fillWidth: true } + + Rectangle { + Layout.preferredHeight: 34 + Layout.preferredWidth: 100 + radius: Theme.spacing.radiusMedium + color: settingsHover.hovered ? Theme.palette.backgroundSecondary : Theme.palette.backgroundElevated + border.width: 1 + border.color: Theme.palette.borderSecondary + + HoverHandler { id: settingsHover } + TapHandler { onTapped: if (page.explorer) page.explorer.navigateSettings() } + + LogosText { + anchors.centerIn: parent + text: "Settings" + color: Theme.palette.textSecondary + font.pixelSize: Theme.typography.secondaryText + } } } } @@ -147,26 +113,43 @@ Item { } // Empty state. - LogosText { + ColumnLayout { anchors.centerIn: parent visible: blockList.count === 0 width: parent.width * 0.8 - horizontalAlignment: Text.AlignHCenter - wrapMode: Text.WordWrap - text: page.backend && page.backend.connectionStatus === "Connected" - ? "No blocks indexed yet." - : "Waiting for the indexer… set the config path above if it isn't running." - color: Theme.palette.textMuted - font.pixelSize: Theme.typography.secondaryText + spacing: Theme.spacing.medium + + LogosText { + Layout.fillWidth: true + horizontalAlignment: Text.AlignHCenter + wrapMode: Text.WordWrap + text: page.connected + ? "No blocks indexed yet." + : "No indexer running yet. Open Settings to configure and start it." + color: Theme.palette.textMuted + font.pixelSize: Theme.typography.secondaryText + } + + Rectangle { + visible: !page.connected + Layout.alignment: Qt.AlignHCenter + implicitHeight: 38 + implicitWidth: 160 + radius: Theme.spacing.radiusMedium + color: openHover.hovered ? Qt.lighter(Theme.palette.primary, 1.1) : Theme.palette.primary + + HoverHandler { id: openHover } + TapHandler { onTapped: if (page.explorer) page.explorer.navigateSettings() } + + LogosText { + anchors.centerIn: parent + text: "Open Settings" + color: Theme.palette.background + font.pixelSize: Theme.typography.secondaryText + font.weight: Theme.typography.weightBold + } + } } } } - - function applyConfig() { - if (!page.backend) - return; - // Empty port → backend keeps its default (8779). - logos.watch(page.backend.applyIndexerConfig(configField.text, ""), - function (ok) {}, function (err) {}); - } } diff --git a/src/qml/pages/SettingsPage.qml b/src/qml/pages/SettingsPage.qml new file mode 100644 index 0000000..2c54412 --- /dev/null +++ b/src/qml/pages/SettingsPage.qml @@ -0,0 +1,191 @@ +import QtQuick +import QtQuick.Controls +import QtQuick.Layouts +import Logos.Controls +import Logos.Theme +import "../components" + +Item { + id: page + + property var explorer + readonly property var backend: explorer ? explorer.backend : null + property bool statusIsError: false + + Component.onCompleted: { + // Seed the editor with the saved config, falling back to the template. + if (page.backend) { + var current = page.backend.configText; + editor.text = (current && current.length > 0) ? current : page.backend.defaultConfig; + portField.text = "8779"; + } + } + + // Surface backend-side failures (write/start) in the status line. + Connections { + target: page.backend + ignoreUnknownSignals: true + function onError(message) { + page.setStatus(message, true); + } + } + + ColumnLayout { + anchors.fill: parent + spacing: Theme.spacing.medium + + SectionHeader { title: "Indexer Settings" } + + LogosText { + Layout.fillWidth: true + wrapMode: Text.WordWrap + text: "Edit the indexer configuration below and press Save. The config is " + + "persisted and the indexer is (re)started from it — no file paths needed. " + + "It is reloaded automatically the next time you open the explorer." + color: Theme.palette.textSecondary + font.pixelSize: Theme.typography.secondaryText + } + + RowLayout { + Layout.fillWidth: true + spacing: Theme.spacing.medium + + LogosText { + text: "RPC port" + color: Theme.palette.textSecondary + font.pixelSize: Theme.typography.secondaryText + Layout.alignment: Qt.AlignVCenter + } + Rectangle { + Layout.preferredWidth: 120 + Layout.preferredHeight: 36 + radius: Theme.spacing.radiusMedium + color: Theme.palette.backgroundSecondary + border.width: 1 + border.color: portField.activeFocus ? Theme.palette.borderInteractive + : Theme.palette.borderSecondary + TextField { + id: portField + anchors.fill: parent + anchors.leftMargin: Theme.spacing.medium + anchors.rightMargin: Theme.spacing.medium + verticalAlignment: TextInput.AlignVCenter + text: "8779" + inputMethodHints: Qt.ImhDigitsOnly + color: Theme.palette.text + font.pixelSize: Theme.typography.secondaryText + background: Item {} + } + } + Item { Layout.fillWidth: true } + } + + // JSON editor. The TextArea is anchored to fill its container directly + // (NOT wrapped in a ScrollView — there it doesn't inherit the viewport + // size and collapses to an invisible implicit size). It scrolls its + // viewport to follow the cursor; that's enough for a config-sized doc. + Rectangle { + Layout.fillWidth: true + Layout.fillHeight: true + radius: Theme.spacing.radiusLarge + color: Theme.palette.backgroundElevated + border.width: 1 + border.color: editor.activeFocus ? Theme.palette.borderInteractive + : Theme.palette.borderSecondary + clip: true + + TextArea { + id: editor + anchors.fill: parent + anchors.margins: Theme.spacing.medium + font.family: "Menlo, Monaco, Courier New, monospace" + font.pixelSize: Theme.typography.secondaryText + color: Theme.palette.text + wrapMode: TextArea.Wrap + background: Item {} + } + } + + RowLayout { + Layout.fillWidth: true + spacing: Theme.spacing.medium + + LogosText { + id: statusLabel + Layout.fillWidth: true + wrapMode: Text.WordWrap + color: page.statusIsError ? Theme.palette.error : Theme.palette.success + font.pixelSize: Theme.typography.secondaryText + } + + // Reset to the built-in template. + Rectangle { + Layout.preferredHeight: 38 + Layout.preferredWidth: 150 + radius: Theme.spacing.radiusMedium + color: resetHover.hovered ? Theme.palette.backgroundSecondary : Theme.palette.backgroundElevated + border.width: 1 + border.color: Theme.palette.borderSecondary + + HoverHandler { id: resetHover } + TapHandler { onTapped: if (page.backend) { editor.text = page.backend.defaultConfig; page.setStatus("", false); } } + + LogosText { + anchors.centerIn: parent + text: "Reset to default" + color: Theme.palette.textSecondary + font.pixelSize: Theme.typography.secondaryText + } + } + + // Save + (re)start. + Rectangle { + Layout.preferredHeight: 38 + Layout.preferredWidth: 150 + radius: Theme.spacing.radiusMedium + color: saveHover.hovered ? Qt.lighter(Theme.palette.primary, 1.1) : Theme.palette.primary + + HoverHandler { id: saveHover } + TapHandler { onTapped: page.save() } + + LogosText { + anchors.centerIn: parent + text: "Save & Start" + color: Theme.palette.background + font.pixelSize: Theme.typography.secondaryText + font.weight: Theme.typography.weightBold + } + } + } + } + + function setStatus(message, isError) { + page.statusIsError = isError; + statusLabel.text = message; + } + + function save() { + if (!page.backend) + return; + // Validate locally first for an immediate, precise error. + try { + JSON.parse(editor.text); + } catch (e) { + page.setStatus("Invalid JSON: " + e, true); + return; + } + page.setStatus("Saving…", false); + logos.watch(page.backend.applyConfigJson(editor.text, portField.text), + function (ok) { + if (ok) { + page.setStatus("Saved. Indexer starting…", false); + page.explorer.goHome(); + } else { + page.setStatus("Save failed — check the config and try again.", true); + } + }, + function (err) { + page.setStatus("Error: " + err, true); + }); + } +} diff --git a/tests/ui-tests.mjs b/tests/ui-tests.mjs index 4147571..e281c0f 100644 --- a/tests/ui-tests.mjs +++ b/tests/ui-tests.mjs @@ -20,7 +20,7 @@ test("lez_explorer_ui: loads the view", async (app) => { test("lez_explorer_ui: renders the home page", async (app) => { await app.waitFor( - async () => { await app.expectTexts(["Recent Blocks", "Indexer config"]); }, + async () => { await app.expectTexts(["Recent Blocks", "Settings"]); }, { timeout: 15000, interval: 500, description: "the home page to render" } ); }); From 952b174b2e371860c1e911cf029886f07edc07ef Mon Sep 17 00:00:00 2001 From: erhant Date: Thu, 18 Jun 2026 23:34:49 +0300 Subject: [PATCH 8/8] chore: remove port from settings page --- src/qml/pages/SettingsPage.qml | 39 +++------------------------------- 1 file changed, 3 insertions(+), 36 deletions(-) diff --git a/src/qml/pages/SettingsPage.qml b/src/qml/pages/SettingsPage.qml index 2c54412..5f0276c 100644 --- a/src/qml/pages/SettingsPage.qml +++ b/src/qml/pages/SettingsPage.qml @@ -17,7 +17,6 @@ Item { if (page.backend) { var current = page.backend.configText; editor.text = (current && current.length > 0) ? current : page.backend.defaultConfig; - portField.text = "8779"; } } @@ -46,40 +45,6 @@ Item { font.pixelSize: Theme.typography.secondaryText } - RowLayout { - Layout.fillWidth: true - spacing: Theme.spacing.medium - - LogosText { - text: "RPC port" - color: Theme.palette.textSecondary - font.pixelSize: Theme.typography.secondaryText - Layout.alignment: Qt.AlignVCenter - } - Rectangle { - Layout.preferredWidth: 120 - Layout.preferredHeight: 36 - radius: Theme.spacing.radiusMedium - color: Theme.palette.backgroundSecondary - border.width: 1 - border.color: portField.activeFocus ? Theme.palette.borderInteractive - : Theme.palette.borderSecondary - TextField { - id: portField - anchors.fill: parent - anchors.leftMargin: Theme.spacing.medium - anchors.rightMargin: Theme.spacing.medium - verticalAlignment: TextInput.AlignVCenter - text: "8779" - inputMethodHints: Qt.ImhDigitsOnly - color: Theme.palette.text - font.pixelSize: Theme.typography.secondaryText - background: Item {} - } - } - Item { Layout.fillWidth: true } - } - // JSON editor. The TextArea is anchored to fill its container directly // (NOT wrapped in a ScrollView — there it doesn't inherit the viewport // size and collapses to an invisible implicit size). It scrolls its @@ -175,7 +140,9 @@ Item { return; } page.setStatus("Saving…", false); - logos.watch(page.backend.applyConfigJson(editor.text, portField.text), + // Port is an internal detail of the indexer's own RPC listener; the + // explorer reads over the Logos protocol, so we pass "" (keep default). + logos.watch(page.backend.applyConfigJson(editor.text, ""), function (ok) { if (ok) { page.setStatus("Saved. Indexer starting…", false);