diff options
Diffstat (limited to 'hyprpm/src/core/PluginManager.cpp')
| -rw-r--r-- | hyprpm/src/core/PluginManager.cpp | 31 |
1 files changed, 27 insertions, 4 deletions
diff --git a/hyprpm/src/core/PluginManager.cpp b/hyprpm/src/core/PluginManager.cpp index ee7d8e8f..33e565d3 100644 --- a/hyprpm/src/core/PluginManager.cpp +++ b/hyprpm/src/core/PluginManager.cpp @@ -5,6 +5,8 @@ #include "Manifest.hpp" #include "DataState.hpp" #include "HyprlandSocket.hpp" +#include "../helpers/Sys.hpp" +#include "../helpers/Die.hpp" #include <cstdio> #include <iostream> @@ -50,6 +52,13 @@ static std::string getTempRoot() { return STR; } +CPluginManager::CPluginManager() { + if (NSys::isSuperuser()) + Debug::die("Don't run hyprpm as a superuser."); + + m_szUsername = getpwuid(NSys::getUID())->pw_name; +} + SHyprlandVersion CPluginManager::getHyprlandVersion(bool running) { static bool onceRunning = false; static bool onceInstalled = false; @@ -275,6 +284,7 @@ bool CPluginManager::addNewPluginRepo(const std::string& url, const std::string& if (HEADERSSTATUS != HEADERS_OK) { std::println("\n{}", headerError(HEADERSSTATUS)); + std::println("\n{}", infoString("if the problem persists, try running hyprpm purge-cache.")); return false; } @@ -550,13 +560,20 @@ bool CPluginManager::updateHeaders(bool force) { progress.m_szCurrentMessage = "Installing sources"; progress.print(); - const std::string& cmd = - std::format("sed -i -e \"s#PREFIX = /usr/local#PREFIX = {}#\" {}/Makefile && cd {} && make installheaders", DataState::getHeadersPath(), WORKINGDIR, WORKINGDIR); + std::string cmd = std::format("sed -i -e \"s#PREFIX = /usr/local#PREFIX = {}#\" {}/Makefile", DataState::getHeadersPath(), WORKINGDIR); if (m_bVerbose) - progress.printMessageAbove(verboseString("installation will run: {}", cmd)); + progress.printMessageAbove(verboseString("prepare install will run: {}", cmd)); ret = execAndGet(cmd); + cmd = std::format("cd {} && make installheaders && chmod -R 644 {} && find {} -type d -exec chmod o+x {{}} \\;", WORKINGDIR, DataState::getHeadersPath(), + DataState::getHeadersPath()); + + if (m_bVerbose) + progress.printMessageAbove(verboseString("install will run as sudo: {}", cmd)); + + ret = NSys::runAsSuperuser(cmd); + if (m_bVerbose) std::println("{}", verboseString("installer returned: {}", ret)); @@ -570,9 +587,14 @@ bool CPluginManager::updateHeaders(bool force) { progress.m_szCurrentMessage = "Done!"; progress.print(); + auto GLOBALSTATE = DataState::getGlobalState(); + GLOBALSTATE.headersHashCompiled = HLVER.hash; + DataState::updateGlobalState(GLOBALSTATE); + std::print("\n"); } else { progress.printMessageAbove(failureString("failed to install headers with error code {} ({})", (int)HEADERSVALID, headerErrorShort(HEADERSVALID))); + progress.printMessageAbove(infoString("if the problem persists, try running hyprpm purge-cache.")); progress.m_iSteps = 5; progress.m_szCurrentMessage = "Failed"; progress.print(); @@ -884,7 +906,8 @@ bool CPluginManager::loadUnloadPlugin(const std::string& path, bool load) { auto HLVER = getHyprlandVersion(true); if (state.headersHashCompiled != HLVER.hash) { - std::println("{}", infoString("Running Hyprland version differs from plugin state, please restart Hyprland.")); + if (load) + std::println("{}", infoString("Running Hyprland version ({}) differs from plugin state ({}), please restart Hyprland.", HLVER.hash, state.headersHashCompiled)); return false; } |
