From a803f96f41e87094b58cf32cba928a94fa9425cd Mon Sep 17 00:00:00 2001 From: Mati7235 Date: Mon, 13 Jul 2026 02:54:28 +0000 Subject: [PATCH] dms doctor: detect missing XDG_MENU_PREFIX when KDE apps are installed (#2840) * dms doctor: warn when XDG_MENU_PREFIX is missing with KDE apps Under non-Plasma compositors (niri, Hyprland, Sway), Dolphin's 'Open with...' dialog appears empty because KService/KApplicationTrader requires a populated XDG menu tree, which depends on XDG_MENU_PREFIX. This check warns the user when kde-cli-tools (keditfiletype) is installed but XDG_MENU_PREFIX is not set. Ref: https://specifications.freedesktop.org/menu-spec/latest/ * fix(dms doctor): improve warning message for missing XDG_MENU_PREFIX Port 1.5 --------- Co-authored-by: Matias --- core/cmd/dms/commands_doctor.go | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/core/cmd/dms/commands_doctor.go b/core/cmd/dms/commands_doctor.go index 543dd82eb..936657811 100644 --- a/core/cmd/dms/commands_doctor.go +++ b/core/cmd/dms/commands_doctor.go @@ -320,6 +320,7 @@ func checkEnvironmentVars() []checkResult { var results []checkResult results = append(results, checkEnvVar("QT_QPA_PLATFORMTHEME")...) results = append(results, checkEnvVar("QS_ICON_THEME")...) + results = append(results, checkXDGMenuPrefix()...) return results } @@ -334,6 +335,29 @@ func checkEnvVar(name string) []checkResult { return nil } +func checkXDGMenuPrefix() []checkResult { + menuPrefix := os.Getenv("XDG_MENU_PREFIX") + if menuPrefix != "" { + if checkXDGMenuFile(menuPrefix) { + return []checkResult{{catEnvironment, "XDG_MENU_PREFIX", statusInfo, menuPrefix, "", doctorDocsURL + "#xdg-menu-prefix"}} + } + return []checkResult{{catEnvironment, "XDG_MENU_PREFIX", statusWarn, fmt.Sprintf("%s (menu file not found)", menuPrefix), fmt.Sprintf("Dolphin 'Open with…' dialog may be empty. Ensure /etc/xdg/menus/%sapplications.menu exists.", menuPrefix), doctorDocsURL + "#xdg-menu-prefix"}} + } + if _, err := exec.LookPath("keditfiletype"); err == nil { + return []checkResult{{catEnvironment, "XDG_MENU_PREFIX", statusWarn, "Not set", "Dolphin file associations and 'Open with…' dialog may be empty. Set XDG_MENU_PREFIX=plasma- in your compositor's environment block.", doctorDocsURL + "#xdg-menu-prefix"}} + } + if doctorVerbose { + return []checkResult{{catEnvironment, "XDG_MENU_PREFIX", statusInfo, "Not set", "", doctorDocsURL + "#xdg-menu-prefix"}} + } + return nil +} + +func checkXDGMenuFile(prefix string) bool { + menuPath := fmt.Sprintf("/etc/xdg/menus/%sapplications.menu", prefix) + _, err := os.Stat(menuPath) + return err == nil +} + func readOSRelease() map[string]string { result := make(map[string]string) data, err := os.ReadFile("/etc/os-release")