update KDE integration documentation and library install
This commit is contained in:
parent
9789eb56ff
commit
c34f4a1b31
|
|
@ -11,7 +11,9 @@ __pycache__/
|
||||||
/Ollie
|
/Ollie
|
||||||
/lsp_definition
|
/lsp_definition
|
||||||
|
|
||||||
# KDE build artifacts
|
# Shared libraries
|
||||||
|
*.so
|
||||||
|
|
||||||
build/
|
build/
|
||||||
build-cmake/
|
build-cmake/
|
||||||
build-kf5/
|
build-kf5/
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,24 @@ if(NOT DEFINED OLLIE_KF5 OR NOT OLLIE_KF5)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Suppress CMP0160 warnings from KF5 cmake files (read-only IMPORTED property)
|
set(OLLIE9P_LIBRARY "${CMAKE_CURRENT_SOURCE_DIR}/lib9p/libollie9p.so")
|
||||||
|
set(OLLIE9P_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/lib9p")
|
||||||
|
if(NOT EXISTS "${OLLIE9P_LIBRARY}")
|
||||||
|
message(FATAL_ERROR
|
||||||
|
"Missing ${OLLIE9P_LIBRARY}. Build it with: "
|
||||||
|
"go build -buildmode=c-shared -o ${OLLIE9P_LIBRARY} ./lib9p")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# The native clients link against the bundled C ABI library. Install it as a
|
||||||
|
# normal runtime library beside the executable, not in the Qt plugin tree.
|
||||||
|
# CMAKE_INSTALL_LIBDIR is relative to the install prefix (normally lib).
|
||||||
|
add_library(ollie9p SHARED IMPORTED GLOBAL)
|
||||||
|
set_target_properties(ollie9p PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${OLLIE9P_LIBRARY}"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${OLLIE9P_INCLUDE_DIR}"
|
||||||
|
)
|
||||||
|
install(FILES "${OLLIE9P_LIBRARY}" DESTINATION "${CMAKE_INSTALL_LIBDIR}")
|
||||||
|
|
||||||
if(OLLIE_KF5)
|
if(OLLIE_KF5)
|
||||||
cmake_policy(SET CMP0160 OLD)
|
cmake_policy(SET CMP0160 OLD)
|
||||||
endif()
|
endif()
|
||||||
|
|
@ -30,6 +47,7 @@ find_package(ECM REQUIRED NO_MODULE)
|
||||||
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH})
|
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH})
|
||||||
|
|
||||||
include(KDEInstallDirs)
|
include(KDEInstallDirs)
|
||||||
|
include(GNUInstallDirs)
|
||||||
include(KDECMakeSettings)
|
include(KDECMakeSettings)
|
||||||
include(KDECompilerSettings NO_POLICY_SCOPE)
|
include(KDECompilerSettings NO_POLICY_SCOPE)
|
||||||
|
|
||||||
|
|
@ -75,7 +93,7 @@ if(OLLIE_KF5)
|
||||||
KF5::SyntaxHighlighting
|
KF5::SyntaxHighlighting
|
||||||
Qt5::Core
|
Qt5::Core
|
||||||
Qt5::Widgets
|
Qt5::Widgets
|
||||||
$ENV{HOME}/.local/lib/libollie9p.so
|
${CMAKE_CURRENT_SOURCE_DIR}/lib9p/libollie9p.so
|
||||||
)
|
)
|
||||||
|
|
||||||
# --- KIO Worker (ollie:// protocol) ---
|
# --- KIO Worker (ollie:// protocol) ---
|
||||||
|
|
@ -93,7 +111,7 @@ if(OLLIE_KF5)
|
||||||
KF5::KIOCore
|
KF5::KIOCore
|
||||||
Qt5::Core
|
Qt5::Core
|
||||||
Qt5::Network
|
Qt5::Network
|
||||||
$ENV{HOME}/.local/lib/libollie9p.so
|
${CMAKE_CURRENT_SOURCE_DIR}/lib9p/libollie9p.so
|
||||||
)
|
)
|
||||||
install(FILES kio/ollie.protocol DESTINATION ${KDE_INSTALL_KSERVICESDIR})
|
install(FILES kio/ollie.protocol DESTINATION ${KDE_INSTALL_KSERVICESDIR})
|
||||||
|
|
||||||
|
|
@ -137,7 +155,7 @@ if(OLLIE_KF5)
|
||||||
Qt5::Network
|
Qt5::Network
|
||||||
KF5::ConfigCore
|
KF5::ConfigCore
|
||||||
KF5::SyntaxHighlighting
|
KF5::SyntaxHighlighting
|
||||||
$ENV{HOME}/.local/lib/libollie9p.so
|
${CMAKE_CURRENT_SOURCE_DIR}/lib9p/libollie9p.so
|
||||||
)
|
)
|
||||||
|
|
||||||
# --- Install ---
|
# --- Install ---
|
||||||
|
|
@ -180,7 +198,7 @@ else()
|
||||||
KF6::SyntaxHighlighting
|
KF6::SyntaxHighlighting
|
||||||
Qt6::Core
|
Qt6::Core
|
||||||
Qt6::Widgets
|
Qt6::Widgets
|
||||||
$ENV{HOME}/.local/lib/libollie9p.so
|
${CMAKE_CURRENT_SOURCE_DIR}/lib9p/libollie9p.so
|
||||||
)
|
)
|
||||||
|
|
||||||
# --- KIO Worker (ollie:// protocol) ---
|
# --- KIO Worker (ollie:// protocol) ---
|
||||||
|
|
@ -198,7 +216,7 @@ else()
|
||||||
KF6::KIOCore
|
KF6::KIOCore
|
||||||
Qt6::Core
|
Qt6::Core
|
||||||
Qt6::Network
|
Qt6::Network
|
||||||
$ENV{HOME}/.local/lib/libollie9p.so
|
${CMAKE_CURRENT_SOURCE_DIR}/lib9p/libollie9p.so
|
||||||
)
|
)
|
||||||
|
|
||||||
# --- GUI App (9P-based, no D-Bus) ---
|
# --- GUI App (9P-based, no D-Bus) ---
|
||||||
|
|
@ -225,7 +243,7 @@ else()
|
||||||
Qt6::Network
|
Qt6::Network
|
||||||
KF6::ConfigCore
|
KF6::ConfigCore
|
||||||
KF6::SyntaxHighlighting
|
KF6::SyntaxHighlighting
|
||||||
$ENV{HOME}/.local/lib/libollie9p.so
|
${CMAKE_CURRENT_SOURCE_DIR}/lib9p/libollie9p.so
|
||||||
)
|
)
|
||||||
qt_add_resources(ollie-gui "gui"
|
qt_add_resources(ollie-gui "gui"
|
||||||
PREFIX "/"
|
PREFIX "/"
|
||||||
|
|
|
||||||
440
kde/README.md
440
kde/README.md
|
|
@ -1,219 +1,221 @@
|
||||||
| `client/` |#| `client/` | | `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |-| `client/` |k| `client/` |d| `client/` |e| `client/` |
|
# ollie-kde
|
||||||
| `client/` |
|
|
||||||
| `client/` |K| `client/` |D| `client/` |E| `client/` |-| `client/` |n| `client/` |a| `client/` |t| `client/` |i| `client/` |v| `client/` |e| `client/` | | `client/` |i| `client/` |n| `client/` |t| `client/` |e| `client/` |g| `client/` |r| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |f| `client/` |o| `client/` |r| `client/` | | `client/` |[| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |]| `client/` |(| `client/` |.| `client/` |.| `client/` |/| `client/` |R| `client/` |E| `client/` |A| `client/` |D| `client/` |M| `client/` |E| `client/` |.| `client/` |m| `client/` |d| `client/` |)| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |t| `client/` |h| `client/` |i| `client/` |n| `client/` | | `client/` |K| `client/` |D| `client/` |E| `client/` | | `client/` |c| `client/` |l| `client/` |i| `client/` |e| `client/` |n| `client/` |t| `client/` |s| `client/` | | `client/` |(| `client/` |G| `client/` |U| `client/` |I| `client/` | | `client/` |a| `client/` |p| `client/` |p| `client/` |l| `client/` |i| `client/` |c| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |,| `client/` | | `client/` |K| `client/` |R| `client/` |u| `client/` |n| `client/` |n| `client/` |e| `client/` |r| `client/` | | `client/` |p| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` |,| `client/` | | `client/` |K| `client/` |a| `client/` |t| `client/` |e| `client/` | | `client/` |p| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` |,| `client/` | | `client/` |D| `client/` |o| `client/` |l| `client/` |p| `client/` |h| `client/` |i| `client/` |n| `client/` | | `client/` |m| `client/` |e| `client/` |n| `client/` |u| `client/` |s| `client/` |)| `client/` | | `client/` |t| `client/` |h| `client/` |a| `client/` |t| `client/` | | `client/` |c| `client/` |o| `client/` |n| `client/` |n| `client/` |e| `client/` |c| `client/` |t| `client/` | | `client/` |t| `client/` |o| `client/` | | `client/` |t| `client/` |h| `client/` |e| `client/` | | `client/` |O| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` | | `client/` |9| `client/` |P| `client/` | | `client/` |f| `client/` |i| `client/` |l| `client/` |e| `client/` |s| `client/` |y| `client/` |s| `client/` |t| `client/` |e| `client/` |m| `client/` | | `client/` |v| `client/` |i| `client/` |a| `client/` | | `client/` |`| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |s| `client/` |r| `client/` |v| `client/` |`| `client/` |.| `client/` |
|
KDE integration for [ollie](../README.md). The directory contains a Qt/QML desktop client, KDE plugins, a KIO worker, and Dolphin service-menu helpers. Components communicate with `olliesrv` through the Ollie 9P namespace.
|
||||||
| `client/` |
|
|
||||||
| `client/` |#| `client/` |#| `client/` | | `client/` |A| `client/` |r| `client/` |c| `client/` |h| `client/` |i| `client/` |t| `client/` |e| `client/` |c| `client/` |t| `client/` |u| `client/` |r| `client/` |e| `client/` |
|
## Architecture
|
||||||
| `client/` |
|
|
||||||
| `client/` |`| `client/` |`| `client/` |`| `client/` |
|
```text
|
||||||
| `client/` |â| `client/` |”| `client/` |Œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |<7C>| `client/` |
|
Plasma / KDE applications
|
||||||
| `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |P| `client/` |l| `client/` |a| `client/` |s| `client/` |m| `client/` |a| `client/` | | `client/` |D| `client/` |e| `client/` |s| `client/` |k| `client/` |t| `client/` |o| `client/` |p| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` |
|
├─ ollie-gui (Qt Quick) ───────┐
|
||||||
| `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` |G| `client/` |U| `client/` |I| `client/` | | `client/` |A| `client/` |p| `client/` |p| `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` |K| `client/` |R| `client/` |u| `client/` |n| `client/` |n| `client/` |e| `client/` |r| `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` |K| `client/` |a| `client/` |t| `client/` |e| `client/` | | `client/` |P| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` |D| `client/` |o| `client/` |l| `client/` |p| `client/` |h| `client/` |i| `client/` |n| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` |
|
├─ KRunner plugin │
|
||||||
| `client/` |â| `client/` |”| `client/` |”| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |¬| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |¬| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |¬| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |˜| `client/` |
|
├─ Kate plugin ├─ Ollie 9P namespace ── olliesrv
|
||||||
| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` |
|
├─ KIO worker (`ollie://`) │ (Unix socket)
|
||||||
| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |Œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |´| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |<7C>| `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` |
|
└─ Dolphin helper scripts ─────┘
|
||||||
| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` |9| `client/` |P| `client/` | | `client/` |c| `client/` |l| `client/` |i| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |t| `client/` |o| `client/` |o| `client/` |l| `client/` |s| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` |
|
```
|
||||||
| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` |l| `client/` |i| `client/` |b| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |9| `client/` |p| `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |-| `client/` |9| `client/` |p| `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` |
|
|
||||||
| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` |p| `client/` |l| `client/` |a| `client/` |n| `client/` |9| `client/` |p| `client/` |o| `client/` |r| `client/` |t| `client/` |'| `client/` |s| `client/` | | `client/` |9| `client/` |p| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` |
|
There are two transport paths:
|
||||||
| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |”| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |¬| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |˜| `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` |
|
|
||||||
| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` |
|
- `ollie-gui`, the Kate plugin, and the KIO worker link to `libollie9p.so` through the shared `gui/lib9pclient` wrapper.
|
||||||
| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |”| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |¼| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |˜| `client/` |
|
- KRunner and the Dolphin scripts invoke a 9P command-line client (`9p` or `ollie-9p`) and address the server at the default Ollie namespace.
|
||||||
| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` |9| `client/` |P| `client/` | | `client/` |p| `client/` |r| `client/` |o| `client/` |t| `client/` |o| `client/` |c| `client/` |o| `client/` |l| `client/` | | `client/` |(| `client/` |U| `client/` |n| `client/` |i| `client/` |x| `client/` | | `client/` |s| `client/` |o| `client/` |c| `client/` |k| `client/` |e| `client/` |t| `client/` |)| `client/` |
|
|
||||||
| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` |
|
The KDE clients do not start `olliesrv`; start the server using the instructions in the repository root before using them.
|
||||||
| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |Œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |´| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |<7C>| `client/` |
|
|
||||||
| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |s| `client/` |r| `client/` |v| `client/` | | `client/` |(| `client/` |.| `client/` |.| `client/` |/| `client/` |9| `client/` |p| `client/` |)| `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` |
|
## Components
|
||||||
| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |9| `client/` |P| `client/` | | `client/` |s| `client/` |e| `client/` |r| `client/` |v| `client/` |e| `client/` |r| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` |
|
|
||||||
| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |G| `client/` |o| `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` |l| `client/` |i| `client/` |b| `client/` |9| `client/` |p| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |‚| `client/` |
|
- **`ollie-gui`** — Qt Quick application for browsing sessions and agents, sending prompts, viewing streamed chat, interrupting or killing agents, and creating, renaming, and configuring sessions and agents. It includes light/dark/system theme handling, font settings, a collapsible session sidebar (`Ctrl+B`), and clipboard support.
|
||||||
| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |”| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |˜| `client/` |
|
- **KRunner plugin (`krunner_ollie.so`)** — Handles queries beginning with `ollie`. It lists sessions, offers session termination, runs one-shot prompts through the `generate` 9P file, and opens `ollie-gui` when a session is selected.
|
||||||
| `client/` |`| `client/` |`| `client/` |`| `client/` |
|
- **Kate plugin (`ollie_kate.so`)** — Adds context actions, agent/session management, status and connection recovery, and ghost-text completion. It deliberately has no chat panel; use `ollie-gui` for the full conversation.
|
||||||
| `client/` |
|
- **KIO worker (`kio_ollie.so`)** — Provides the `ollie://` virtual filesystem. It supports listing, stat, reading, writing, directory creation, deletion, and renaming in the Ollie 9P namespace.
|
||||||
| `client/` |E| `client/` |v| `client/` |e| `client/` |r| `client/` |y| `client/` | | `client/` |K| `client/` |D| `client/` |E| `client/` | | `client/` |c| `client/` |o| `client/` |m| `client/` |p| `client/` |o| `client/` |n| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |t| `client/` |a| `client/` |l| `client/` |k| `client/` |s| `client/` | | `client/` |t| `client/` |o| `client/` | | `client/` |`| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |s| `client/` |r| `client/` |v| `client/` |`| `client/` | | `client/` |v| `client/` |i| `client/` |a| `client/` | | `client/` |9| `client/` |P| `client/` | | `client/` |p| `client/` |r| `client/` |o| `client/` |t| `client/` |o| `client/` |c| `client/` |o| `client/` |l| `client/` | | `client/` |u| `client/` |s| `client/` |i| `client/` |n| `client/` |g| `client/` | | `client/` |o| `client/` |n| `client/` |e| `client/` | | `client/` |o| `client/` |f| `client/` | | `client/` |t| `client/` |h| `client/` |e| `client/` | | `client/` |a| `client/` |v| `client/` |a| `client/` |i| `client/` |l| `client/` |a| `client/` |b| `client/` |l| `client/` |e| `client/` | | `client/` |9| `client/` |P| `client/` | | `client/` |c| `client/` |l| `client/` |i| `client/` |e| `client/` |n| `client/` |t| `client/` |s| `client/` | | `client/` |(| `client/` |`| `client/` |l| `client/` |i| `client/` |b| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |9| `client/` |p| `client/` |.| `client/` |s| `client/` |o| `client/` |`| `client/` | | `client/` |d| `client/` |i| `client/` |r| `client/` |e| `client/` |c| `client/` |t| `client/` |l| `client/` |y| `client/` |,| `client/` | | `client/` |`| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |-| `client/` |9| `client/` |p| `client/` |`| `client/` | | `client/` |s| `client/` |u| `client/` |b| `client/` |p| `client/` |r| `client/` |o| `client/` |c| `client/` |e| `client/` |s| `client/` |s| `client/` |,| `client/` | | `client/` |o| `client/` |r| `client/` | | `client/` |p| `client/` |l| `client/` |a| `client/` |n| `client/` |9| `client/` |p| `client/` |o| `client/` |r| `client/` |t| `client/` |'| `client/` |s| `client/` | | `client/` |`| `client/` |9| `client/` |p| `client/` |`| `client/` |)| `client/` |.| `client/` |
|
- **Dolphin service menus** — `ollie-ask` performs a one-shot `generate` request for a selected file or directory and displays the result; `ollie-session-here` idempotently creates the `default` session and an agent named after the selected directory.
|
||||||
| `client/` |
|
|
||||||
| `client/` |#| `client/` |#| `client/` | | `client/` |C| `client/` |o| `client/` |m| `client/` |p| `client/` |o| `client/` |n| `client/` |e| `client/` |n| `client/` |t| `client/` |s| `client/` |
|
There is no system-tray component.
|
||||||
| `client/` |
|
|
||||||
| `client/` |-| `client/` | | `client/` |*| `client/` |*| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |-| `client/` |g| `client/` |u| `client/` |i| `client/` |*| `client/` |*| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |M| `client/` |a| `client/` |i| `client/` |n| `client/` | | `client/` |Q| `client/` |t| `client/` |/| `client/` |Q| `client/` |M| `client/` |L| `client/` | | `client/` |G| `client/` |U| `client/` |I| `client/` | | `client/` |a| `client/` |p| `client/` |p| `client/` |l| `client/` |i| `client/` |c| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |w| `client/` |i| `client/` |t| `client/` |h| `client/` | | `client/` |s| `client/` |e| `client/` |s| `client/` |s| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |m| `client/` |a| `client/` |n| `client/` |a| `client/` |g| `client/` |e| `client/` |m| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |a| `client/` |n| `client/` |d| `client/` | | `client/` |c| `client/` |h| `client/` |a| `client/` |t| `client/` | | `client/` |i| `client/` |n| `client/` |t| `client/` |e| `client/` |r| `client/` |f| `client/` |a| `client/` |c| `client/` |e| `client/` |
|
## Dependencies
|
||||||
| `client/` |-| `client/` | | `client/` |*| `client/` |*| `client/` |k| `client/` |r| `client/` |u| `client/` |n| `client/` |n| `client/` |e| `client/` |r| `client/` |_| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |.| `client/` |s| `client/` |o| `client/` |*| `client/` |*| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |K| `client/` |R| `client/` |u| `client/` |n| `client/` |n| `client/` |e| `client/` |r| `client/` | | `client/` |p| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` | | `client/` |f| `client/` |o| `client/` |r| `client/` | | `client/` |q| `client/` |u| `client/` |i| `client/` |c| `client/` |k| `client/` | | `client/` |p| `client/` |r| `client/` |o| `client/` |m| `client/` |p| `client/` |t| `client/` |s| `client/` | | `client/` |a| `client/` |n| `client/` |d| `client/` | | `client/` |s| `client/` |e| `client/` |s| `client/` |s| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |m| `client/` |a| `client/` |n| `client/` |a| `client/` |g| `client/` |e| `client/` |m| `client/` |e| `client/` |n| `client/` |t| `client/` |
|
|
||||||
| `client/` |-| `client/` | | `client/` |*| `client/` |*| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |_| `client/` |k| `client/` |a| `client/` |t| `client/` |e| `client/` |.| `client/` |s| `client/` |o| `client/` |*| `client/` |*| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |K| `client/` |a| `client/` |t| `client/` |e| `client/` | | `client/` |p| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` | | `client/` |w| `client/` |i| `client/` |t| `client/` |h| `client/` | | `client/` |c| `client/` |o| `client/` |n| `client/` |t| `client/` |e| `client/` |x| `client/` |t| `client/` | | `client/` |a| `client/` |c| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |s| `client/` | | `client/` |a| `client/` |n| `client/` |d| `client/` | | `client/` |g| `client/` |h| `client/` |o| `client/` |s| `client/` |t| `client/` | | `client/` |t| `client/` |e| `client/` |x| `client/` |t| `client/` | | `client/` |c| `client/` |o| `client/` |m| `client/` |p| `client/` |l| `client/` |e| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |
|
- Qt 6 (Core, Widgets, Quick, QuickControls2, Network), or Qt 5 equivalents when `OLLIE_KF5=ON`
|
||||||
| `client/` |-| `client/` | | `client/` |*| `client/` |*| `client/` |D| `client/` |o| `client/` |l| `client/` |p| `client/` |h| `client/` |i| `client/` |n| `client/` | | `client/` |s| `client/` |e| `client/` |r| `client/` |v| `client/` |i| `client/` |c| `client/` |e| `client/` | | `client/` |m| `client/` |e| `client/` |n| `client/` |u| `client/` |s| `client/` |*| `client/` |*| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |R| `client/` |i| `client/` |g| `client/` |h| `client/` |t| `client/` |-| `client/` |c| `client/` |l| `client/` |i| `client/` |c| `client/` |k| `client/` | | `client/` |a| `client/` |c| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |s| `client/` | | `client/` |f| `client/` |o| `client/` |r| `client/` | | `client/` |f| `client/` |i| `client/` |l| `client/` |e| `client/` |s| `client/` | | `client/` |a| `client/` |n| `client/` |d| `client/` | | `client/` |d| `client/` |i| `client/` |r| `client/` |e| `client/` |c| `client/` |t| `client/` |o| `client/` |r| `client/` |i| `client/` |e| `client/` |s| `client/` |
|
- ECM (Extra CMake Modules)
|
||||||
| `client/` |
|
- KF6/KF5 Runner and CoreAddons for KRunner
|
||||||
| `client/` |*| `client/` |*| `client/` |N| `client/` |o| `client/` |t| `client/` |e| `client/` |*| `client/` |*| `client/` |:| `client/` | | `client/` |N| `client/` |o| `client/` | | `client/` |s| `client/` |y| `client/` |s| `client/` |t| `client/` |e| `client/` |m| `client/` | | `client/` |t| `client/` |r| `client/` |a| `client/` |y| `client/` | | `client/` |c| `client/` |o| `client/` |m| `client/` |p| `client/` |o| `client/` |n| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |e| `client/` |x| `client/` |i| `client/` |s| `client/` |t| `client/` |s| `client/` |.| `client/` |
|
- KF6/KF5 TextEditor and SyntaxHighlighting for Kate
|
||||||
| `client/` |
|
- KF6/KF5 KIO for the `ollie://` worker
|
||||||
| `client/` |#| `client/` |#| `client/` | | `client/` |D| `client/` |e| `client/` |p| `client/` |e| `client/` |n| `client/` |d| `client/` |e| `client/` |n| `client/` |c| `client/` |i| `client/` |e| `client/` |s| `client/` |
|
- `libollie9p.so` and its header from `kde/lib9p/`
|
||||||
| `client/` |
|
- A 9P CLI named `9p` (KRunner) and `ollie-9p` (Dolphin scripts)
|
||||||
| `client/` |-| `client/` | | `client/` |Q| `client/` |t| `client/` | | `client/` |6| `client/` | | `client/` |(| `client/` |C| `client/` |o| `client/` |r| `client/` |e| `client/` |,| `client/` | | `client/` |W| `client/` |i| `client/` |d| `client/` |g| `client/` |e| `client/` |t| `client/` |s| `client/` |,| `client/` | | `client/` |Q| `client/` |u| `client/` |i| `client/` |c| `client/` |k| `client/` |,| `client/` | | `client/` |Q| `client/` |u| `client/` |i| `client/` |c| `client/` |k| `client/` |C| `client/` |o| `client/` |n| `client/` |t| `client/` |r| `client/` |o| `client/` |l| `client/` |s| `client/` |2| `client/` |)| `client/` | | `client/` |o| `client/` |r| `client/` | | `client/` |Q| `client/` |t| `client/` | | `client/` |5| `client/` | | `client/` |(| `client/` |C| `client/` |o| `client/` |r| `client/` |e| `client/` |,| `client/` | | `client/` |W| `client/` |i| `client/` |d| `client/` |g| `client/` |e| `client/` |t| `client/` |s| `client/` |,| `client/` | | `client/` |Q| `client/` |u| `client/` |i| `client/` |c| `client/` |k| `client/` |,| `client/` | | `client/` |Q| `client/` |m| `client/` |l| `client/` |,| `client/` | | `client/` |Q| `client/` |u| `client/` |i| `client/` |c| `client/` |k| `client/` |C| `client/` |o| `client/` |n| `client/` |t| `client/` |r| `client/` |o| `client/` |l| `client/` |s| `client/` |2| `client/` |)| `client/` |
|
|
||||||
| `client/` |-| `client/` | | `client/` |K| `client/` |D| `client/` |E| `client/` | | `client/` |F| `client/` |r| `client/` |a| `client/` |m| `client/` |e| `client/` |w| `client/` |o| `client/` |r| `client/` |k| `client/` |s| `client/` | | `client/` |6| `client/` | | `client/` |(| `client/` |R| `client/` |u| `client/` |n| `client/` |n| `client/` |e| `client/` |r| `client/` |,| `client/` | | `client/` |C| `client/` |o| `client/` |r| `client/` |e| `client/` |A| `client/` |d| `client/` |d| `client/` |o| `client/` |n| `client/` |s| `client/` |,| `client/` | | `client/` |C| `client/` |o| `client/` |n| `client/` |f| `client/` |i| `client/` |g| `client/` |,| `client/` | | `client/` |T| `client/` |e| `client/` |x| `client/` |t| `client/` |E| `client/` |d| `client/` |i| `client/` |t| `client/` |o| `client/` |r| `client/` |,| `client/` | | `client/` |S| `client/` |y| `client/` |n| `client/` |t| `client/` |a| `client/` |x| `client/` |H| `client/` |i| `client/` |g| `client/` |h| `client/` |l| `client/` |i| `client/` |g| `client/` |h| `client/` |t| `client/` |i| `client/` |n| `client/` |g| `client/` |)| `client/` | | `client/` |o| `client/` |r| `client/` | | `client/` |K| `client/` |F| `client/` |5| `client/` | | `client/` |e| `client/` |q| `client/` |u| `client/` |i| `client/` |v| `client/` |a| `client/` |l| `client/` |e| `client/` |n| `client/` |t| `client/` |s| `client/` |
|
KF6/Qt6 is selected by default when KF6 Runner and CoreAddons are available. Set `-DOLLIE_KF5=ON` to force the KF5/Qt5 build.
|
||||||
| `client/` |-| `client/` | | `client/` |E| `client/` |C| `client/` |M| `client/` | | `client/` |(| `client/` |E| `client/` |x| `client/` |t| `client/` |r| `client/` |a| `client/` | | `client/` |C| `client/` |M| `client/` |a| `client/` |k| `client/` |e| `client/` | | `client/` |M| `client/` |o| `client/` |d| `client/` |u| `client/` |l| `client/` |e| `client/` |s| `client/` |)| `client/` |
|
|
||||||
| `client/` |-| `client/` | | `client/` |l| `client/` |i| `client/` |b| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |9| `client/` |p| `client/` |.| `client/` |s| `client/` |o| `client/` | | `client/` |(| `client/` |f| `client/` |r| `client/` |o| `client/` |m| `client/` | | `client/` |`| `client/` |.| `client/` |.| `client/` |/| `client/` |l| `client/` |i| `client/` |b| `client/` |9| `client/` |p| `client/` |/| `client/` |`| `client/` |)| `client/` |
|
## Build
|
||||||
| `client/` |
|
|
||||||
| `client/` |K| `client/` |F| `client/` |6| `client/` |/| `client/` |Q| `client/` |t| `client/` |6| `client/` | | `client/` |i| `client/` |s| `client/` | | `client/` |t| `client/` |h| `client/` |e| `client/` | | `client/` |d| `client/` |e| `client/` |f| `client/` |a| `client/` |u| `client/` |l| `client/` |t| `client/` |.| `client/` | | `client/` |T| `client/` |o| `client/` | | `client/` |b| `client/` |u| `client/` |i| `client/` |l| `client/` |d| `client/` | | `client/` |a| `client/` |g| `client/` |a| `client/` |i| `client/` |n| `client/` |s| `client/` |t| `client/` | | `client/` |K| `client/` |F| `client/` |5| `client/` |/| `client/` |Q| `client/` |t| `client/` |5| `client/` |:| `client/` |
|
The KDE directory is a CMake project. From `kde/`:
|
||||||
| `client/` |`| `client/` |`| `client/` |`| `client/` |s| `client/` |h| `client/` |
|
|
||||||
| `client/` |j| `client/` |u| `client/` |s| `client/` |t| `client/` | | `client/` |k| `client/` |d| `client/` |e| `client/` |-| `client/` |k| `client/` |f| `client/` |5| `client/` |
|
```sh
|
||||||
| `client/` |`| `client/` |`| `client/` |`| `client/` |
|
cmake -S . -B build-cmake
|
||||||
| `client/` |
|
cmake --build build-cmake -j
|
||||||
| `client/` |#| `client/` |#| `client/` | | `client/` |B| `client/` |u| `client/` |i| `client/` |l| `client/` |d| `client/` |
|
```
|
||||||
| `client/` |
|
|
||||||
| `client/` |`| `client/` |`| `client/` |`| `client/` |s| `client/` |h| `client/` |
|
For KF5/Qt5:
|
||||||
| `client/` |j| `client/` |u| `client/` |s| `client/` |t| `client/` | | `client/` |k| `client/` |d| `client/` |e| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |b| `client/` |u| `client/` |i| `client/` |l| `client/` |d| `client/` |s| `client/` | | `client/` |a| `client/` |l| `client/` |l| `client/` | | `client/` |c| `client/` |o| `client/` |m| `client/` |p| `client/` |o| `client/` |n| `client/` |e| `client/` |n| `client/` |t| `client/` |s| `client/` | | `client/` |(| `client/` |K| `client/` |F| `client/` |6| `client/` |)| `client/` |
|
|
||||||
| `client/` |j| `client/` |u| `client/` |s| `client/` |t| `client/` | | `client/` |k| `client/` |d| `client/` |e| `client/` |-| `client/` |k| `client/` |f| `client/` |5| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |b| `client/` |u| `client/` |i| `client/` |l| `client/` |d| `client/` |s| `client/` | | `client/` |a| `client/` |l| `client/` |l| `client/` | | `client/` |c| `client/` |o| `client/` |m| `client/` |p| `client/` |o| `client/` |n| `client/` |e| `client/` |n| `client/` |t| `client/` |s| `client/` | | `client/` |(| `client/` |K| `client/` |F| `client/` |5| `client/` |)| `client/` |
|
```sh
|
||||||
| `client/` |`| `client/` |`| `client/` |`| `client/` |
|
cmake -S . -B build-kf5 -DOLLIE_KF5=ON
|
||||||
| `client/` |
|
cmake --build build-kf5 -j
|
||||||
| `client/` |O| `client/` |u| `client/` |t| `client/` |p| `client/` |u| `client/` |t| `client/` |s| `client/` |:| `client/` |
|
```
|
||||||
| `client/` |-| `client/` | | `client/` |`| `client/` |b| `client/` |u| `client/` |i| `client/` |l| `client/` |d| `client/` |-| `client/` |c| `client/` |m| `client/` |a| `client/` |k| `client/` |e| `client/` |/| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |-| `client/` |g| `client/` |u| `client/` |i| `client/` |`| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |m| `client/` |a| `client/` |i| `client/` |n| `client/` | | `client/` |G| `client/` |U| `client/` |I| `client/` | | `client/` |a| `client/` |p| `client/` |p| `client/` |l| `client/` |i| `client/` |c| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |
|
|
||||||
| `client/` |-| `client/` | | `client/` |`| `client/` |b| `client/` |u| `client/` |i| `client/` |l| `client/` |d| `client/` |-| `client/` |c| `client/` |m| `client/` |a| `client/` |k| `client/` |e| `client/` |/| `client/` |l| `client/` |i| `client/` |b| `client/` |/| `client/` |k| `client/` |f| `client/` |6| `client/` |/| `client/` |k| `client/` |r| `client/` |u| `client/` |n| `client/` |n| `client/` |e| `client/` |r| `client/` |/| `client/` |k| `client/` |r| `client/` |u| `client/` |n| `client/` |n| `client/` |e| `client/` |r| `client/` |_| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |.| `client/` |s| `client/` |o| `client/` |`| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |K| `client/` |R| `client/` |u| `client/` |n| `client/` |n| `client/` |e| `client/` |r| `client/` | | `client/` |p| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` |
|
The build produces:
|
||||||
| `client/` |-| `client/` | | `client/` |`| `client/` |b| `client/` |u| `client/` |i| `client/` |l| `client/` |d| `client/` |-| `client/` |c| `client/` |m| `client/` |a| `client/` |k| `client/` |e| `client/` |/| `client/` |l| `client/` |i| `client/` |b| `client/` |/| `client/` |k| `client/` |f| `client/` |6| `client/` |/| `client/` |k| `client/` |t| `client/` |e| `client/` |x| `client/` |t| `client/` |e| `client/` |d| `client/` |i| `client/` |t| `client/` |o| `client/` |r| `client/` |/| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |_| `client/` |k| `client/` |a| `client/` |t| `client/` |e| `client/` |.| `client/` |s| `client/` |o| `client/` |`| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |K| `client/` |a| `client/` |t| `client/` |e| `client/` | | `client/` |p| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` |
|
|
||||||
| `client/` |
|
- `ollie-gui`
|
||||||
| `client/` |#| `client/` |#| `client/` | | `client/` |I| `client/` |n| `client/` |s| `client/` |t| `client/` |a| `client/` |l| `client/` |l| `client/` |
|
- `lib/kf6/krunner/krunner_ollie.so` and `lib/kf6/ktexteditor/ollie_kate.so` (or `kf5` paths)
|
||||||
| `client/` |
|
- `lib/kf6/kio/kio_ollie.so` (or `kf5` paths)
|
||||||
| `client/` |`| `client/` |`| `client/` |`| `client/` |s| `client/` |h| `client/` |
|
- `libollie9p.so`, installed to `${CMAKE_INSTALL_LIBDIR}` (normally `lib` or `lib64`)
|
||||||
| `client/` |j| `client/` |u| `client/` |s| `client/` |t| `client/` | | `client/` |i| `client/` |n| `client/` |s| `client/` |t| `client/` |a| `client/` |l| `client/` |l| `client/` |-| `client/` |k| `client/` |d| `client/` |e| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |i| `client/` |n| `client/` |s| `client/` |t| `client/` |a| `client/` |l| `client/` |l| `client/` |s| `client/` | | `client/` |a| `client/` |l| `client/` |l| `client/` | | `client/` |K| `client/` |D| `client/` |E| `client/` | | `client/` |c| `client/` |o| `client/` |m| `client/` |p| `client/` |o| `client/` |n| `client/` |e| `client/` |n| `client/` |t| `client/` |s| `client/` | | `client/` |(| `client/` |K| `client/` |F| `client/` |6| `client/` |)| `client/` |
|
|
||||||
| `client/` |j| `client/` |u| `client/` |s| `client/` |t| `client/` | | `client/` |i| `client/` |n| `client/` |s| `client/` |t| `client/` |a| `client/` |l| `client/` |l| `client/` |-| `client/` |k| `client/` |d| `client/` |e| `client/` |-| `client/` |k| `client/` |f| `client/` |5| `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |i| `client/` |n| `client/` |s| `client/` |t| `client/` |a| `client/` |l| `client/` |l| `client/` |s| `client/` | | `client/` |a| `client/` |l| `client/` |l| `client/` | | `client/` |K| `client/` |D| `client/` |E| `client/` | | `client/` |c| `client/` |o| `client/` |m| `client/` |p| `client/` |o| `client/` |n| `client/` |e| `client/` |n| `client/` |t| `client/` |s| `client/` | | `client/` |(| `client/` |K| `client/` |F| `client/` |5| `client/` |)| `client/` |
|
The CMake project installs `ollie-gui` and `libollie9p.so`. The plugins, KIO metadata, desktop files, Dolphin scripts, icon, and Plasma environment files are source-tree assets and must be installed or packaged separately; the `just kde` and `just install-kde` commands described by older documentation are not provided in this repository.
|
||||||
| `client/` |`| `client/` |`| `client/` |`| `client/` |
|
|
||||||
| `client/` |
|
## Install
|
||||||
| `client/` |T| `client/` |h| `client/` |e| `client/` | | `client/` |i| `client/` |n| `client/` |s| `client/` |t| `client/` |a| `client/` |l| `client/` |l| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |:| `client/` |
|
|
||||||
| `client/` |-| `client/` | | `client/` |I| `client/` |n| `client/` |s| `client/` |t| `client/` |a| `client/` |l| `client/` |l| `client/` |s| `client/` | | `client/` |b| `client/` |i| `client/` |n| `client/` |a| `client/` |r| `client/` |i| `client/` |e| `client/` |s| `client/` | | `client/` |t| `client/` |o| `client/` | | `client/` |`| `client/` |~| `client/` |/| `client/` |.| `client/` |l| `client/` |o| `client/` |c| `client/` |a| `client/` |l| `client/` |/| `client/` |b| `client/` |i| `client/` |n| `client/` |/| `client/` |`| `client/` |
|
Choose an install prefix, for example `~/.local`:
|
||||||
| `client/` |-| `client/` | | `client/` |I| `client/` |n| `client/` |s| `client/` |t| `client/` |a| `client/` |l| `client/` |l| `client/` |s| `client/` | | `client/` |p| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` |s| `client/` | | `client/` |t| `client/` |o| `client/` | | `client/` |`| `client/` |~| `client/` |/| `client/` |.| `client/` |l| `client/` |o| `client/` |c| `client/` |a| `client/` |l| `client/` |/| `client/` |l| `client/` |i| `client/` |b| `client/` |6| `client/` |4| `client/` |/| `client/` |q| `client/` |t| `client/` |6| `client/` |/| `client/` |p| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` |s| `client/` |/| `client/` |`| `client/` | | `client/` |(| `client/` |K| `client/` |F| `client/` |6| `client/` |)| `client/` | | `client/` |o| `client/` |r| `client/` | | `client/` |`| `client/` |~| `client/` |/| `client/` |.| `client/` |l| `client/` |o| `client/` |c| `client/` |a| `client/` |l| `client/` |/| `client/` |l| `client/` |i| `client/` |b| `client/` |/| `client/` |q| `client/` |t| `client/` |5| `client/` |/| `client/` |p| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` |s| `client/` |/| `client/` |`| `client/` | | `client/` |(| `client/` |K| `client/` |F| `client/` |5| `client/` |)| `client/` |
|
|
||||||
| `client/` |-| `client/` | | `client/` |I| `client/` |n| `client/` |s| `client/` |t| `client/` |a| `client/` |l| `client/` |l| `client/` |s| `client/` | | `client/` |D| `client/` |o| `client/` |l| `client/` |p| `client/` |h| `client/` |i| `client/` |n| `client/` | | `client/` |s| `client/` |e| `client/` |r| `client/` |v| `client/` |i| `client/` |c| `client/` |e| `client/` | | `client/` |m| `client/` |e| `client/` |n| `client/` |u| `client/` |s| `client/` | | `client/` |t| `client/` |o| `client/` | | `client/` |`| `client/` |~| `client/` |/| `client/` |.| `client/` |l| `client/` |o| `client/` |c| `client/` |a| `client/` |l| `client/` |/| `client/` |s| `client/` |h| `client/` |a| `client/` |r| `client/` |e| `client/` |/| `client/` |k| `client/` |i| `client/` |o| `client/` |/| `client/` |s| `client/` |e| `client/` |r| `client/` |v| `client/` |i| `client/` |c| `client/` |e| `client/` |m| `client/` |e| `client/` |n| `client/` |u| `client/` |s| `client/` |/| `client/` |`| `client/` |
|
```sh
|
||||||
| `client/` |-| `client/` | | `client/` |I| `client/` |n| `client/` |s| `client/` |t| `client/` |a| `client/` |l| `client/` |l| `client/` |s| `client/` | | `client/` |d| `client/` |e| `client/` |s| `client/` |k| `client/` |t| `client/` |o| `client/` |p| `client/` | | `client/` |e| `client/` |n| `client/` |t| `client/` |r| `client/` |y| `client/` | | `client/` |t| `client/` |o| `client/` | | `client/` |`| `client/` |~| `client/` |/| `client/` |.| `client/` |l| `client/` |o| `client/` |c| `client/` |a| `client/` |l| `client/` |/| `client/` |s| `client/` |h| `client/` |a| `client/` |r| `client/` |e| `client/` |/| `client/` |a| `client/` |p| `client/` |p| `client/` |l| `client/` |i| `client/` |c| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |s| `client/` |/| `client/` |`| `client/` |
|
cmake -S . -B build-cmake -DCMAKE_INSTALL_PREFIX="$HOME/.local"
|
||||||
| `client/` |-| `client/` | | `client/` |I| `client/` |n| `client/` |s| `client/` |t| `client/` |a| `client/` |l| `client/` |l| `client/` |s| `client/` | | `client/` |i| `client/` |c| `client/` |o| `client/` |n| `client/` | | `client/` |t| `client/` |o| `client/` | | `client/` |`| `client/` |~| `client/` |/| `client/` |.| `client/` |l| `client/` |o| `client/` |c| `client/` |a| `client/` |l| `client/` |/| `client/` |s| `client/` |h| `client/` |a| `client/` |r| `client/` |e| `client/` |/| `client/` |i| `client/` |c| `client/` |o| `client/` |n| `client/` |s| `client/` |/| `client/` |h| `client/` |i| `client/` |c| `client/` |o| `client/` |l| `client/` |o| `client/` |r| `client/` |/| `client/` |s| `client/` |c| `client/` |a| `client/` |l| `client/` |a| `client/` |b| `client/` |l| `client/` |e| `client/` |/| `client/` |a| `client/` |p| `client/` |p| `client/` |s| `client/` |/| `client/` |`| `client/` |
|
cmake --build build-cmake -j
|
||||||
| `client/` |-| `client/` | | `client/` |S| `client/` |e| `client/` |t| `client/` |s| `client/` | | `client/` |u| `client/` |p| `client/` | | `client/` |e| `client/` |n| `client/` |v| `client/` |i| `client/` |r| `client/` |o| `client/` |n| `client/` |m| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |s| `client/` |c| `client/` |r| `client/` |i| `client/` |p| `client/` |t| `client/` | | `client/` |i| `client/` |n| `client/` | | `client/` |`| `client/` |~| `client/` |/| `client/` |.| `client/` |c| `client/` |o| `client/` |n| `client/` |f| `client/` |i| `client/` |g| `client/` |/| `client/` |p| `client/` |l| `client/` |a| `client/` |s| `client/` |m| `client/` |a| `client/` |-| `client/` |w| `client/` |o| `client/` |r| `client/` |k| `client/` |s| `client/` |p| `client/` |a| `client/` |c| `client/` |e| `client/` |/| `client/` |e| `client/` |n| `client/` |v| `client/` |/| `client/` |`| `client/` |
|
cmake --install build-cmake
|
||||||
| `client/` |
|
```
|
||||||
| `client/` |*| `client/` |*| `client/` |N| `client/` |o| `client/` |t| `client/` |e| `client/` |*| `client/` |*| `client/` |:| `client/` | | `client/` |R| `client/` |e| `client/` |s| `client/` |t| `client/` |a| `client/` |r| `client/` |t| `client/` | | `client/` |P| `client/` |l| `client/` |a| `client/` |s| `client/` |m| `client/` |a| `client/` | | `client/` |(| `client/` |`| `client/` |p| `client/` |l| `client/` |a| `client/` |s| `client/` |m| `client/` |a| `client/` |s| `client/` |h| `client/` |e| `client/` |l| `client/` |l| `client/` | | `client/` |-| `client/` |-| `client/` |r| `client/` |e| `client/` |p| `client/` |l| `client/` |a| `client/` |c| `client/` |e| `client/` |`| `client/` | | `client/` |o| `client/` |r| `client/` | | `client/` |l| `client/` |o| `client/` |g| `client/` | | `client/` |o| `client/` |u| `client/` |t| `client/` |/| `client/` |i| `client/` |n| `client/` |)| `client/` | | `client/` |t| `client/` |o| `client/` | | `client/` |p| `client/` |i| `client/` |c| `client/` |k| `client/` | | `client/` |u| `client/` |p| `client/` | | `client/` |n| `client/` |e| `client/` |w| `client/` | | `client/` |p| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` |s| `client/` |.| `client/` |
|
|
||||||
| `client/` |
|
That installs `ollie-gui` and `libollie9p.so` to the prefix's KDE bindir and `${CMAKE_INSTALL_LIBDIR}`, respectively. To use the other components, install the matching built plugin and source assets into the locations used by your KDE/Qt installation:
|
||||||
| `client/` |#| `client/` |#| `client/` | | `client/` |U| `client/` |s| `client/` |a| `client/` |g| `client/` |e| `client/` |
|
|
||||||
| `client/` |
|
- KRunner: the `kf6/krunner` (or `kf5/krunner`) plugin directory, plus `krunner/metadata.json`
|
||||||
| `client/` |#| `client/` |#| `client/` |#| `client/` | | `client/` |G| `client/` |U| `client/` |I| `client/` | | `client/` |A| `client/` |p| `client/` |p| `client/` |l| `client/` |i| `client/` |c| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |(| `client/` |`| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |-| `client/` |g| `client/` |u| `client/` |i| `client/` |`| `client/` |)| `client/` |
|
- Kate: the `kf6/ktexteditor` (or `kf5/ktexteditor`) plugin directory, plus `kate/metadata.json`
|
||||||
| `client/` |
|
- KIO: the corresponding KIO plugin directory, `kio/ollie.protocol`, and `kio/ollie.json`
|
||||||
| `client/` |L| `client/` |a| `client/` |u| `client/` |n| `client/` |c| `client/` |h| `client/` | | `client/` |f| `client/` |r| `client/` |o| `client/` |m| `client/` | | `client/` |a| `client/` |p| `client/` |p| `client/` |l| `client/` |i| `client/` |c| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |m| `client/` |e| `client/` |n| `client/` |u| `client/` | | `client/` |o| `client/` |r| `client/` | | `client/` |t| `client/` |e| `client/` |r| `client/` |m| `client/` |i| `client/` |n| `client/` |a| `client/` |l| `client/` |:| `client/` |
|
- Dolphin: `dolphin/*.desktop` in `~/.local/share/kio/servicemenus/` and both helper scripts in `~/.local/bin/`
|
||||||
| `client/` |`| `client/` |`| `client/` |`| `client/` |s| `client/` |h| `client/` |
|
- GUI integration: `gui/org.ollie.gui.desktop`, `gui/ollie.svg`, and the appropriate `99-ollie*.sh` environment file
|
||||||
| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |-| `client/` |g| `client/` |u| `client/` |i| `client/` |
|
|
||||||
| `client/` |`| `client/` |`| `client/` |`| `client/` |
|
The exact plugin directories are distribution- and Qt-version-dependent. After installing KDE metadata or plugins, rebuild the relevant service cache (for example `kbuildsycoca6` or `kbuildsycoca5`) and restart the affected KDE application.
|
||||||
| `client/` |
|
|
||||||
| `client/` |F| `client/` |e| `client/` |a| `client/` |t| `client/` |u| `client/` |r| `client/` |e| `client/` |s| `client/` |:| `client/` |
|
## Usage
|
||||||
| `client/` |-| `client/` | | `client/` |S| `client/` |e| `client/` |s| `client/` |s| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |l| `client/` |i| `client/` |s| `client/` |t| `client/` | | `client/` |w| `client/` |i| `client/` |t| `client/` |h| `client/` | | `client/` |s| `client/` |t| `client/` |a| `client/` |t| `client/` |e| `client/` | | `client/` |i| `client/` |n| `client/` |d| `client/` |i| `client/` |c| `client/` |a| `client/` |t| `client/` |o| `client/` |r| `client/` |s| `client/` | | `client/` |(| `client/` |i| `client/` |d| `client/` |l| `client/` |e| `client/` |,| `client/` | | `client/` |t| `client/` |h| `client/` |i| `client/` |n| `client/` |k| `client/` |i| `client/` |n| `client/` |g| `client/` |,| `client/` | | `client/` |t| `client/` |o| `client/` |o| `client/` |l| `client/` | | `client/` |c| `client/` |a| `client/` |l| `client/` |l| `client/` |)| `client/` |
|
|
||||||
| `client/` |-| `client/` | | `client/` |C| `client/` |o| `client/` |l| `client/` |l| `client/` |a| `client/` |p| `client/` |s| `client/` |i| `client/` |b| `client/` |l| `client/` |e| `client/` | | `client/` |s| `client/` |i| `client/` |d| `client/` |e| `client/` |b| `client/` |a| `client/` |r| `client/` | | `client/` |(| `client/` |C| `client/` |t| `client/` |r| `client/` |l| `client/` |+| `client/` |B| `client/` | | `client/` |t| `client/` |o| `client/` | | `client/` |t| `client/` |o| `client/` |g| `client/` |g| `client/` |l| `client/` |e| `client/` |)| `client/` |
|
### GUI Application (`ollie-gui`)
|
||||||
| `client/` |-| `client/` | | `client/` |L| `client/` |i| `client/` |v| `client/` |e| `client/` | | `client/` |c| `client/` |h| `client/` |a| `client/` |t| `client/` | | `client/` |v| `client/` |i| `client/` |e| `client/` |w| `client/` | | `client/` |w| `client/` |i| `client/` |t| `client/` |h| `client/` | | `client/` |a| `client/` |u| `client/` |t| `client/` |o| `client/` |-| `client/` |s| `client/` |c| `client/` |r| `client/` |o| `client/` |l| `client/` |l| `client/` |
|
|
||||||
| `client/` |-| `client/` | | `client/` |I| `client/` |n| `client/` |l| `client/` |i| `client/` |n| `client/` |e| `client/` | | `client/` |p| `client/` |r| `client/` |o| `client/` |m| `client/` |p| `client/` |t| `client/` | | `client/` |i| `client/` |n| `client/` |p| `client/` |u| `client/` |t| `client/` |
|
Launch from application menu or terminal:
|
||||||
| `client/` |-| `client/` | | `client/` |R| `client/` |e| `client/` |a| `client/` |l| `client/` |-| `client/` |t| `client/` |i| `client/` |m| `client/` |e| `client/` | | `client/` |u| `client/` |p| `client/` |d| `client/` |a| `client/` |t| `client/` |e| `client/` |s| `client/` | | `client/` |v| `client/` |i| `client/` |a| `client/` | | `client/` |9| `client/` |P| `client/` | | `client/` |p| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |n| `client/` |g| `client/` |
|
```sh
|
||||||
| `client/` |-| `client/` | | `client/` |T| `client/` |h| `client/` |e| `client/` |m| `client/` |e| `client/` | | `client/` |s| `client/` |u| `client/` |p| `client/` |p| `client/` |o| `client/` |r| `client/` |t| `client/` | | `client/` |(| `client/` |l| `client/` |i| `client/` |g| `client/` |h| `client/` |t| `client/` |/| `client/` |d| `client/` |a| `client/` |r| `client/` |k| `client/` |/| `client/` |s| `client/` |y| `client/` |s| `client/` |t| `client/` |e| `client/` |m| `client/` |)| `client/` |
|
ollie-gui
|
||||||
| `client/` |-| `client/` | | `client/` |F| `client/` |o| `client/` |n| `client/` |t| `client/` | | `client/` |c| `client/` |u| `client/` |s| `client/` |t| `client/` |o| `client/` |m| `client/` |i| `client/` |z| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |
|
```
|
||||||
| `client/` |
|
|
||||||
| `client/` |#| `client/` |#| `client/` |#| `client/` | | `client/` |K| `client/` |R| `client/` |u| `client/` |n| `client/` |n| `client/` |e| `client/` |r| `client/` |
|
Features:
|
||||||
| `client/` |
|
- Session list with state indicators (idle, thinking, tool call)
|
||||||
| `client/` |-| `client/` | | `client/` |`| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` | | `client/` |<| `client/` |p| `client/` |r| `client/` |o| `client/` |m| `client/` |p| `client/` |t| `client/` |>| `client/` |`| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |o| `client/` |n| `client/` |e| `client/` |-| `client/` |s| `client/` |h| `client/` |o| `client/` |t| `client/` | | `client/` |g| `client/` |e| `client/` |n| `client/` |e| `client/` |r| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |v| `client/` |i| `client/` |a| `client/` | | `client/` |`| `client/` |G| `client/` |e| `client/` |n| `client/` |e| `client/` |r| `client/` |a| `client/` |t| `client/` |e| `client/` |`| `client/` | | `client/` |(| `client/` |n| `client/` |o| `client/` | | `client/` |s| `client/` |e| `client/` |s| `client/` |s| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |c| `client/` |r| `client/` |e| `client/` |a| `client/` |t| `client/` |e| `client/` |d| `client/` |)| `client/` |;| `client/` | | `client/` |s| `client/` |h| `client/` |o| `client/` |w| `client/` |s| `client/` | | `client/` |r| `client/` |e| `client/` |s| `client/` |u| `client/` |l| `client/` |t| `client/` | | `client/` |i| `client/` |n| `client/` | | `client/` |a| `client/` | | `client/` |p| `client/` |o| `client/` |p| `client/` |u| `client/` |p| `client/` |
|
- Collapsible sidebar (Ctrl+B to toggle)
|
||||||
| `client/` |-| `client/` | | `client/` |`| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` | | `client/` |l| `client/` |i| `client/` |s| `client/` |t| `client/` |`| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |s| `client/` |h| `client/` |o| `client/` |w| `client/` | | `client/` |a| `client/` |c| `client/` |t| `client/` |i| `client/` |v| `client/` |e| `client/` | | `client/` |s| `client/` |e| `client/` |s| `client/` |s| `client/` |i| `client/` |o| `client/` |n| `client/` |s| `client/` |
|
- Live chat view with auto-scroll
|
||||||
| `client/` |-| `client/` | | `client/` |`| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` | | `client/` |k| `client/` |i| `client/` |l| `client/` |l| `client/` | | `client/` |<| `client/` |i| `client/` |d| `client/` |>| `client/` |`| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |t| `client/` |e| `client/` |r| `client/` |m| `client/` |i| `client/` |n| `client/` |a| `client/` |t| `client/` |e| `client/` | | `client/` |a| `client/` | | `client/` |s| `client/` |e| `client/` |s| `client/` |s| `client/` |i| `client/` |o| `client/` |n| `client/` |
|
- Inline prompt input
|
||||||
| `client/` |
|
- Real-time updates via 9P polling
|
||||||
| `client/` |#| `client/` |#| `client/` |#| `client/` | | `client/` |D| `client/` |o| `client/` |l| `client/` |p| `client/` |h| `client/` |i| `client/` |n| `client/` |
|
- Theme support (light/dark/system)
|
||||||
| `client/` |
|
- Font customization
|
||||||
| `client/` |R| `client/` |i| `client/` |g| `client/` |h| `client/` |t| `client/` |-| `client/` |c| `client/` |l| `client/` |i| `client/` |c| `client/` |k| `client/` | | `client/` |a| `client/` |n| `client/` |y| `client/` | | `client/` |f| `client/` |i| `client/` |l| `client/` |e| `client/` | | `client/` |o| `client/` |r| `client/` | | `client/` |d| `client/` |i| `client/` |r| `client/` |e| `client/` |c| `client/` |t| `client/` |o| `client/` |r| `client/` |y| `client/` |:| `client/` |
|
|
||||||
| `client/` |-| `client/` | | `client/` |*| `client/` |*| `client/` |A| `client/` |s| `client/` |k| `client/` | | `client/` |O| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` | | `client/` |a| `client/` |b| `client/` |o| `client/` |u| `client/` |t| `client/` | | `client/` |t| `client/` |h| `client/` |i| `client/` |s| `client/` |*| `client/` |*| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |o| `client/` |n| `client/` |e| `client/` |-| `client/` |s| `client/` |h| `client/` |o| `client/` |t| `client/` | | `client/` |p| `client/` |r| `client/` |o| `client/` |m| `client/` |p| `client/` |t| `client/` | | `client/` |w| `client/` |i| `client/` |t| `client/` |h| `client/` | | `client/` |f| `client/` |i| `client/` |l| `client/` |e| `client/` | | `client/` |c| `client/` |o| `client/` |n| `client/` |t| `client/` |e| `client/` |x| `client/` |t| `client/` |,| `client/` | | `client/` |s| `client/` |h| `client/` |o| `client/` |w| `client/` |s| `client/` | | `client/` |r| `client/` |e| `client/` |s| `client/` |u| `client/` |l| `client/` |t| `client/` | | `client/` |i| `client/` |n| `client/` | | `client/` |k| `client/` |d| `client/` |i| `client/` |a| `client/` |l| `client/` |o| `client/` |g| `client/` |
|
### KRunner
|
||||||
| `client/` |-| `client/` | | `client/` |*| `client/` |*| `client/` |S| `client/` |t| `client/` |a| `client/` |r| `client/` |t| `client/` | | `client/` |O| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` | | `client/` |s| `client/` |e| `client/` |s| `client/` |s| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |h| `client/` |e| `client/` |r| `client/` |e| `client/` |*| `client/` |*| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |c| `client/` |r| `client/` |e| `client/` |a| `client/` |t| `client/` |e| `client/` |s| `client/` | | `client/` |a| `client/` | | `client/` |p| `client/` |e| `client/` |r| `client/` |s| `client/` |i| `client/` |s| `client/` |t| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |s| `client/` |e| `client/` |s| `client/` |s| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |i| `client/` |n| `client/` | | `client/` |t| `client/` |h| `client/` |a| `client/` |t| `client/` | | `client/` |d| `client/` |i| `client/` |r| `client/` |e| `client/` |c| `client/` |t| `client/` |o| `client/` |r| `client/` |y| `client/` |
|
|
||||||
| `client/` |
|
- `ollie <prompt>` — one-shot generation via `Generate` (no session created); shows result in a popup
|
||||||
| `client/` |#| `client/` |#| `client/` |#| `client/` | | `client/` |K| `client/` |a| `client/` |t| `client/` |e| `client/` |
|
- `ollie list` — show active sessions
|
||||||
| `client/` |
|
- `ollie kill <id>` — terminate a session
|
||||||
| `client/` |E| `client/` |n| `client/` |a| `client/` |b| `client/` |l| `client/` |e| `client/` | | `client/` |t| `client/` |h| `client/` |e| `client/` | | `client/` |"| `client/` |O| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |"| `client/` | | `client/` |p| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` | | `client/` |i| `client/` |n| `client/` | | `client/` |S| `client/` |e| `client/` |t| `client/` |t| `client/` |i| `client/` |n| `client/` |g| `client/` |s| `client/` | | `client/` |â| `client/` |†| `client/` |’| `client/` | | `client/` |C| `client/` |o| `client/` |n| `client/` |f| `client/` |i| `client/` |g| `client/` |u| `client/` |r| `client/` |e| `client/` | | `client/` |K| `client/` |a| `client/` |t| `client/` |e| `client/` | | `client/` |â| `client/` |†| `client/` |’| `client/` | | `client/` |P| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` |s| `client/` |.| `client/` | | `client/` |T| `client/` |h| `client/` |e| `client/` | | `client/` |p| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` | | `client/` |p| `client/` |r| `client/` |o| `client/` |v| `client/` |i| `client/` |d| `client/` |e| `client/` |s| `client/` |:| `client/` |
|
|
||||||
| `client/` |
|
### Dolphin
|
||||||
| `client/` |*| `client/` |*| `client/` |C| `client/` |o| `client/` |n| `client/` |t| `client/` |e| `client/` |x| `client/` |t| `client/` | | `client/` |m| `client/` |e| `client/` |n| `client/` |u| `client/` | | `client/` |a| `client/` |c| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |s| `client/` |*| `client/` |*| `client/` | | `client/` |(| `client/` |r| `client/` |i| `client/` |g| `client/` |h| `client/` |t| `client/` |-| `client/` |c| `client/` |l| `client/` |i| `client/` |c| `client/` |k| `client/` | | `client/` |i| `client/` |n| `client/` | | `client/` |e| `client/` |d| `client/` |i| `client/` |t| `client/` |o| `client/` |r| `client/` |)| `client/` |:| `client/` |
|
|
||||||
| `client/` |-| `client/` | | `client/` |*| `client/` |*| `client/` |A| `client/` |s| `client/` |k| `client/` | | `client/` |a| `client/` |b| `client/` |o| `client/` |u| `client/` |t| `client/` | | `client/` |f| `client/` |i| `client/` |l| `client/` |e| `client/` |*| `client/` |*| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |d| `client/` |e| `client/` |s| `client/` |c| `client/` |r| `client/` |i| `client/` |b| `client/` |e| `client/` | | `client/` |a| `client/` |n| `client/` |d| `client/` | | `client/` |e| `client/` |x| `client/` |p| `client/` |l| `client/` |a| `client/` |i| `client/` |n| `client/` | | `client/` |t| `client/` |h| `client/` |e| `client/` | | `client/` |c| `client/` |u| `client/` |r| `client/` |r| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |f| `client/` |i| `client/` |l| `client/` |e| `client/` |
|
Right-click any file or directory:
|
||||||
| `client/` |-| `client/` | | `client/` |*| `client/` |*| `client/` |E| `client/` |x| `client/` |p| `client/` |l| `client/` |a| `client/` |i| `client/` |n| `client/` | | `client/` |t| `client/` |h| `client/` |i| `client/` |s| `client/` |*| `client/` |*| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |e| `client/` |x| `client/` |p| `client/` |l| `client/` |a| `client/` |i| `client/` |n| `client/` | | `client/` |s| `client/` |e| `client/` |l| `client/` |e| `client/` |c| `client/` |t| `client/` |e| `client/` |d| `client/` | | `client/` |c| `client/` |o| `client/` |d| `client/` |e| `client/` | | `client/` |(| `client/` |o| `client/` |r| `client/` | | `client/` |c| `client/` |u| `client/` |r| `client/` |r| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |l| `client/` |i| `client/` |n| `client/` |e| `client/` |)| `client/` |
|
- **Ask Ollie about this** — one-shot prompt with file context, shows result in kdialog
|
||||||
| `client/` |-| `client/` | | `client/` |*| `client/` |*| `client/` |F| `client/` |i| `client/` |x| `client/` | | `client/` |t| `client/` |h| `client/` |i| `client/` |s| `client/` |*| `client/` |*| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |a| `client/` |s| `client/` |k| `client/` | | `client/` |a| `client/` |g| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |t| `client/` |o| `client/` | | `client/` |f| `client/` |i| `client/` |x| `client/` | | `client/` |s| `client/` |e| `client/` |l| `client/` |e| `client/` |c| `client/` |t| `client/` |e| `client/` |d| `client/` | | `client/` |c| `client/` |o| `client/` |d| `client/` |e| `client/` |
|
- **Start Ollie session here** — creates a persistent session in that directory
|
||||||
| `client/` |-| `client/` | | `client/` |*| `client/` |*| `client/` |R| `client/` |e| `client/` |f| `client/` |a| `client/` |c| `client/` |t| `client/` |o| `client/` |r| `client/` | | `client/` |t| `client/` |h| `client/` |i| `client/` |s| `client/` |*| `client/` |*| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |a| `client/` |s| `client/` |k| `client/` | | `client/` |a| `client/` |g| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |t| `client/` |o| `client/` | | `client/` |r| `client/` |e| `client/` |f| `client/` |a| `client/` |c| `client/` |t| `client/` |o| `client/` |r| `client/` | | `client/` |s| `client/` |e| `client/` |l| `client/` |e| `client/` |c| `client/` |t| `client/` |e| `client/` |d| `client/` | | `client/` |c| `client/` |o| `client/` |d| `client/` |e| `client/` |
|
|
||||||
| `client/` |-| `client/` | | `client/` |*| `client/` |*| `client/` |A| `client/` |d| `client/` |d| `client/` | | `client/` |t| `client/` |e| `client/` |s| `client/` |t| `client/` |s| `client/` | | `client/` |f| `client/` |o| `client/` |r| `client/` | | `client/` |t| `client/` |h| `client/` |i| `client/` |s| `client/` |*| `client/` |*| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |g| `client/` |e| `client/` |n| `client/` |e| `client/` |r| `client/` |a| `client/` |t| `client/` |e| `client/` | | `client/` |u| `client/` |n| `client/` |i| `client/` |t| `client/` | | `client/` |t| `client/` |e| `client/` |s| `client/` |t| `client/` |s| `client/` | | `client/` |f| `client/` |o| `client/` |r| `client/` | | `client/` |s| `client/` |e| `client/` |l| `client/` |e| `client/` |c| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |
|
### Kate
|
||||||
| `client/` |-| `client/` | | `client/` |*| `client/` |*| `client/` |D| `client/` |o| `client/` |c| `client/` |u| `client/` |m| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |t| `client/` |h| `client/` |i| `client/` |s| `client/` |*| `client/` |*| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |a| `client/` |d| `client/` |d| `client/` | | `client/` |d| `client/` |o| `client/` |c| `client/` |u| `client/` |m| `client/` |e| `client/` |n| `client/` |t| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |c| `client/` |o| `client/` |m| `client/` |m| `client/` |e| `client/` |n| `client/` |t| `client/` |s| `client/` | | `client/` |t| `client/` |o| `client/` | | `client/` |s| `client/` |e| `client/` |l| `client/` |e| `client/` |c| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |
|
|
||||||
| `client/` |-| `client/` | | `client/` |*| `client/` |*| `client/` |S| `client/` |e| `client/` |n| `client/` |d| `client/` | | `client/` |v| `client/` |e| `client/` |r| `client/` |b| `client/` |a| `client/` |t| `client/` |i| `client/` |m| `client/` |*| `client/` |*| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |s| `client/` |e| `client/` |n| `client/` |d| `client/` | | `client/` |s| `client/` |e| `client/` |l| `client/` |e| `client/` |c| `client/` |t| `client/` |e| `client/` |d| `client/` | | `client/` |t| `client/` |e| `client/` |x| `client/` |t| `client/` | | `client/` |w| `client/` |r| `client/` |a| `client/` |p| `client/` |p| `client/` |e| `client/` |d| `client/` | | `client/` |i| `client/` |n| `client/` | | `client/` |a| `client/` | | `client/` |c| `client/` |o| `client/` |d| `client/` |e| `client/` | | `client/` |f| `client/` |e| `client/` |n| `client/` |c| `client/` |e| `client/` | | `client/` |(| `client/` |l| `client/` |a| `client/` |n| `client/` |g| `client/` |u| `client/` |a| `client/` |g| `client/` |e| `client/` | | `client/` |a| `client/` |u| `client/` |t| `client/` |o| `client/` |-| `client/` |d| `client/` |e| `client/` |t| `client/` |e| `client/` |c| `client/` |t| `client/` |e| `client/` |d| `client/` |)| `client/` |
|
Enable the "Ollie" plugin in Settings → Configure Kate → Plugins. The plugin provides:
|
||||||
| `client/` |-| `client/` | | `client/` |*| `client/` |*| `client/` |R| `client/` |e| `client/` |v| `client/` |i| `client/` |e| `client/` |w| `client/` | | `client/` |D| `client/` |i| `client/` |f| `client/` |f| `client/` |*| `client/` |*| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |r| `client/` |e| `client/` |v| `client/` |i| `client/` |e| `client/` |w| `client/` | | `client/` |a| `client/` | | `client/` |d| `client/` |i| `client/` |f| `client/` |f| `client/` | | `client/` |f| `client/` |o| `client/` |r| `client/` | | `client/` |i| `client/` |s| `client/` |s| `client/` |u| `client/` |e| `client/` |s| `client/` | | `client/` |(| `client/` |v| `client/` |i| `client/` |s| `client/` |i| `client/` |b| `client/` |l| `client/` |e| `client/` | | `client/` |o| `client/` |n| `client/` | | `client/` |D| `client/` |i| `client/` |f| `client/` |f| `client/` |-| `client/` |h| `client/` |i| `client/` |g| `client/` |h| `client/` |l| `client/` |i| `client/` |g| `client/` |h| `client/` |t| `client/` |e| `client/` |d| `client/` | | `client/` |d| `client/` |o| `client/` |c| `client/` |u| `client/` |m| `client/` |e| `client/` |n| `client/` |t| `client/` |s| `client/` |)| `client/` |
|
|
||||||
| `client/` |
|
**Context menu actions** (right-click in editor):
|
||||||
| `client/` |*| `client/` |*| `client/` |G| `client/` |h| `client/` |o| `client/` |s| `client/` |t| `client/` | | `client/` |t| `client/` |e| `client/` |x| `client/` |t| `client/` | | `client/` |c| `client/` |o| `client/` |m| `client/` |p| `client/` |l| `client/` |e| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |:| `client/` |*| `client/` |*| `client/` |
|
- **Ask about file** — describe and explain the current file
|
||||||
| `client/` |-| `client/` | | `client/` |I| `client/` |n| `client/` |l| `client/` |i| `client/` |n| `client/` |e| `client/` | | `client/` |A| `client/` |I| `client/` | | `client/` |c| `client/` |o| `client/` |d| `client/` |e| `client/` | | `client/` |c| `client/` |o| `client/` |m| `client/` |p| `client/` |l| `client/` |e| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |s| `client/` | | `client/` |a| `client/` |p| `client/` |p| `client/` |e| `client/` |a| `client/` |r| `client/` | | `client/` |a| `client/` |s| `client/` | | `client/` |f| `client/` |a| `client/` |d| `client/` |e| `client/` |d| `client/` | | `client/` |t| `client/` |e| `client/` |x| `client/` |t| `client/` | | `client/` |a| `client/` |t| `client/` | | `client/` |e| `client/` |n| `client/` |d| `client/` |-| `client/` |o| `client/` |f| `client/` |-| `client/` |l| `client/` |i| `client/` |n| `client/` |e| `client/` |
|
- **Explain this** — explain selected code (or current line)
|
||||||
| `client/` |-| `client/` | | `client/` |T| `client/` |r| `client/` |i| `client/` |g| `client/` |g| `client/` |e| `client/` |r| `client/` |e| `client/` |d| `client/` | | `client/` |a| `client/` |u| `client/` |t| `client/` |o| `client/` |m| `client/` |a| `client/` |t| `client/` |i| `client/` |c| `client/` |a| `client/` |l| `client/` |l| `client/` |y| `client/` | | `client/` |a| `client/` |f| `client/` |t| `client/` |e| `client/` |r| `client/` | | `client/` |5| `client/` |0| `client/` |0| `client/` |m| `client/` |s| `client/` | | `client/` |o| `client/` |f| `client/` | | `client/` |c| `client/` |u| `client/` |r| `client/` |s| `client/` |o| `client/` |r| `client/` | | `client/` |i| `client/` |d| `client/` |l| `client/` |e| `client/` | | `client/` |(| `client/` |a| `client/` |t| `client/` | | `client/` |e| `client/` |n| `client/` |d| `client/` |-| `client/` |o| `client/` |f| `client/` |-| `client/` |l| `client/` |i| `client/` |n| `client/` |e| `client/` | | `client/` |o| `client/` |n| `client/` |l| `client/` |y| `client/` |)| `client/` |
|
- **Fix this** — ask agent to fix selected code
|
||||||
| `client/` |-| `client/` | | `client/` |M| `client/` |u| `client/` |l| `client/` |t| `client/` |i| `client/` |-| `client/` |l| `client/` |i| `client/` |n| `client/` |e| `client/` | | `client/` |c| `client/` |o| `client/` |n| `client/` |t| `client/` |i| `client/` |n| `client/` |u| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |s| `client/` | | `client/` |s| `client/` |h| `client/` |o| `client/` |w| `client/` |n| `client/` | | `client/` |w| `client/` |h| `client/` |e| `client/` |n| `client/` | | `client/` |n| `client/` |e| `client/` |a| `client/` |r| `client/` | | `client/` |E| `client/` |O| `client/` |F| `client/` |
|
- **Refactor this** — ask agent to refactor selected code
|
||||||
| `client/` |
|
- **Add tests for this** — generate unit tests for selection
|
||||||
| `client/` |*| `client/` |*| `client/` |K| `client/` |e| `client/` |y| `client/` |b| `client/` |o| `client/` |a| `client/` |r| `client/` |d| `client/` | | `client/` |s| `client/` |h| `client/` |o| `client/` |r| `client/` |t| `client/` |c| `client/` |u| `client/` |t| `client/` |s| `client/` |:| `client/` |*| `client/` |*| `client/` |
|
- **Document this** — add documentation comments to selection
|
||||||
| `client/` |
|
- **Send verbatim** — send selected text wrapped in a code fence (language auto-detected)
|
||||||
| `client/` ||| `client/` | | `client/` |K| `client/` |e| `client/` |y| `client/` | | `client/` ||| `client/` | | `client/` |A| `client/` |c| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` ||| `client/` |
|
- **Review Diff** — review a diff for issues (visible on Diff-highlighted documents)
|
||||||
| `client/` ||| `client/` |-| `client/` |-| `client/` |-| `client/` |-| `client/` |-| `client/` ||| `client/` |-| `client/` |-| `client/` |-| `client/` |-| `client/` |-| `client/` |-| `client/` |-| `client/` |-| `client/` ||| `client/` |
|
|
||||||
| `client/` ||| `client/` | | `client/` |T| `client/` |a| `client/` |b| `client/` | | `client/` ||| `client/` | | `client/` |A| `client/` |c| `client/` |c| `client/` |e| `client/` |p| `client/` |t| `client/` | | `client/` |g| `client/` |h| `client/` |o| `client/` |s| `client/` |t| `client/` | | `client/` |s| `client/` |u| `client/` |g| `client/` |g| `client/` |e| `client/` |s| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` ||| `client/` |
|
- **Inline completion:** Ghost text is requested automatically after 500 ms of idle time at the end of a line. Suggestions can be accepted, cycled, dismissed, toggled, or requested manually with the shortcuts below. The completion implementation uses the configured Ollie completion backend; the current plugin source does not expose `OLLIE_COMPLETE_BACKEND` or `OLLIE_COMPLETE_MODEL` environment variables.
|
||||||
| `client/` ||| `client/` | | `client/` |M| `client/` |e| `client/` |t| `client/` |a| `client/` |+| `client/` |O| `client/` |,| `client/` | | `client/` |N| `client/` | | `client/` ||| `client/` | | `client/` |N| `client/` |e| `client/` |x| `client/` |t| `client/` | | `client/` |s| `client/` |u| `client/` |g| `client/` |g| `client/` |e| `client/` |s| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` ||| `client/` |
|
|
||||||
| `client/` ||| `client/` | | `client/` |M| `client/` |e| `client/` |t| `client/` |a| `client/` |+| `client/` |O| `client/` |,| `client/` | | `client/` |P| `client/` | | `client/` ||| `client/` | | `client/` |P| `client/` |r| `client/` |e| `client/` |v| `client/` |i| `client/` |o| `client/` |u| `client/` |s| `client/` | | `client/` |s| `client/` |u| `client/` |g| `client/` |g| `client/` |e| `client/` |s| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` ||| `client/` |
|
**Keyboard shortcuts:**
|
||||||
| `client/` ||| `client/` | | `client/` |M| `client/` |e| `client/` |t| `client/` |a| `client/` |+| `client/` |O| `client/` |,| `client/` | | `client/` |C| `client/` | | `client/` ||| `client/` | | `client/` |T| `client/` |o| `client/` |g| `client/` |g| `client/` |l| `client/` |e| `client/` | | `client/` |c| `client/` |o| `client/` |m| `client/` |p| `client/` |l| `client/` |e| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |o| `client/` |n| `client/` |/| `client/` |o| `client/` |f| `client/` |f| `client/` | | `client/` ||| `client/` |
|
|
||||||
| `client/` ||| `client/` | | `client/` |M| `client/` |e| `client/` |t| `client/` |a| `client/` |+| `client/` |O| `client/` |,| `client/` | | `client/` |D| `client/` | | `client/` ||| `client/` | | `client/` |D| `client/` |i| `client/` |s| `client/` |m| `client/` |i| `client/` |s| `client/` |s| `client/` | | `client/` |s| `client/` |u| `client/` |g| `client/` |g| `client/` |e| `client/` |s| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` ||| `client/` |
|
| Key | Action |
|
||||||
| `client/` ||| `client/` | | `client/` |M| `client/` |e| `client/` |t| `client/` |a| `client/` |+| `client/` |O| `client/` |,| `client/` | | `client/` |T| `client/` |a| `client/` |b| `client/` | | `client/` ||| `client/` | | `client/` |R| `client/` |e| `client/` |q| `client/` |u| `client/` |e| `client/` |s| `client/` |t| `client/` | | `client/` |c| `client/` |o| `client/` |m| `client/` |p| `client/` |l| `client/` |e| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |m| `client/` |a| `client/` |n| `client/` |u| `client/` |a| `client/` |l| `client/` |l| `client/` |y| `client/` | | `client/` ||| `client/` |
|
|-----|--------|
|
||||||
| `client/` |
|
| Tab | Accept ghost suggestion |
|
||||||
| `client/` |*| `client/` |*| `client/` |A| `client/` |g| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |m| `client/` |a| `client/` |n| `client/` |a| `client/` |g| `client/` |e| `client/` |m| `client/` |e| `client/` |n| `client/` |t| `client/` |:| `client/` |*| `client/` |*| `client/` |
|
| Meta+O, N | Next suggestion |
|
||||||
| `client/` |-| `client/` | | `client/` |A| `client/` |u| `client/` |t| `client/` |o| `client/` |-| `client/` |c| `client/` |r| `client/` |e| `client/` |a| `client/` |t| `client/` |e| `client/` |s| `client/` | | `client/` |a| `client/` | | `client/` |"| `client/` |k| `client/` |a| `client/` |t| `client/` |e| `client/` |"| `client/` | | `client/` |s| `client/` |e| `client/` |s| `client/` |s| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |w| `client/` |i| `client/` |t| `client/` |h| `client/` | | `client/` |o| `client/` |n| `client/` |e| `client/` | | `client/` |a| `client/` |g| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |p| `client/` |e| `client/` |r| `client/` | | `client/` |p| `client/` |r| `client/` |o| `client/` |j| `client/` |e| `client/` |c| `client/` |t| `client/` | | `client/` |d| `client/` |i| `client/` |r| `client/` |e| `client/` |c| `client/` |t| `client/` |o| `client/` |r| `client/` |y| `client/` |
|
| Meta+O, P | Previous suggestion |
|
||||||
| `client/` |-| `client/` | | `client/` |A| `client/` |u| `client/` |t| `client/` |o| `client/` |-| `client/` |s| `client/` |e| `client/` |l| `client/` |e| `client/` |c| `client/` |t| `client/` |s| `client/` | | `client/` |a| `client/` |g| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |m| `client/` |a| `client/` |t| `client/` |c| `client/` |h| `client/` |i| `client/` |n| `client/` |g| `client/` | | `client/` |t| `client/` |h| `client/` |e| `client/` | | `client/` |c| `client/` |u| `client/` |r| `client/` |r| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |K| `client/` |a| `client/` |t| `client/` |e| `client/` | | `client/` |p| `client/` |r| `client/` |o| `client/` |j| `client/` |e| `client/` |c| `client/` |t| `client/` |
|
| Meta+O, C | Toggle completion on/off |
|
||||||
| `client/` |-| `client/` | | `client/` |C| `client/` |o| `client/` |n| `client/` |n| `client/` |e| `client/` |c| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |h| `client/` |e| `client/` |a| `client/` |l| `client/` |t| `client/` |h| `client/` | | `client/` |m| `client/` |o| `client/` |n| `client/` |i| `client/` |t| `client/` |o| `client/` |r| `client/` |i| `client/` |n| `client/` |g| `client/` | | `client/` |w| `client/` |i| `client/` |t| `client/` |h| `client/` | | `client/` |a| `client/` |u| `client/` |t| `client/` |o| `client/` |-| `client/` |r| `client/` |e| `client/` |c| `client/` |o| `client/` |n| `client/` |n| `client/` |e| `client/` |c| `client/` |t| `client/` | | `client/` |(| `client/` |5| `client/` |s| `client/` | | `client/` |h| `client/` |e| `client/` |a| `client/` |r| `client/` |t| `client/` |b| `client/` |e| `client/` |a| `client/` |t| `client/` |)| `client/` |
|
| Meta+O, D | Dismiss suggestion |
|
||||||
| `client/` |-| `client/` | | `client/` |S| `client/` |t| `client/` |a| `client/` |t| `client/` |u| `client/` |s| `client/` | | `client/` |b| `client/` |a| `client/` |r| `client/` | | `client/` |s| `client/` |h| `client/` |o| `client/` |w| `client/` |s| `client/` | | `client/` |s| `client/` |t| `client/` |a| `client/` |t| `client/` |e| `client/` |:| `client/` |
|
| Meta+O, Tab | Request completion manually |
|
||||||
| `client/` | | `client/` | | `client/` |-| `client/` | | `client/` |R| `client/` |e| `client/` |d| `client/` | | `client/` |`| `client/` |â| `client/` |œ| `client/` |—| `client/` | | `client/` |d| `client/` |i| `client/` |s| `client/` |c| `client/` |o| `client/` |n| `client/` |n| `client/` |e| `client/` |c| `client/` |t| `client/` |e| `client/` |d| `client/` |`| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |s| `client/` |e| `client/` |r| `client/` |v| `client/` |e| `client/` |r| `client/` | | `client/` |u| `client/` |n| `client/` |r| `client/` |e| `client/` |a| `client/` |c| `client/` |h| `client/` |a| `client/` |b| `client/` |l| `client/` |e| `client/` |
|
|
||||||
| `client/` | | `client/` | | `client/` |-| `client/` | | `client/` |G| `client/` |r| `client/` |a| `client/` |y| `client/` | | `client/` |`| `client/` |â| `client/` |—| `client/` |‹| `client/` | | `client/` |n| `client/` |o| `client/` | | `client/` |a| `client/` |g| `client/` |e| `client/` |n| `client/` |t| `client/` |`| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |c| `client/` |o| `client/` |n| `client/` |n| `client/` |e| `client/` |c| `client/` |t| `client/` |e| `client/` |d| `client/` |,| `client/` | | `client/` |n| `client/` |o| `client/` | | `client/` |a| `client/` |g| `client/` |e| `client/` |n| `client/` |t| `client/` |
|
**Agent management:**
|
||||||
| `client/` | | `client/` | | `client/` |-| `client/` | | `client/` |G| `client/` |r| `client/` |e| `client/` |e| `client/` |n| `client/` | | `client/` |`| `client/` |â| `client/` |—| `client/` |<7C>| `client/` | | `client/` |k| `client/` |a| `client/` |t| `client/` |e| `client/` |/| `client/` |I| `client/` |D| `client/` |`| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |c| `client/` |o| `client/` |n| `client/` |n| `client/` |e| `client/` |c| `client/` |t| `client/` |e| `client/` |d| `client/` | | `client/` |w| `client/` |i| `client/` |t| `client/` |h| `client/` | | `client/` |a| `client/` |c| `client/` |t| `client/` |i| `client/` |v| `client/` |e| `client/` | | `client/` |a| `client/` |g| `client/` |e| `client/` |n| `client/` |t| `client/` |
|
- Auto-creates a "kate" session with one agent per project directory
|
||||||
| `client/` |
|
- Auto-selects agent matching the current Kate project
|
||||||
| `client/` |*| `client/` |*| `client/` |C| `client/` |o| `client/` |n| `client/` |f| `client/` |i| `client/` |g| `client/` |u| `client/` |r| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |*| `client/` |*| `client/` | | `client/` |(| `client/` |v| `client/` |i| `client/` |a| `client/` | | `client/` |e| `client/` |n| `client/` |v| `client/` |i| `client/` |r| `client/` |o| `client/` |n| `client/` |m| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |v| `client/` |a| `client/` |r| `client/` |i| `client/` |a| `client/` |b| `client/` |l| `client/` |e| `client/` |s| `client/` |)| `client/` |:| `client/` |
|
- Connection health monitoring with auto-reconnect (5s heartbeat)
|
||||||
| `client/` |-| `client/` | | `client/` |`| `client/` |O| `client/` |L| `client/` |L| `client/` |I| `client/` |E| `client/` |_| `client/` |C| `client/` |O| `client/` |M| `client/` |P| `client/` |L| `client/` |E| `client/` |T| `client/` |E| `client/` |_| `client/` |B| `client/` |A| `client/` |C| `client/` |K| `client/` |E| `client/` |N| `client/` |D| `client/` |`| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |c| `client/` |o| `client/` |m| `client/` |p| `client/` |l| `client/` |e| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |b| `client/` |a| `client/` |c| `client/` |k| `client/` |e| `client/` |n| `client/` |d| `client/` | | `client/` |o| `client/` |v| `client/` |e| `client/` |r| `client/` |r| `client/` |i| `client/` |d| `client/` |e| `client/` |
|
- Status bar shows state:
|
||||||
| `client/` |-| `client/` | | `client/` |`| `client/` |O| `client/` |L| `client/` |L| `client/` |I| `client/` |E| `client/` |_| `client/` |C| `client/` |O| `client/` |M| `client/` |P| `client/` |L| `client/` |E| `client/` |T| `client/` |E| `client/` |_| `client/` |M| `client/` |O| `client/` |D| `client/` |E| `client/` |L| `client/` |`| `client/` | | `client/` |â| `client/` |€| `client/` |”| `client/` | | `client/` |c| `client/` |o| `client/` |m| `client/` |p| `client/` |l| `client/` |e| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |m| `client/` |o| `client/` |d| `client/` |e| `client/` |l| `client/` | | `client/` |o| `client/` |v| `client/` |e| `client/` |r| `client/` |r| `client/` |i| `client/` |d| `client/` |e| `client/` |
|
- Red `✗ disconnected` — server unreachable
|
||||||
| `client/` |
|
- Gray `○ no agent` — connected, no agent
|
||||||
| `client/` |*| `client/` |*| `client/` |G| `client/` |i| `client/` |t| `client/` |+| `client/` |+| `client/` | | `client/` |i| `client/` |n| `client/` |t| `client/` |e| `client/` |g| `client/` |r| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |:| `client/` |*| `client/` |*| `client/` |
|
- Green `● kate/ID` — connected with active agent
|
||||||
| `client/` |-| `client/` | | `client/` |"| `client/` |O| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |:| `client/` | | `client/` |R| `client/` |e| `client/` |v| `client/` |i| `client/` |e| `client/` |w| `client/` | | `client/` |D| `client/` |i| `client/` |f| `client/` |f| `client/` |"| `client/` | | `client/` |a| `client/` |c| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |r| `client/` |e| `client/` |g| `client/` |i| `client/` |s| `client/` |t| `client/` |e| `client/` |r| `client/` |e| `client/` |d| `client/` | | `client/` |i| `client/` |n| `client/` | | `client/` |G| `client/` |i| `client/` |t| `client/` |+| `client/` |+| `client/` | | `client/` |p| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` |'| `client/` |s| `client/` | | `client/` |d| `client/` |i| `client/` |f| `client/` |f| `client/` | | `client/` |c| `client/` |o| `client/` |n| `client/` |t| `client/` |e| `client/` |x| `client/` |t| `client/` | | `client/` |m| `client/` |e| `client/` |n| `client/` |u| `client/` |
|
|
||||||
| `client/` |
|
**Git++ integration:**
|
||||||
| `client/` |*| `client/` |*| `client/` |T| `client/` |i| `client/` |p| `client/` |:| `client/` |*| `client/` |*| `client/` | | `client/` |T| `client/` |i| `client/` |l| `client/` |e| `client/` | | `client/` |t| `client/` |h| `client/` |e| `client/` | | `client/` |`| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |-| `client/` |g| `client/` |u| `client/` |i| `client/` |`| `client/` | | `client/` |w| `client/` |i| `client/` |n| `client/` |d| `client/` |o| `client/` |w| `client/` | | `client/` |a| `client/` |l| `client/` |o| `client/` |n| `client/` |g| `client/` |s| `client/` |i| `client/` |d| `client/` |e| `client/` | | `client/` |K| `client/` |a| `client/` |t| `client/` |e| `client/` | | `client/` |t| `client/` |o| `client/` | | `client/` |s| `client/` |e| `client/` |e| `client/` | | `client/` |t| `client/` |h| `client/` |e| `client/` | | `client/` |f| `client/` |u| `client/` |l| `client/` |l| `client/` | | `client/` |c| `client/` |h| `client/` |a| `client/` |t| `client/` | | `client/` |s| `client/` |t| `client/` |r| `client/` |e| `client/` |a| `client/` |m| `client/` | | `client/` |f| `client/` |r| `client/` |o| `client/` |m| `client/` | | `client/` |c| `client/` |o| `client/` |n| `client/` |t| `client/` |e| `client/` |x| `client/` |t| `client/` | | `client/` |a| `client/` |c| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |s| `client/` |.| `client/` |
|
- "Ollie: Review Diff" action registered in Git++ plugin's diff context menu
|
||||||
| `client/` |
|
|
||||||
| `client/` |#| `client/` |#| `client/` | | `client/` |F| `client/` |i| `client/` |l| `client/` |e| `client/` | | `client/` |L| `client/` |a| `client/` |y| `client/` |o| `client/` |u| `client/` |t| `client/` |
|
**Tip:** Tile the `ollie-gui` window alongside Kate to see the full chat stream from context actions.
|
||||||
| `client/` |
|
|
||||||
| `client/` |`| `client/` |`| `client/` |`| `client/` |
|
## File Layout
|
||||||
| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |-| `client/` |k| `client/` |d| `client/` |e| `client/` |/| `client/` |
|
|
||||||
| `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |j| `client/` |u| `client/` |s| `client/` |t| `client/` |f| `client/` |i| `client/` |l| `client/` |e| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |B| `client/` |u| `client/` |i| `client/` |l| `client/` |d| `client/` | | `client/` |o| `client/` |r| `client/` |c| `client/` |h| `client/` |e| `client/` |s| `client/` |t| `client/` |r| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |
|
```text
|
||||||
| `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |C| `client/` |M| `client/` |a| `client/` |k| `client/` |e| `client/` |L| `client/` |i| `client/` |s| `client/` |t| `client/` |s| `client/` |.| `client/` |t| `client/` |x| `client/` |t| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |M| `client/` |a| `client/` |i| `client/` |n| `client/` | | `client/` |C| `client/` |M| `client/` |a| `client/` |k| `client/` |e| `client/` | | `client/` |c| `client/` |o| `client/` |n| `client/` |f| `client/` |i| `client/` |g| `client/` |u| `client/` |r| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |
|
kde/
|
||||||
| `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |g| `client/` |u| `client/` |i| `client/` |/| `client/` |
|
├── CMakeLists.txt # Qt5/KF5 and Qt6/KF6 build configuration
|
||||||
| `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |m| `client/` |a| `client/` |i| `client/` |n| `client/` |.| `client/` |c| `client/` |p| `client/` |p| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |G| `client/` |U| `client/` |I| `client/` | | `client/` |a| `client/` |p| `client/` |p| `client/` |l| `client/` |i| `client/` |c| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |e| `client/` |n| `client/` |t| `client/` |r| `client/` |y| `client/` |
|
├── README.md
|
||||||
| `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |m| `client/` |a| `client/` |i| `client/` |n| `client/` |.| `client/` |q| `client/` |m| `client/` |l| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |Q| `client/` |M| `client/` |L| `client/` | | `client/` |i| `client/` |n| `client/` |t| `client/` |e| `client/` |r| `client/` |f| `client/` |a| `client/` |c| `client/` |e| `client/` |
|
├── gui/ # ollie-gui (C++/QML) and desktop assets
|
||||||
| `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |9| `client/` |p| `client/` |c| `client/` |l| `client/` |i| `client/` |e| `client/` |n| `client/` |t| `client/` |.| `client/` |h| `client/` |/| `client/` |c| `client/` |p| `client/` |p| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |9| `client/` |P| `client/` | | `client/` |c| `client/` |l| `client/` |i| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |f| `client/` |o| `client/` |r| `client/` | | `client/` |G| `client/` |U| `client/` |I| `client/` |
|
│ ├── main.cpp, main.qml
|
||||||
| `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |l| `client/` |i| `client/` |b| `client/` |9| `client/` |p| `client/` |c| `client/` |l| `client/` |i| `client/` |e| `client/` |n| `client/` |t| `client/` |.| `client/` |h| `client/` |/| `client/` |c| `client/` |p| `client/` |p| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |S| `client/` |h| `client/` |a| `client/` |r| `client/` |e| `client/` |d| `client/` | | `client/` |9| `client/` |P| `client/` | | `client/` |c| `client/` |l| `client/` |i| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |l| `client/` |i| `client/` |b| `client/` |r| `client/` |a| `client/` |r| `client/` |y| `client/` |
|
│ ├── ollie9pclient.* # GUI state/session client
|
||||||
| `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |c| `client/` |h| `client/` |a| `client/` |t| `client/` |b| `client/` |l| `client/` |o| `client/` |c| `client/` |k| `client/` |m| `client/` |o| `client/` |d| `client/` |e| `client/` |l| `client/` |.| `client/` |h| `client/` |/| `client/` |c| `client/` |p| `client/` |p| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |C| `client/` |h| `client/` |a| `client/` |t| `client/` | | `client/` |d| `client/` |a| `client/` |t| `client/` |a| `client/` | | `client/` |m| `client/` |o| `client/` |d| `client/` |e| `client/` |l| `client/` |
|
│ ├── lib9pclient.* # shared native 9P wrapper
|
||||||
| `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |t| `client/` |h| `client/` |e| `client/` |m| `client/` |e| `client/` |m| `client/` |a| `client/` |n| `client/` |a| `client/` |g| `client/` |e| `client/` |r| `client/` |.| `client/` |h| `client/` |/| `client/` |c| `client/` |p| `client/` |p| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |T| `client/` |h| `client/` |e| `client/` |m| `client/` |e| `client/` | | `client/` |m| `client/` |a| `client/` |n| `client/` |a| `client/` |g| `client/` |e| `client/` |m| `client/` |e| `client/` |n| `client/` |t| `client/` |
|
│ ├── nativestreamer.* # chat, state, and event streams
|
||||||
| `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |s| `client/` |t| `client/` |r| `client/` |e| `client/` |a| `client/` |m| `client/` |f| `client/` |s| `client/` |m| `client/` |.| `client/` |h| `client/` |/| `client/` |c| `client/` |p| `client/` |p| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |S| `client/` |t| `client/` |r| `client/` |e| `client/` |a| `client/` |m| `client/` |i| `client/` |n| `client/` |g| `client/` | | `client/` |s| `client/` |t| `client/` |a| `client/` |t| `client/` |e| `client/` | | `client/` |m| `client/` |a| `client/` |c| `client/` |h| `client/` |i| `client/` |n| `client/` |e| `client/` |
|
│ ├── sessionmodel.*, chatblockmodel.*
|
||||||
| `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |n| `client/` |i| `client/` |n| `client/` |e| `client/` |p| `client/` |c| `client/` |o| `client/` |n| `client/` |n| `client/` |e| `client/` |c| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |.| `client/` |h| `client/` |/| `client/` |c| `client/` |p| `client/` |p| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |9| `client/` |P| `client/` | | `client/` |c| `client/` |o| `client/` |n| `client/` |n| `client/` |e| `client/` |c| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |m| `client/` |a| `client/` |n| `client/` |a| `client/` |g| `client/` |e| `client/` |m| `client/` |e| `client/` |n| `client/` |t| `client/` |
|
│ ├── thememanager.*, clipboardhelper.*
|
||||||
| `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |”| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |o| `client/` |r| `client/` |g| `client/` |.| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |.| `client/` |g| `client/` |u| `client/` |i| `client/` |.| `client/` |d| `client/` |e| `client/` |s| `client/` |k| `client/` |t| `client/` |o| `client/` |p| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |D| `client/` |e| `client/` |s| `client/` |k| `client/` |t| `client/` |o| `client/` |p| `client/` | | `client/` |e| `client/` |n| `client/` |t| `client/` |r| `client/` |y| `client/` |
|
│ └── *.qml, qml.qrc, *.desktop, ollie.svg
|
||||||
| `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |k| `client/` |r| `client/` |u| `client/` |n| `client/` |n| `client/` |e| `client/` |r| `client/` |/| `client/` |
|
├── krunner/ # KRunner plugin and metadata
|
||||||
| `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |m| `client/` |e| `client/` |t| `client/` |a| `client/` |d| `client/` |a| `client/` |t| `client/` |a| `client/` |.| `client/` |j| `client/` |s| `client/` |o| `client/` |n| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |P| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` | | `client/` |m| `client/` |e| `client/` |t| `client/` |a| `client/` |d| `client/` |a| `client/` |t| `client/` |a| `client/` |
|
├── kate/ # Kate context actions and ghost provider
|
||||||
| `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |”| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |_| `client/` |r| `client/` |u| `client/` |n| `client/` |n| `client/` |e| `client/` |r| `client/` |.| `client/` |h| `client/` |/| `client/` |c| `client/` |p| `client/` |p| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |K| `client/` |R| `client/` |u| `client/` |n| `client/` |n| `client/` |e| `client/` |r| `client/` | | `client/` |p| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` | | `client/` |(| `client/` |9| `client/` |P| `client/` |-| `client/` |b| `client/` |a| `client/` |s| `client/` |e| `client/` |d| `client/` |)| `client/` |
|
├── kio/ # `ollie://` KIO worker and protocol metadata
|
||||||
| `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |k| `client/` |a| `client/` |t| `client/` |e| `client/` |/| `client/` |
|
├── dolphin/ # service menus and helper scripts
|
||||||
| `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |m| `client/` |e| `client/` |t| `client/` |a| `client/` |d| `client/` |a| `client/` |t| `client/` |a| `client/` |.| `client/` |j| `client/` |s| `client/` |o| `client/` |n| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |P| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` | | `client/` |m| `client/` |e| `client/` |t| `client/` |a| `client/` |d| `client/` |a| `client/` |t| `client/` |a| `client/` |
|
├── lib9p/ # Go-built libollie9p shared library/header
|
||||||
| `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |_| `client/` |k| `client/` |a| `client/` |t| `client/` |e| `client/` |.| `client/` |h| `client/` |/| `client/` |c| `client/` |p| `client/` |p| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |K| `client/` |a| `client/` |t| `client/` |e| `client/` | | `client/` |p| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` | | `client/` |(| `client/` |c| `client/` |o| `client/` |n| `client/` |t| `client/` |e| `client/` |x| `client/` |t| `client/` | | `client/` |a| `client/` |c| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |s| `client/` |,| `client/` | | `client/` |a| `client/` |g| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |m| `client/` |g| `client/` |m| `client/` |t| `client/` |)| `client/` |
|
└── 99-ollie*.sh # Qt/KF-specific Plasma environment snippets
|
||||||
| `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |”| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |_| `client/` |g| `client/` |h| `client/` |o| `client/` |s| `client/` |t| `client/` |.| `client/` |h| `client/` |/| `client/` |c| `client/` |p| `client/` |p| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |G| `client/` |h| `client/` |o| `client/` |s| `client/` |t| `client/` | | `client/` |t| `client/` |e| `client/` |x| `client/` |t| `client/` | | `client/` |c| `client/` |o| `client/` |m| `client/` |p| `client/` |l| `client/` |e| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |p| `client/` |r| `client/` |o| `client/` |v| `client/` |i| `client/` |d| `client/` |e| `client/` |r| `client/` |
|
```
|
||||||
| `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |d| `client/` |o| `client/` |l| `client/` |p| `client/` |h| `client/` |i| `client/` |n| `client/` |/| `client/` |
|
|
||||||
| `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |-| `client/` |a| `client/` |c| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |s| `client/` |.| `client/` |d| `client/` |e| `client/` |s| `client/` |k| `client/` |t| `client/` |o| `client/` |p| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |S| `client/` |e| `client/` |r| `client/` |v| `client/` |i| `client/` |c| `client/` |e| `client/` | | `client/` |m| `client/` |e| `client/` |n| `client/` |u| `client/` | | `client/` |e| `client/` |n| `client/` |t| `client/` |r| `client/` |i| `client/` |e| `client/` |s| `client/` | | `client/` |(| `client/` |K| `client/` |F| `client/` |6| `client/` |)| `client/` |
|
`build/` and `build-cmake/` are local build directories and are not source components.
|
||||||
| `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |-| `client/` |a| `client/` |c| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |s| `client/` |-| `client/` |k| `client/` |f| `client/` |5| `client/` |.| `client/` |d| `client/` |e| `client/` |s| `client/` |k| `client/` |t| `client/` |o| `client/` |p| `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |S| `client/` |e| `client/` |r| `client/` |v| `client/` |i| `client/` |c| `client/` |e| `client/` | | `client/` |m| `client/` |e| `client/` |n| `client/` |u| `client/` | | `client/` |e| `client/` |n| `client/` |t| `client/` |r| `client/` |i| `client/` |e| `client/` |s| `client/` | | `client/` |(| `client/` |K| `client/` |F| `client/` |5| `client/` |)| `client/` |
|
|
||||||
| `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |-| `client/` |a| `client/` |s| `client/` |k| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |O| `client/` |n| `client/` |e| `client/` |-| `client/` |s| `client/` |h| `client/` |o| `client/` |t| `client/` | | `client/` |h| `client/` |e| `client/` |l| `client/` |p| `client/` |e| `client/` |r| `client/` | | `client/` |s| `client/` |c| `client/` |r| `client/` |i| `client/` |p| `client/` |t| `client/` | | `client/` |(| `client/` |9| `client/` |P| `client/` |-| `client/` |b| `client/` |a| `client/` |s| `client/` |e| `client/` |d| `client/` |)| `client/` |
|
|
||||||
| `client/` |â| `client/` |”| `client/` |‚| `client/` | | `client/` | | `client/` | | `client/` |â| `client/` |”| `client/` |”| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |-| `client/` |s| `client/` |e| `client/` |s| `client/` |s| `client/` |i| `client/` |o| `client/` |n| `client/` |-| `client/` |h| `client/` |e| `client/` |r| `client/` |e| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |S| `client/` |e| `client/` |s| `client/` |s| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |c| `client/` |r| `client/` |e| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |h| `client/` |e| `client/` |l| `client/` |p| `client/` |e| `client/` |r| `client/` | | `client/` |(| `client/` |9| `client/` |P| `client/` |-| `client/` |b| `client/` |a| `client/` |s| `client/` |e| `client/` |d| `client/` |)| `client/` |
|
## Development Notes
|
||||||
| `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |9| `client/` |9| `client/` |-| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |.| `client/` |s| `client/` |h| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |E| `client/` |n| `client/` |v| `client/` |i| `client/` |r| `client/` |o| `client/` |n| `client/` |m| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |s| `client/` |c| `client/` |r| `client/` |i| `client/` |p| `client/` |t| `client/` | | `client/` |(| `client/` |K| `client/` |F| `client/` |6| `client/` |)| `client/` |
|
|
||||||
| `client/` |â| `client/` |”| `client/` |œ| `client/` |â| `client/` |”| `client/` |€| `client/` |â| `client/` |”| `client/` |€| `client/` | | `client/` |9| `client/` |9| `client/` |-| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |-| `client/` |k| `client/` |f| `client/` |5| `client/` |.| `client/` |s| `client/` |h| `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` | | `client/` |#| `client/` | | `client/` |E| `client/` |n| `client/` |v| `client/` |i| `client/` |r| `client/` |o| `client/` |n| `client/` |m| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |s| `client/` |c| `client/` |r| `client/` |i| `client/` |p| `client/` |t| `client/` | | `client/` |(| `client/` |K| `client/` |F| `client/` |5| `client/` |)| `client/` |
|
- The native clients use `libollie9p.so` directly; KRunner and Dolphin are the exceptions and use a 9P CLI subprocess.
|
||||||
| `client/` |`| `client/` |`| `client/` |`| `client/` |
|
- The GUI maintains native chat, agent-state, and event streams and polls the daemon heartbeat every 2.5 seconds for recovery.
|
||||||
| `client/` |
|
- The Kate plugin is lightweight: context actions, agent management, and ghost text; it has no chat panel.
|
||||||
| `client/` |#| `client/` |#| `client/` | | `client/` |D| `client/` |e| `client/` |v| `client/` |e| `client/` |l| `client/` |o| `client/` |p| `client/` |m| `client/` |e| `client/` |n| `client/` |t| `client/` | | `client/` |N| `client/` |o| `client/` |t| `client/` |e| `client/` |s| `client/` |
|
- The KIO worker exposes the server's namespace as a mutable virtual filesystem, not as a local mirror.
|
||||||
| `client/` |
|
- CMake supports KF6/Qt6 and KF5/Qt5 via `OLLIE_KF5`.
|
||||||
| `client/` |-| `client/` | | `client/` |*| `client/` |*| `client/` |A| `client/` |l| `client/` |l| `client/` | | `client/` |c| `client/` |o| `client/` |m| `client/` |p| `client/` |o| `client/` |n| `client/` |e| `client/` |n| `client/` |t| `client/` |s| `client/` | | `client/` |u| `client/` |s| `client/` |e| `client/` | | `client/` |`| `client/` |l| `client/` |i| `client/` |b| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |9| `client/` |p| `client/` |.| `client/` |s| `client/` |o| `client/` |`| `client/` | | `client/` |f| `client/` |o| `client/` |r| `client/` | | `client/` |9| `client/` |P| `client/` | | `client/` |t| `client/` |r| `client/` |a| `client/` |n| `client/` |s| `client/` |p| `client/` |o| `client/` |r| `client/` |t| `client/` |*| `client/` |*| `client/` | | `client/` |(| `client/` |d| `client/` |i| `client/` |r| `client/` |e| `client/` |c| `client/` |t| `client/` | | `client/` |C| `client/` | | `client/` |l| `client/` |i| `client/` |b| `client/` |r| `client/` |a| `client/` |r| `client/` |y| `client/` |,| `client/` | | `client/` |n| `client/` |o| `client/` | | `client/` |s| `client/` |u| `client/` |b| `client/` |p| `client/` |r| `client/` |o| `client/` |c| `client/` |e| `client/` |s| `client/` |s| `client/` |)| `client/` |
|
- The CMake install target installs `libollie9p.so` to `${CMAKE_INSTALL_LIBDIR}` (`lib` or `lib64`), alongside the executable rather than under the Qt plugin directory.
|
||||||
| `client/` |-| `client/` | | `client/` |T| `client/` |h| `client/` |e| `client/` | | `client/` |K| `client/` |a| `client/` |t| `client/` |e| `client/` | | `client/` |p| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` | | `client/` |i| `client/` |s| `client/` | | `client/` |l| `client/` |i| `client/` |g| `client/` |h| `client/` |t| `client/` |w| `client/` |e| `client/` |i| `client/` |g| `client/` |h| `client/` |t| `client/` |:| `client/` | | `client/` |c| `client/` |o| `client/` |n| `client/` |t| `client/` |e| `client/` |x| `client/` |t| `client/` | | `client/` |a| `client/` |c| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |s| `client/` | | `client/` |+| `client/` | | `client/` |g| `client/` |h| `client/` |o| `client/` |s| `client/` |t| `client/` | | `client/` |t| `client/` |e| `client/` |x| `client/` |t| `client/` |,| `client/` | | `client/` |n| `client/` |o| `client/` | | `client/` |c| `client/` |h| `client/` |a| `client/` |t| `client/` | | `client/` |p| `client/` |a| `client/` |n| `client/` |e| `client/` |l| `client/` | | `client/` |(| `client/` |u| `client/` |s| `client/` |e| `client/` | | `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |-| `client/` |g| `client/` |u| `client/` |i| `client/` | | `client/` |f| `client/` |o| `client/` |r| `client/` | | `client/` |c| `client/` |h| `client/` |a| `client/` |t| `client/` |)| `client/` |
|
|
||||||
| `client/` |-| `client/` | | `client/` |T| `client/` |h| `client/` |e| `client/` | | `client/` |G| `client/` |U| `client/` |I| `client/` | | `client/` |a| `client/` |p| `client/` |p| `client/` |l| `client/` |i| `client/` |c| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |u| `client/` |s| `client/` |e| `client/` |s| `client/` | | `client/` |Q| `client/` |t| `client/` | | `client/` |Q| `client/` |u| `client/` |i| `client/` |c| `client/` |k| `client/` | | `client/` |f| `client/` |o| `client/` |r| `client/` | | `client/` |a| `client/` | | `client/` |m| `client/` |o| `client/` |d| `client/` |e| `client/` |r| `client/` |n| `client/` |,| `client/` | | `client/` |r| `client/` |e| `client/` |s| `client/` |p| `client/` |o| `client/` |n| `client/` |s| `client/` |i| `client/` |v| `client/` |e| `client/` | | `client/` |i| `client/` |n| `client/` |t| `client/` |e| `client/` |r| `client/` |f| `client/` |a| `client/` |c| `client/` |e| `client/` |
|
## Troubleshooting
|
||||||
| `client/` |-| `client/` | | `client/` |B| `client/` |u| `client/` |i| `client/` |l| `client/` |d| `client/` | | `client/` |s| `client/` |y| `client/` |s| `client/` |t| `client/` |e| `client/` |m| `client/` | | `client/` |s| `client/` |u| `client/` |p| `client/` |p| `client/` |o| `client/` |r| `client/` |t| `client/` |s| `client/` | | `client/` |b| `client/` |o| `client/` |t| `client/` |h| `client/` | | `client/` |K| `client/` |F| `client/` |6| `client/` |/| `client/` |Q| `client/` |t| `client/` |6| `client/` | | `client/` |a| `client/` |n| `client/` |d| `client/` | | `client/` |K| `client/` |F| `client/` |5| `client/` |/| `client/` |Q| `client/` |t| `client/` |5| `client/` | | `client/` |v| `client/` |i| `client/` |a| `client/` | | `client/` |C| `client/` |M| `client/` |a| `client/` |k| `client/` |e| `client/` | | `client/` |o| `client/` |p| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |`| `client/` |O| `client/` |L| `client/` |L| `client/` |I| `client/` |E| `client/` |_| `client/` |K| `client/` |F| `client/` |5| `client/` |`| `client/` |
|
|
||||||
| `client/` |-| `client/` | | `client/` |I| `client/` |n| `client/` |s| `client/` |t| `client/` |a| `client/` |l| `client/` |l| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |i| `client/` |s| `client/` | | `client/` |u| `client/` |s| `client/` |e| `client/` |r| `client/` |-| `client/` |l| `client/` |o| `client/` |c| `client/` |a| `client/` |l| `client/` | | `client/` |(| `client/` |`| `client/` |~| `client/` |/| `client/` |.| `client/` |l| `client/` |o| `client/` |c| `client/` |a| `client/` |l| `client/` |/| `client/` |`| `client/` |)| `client/` | | `client/` |b| `client/` |y| `client/` | | `client/` |d| `client/` |e| `client/` |f| `client/` |a| `client/` |u| `client/` |l| `client/` |t| `client/` |,| `client/` | | `client/` |n| `client/` |o| `client/` | | `client/` |s| `client/` |y| `client/` |s| `client/` |t| `client/` |e| `client/` |m| `client/` |-| `client/` |w| `client/` |i| `client/` |d| `client/` |e| `client/` | | `client/` |i| `client/` |n| `client/` |s| `client/` |t| `client/` |a| `client/` |l| `client/` |l| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |n| `client/` |e| `client/` |e| `client/` |d| `client/` |e| `client/` |d| `client/` |
|
**Plugins not appearing after installation:**
|
||||||
| `client/` |
|
- Run `kbuildsycoca6` (KF6) or `kbuildsycoca5` (KF5) to rebuild system cache
|
||||||
| `client/` |#| `client/` |#| `client/` | | `client/` |T| `client/` |r| `client/` |o| `client/` |u| `client/` |b| `client/` |l| `client/` |e| `client/` |s| `client/` |h| `client/` |o| `client/` |o| `client/` |t| `client/` |i| `client/` |n| `client/` |g| `client/` |
|
- Restart Plasma: `plasmashell --replace` or log out/in
|
||||||
| `client/` |
|
|
||||||
| `client/` |*| `client/` |*| `client/` |P| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` |s| `client/` | | `client/` |n| `client/` |o| `client/` |t| `client/` | | `client/` |a| `client/` |p| `client/` |p| `client/` |e| `client/` |a| `client/` |r| `client/` |i| `client/` |n| `client/` |g| `client/` | | `client/` |a| `client/` |f| `client/` |t| `client/` |e| `client/` |r| `client/` | | `client/` |i| `client/` |n| `client/` |s| `client/` |t| `client/` |a| `client/` |l| `client/` |l| `client/` |a| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |:| `client/` |*| `client/` |*| `client/` |
|
**"9p" or "ollie-9p" not found:**
|
||||||
| `client/` |-| `client/` | | `client/` |R| `client/` |u| `client/` |n| `client/` | | `client/` |`| `client/` |k| `client/` |b| `client/` |u| `client/` |i| `client/` |l| `client/` |d| `client/` |s| `client/` |y| `client/` |c| `client/` |o| `client/` |c| `client/` |a| `client/` |6| `client/` |`| `client/` | | `client/` |(| `client/` |K| `client/` |F| `client/` |6| `client/` |)| `client/` | | `client/` |o| `client/` |r| `client/` | | `client/` |`| `client/` |k| `client/` |b| `client/` |u| `client/` |i| `client/` |l| `client/` |d| `client/` |s| `client/` |y| `client/` |c| `client/` |o| `client/` |c| `client/` |a| `client/` |5| `client/` |`| `client/` | | `client/` |(| `client/` |K| `client/` |F| `client/` |5| `client/` |)| `client/` | | `client/` |t| `client/` |o| `client/` | | `client/` |r| `client/` |e| `client/` |b| `client/` |u| `client/` |i| `client/` |l| `client/` |d| `client/` | | `client/` |s| `client/` |y| `client/` |s| `client/` |t| `client/` |e| `client/` |m| `client/` | | `client/` |c| `client/` |a| `client/` |c| `client/` |h| `client/` |e| `client/` |
|
- KRunner needs an executable named `9p` (or a `PLAN9` environment pointing to `bin/9p`).
|
||||||
| `client/` |-| `client/` | | `client/` |R| `client/` |e| `client/` |s| `client/` |t| `client/` |a| `client/` |r| `client/` |t| `client/` | | `client/` |P| `client/` |l| `client/` |a| `client/` |s| `client/` |m| `client/` |a| `client/` |:| `client/` | | `client/` |`| `client/` |p| `client/` |l| `client/` |a| `client/` |s| `client/` |m| `client/` |a| `client/` |s| `client/` |h| `client/` |e| `client/` |l| `client/` |l| `client/` | | `client/` |-| `client/` |-| `client/` |r| `client/` |e| `client/` |p| `client/` |l| `client/` |a| `client/` |c| `client/` |e| `client/` |`| `client/` | | `client/` |o| `client/` |r| `client/` | | `client/` |l| `client/` |o| `client/` |g| `client/` | | `client/` |o| `client/` |u| `client/` |t| `client/` |/| `client/` |i| `client/` |n| `client/` |
|
- Dolphin helpers need `ollie-9p` in `PATH`.
|
||||||
| `client/` |
|
- Build/install the main Ollie project or plan9port as appropriate.
|
||||||
| `client/` |*| `client/` |*| `client/` |"| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |-| `client/` |9| `client/` |p| `client/` | | `client/` |n| `client/` |o| `client/` |t| `client/` | | `client/` |f| `client/` |o| `client/` |u| `client/` |n| `client/` |d| `client/` |"| `client/` | | `client/` |e| `client/` |r| `client/` |r| `client/` |o| `client/` |r| `client/` |s| `client/` |:| `client/` |*| `client/` |*| `client/` |
|
|
||||||
| `client/` |-| `client/` | | `client/` |E| `client/` |n| `client/` |s| `client/` |u| `client/` |r| `client/` |e| `client/` | | `client/` |`| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |-| `client/` |9| `client/` |p| `client/` |`| `client/` | | `client/` |i| `client/` |s| `client/` | | `client/` |i| `client/` |n| `client/` | | `client/` |y| `client/` |o| `client/` |u| `client/` |r| `client/` | | `client/` |P| `client/` |A| `client/` |T| `client/` |H| `client/` | | `client/` |o| `client/` |r| `client/` | | `client/` |b| `client/` |u| `client/` |i| `client/` |l| `client/` |d| `client/` |/| `client/` |i| `client/` |n| `client/` |s| `client/` |t| `client/` |a| `client/` |l| `client/` |l| `client/` | | `client/` |t| `client/` |h| `client/` |e| `client/` | | `client/` |m| `client/` |a| `client/` |i| `client/` |n| `client/` | | `client/` |O| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` | | `client/` |p| `client/` |r| `client/` |o| `client/` |j| `client/` |e| `client/` |c| `client/` |t| `client/` | | `client/` |f| `client/` |i| `client/` |r| `client/` |s| `client/` |t| `client/` |
|
**KDE client cannot connect:**
|
||||||
| `client/` |
|
- Ensure `olliesrv` is running and its default 9P socket is available.
|
||||||
| `client/` |*| `client/` |*| `client/` |K| `client/` |a| `client/` |t| `client/` |e| `client/` | | `client/` |p| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` | | `client/` |c| `client/` |r| `client/` |a| `client/` |s| `client/` |h| `client/` |e| `client/` |s| `client/` |:| `client/` |*| `client/` |*| `client/` |
|
- The clients resolve the default namespace from `NAMESPACE`, or from `/tmp/ns.$USER.$DISPLAY/ollie` when `NAMESPACE` is unset.
|
||||||
| `client/` |-| `client/` | | `client/` |C| `client/` |h| `client/` |e| `client/` |c| `client/` |k| `client/` | | `client/` |t| `client/` |h| `client/` |a| `client/` |t| `client/` | | `client/` |`| `client/` |l| `client/` |i| `client/` |b| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |9| `client/` |p| `client/` |.| `client/` |s| `client/` |o| `client/` |`| `client/` | | `client/` |i| `client/` |s| `client/` | | `client/` |i| `client/` |n| `client/` |s| `client/` |t| `client/` |a| `client/` |l| `client/` |l| `client/` |e| `client/` |d| `client/` | | `client/` |i| `client/` |n| `client/` | | `client/` |`| `client/` |~| `client/` |/| `client/` |.| `client/` |l| `client/` |o| `client/` |c| `client/` |a| `client/` |l| `client/` |/| `client/` |l| `client/` |i| `client/` |b| `client/` |/| `client/` |`| `client/` |
|
|
||||||
| `client/` |-| `client/` | | `client/` |V| `client/` |e| `client/` |r| `client/` |i| `client/` |f| `client/` |y| `client/` | | `client/` |K| `client/` |a| `client/` |t| `client/` |e| `client/` | | `client/` |i| `client/` |s| `client/` | | `client/` |u| `client/` |s| `client/` |i| `client/` |n| `client/` |g| `client/` | | `client/` |t| `client/` |h| `client/` |e| `client/` | | `client/` |s| `client/` |a| `client/` |m| `client/` |e| `client/` | | `client/` |Q| `client/` |t| `client/` | | `client/` |v| `client/` |e| `client/` |r| `client/` |s| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |a| `client/` |s| `client/` | | `client/` |t| `client/` |h| `client/` |e| `client/` | | `client/` |p| `client/` |l| `client/` |u| `client/` |g| `client/` |i| `client/` |n| `client/` | | `client/` |(| `client/` |Q| `client/` |t| `client/` |5| `client/` | | `client/` |v| `client/` |s| `client/` | | `client/` |Q| `client/` |t| `client/` |6| `client/` |)| `client/` |
|
**Kate plugin crashes or is rejected:**
|
||||||
| `client/` |
|
- Check that Kate and the plugin use the same Qt major version (Qt5 vs Qt6).
|
||||||
| `client/` |*| `client/` |*| `client/` |G| `client/` |h| `client/` |o| `client/` |s| `client/` |t| `client/` | | `client/` |t| `client/` |e| `client/` |x| `client/` |t| `client/` | | `client/` |n| `client/` |o| `client/` |t| `client/` | | `client/` |a| `client/` |p| `client/` |p| `client/` |e| `client/` |a| `client/` |r| `client/` |i| `client/` |n| `client/` |g| `client/` |:| `client/` |*| `client/` |*| `client/` |
|
- Verify that `libollie9p.so` and its runtime dependencies are discoverable.
|
||||||
| `client/` |-| `client/` | | `client/` |E| `client/` |n| `client/` |s| `client/` |u| `client/` |r| `client/` |e| `client/` | | `client/` |`| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |s| `client/` |r| `client/` |v| `client/` |`| `client/` | | `client/` |i| `client/` |s| `client/` | | `client/` |r| `client/` |u| `client/` |n| `client/` |n| `client/` |i| `client/` |n| `client/` |g| `client/` | | `client/` |a| `client/` |n| `client/` |d| `client/` | | `client/` |t| `client/` |h| `client/` |e| `client/` | | `client/` |9| `client/` |P| `client/` | | `client/` |s| `client/` |o| `client/` |c| `client/` |k| `client/` |e| `client/` |t| `client/` | | `client/` |i| `client/` |s| `client/` | | `client/` |a| `client/` |c| `client/` |c| `client/` |e| `client/` |s| `client/` |s| `client/` |i| `client/` |b| `client/` |l| `client/` |e| `client/` |
|
|
||||||
| `client/` |-| `client/` | | `client/` |G| `client/` |h| `client/` |o| `client/` |s| `client/` |t| `client/` | | `client/` |t| `client/` |e| `client/` |x| `client/` |t| `client/` | | `client/` |o| `client/` |n| `client/` |l| `client/` |y| `client/` | | `client/` |s| `client/` |h| `client/` |o| `client/` |w| `client/` |s| `client/` | | `client/` |w| `client/` |h| `client/` |e| `client/` |n| `client/` | | `client/` |c| `client/` |u| `client/` |r| `client/` |s| `client/` |o| `client/` |r| `client/` | | `client/` |i| `client/` |s| `client/` | | `client/` |a| `client/` |t| `client/` | | `client/` |e| `client/` |n| `client/` |d| `client/` |-| `client/` |o| `client/` |f| `client/` |-| `client/` |l| `client/` |i| `client/` |n| `client/` |e| `client/` |
|
**Ghost text not appearing:**
|
||||||
| `client/` |-| `client/` | | `client/` |C| `client/` |h| `client/` |e| `client/` |c| `client/` |k| `client/` | | `client/` |M| `client/` |e| `client/` |t| `client/` |a| `client/` |+| `client/` |O| `client/` |,| `client/` | | `client/` |C| `client/` | | `client/` |h| `client/` |a| `client/` |s| `client/` |n| `client/` |'| `client/` |t| `client/` | | `client/` |t| `client/` |o| `client/` |g| `client/` |g| `client/` |l| `client/` |e| `client/` |d| `client/` | | `client/` |c| `client/` |o| `client/` |m| `client/` |p| `client/` |l| `client/` |e| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` | | `client/` |o| `client/` |f| `client/` |f| `client/` |
|
- Ensure `olliesrv` is running and the 9P socket is accessible
|
||||||
| `client/` |
|
- Ghost text only shows when cursor is at end-of-line
|
||||||
| `client/` |*| `client/` |*| `client/` |D| `client/` |o| `client/` |l| `client/` |p| `client/` |h| `client/` |i| `client/` |n| `client/` | | `client/` |a| `client/` |c| `client/` |t| `client/` |i| `client/` |o| `client/` |n| `client/` |s| `client/` | | `client/` |n| `client/` |o| `client/` |t| `client/` | | `client/` |w| `client/` |o| `client/` |r| `client/` |k| `client/` |i| `client/` |n| `client/` |g| `client/` |:| `client/` |*| `client/` |*| `client/` |
|
- Check Meta+O, C hasn't toggled completion off
|
||||||
| `client/` |-| `client/` | | `client/` |E| `client/` |n| `client/` |s| `client/` |u| `client/` |r| `client/` |e| `client/` | | `client/` |`| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |-| `client/` |a| `client/` |s| `client/` |k| `client/` |`| `client/` | | `client/` |a| `client/` |n| `client/` |d| `client/` | | `client/` |`| `client/` |o| `client/` |l| `client/` |l| `client/` |i| `client/` |e| `client/` |-| `client/` |s| `client/` |e| `client/` |s| `client/` |s| `client/` |i| `client/` |o| `client/` |n| `client/` |-| `client/` |h| `client/` |e| `client/` |r| `client/` |e| `client/` |`| `client/` | | `client/` |a| `client/` |r| `client/` |e| `client/` | | `client/` |i| `client/` |n| `client/` |s| `client/` |t| `client/` |a| `client/` |l| `client/` |l| `client/` |e| `client/` |d| `client/` | | `client/` |i| `client/` |n| `client/` | | `client/` |`| `client/` |~| `client/` |/| `client/` |.| `client/` |l| `client/` |o| `client/` |c| `client/` |a| `client/` |l| `client/` |/| `client/` |b| `client/` |i| `client/` |n| `client/` |/| `client/` |`| `client/` |
|
|
||||||
| `client/` |-| `client/` | | `client/` |C| `client/` |h| `client/` |e| `client/` |c| `client/` |k| `client/` | | `client/` |t| `client/` |h| `client/` |a| `client/` |t| `client/` | | `client/` |t| `client/` |h| `client/` |e| `client/` | | `client/` |s| `client/` |e| `client/` |r| `client/` |v| `client/` |i| `client/` |c| `client/` |e| `client/` | | `client/` |m| `client/` |e| `client/` |n| `client/` |u| `client/` | | `client/` |d| `client/` |e| `client/` |s| `client/` |k| `client/` |t| `client/` |o| `client/` |p| `client/` | | `client/` |f| `client/` |i| `client/` |l| `client/` |e| `client/` |s| `client/` | | `client/` |a| `client/` |r| `client/` |e| `client/` | | `client/` |i| `client/` |n| `client/` | | `client/` |`| `client/` |~| `client/` |/| `client/` |.| `client/` |l| `client/` |o| `client/` |c| `client/` |a| `client/` |l| `client/` |/| `client/` |s| `client/` |h| `client/` |a| `client/` |r| `client/` |e| `client/` |/| `client/` |k| `client/` |i| `client/` |o| `client/` |/| `client/` |s| `client/` |e| `client/` |r| `client/` |v| `client/` |i| `client/` |c| `client/` |e| `client/` |m| `client/` |e| `client/` |n| `client/` |u| `client/` |s| `client/` |/| `client/` |`| `client/` |
|
**Dolphin actions not working:**
|
||||||
|
- Ensure `ollie-ask` and `ollie-session-here` are installed in `~/.local/bin/`
|
||||||
|
- Check that the service menu desktop files are in `~/.local/share/kio/servicemenus/`
|
||||||
|
|
|
||||||
Binary file not shown.
Loading…
Reference in New Issue