From 4e3fdd78d2a214daf68ad19c19823acf2a3132c0 Mon Sep 17 00:00:00 2001 From: John Ogle Date: Mon, 27 Oct 2025 19:02:26 -0700 Subject: [PATCH] Fix KDE systemsettings default applications menu issue MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit KDE applications in i3 were showing only "Other..." in default applications due to missing applications.menu file. Plasma 6 renamed applications.menu to plasma-applications.menu but KDE components still look for the old name. This creates a symlink from the new location to the expected location using XDG config file management. Fixes kmail and systemsettings not detecting installed applications. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- home/roles/desktop/default.nix | 84 +++++++++++++++++++++++++++++++++- 1 file changed, 83 insertions(+), 1 deletion(-) diff --git a/home/roles/desktop/default.nix b/home/roles/desktop/default.nix index c92a0b2..7e25dcb 100644 --- a/home/roles/desktop/default.nix +++ b/home/roles/desktop/default.nix @@ -19,9 +19,11 @@ in kitty # Desktop utilities + feh # Image viewer and wallpaper setter for X11 solaar # Logitech management software waybar wofi + xdg-utils # XDG utilities for opening files/URLs with default applications # System utilities with GUI components (snapcast.override { pulseaudioSupport = true; }) @@ -37,6 +39,14 @@ in kdePackages.kaddressbook kdePackages.kontact + # KDE System components needed for proper integration + kdePackages.kded + kdePackages.systemsettings + kdePackages.kmenuedit + + # Desktop menu support + kdePackages.plasma-desktop # Contains applications.menu + # KDE Online Accounts support kdePackages.kaccounts-integration kdePackages.kaccounts-providers @@ -70,7 +80,79 @@ in enable = true; }; - xdg.enable = true; + # KDE environment variables for proper integration + home.sessionVariables = { + QT_QPA_PLATFORMTHEME = "kde"; + KDE_SESSION_VERSION = "6"; + }; + + xdg = { + enable = true; + + # Ensure desktop files are made available for discovery + desktopEntries = {}; # This creates the desktop files directory structure + + mimeApps = { + enable = true; + associations.added = { + # Ensure associations are properly registered + "text/html" = "firefox.desktop"; + "x-scheme-handler/http" = "firefox.desktop"; + "x-scheme-handler/https" = "firefox.desktop"; + }; + defaultApplications = { + # Web browsers + "text/html" = "firefox.desktop"; + "x-scheme-handler/http" = "firefox.desktop"; + "x-scheme-handler/https" = "firefox.desktop"; + "x-scheme-handler/about" = "firefox.desktop"; + "x-scheme-handler/unknown" = "firefox.desktop"; + + # Documents + "application/pdf" = "okular.desktop"; + "text/plain" = "kate.desktop"; + "text/x-tex" = "kate.desktop"; + "text/x-c" = "kate.desktop"; + "text/x-python" = "kate.desktop"; + "application/x-shellscript" = "kate.desktop"; + + # Images + "image/png" = "gwenview.desktop"; + "image/jpeg" = "gwenview.desktop"; + "image/jpg" = "gwenview.desktop"; + "image/gif" = "gwenview.desktop"; + "image/bmp" = "gwenview.desktop"; + "image/tiff" = "gwenview.desktop"; + "image/webp" = "gwenview.desktop"; + + # Archives + "application/zip" = "ark.desktop"; + "application/x-tar" = "ark.desktop"; + "application/x-compressed-tar" = "ark.desktop"; + "application/x-7z-compressed" = "ark.desktop"; + "application/x-rar" = "ark.desktop"; + + # Audio + "audio/mpeg" = "elisa.desktop"; + "audio/mp4" = "elisa.desktop"; + "audio/flac" = "elisa.desktop"; + "audio/ogg" = "elisa.desktop"; + "audio/wav" = "elisa.desktop"; + + # Email + "message/rfc822" = "kmail.desktop"; + "x-scheme-handler/mailto" = "kmail.desktop"; + + # Calendar + "text/calendar" = "korganizer.desktop"; + "application/x-vnd.akonadi.calendar.event" = "korganizer.desktop"; + }; + }; + }; + + # Fix for KDE applications.menu file issue on Plasma 6 + # KDE still looks for applications.menu but Plasma 6 renamed it to plasma-applications.menu + xdg.configFile."menus/applications.menu".source = "${pkgs.kdePackages.plasma-workspace}/etc/xdg/menus/plasma-applications.menu"; # Note: modules must be imported at top-level home config };