From deffb92317226862843372d91fc83032edbbc623 Mon Sep 17 00:00:00 2001 From: Levi Neely <141506390+lneely@users.noreply.github.com> Date: Mon, 6 Jul 2026 13:31:19 +0200 Subject: [PATCH] kde: fix Makefile for KF6/KF5 install paths and permissions --- Makefile | 240 ++++++++++++++++++---------------- dolphin/ollie-actions.desktop | 1 + 2 files changed, 127 insertions(+), 114 deletions(-) diff --git a/Makefile b/Makefile index 957941e..61709b6 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,10 @@ BUILD_DIR := build-cmake LIB_DIR := build -.PHONY: all lib daemon clean run +.PHONY: all lib daemon clean run install uninstall \ + kf5 kf5-install kf5-uninstall \ + krunner-install dolphin-install plasmoid-install plasmoid-uninstall \ + tray fix-build-perms all: daemon @@ -15,10 +18,19 @@ $(LIB_DIR)/libollie.so: lib/capi.go lib/go.mod cd lib && go build -buildmode=c-shared -o ../$(LIB_DIR)/libollie.so # Step 2: Build the C++ daemon against libollie.so -daemon: lib +daemon: lib fix-build-perms cmake -B $(BUILD_DIR) -S . cmake --build $(BUILD_DIR) +# Fix build directory permissions if a previous sudo install contaminated them. +# This happens when cmake re-runs during `sudo make install` or when `sudo cp` +# somehow taints the build tree. +fix-build-perms: + @if [ -d $(BUILD_DIR) ] && find $(BUILD_DIR) -not -user $$(id -u) -print -quit 2>/dev/null | grep -q .; then \ + echo "Fixing build directory permissions (root-owned files detected)..."; \ + sudo chown -R $$(id -u):$$(id -g) $(BUILD_DIR); \ + fi + # Step 2b: Build using KF5/Qt5 (for Plasma 5.27) kf5: lib @cp CMakeLists.txt CMakeLists.txt.kf6.bak && \ @@ -27,17 +39,117 @@ kf5: lib cmake -B $(BUILD_DIR) -S . --fresh && \ cmake --build $(BUILD_DIR) -# Install the KF5 build -kf5-install: kf5 - @echo "=== Installing ollie-kde (KF5) ===" - # Daemon + shared library +# --- KF6 Install (default) --- + +install: daemon + @echo "=== Installing ollie-kde (KF6) ===" + # Daemon + tray binaries sudo install -m755 $(BUILD_DIR)/ollie-kde /usr/bin/ sudo install -m755 $(BUILD_DIR)/ollie-tray /usr/bin/ + # Go shared library + sudo install -m755 $(LIB_DIR)/libollie.so /usr/lib64/ + # KRunner plugin + sudo mkdir -p /usr/lib64/qt6/plugins/kf6/krunner + sudo install -m755 $(BUILD_DIR)/lib/kf6/krunner/krunner_ollie.so \ + /usr/lib64/qt6/plugins/kf6/krunner/ + # Kate plugin + sudo mkdir -p /usr/lib64/qt6/plugins/kf6/ktexteditor + sudo install -m755 $(BUILD_DIR)/lib/kf6/ktexteditor/ollie_kate.so \ + /usr/lib64/qt6/plugins/kf6/ktexteditor/ + # Plasmoid QML plugin library + metadata + sudo mkdir -p /usr/lib64/qt6/qml/org/ollie/private + sudo install -m755 $(BUILD_DIR)/org/ollie/private/ollie-plasmoid-pluginplugin.so \ + /usr/lib64/qt6/qml/org/ollie/private/libollie-plasmoid-pluginplugin.so + sudo install -m644 $(BUILD_DIR)/org/ollie/private/ollie-plasmoid-plugin.qmltypes \ + /usr/lib64/qt6/qml/org/ollie/private/ + sudo install -m755 $(BUILD_DIR)/lib/libollie-plasmoid-plugin.so /usr/lib64/ + printf 'module org.ollie.private\nplugin ollie-plasmoid-pluginplugin\ntypeinfo ollie-plasmoid-plugin.qmltypes\ndepends QtQuick\n' | \ + sudo tee /usr/lib64/qt6/qml/org/ollie/private/qmldir > /dev/null + # Plasmoid package (force-update by removing first) + kpackagetool6 -t Plasma/Applet -r org.ollie.plasmoid 2>/dev/null; true + kpackagetool6 -t Plasma/Applet -i plasmoid/ + # Dolphin service menus + helper scripts + mkdir -p ~/.local/share/kio/servicemenus + install -m644 dolphin/ollie-actions.desktop ~/.local/share/kio/servicemenus/ + sudo install -m755 dolphin/ollie-ask /usr/local/bin/ + sudo install -m755 dolphin/ollie-session-here /usr/local/bin/ + # XDG autostart + sudo install -m644 org.ollie.SessionManager.desktop /etc/xdg/autostart/ + # Finalize + sudo ldconfig + kquitapp6 krunner 2>/dev/null; true + @echo "" + @echo "=== Installation complete (KF6) ===" + @echo "Restart Kate, KRunner, and plasmashell to pick up plugins." + +uninstall: + @echo "=== Uninstalling ollie-kde ===" + pkill -u "$$(id -u)" -x ollie-kde 2>/dev/null; true + sudo rm -f /usr/bin/ollie-kde /usr/bin/ollie-tray + sudo rm -f /usr/lib64/libollie.so /usr/lib64/libollie-plasmoid-plugin.so + sudo rm -f /usr/lib64/qt6/plugins/kf6/krunner/krunner_ollie.so + sudo rm -f /usr/lib64/qt6/plugins/kf6/ktexteditor/ollie_kate.so + sudo rm -rf /usr/lib64/qt6/qml/org/ollie + kpackagetool6 -t Plasma/Applet -r org.ollie.plasmoid 2>/dev/null; true + rm -f ~/.local/share/kio/servicemenus/ollie-actions.desktop + sudo rm -f /usr/local/bin/ollie-ask /usr/local/bin/ollie-session-here + sudo rm -f /etc/xdg/autostart/org.ollie.SessionManager.desktop + sudo ldconfig + kquitapp6 krunner 2>/dev/null; true + @echo "=== Uninstall complete ===" + +# --- Individual component installs --- + +krunner-install: daemon + sudo mkdir -p /usr/lib64/qt6/plugins/kf6/krunner + sudo install -m755 $(BUILD_DIR)/lib/kf6/krunner/krunner_ollie.so \ + /usr/lib64/qt6/plugins/kf6/krunner/ + kquitapp6 krunner 2>/dev/null; true + @echo "KRunner plugin installed. Restart krunner or re-login." + +dolphin-install: + mkdir -p ~/.local/share/kio/servicemenus + install -m644 dolphin/ollie-actions.desktop ~/.local/share/kio/servicemenus/ + sudo install -m755 dolphin/ollie-ask /usr/local/bin/ + sudo install -m755 dolphin/ollie-session-here /usr/local/bin/ + @echo "Dolphin menus installed. Restart Dolphin or re-open context menu." + +plasmoid-install: daemon + kpackagetool6 -t Plasma/Applet -r org.ollie.plasmoid 2>/dev/null; true + kpackagetool6 -t Plasma/Applet -i plasmoid/ + sudo mkdir -p /usr/lib64/qt6/qml/org/ollie/private + sudo install -m755 $(BUILD_DIR)/org/ollie/private/ollie-plasmoid-pluginplugin.so \ + /usr/lib64/qt6/qml/org/ollie/private/libollie-plasmoid-pluginplugin.so + sudo install -m644 $(BUILD_DIR)/org/ollie/private/ollie-plasmoid-plugin.qmltypes \ + /usr/lib64/qt6/qml/org/ollie/private/ + sudo install -m755 $(BUILD_DIR)/lib/libollie-plasmoid-plugin.so /usr/lib64/ + printf 'module org.ollie.private\nplugin ollie-plasmoid-pluginplugin\ntypeinfo ollie-plasmoid-plugin.qmltypes\ndepends QtQuick\n' | \ + sudo tee /usr/lib64/qt6/qml/org/ollie/private/qmldir > /dev/null + sudo ldconfig + @echo "Plasmoid installed. Restart plasmashell or add widget." + +plasmoid-uninstall: + kpackagetool6 -t Plasma/Applet -r org.ollie.plasmoid 2>/dev/null; true + sudo rm -rf /usr/lib64/qt6/qml/org/ollie + sudo rm -f /usr/lib64/libollie-plasmoid-plugin.so + sudo ldconfig + @echo "Plasmoid uninstalled." + +# --- KF5 Install --- + +kf5-install: kf5 + @echo "=== Installing ollie-kde (KF5) ===" + # Daemon + tray binaries + sudo install -m755 $(BUILD_DIR)/ollie-kde /usr/bin/ + sudo install -m755 $(BUILD_DIR)/ollie-tray /usr/bin/ + # Go shared library sudo install -m755 $(LIB_DIR)/libollie.so /usr/lib/x86_64-linux-gnu/ # KRunner plugin + sudo mkdir -p /usr/lib/x86_64-linux-gnu/qt5/plugins/kf5/krunner sudo install -m755 $(BUILD_DIR)/lib/krunner_ollie.so \ /usr/lib/x86_64-linux-gnu/qt5/plugins/kf5/krunner/ # Kate plugin + sudo mkdir -p /usr/lib/x86_64-linux-gnu/qt5/plugins/ktexteditor sudo install -m755 $(BUILD_DIR)/lib/ollie_kate.so \ /usr/lib/x86_64-linux-gnu/qt5/plugins/ktexteditor/ # Plasmoid QML plugin @@ -46,19 +158,19 @@ kf5-install: kf5 /usr/lib/x86_64-linux-gnu/qt5/qml/org/ollie/private/ sudo install -m644 plasmoid/plugin/qmldir \ /usr/lib/x86_64-linux-gnu/qt5/qml/org/ollie/private/ - # Plasmoid package (use temp copy to avoid clobbering source tree ownership) + # Plasmoid package cp -a plasmoid /tmp/ollie-plasmoid-kf5 cp plasmoid/metadata-kf5.json /tmp/ollie-plasmoid-kf5/metadata.json cp plasmoid/contents/ui/main-kf5.qml /tmp/ollie-plasmoid-kf5/contents/ui/main.qml - kpackagetool5 -t Plasma/Applet -u /tmp/ollie-plasmoid-kf5/ 2>/dev/null || \ - kpackagetool5 -t Plasma/Applet -i /tmp/ollie-plasmoid-kf5/ + kpackagetool5 -t Plasma/Applet -r org.ollie.plasmoid 2>/dev/null; true + kpackagetool5 -t Plasma/Applet -i /tmp/ollie-plasmoid-kf5/ $(RM) -r /tmp/ollie-plasmoid-kf5 - # Dolphin service menus + helpers + # Dolphin service menus + helper scripts mkdir -p ~/.local/share/kio/servicemenus - install -m755 dolphin/ollie-actions.desktop ~/.local/share/kio/servicemenus/ + install -m644 dolphin/ollie-actions.desktop ~/.local/share/kio/servicemenus/ sudo install -m755 dolphin/ollie-ask /usr/local/bin/ sudo install -m755 dolphin/ollie-session-here /usr/local/bin/ - # XDG autostart (starts with Plasma session) + # XDG autostart sudo install -m644 org.ollie.SessionManager.desktop /etc/xdg/autostart/ # Finalize sudo ldconfig @@ -83,114 +195,14 @@ kf5-uninstall: kquitapp5 krunner 2>/dev/null; true @echo "=== Uninstall complete (KF5) ===" -# Run the daemon (useful for testing) +# --- Development helpers --- + run: daemon LD_LIBRARY_PATH=$(LIB_DIR):$$LD_LIBRARY_PATH ./$(BUILD_DIR)/ollie-kde -# Run the system tray (daemon must be running) tray: daemon ./$(BUILD_DIR)/ollie-tray -# Install KRunner plugin -krunner-install: daemon - sudo cp $(BUILD_DIR)/lib/kf6/krunner/krunner_ollie.so \ - /usr/lib64/qt6/plugins/kf6/krunner/ - kquitapp6 krunner 2>/dev/null; true - @echo "KRunner plugin installed. Restart krunner or re-login." - clean: rm -rf $(BUILD_DIR) rm -f $(LIB_DIR)/libollie.so $(LIB_DIR)/libollie.h - -# Install Dolphin service menus -dolphin-install: - mkdir -p ~/.local/share/kio/servicemenus - install -m755 dolphin/ollie-actions.desktop ~/.local/share/kio/servicemenus/ - sudo install -m755 dolphin/ollie-ask /usr/local/bin/ - sudo install -m755 dolphin/ollie-session-here /usr/local/bin/ - @echo "Dolphin menus installed. Restart Dolphin or re-open context menu." - -# Install plasmoid to user's local plasma directory -plasmoid-install: daemon - kpackagetool6 -t Plasma/Applet -u plasmoid/ 2>/dev/null || \ - kpackagetool6 -t Plasma/Applet -i plasmoid/ - sudo mkdir -p /usr/lib64/qt6/qml/org/ollie/private - sudo cp $(BUILD_DIR)/org/ollie/private/ollie-plasmoid-pluginplugin.so \ - /usr/lib64/qt6/qml/org/ollie/private/libollie-plasmoid-pluginplugin.so - sudo cp $(BUILD_DIR)/org/ollie/private/ollie-plasmoid-plugin.qmltypes \ - /usr/lib64/qt6/qml/org/ollie/private/ - sudo cp $(BUILD_DIR)/lib/libollie-plasmoid-plugin.so /usr/lib64/ - printf 'module org.ollie.private\nplugin ollie-plasmoid-pluginplugin\ntypeinfo ollie-plasmoid-plugin.qmltypes\ndepends QtQuick\n' | \ - sudo tee /usr/lib64/qt6/qml/org/ollie/private/qmldir > /dev/null - sudo ldconfig - @echo "Plasmoid installed. Restart plasmashell or add widget." - -plasmoid-uninstall: - kpackagetool6 -t Plasma/Applet -r org.ollie.plasmoid 2>/dev/null || true - sudo rm -rf /usr/lib64/qt6/qml/org/ollie - sudo rm -f /usr/lib64/libollie-plasmoid-plugin.so - sudo ldconfig - @echo "Plasmoid uninstalled." - -install: daemon - @echo "=== Installing ollie-kde ===" - # Daemon + shared library - sudo install -m755 $(BUILD_DIR)/ollie-kde /usr/bin/ - sudo install -m755 $(BUILD_DIR)/ollie-tray /usr/bin/ - sudo install -m755 $(LIB_DIR)/libollie.so /usr/lib64/ - # KRunner plugin - sudo install -m755 $(BUILD_DIR)/lib/kf6/krunner/krunner_ollie.so \ - /usr/lib64/qt6/plugins/kf6/krunner/ - # Kate plugin - sudo install -m755 $(BUILD_DIR)/lib/kf6/ktexteditor/ollie_kate.so \ - /usr/lib64/qt6/plugins/kf6/ktexteditor/ - # Plasmoid QML plugin - sudo mkdir -p /usr/lib64/qt6/qml/org/ollie/private - sudo cp $(BUILD_DIR)/org/ollie/private/ollie-plasmoid-pluginplugin.so \ - /usr/lib64/qt6/qml/org/ollie/private/libollie-plasmoid-pluginplugin.so - sudo cp $(BUILD_DIR)/org/ollie/private/ollie-plasmoid-plugin.qmltypes \ - /usr/lib64/qt6/qml/org/ollie/private/ - sudo install -m755 $(BUILD_DIR)/lib/libollie-plasmoid-plugin.so /usr/lib64/ - printf 'module org.ollie.private\nplugin ollie-plasmoid-pluginplugin\ntypeinfo ollie-plasmoid-plugin.qmltypes\ndepends QtQuick\n' | \ - sudo tee /usr/lib64/qt6/qml/org/ollie/private/qmldir > /dev/null - # Plasmoid package - kpackagetool6 -t Plasma/Applet -u plasmoid/ 2>/dev/null || \ - kpackagetool6 -t Plasma/Applet -i plasmoid/ - # Dolphin service menus + helpers - mkdir -p ~/.local/share/kio/servicemenus - install -m755 dolphin/ollie-actions.desktop ~/.local/share/kio/servicemenus/ - sudo install -m755 dolphin/ollie-ask /usr/local/bin/ - sudo install -m755 dolphin/ollie-session-here /usr/local/bin/ - # XDG autostart (starts with Plasma session) - sudo install -m644 org.ollie.SessionManager.desktop /etc/xdg/autostart/ - # Finalize - sudo ldconfig - kquitapp6 krunner 2>/dev/null; true - @echo "" - @echo "=== Installation complete ===" - @echo "Restart Kate, KRunner, and plasmashell to pick up plugins." - -uninstall: - @echo "=== Uninstalling ollie-kde ===" - # Stop daemon - pkill -u "$(shell id -u)" -x ollie-kde 2>/dev/null; true - # Daemon + shared library - sudo rm -f /usr/bin/ollie-kde /usr/bin/ollie-tray - sudo rm -f /usr/lib64/libollie.so /usr/lib64/libollie-plasmoid-plugin.so - # KRunner plugin - sudo rm -f /usr/lib64/qt6/plugins/kf6/krunner/krunner_ollie.so - # Kate plugin - sudo rm -f /usr/lib64/qt6/plugins/kf6/ktexteditor/ollie_kate.so - # Plasmoid QML plugin - sudo rm -rf /usr/lib64/qt6/qml/org/ollie - # Plasmoid package - kpackagetool6 -t Plasma/Applet -r org.ollie.plasmoid 2>/dev/null; true - # Dolphin service menus + helpers - rm -f ~/.local/share/kio/servicemenus/ollie-actions.desktop - sudo rm -f /usr/local/bin/ollie-ask /usr/local/bin/ollie-session-here - # XDG autostart - sudo rm -f /etc/xdg/autostart/org.ollie.SessionManager.desktop - # Finalize - sudo ldconfig - kquitapp6 krunner 2>/dev/null; true - @echo "=== Uninstall complete ===" diff --git a/dolphin/ollie-actions.desktop b/dolphin/ollie-actions.desktop index 755e420..db2e6be 100644 --- a/dolphin/ollie-actions.desktop +++ b/dolphin/ollie-actions.desktop @@ -3,6 +3,7 @@ Type=Service X-KDE-ServiceTypes=KonqPopupMenu/Plugin MimeType=all/allfiles;inode/directory; Actions=askOllie;sessionHere; +X-KDE-AuthorizeAction=shell_access [Desktop Action askOllie] Name=Ask Ollie about this