diff --git a/flake.nix b/flake.nix index 0a3f7c5c9..0c2c804b9 100644 --- a/flake.nix +++ b/flake.nix @@ -147,8 +147,11 @@ install -D ${rootSrc}/core/assets/danklogo.svg \ $out/share/hicolor/scalable/apps/danklogo.svg + # Snapshot pre-wrap Qt paths so launched apps get their own, not DMS's pins. wrapProgram $out/bin/dms \ --add-flags "-c $out/share/quickshell/dms" \ + --run 'export DMS_ORIG_NIXPKGS_QT6_QML_IMPORT_PATH="''${NIXPKGS_QT6_QML_IMPORT_PATH:-}"' \ + --run 'export DMS_ORIG_QT_PLUGIN_PATH="''${QT_PLUGIN_PATH:-}"' \ --prefix "NIXPKGS_QT6_QML_IMPORT_PATH" ":" "${mkQmlImportPath pkgs qtPackages}" \ --prefix "QT_PLUGIN_PATH" ":" "${mkQtPluginPath pkgs qtPackages}" diff --git a/quickshell/Services/SessionService.qml b/quickshell/Services/SessionService.qml index a11dae263..ffb1fed66 100644 --- a/quickshell/Services/SessionService.qml +++ b/quickshell/Services/SessionService.qml @@ -278,6 +278,19 @@ Singleton { return args; } + // Restore pre-wrap Qt paths (Nix) so launched apps use their own. + function restoreWrapperEnv(env) { + const restore = (target, snapshot) => { + const orig = Quickshell.env(snapshot); + if (orig === null) + return; + env[target] = orig.length > 0 ? orig : null; + }; + restore("NIXPKGS_QT6_QML_IMPORT_PATH", "DMS_ORIG_NIXPKGS_QT6_QML_IMPORT_PATH"); + restore("QT_PLUGIN_PATH", "DMS_ORIG_QT_PLUGIN_PATH"); + return env; + } + function launchDesktopEntry(desktopEntry, useNvidia) { if (!desktopEntry || !desktopEntry.command) return; @@ -302,7 +315,7 @@ Singleton { const cursorEnv = typeof SettingsData.getCursorEnvironment === "function" ? SettingsData.getCursorEnvironment() : {}; const overrideEnv = override?.envVars ? parseEnvVars(override.envVars) : {}; - const finalEnv = Object.assign({}, cursorEnv, overrideEnv); + const finalEnv = restoreWrapperEnv(Object.assign({}, cursorEnv, overrideEnv)); if (desktopEntry.runInTerminal) { const terminal = SessionData.resolveTerminal() || "xterm"; @@ -353,13 +366,14 @@ Singleton { const prefix = userPrefix.length > 0 ? userPrefix : defaultPrefix; const workDir = desktopEntry.workingDirectory || Quickshell.env("HOME"); const cursorEnv = typeof SettingsData.getCursorEnvironment === "function" ? SettingsData.getCursorEnvironment() : {}; + const finalEnv = restoreWrapperEnv(Object.assign({}, cursorEnv)); if (prefix.length > 0 && needsShellExecution(prefix)) { const escapedCmd = cmd.map(arg => escapeShellArg(arg)).join(" "); Quickshell.execDetached({ command: ["sh", "-c", `${prefix} ${escapedCmd}`], workingDirectory: workDir, - environment: cursorEnv + environment: finalEnv }); return; } @@ -370,7 +384,7 @@ Singleton { Quickshell.execDetached({ command: cmd, workingDirectory: workDir, - environment: cursorEnv + environment: finalEnv }); }