summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--nixos/modules/services/x11/desktop-managers/plasma5.nix24
-rw-r--r--pkgs/desktops/plasma-5/plasma-workspace/plasma-workspace.patch22
2 files changed, 43 insertions, 3 deletions
diff --git a/nixos/modules/services/x11/desktop-managers/plasma5.nix b/nixos/modules/services/x11/desktop-managers/plasma5.nix
index ace9dd5321b..e5be9bf2769 100644
--- a/nixos/modules/services/x11/desktop-managers/plasma5.nix
+++ b/nixos/modules/services/x11/desktop-managers/plasma5.nix
@@ -226,7 +226,29 @@ in
       security.pam.services.slim.enableKwallet = true;
 
       # Update the start menu for each user that is currently logged in
-      system.userActivationScripts.plasmaSetup = "${pkgs.libsForQt5.kservice}/bin/kbuildsycoca5";
+      system.userActivationScripts.plasmaSetup = ''
+        # The KDE icon cache is supposed to update itself
+        # automatically, but it uses the timestamp on the icon
+        # theme directory as a trigger.  Since in Nix the
+        # timestamp is always the same, this doesn't work.  So as
+        # a workaround, nuke the icon cache on login.  This isn't
+        # perfect, since it may require logging out after
+        # installing new applications to update the cache.
+        # See http://lists-archives.org/kde-devel/26175-what-when-will-icon-cache-refresh.html
+        rm -fv $HOME/.cache/icon-cache.kcache
+
+        # xdg-desktop-settings generates this empty file but
+        # it makes kbuildsyscoca5 fail silently. To fix this
+        # remove that menu if it exists.
+        rm -fv $HOME/.config/menus/applications-merged/xdg-desktop-menu-dummy.menu
+
+        # Remove the kbuildsyscoca5 cache. It will be regenerated
+        # immediately after. This is necessary for kbuildsyscoca5 to
+        recognize that software that has been removed.
+        rm -fv $HOME/.cache/ksycoca*
+
+        ${pkgs.libsForQt5.kservice}/bin/kbuildsycoca5
+      '';
     })
   ];
 
diff --git a/pkgs/desktops/plasma-5/plasma-workspace/plasma-workspace.patch b/pkgs/desktops/plasma-5/plasma-workspace/plasma-workspace.patch
index dd5f7321f0e..dde4a3c819f 100644
--- a/pkgs/desktops/plasma-5/plasma-workspace/plasma-workspace.patch
+++ b/pkgs/desktops/plasma-5/plasma-workspace/plasma-workspace.patch
@@ -81,7 +81,7 @@ index 714a9bf1..9733c612 100644
  fi
  
  # Boot sequence:
-@@ -33,61 +42,133 @@ fi
+@@ -33,61 +42,142 @@ fi
  #
  # * Then ksmserver is started which takes control of the rest of the startup sequence
  
@@ -102,6 +102,15 @@ index 714a9bf1..9733c612 100644
 +# See http://lists-archives.org/kde-devel/26175-what-when-will-icon-cache-refresh.html
 +rm -fv $HOME/.cache/icon-cache.kcache
 +
++# xdg-desktop-settings generates this empty file but
++# it makes kbuildsyscoca5 fail silently. To fix this
++# remove that menu if it exists.
++rm -fv $HOME/.config/menus/applications-merged/xdg-desktop-menu-dummy.menu
++
++# Remove the kbuildsyscoca5 cache. It will be regenerated immediately after.
++# This is necessary for kbuildsyscoca5 to recognize that software that has been removed.
++rm -fv $HOME/.cache/ksycoca*
++
 +# Qt writes a weird ‘libraryPath’ line to
 +# ~/.config/Trolltech.conf that causes the KDE plugin
 +# paths of previous KDE invocations to be searched.
@@ -721,7 +730,7 @@ diff --git a/startkde/startplasmacompositor.cmake b/startkde/startplasmacomposit
 index dd9e304d..12132f9e 100644
 --- a/startkde/startplasmacompositor.cmake
 +++ b/startkde/startplasmacompositor.cmake
-@@ -1,118 +1,165 @@
+@@ -1,118 +1,174 @@
  #!/bin/sh
  #
 -#  DEFAULT Plasma STARTUP SCRIPT ( @PROJECT_VERSION@ )
@@ -749,6 +758,15 @@ index dd9e304d..12132f9e 100644
 +# See http://lists-archives.org/kde-devel/26175-what-when-will-icon-cache-refresh.html
 +rm -fv $HOME/.cache/icon-cache.kcache
 +
++# xdg-desktop-settings generates this empty file but
++# it makes kbuildsyscoca5 fail silently. To fix this
++# remove that menu if it exists.
++rm -fv $HOME/.config/menus/applications-merged/xdg-desktop-menu-dummy.menu
++
++# Remove the kbuildsyscoca5 cache. It will be regenerated immediately after.
++# This is necessary for kbuildsyscoca5 to recognize that software that has been removed.
++rm -fv $HOME/.cache/ksycoca*
++
 +# Qt writes a weird ‘libraryPath’ line to
 +# ~/.config/Trolltech.conf that causes the KDE plugin
 +# paths of previous KDE invocations to be searched.