KDE: Difference between revisions

Sandro (talk | contribs)
fix typo
Ben9986 (talk | contribs)
m Add Plasma 5 deprecation notice
 
(22 intermediate revisions by 15 users not shown)
Line 1: Line 1:
KDE Plasma is a desktop environment that aims to be simple by default, powerful when needed.
[https://kde.org/de/plasma-desktop/ KDE Plasma] is a desktop environment that aims to be simple by default, powerful when needed.


== Installation ==
== Installation ==
Line 7: Line 7:
{{file|/etc/nixos/configuration.nix|nix|<nowiki>
{{file|/etc/nixos/configuration.nix|nix|<nowiki>
{
{
   services.xserver.enable = true;
   services.xserver.enable = true; # optional
   services.displayManager.sddm.enable = true;
   services.displayManager.sddm.enable = true;
   services.displayManager.sddm.wayland.enable = true;
   services.displayManager.sddm.wayland.enable = true;
Line 22: Line 22:
   services.xserver.desktopManager.plasma5.enable = true;
   services.xserver.desktopManager.plasma5.enable = true;
}
}
</nowiki>}}
</nowiki>}}''<big>'''Note:'''</big> As of 2024, KDE Plasma 5 is end of life will not be available after NixOS 25.05.''


== Configuration ==
== Configuration ==
Line 28: Line 28:
=== Rootless X11 ===
=== Rootless X11 ===


{{ic|sddm}} launches X11 as a root user by default. For better security, X11 can be run as a non-root user but using Wayland is preferred and better tested:
{{ic|sddm}} launches X11 as a root user by default. For better security, X11 can be run as a non-root user, but using Wayland is better tested and thus preferred:
 
<syntaxhighlight lang="nix">
# Using X11 as a non-root user
services.displayManager.sddm.settings.General.DisplayServer = "x11-user";


<syntaxHighlight lang=nix>
# Using Wayland (preferred)
services.xserver.displayManager.sddm.settings.General.DisplayServer = "x11-user";
services.displayManager.sddm.settings.General.DisplayServer = "wayland";
</syntaxHighlight>
</syntaxhighlight>


=== Excluding applications from the default install ===
=== Excluding applications from the default install ===


Some optional packages that are installed by default can be excluded if they are not needed.
Some optional packages can be excluded if they are not needed at the cost of functionality.


==== Plasma 5 ====
==== Plasma 6 ====


Optional packages: [https://github.com/NixOS/nixpkgs/blob/nixos-23.11/nixos/modules/services/x11/desktop-managers/plasma5.nix#L275-L284 plasma5.nix]
Optional packages: [https://github.com/NixOS/nixpkgs/blob/nixos-24.11/nixos/modules/services/desktop-managers/plasma6.nix#L159-L174 plasma6.nix]


<syntaxHighlight lang=nix>
<syntaxHighlight lang=nix>
environment.plasma5.excludePackages = with pkgs.libsForQt5; [
environment.plasma6.excludePackages = with pkgs.kdePackages; [
   plasma-browser-integration
   plasma-browser-integration
   konsole
   konsole
   oxygen
   elisa
];
];
</syntaxHighlight>
</syntaxHighlight>


==== Plasma 6 ====
==== Plasma 5 ====


Optional packages: [https://github.com/NixOS/nixpkgs/blob/ff0dbd94265ac470dda06a657d5fe49de93b4599/nixos/modules/services/desktop-managers/plasma6.nix#L153-L165 plasma6.nix]
Optional packages: [https://github.com/NixOS/nixpkgs/blob/nixos-24.05/nixos/modules/services/x11/desktop-managers/plasma5.nix#L278-L282 plasma5.nix]


<syntaxHighlight lang=nix>
<syntaxHighlight lang=nix>
environment.plasma6.excludePackages = with pkgs.kdePackages; [
environment.plasma5.excludePackages = with pkgs.libsForQt5; [
   plasma-browser-integration
   plasma-browser-integration
   konsole
   konsole
   elisa
   oxygen
];
];
</syntaxHighlight>
</syntaxHighlight>


=== GNOME desktop integration ===
=== Default Wayland/X11 session ===


Using the following example configuration, QT applications will have a look similar to the [[GNOME]] desktop, using a dark theme.
==== Plasma 6 ====
 
Plasma 6 runs on Wayland by default. To launch an X11 session by default:
 
<syntaxhighlight lang="nix">
services.displayManager.defaultSession = "plasmax11";
</syntaxhighlight>
 
==== SDDM on Wayland ====
 
<syntaxhighlight lang="nix">
services.displayManager.sddm.wayland.enable = true;
</syntaxhighlight>
 
==== Plasma 5 ====
 
Plasma 5 runs on X11 by default and it is recommended to use Wayland with Plasma 6 instead. To launch a Wayland session by default anyway:


<syntaxhighlight lang="nix">
<syntaxhighlight lang="nix">
qt = {
services.displayManager.defaultSession = "plasmawayland";
  enable = true;
  platformTheme = "gnome";
  style.name = "adwaita-dark";
};
</syntaxhighlight>
</syntaxhighlight>


For other themes, you may need the packages <code>libsForQt5.qt5ct</code> and <code>libsForQt5.qtstyleplugin-kvantum</code> and a symlink from <code>~/.config/Kvantum/</code> to your theme package. Here is an example using Arc-Dark and [[Home Manager]]. In the Home Manager configuration:
== Troubleshooting ==
 
=== Qt/KDE applications segfault on start ===


<syntaxHighlight lang=nix>
This is caused by a stale QML cache [https://github.com/NixOS/nixpkgs/issues/177720 (see this issue)]. A dirty way to fix this is by running on a terminal the following command:
qt = {
  enable = true;
  platformTheme = "qtct";
  style.name = "kvantum";
};


xdg.configFile = {
<syntaxHighlight lang=sh>
  "Kvantum/ArcDark".source = "${pkgs.arc-kde-theme}/share/Kvantum/ArcDark";
find ${XDG_CACHE_HOME:-$HOME/.cache}/**/qmlcache -type f -delete
  "Kvantum/kvantum.kvconfig".text = "[General]\ntheme=ArcDark";
};
</syntaxHighlight>
</syntaxHighlight>


For more details, see [https://discourse.nixos.org/t/guide-to-installing-qt-theme/35523/2 this] forum post.
=== GTK themes are not applied in Wayland applications / Window Decorations missing / Cursor looks different ===
This affects GTK applications including Firefox and Thunderbird.


=== Default Wayland/X11 session ===
You may need to set a GTK theme ''Breeze'' imitating the KDE theme with the same name in ''System Settings -> Application Style -->Configure GNOME/GTK Application Style''.


==== Plasma 5 ====
[https://github.com/NixOS/nixpkgs/issues/180720 (See this issue)]


Plasma 5 runs on X11 by default and it is recommend to use Plasma 6 for Wayland instead. To launch a Wayland session by default anyway:
=== After Update to Plasma 6 Signal-Desktop complains about a Database Error involving kwallet5 ===


<syntaxHighlight lang=nix>
# Close Signal
services.xserver.displayManager.defaultSession = "plasmawayland";
# Open ~/.config/Signal/config.json
</syntaxHighlight>
# Replace <code>"safeStorageBackend": "kwallet5"</code> with <code>"safeStorageBackend": "kwallet6"</code> (change 5 to 6)
# Start Signal


==== Plasma 6 ====
=== Bluetooth configuration not available ===


Plasma 6 runs on Wayland by default. To launch an X11 session by default:
Add the following configuration (generally in hardware-configuration.nix):


<syntaxHighlight lang=nix>
<syntaxHighlight lang=nix>
services.xserver.displayManager.defaultSession = "plasmax11";
hardware.bluetooth.enable = true;
</syntaxHighlight>
</syntaxHighlight>


==== SDDM on Wayland ====
This will add the following packages:


<syntaxHighlight lang=nix>
<syntaxHighlight lang=nix>
services.xserver.displayManager.sddm.wayland.enable = true;
[
bluedevil
bluez-qt
pkgs.openobex
pkgs.obexftp
]
</syntaxHighlight>
</syntaxHighlight>


== Troubleshooting ==
== Tips and tricks ==


=== No Sound switching from Gnome ===
=== Plasma-Manager ===


Gnome module has audio enabled, while Plasma will run without sound. So an additional step would be to enable pulseaudio or pipewire
{{note|  [https://github.com/pjones/plasma-manager Plasma-Manager] is an unofficial community project and is not yet mature}}
By default, the Plasma configuration can be handled like on [https://wiki.archlinux.org/title/KDE traditional systems].
With [https://github.com/pjones/plasma-manager plasma-manager], it is possible to make Plasma configurations via nix by providing [https://github.com/nix-community/home-manager home-manager] modules.


<syntaxHighlight lang=nix>
=== User icon (avatar) ===
  hardware.pipewire.enable = true;
You can add a profile picture to your user by using a png file in <code>~/.face.icon</code>.
</syntaxHighlight>


=== Qt/KDE applications segfault on start ===
== Hacking ==
There are many reasons to modify the KDE packages, such as testing patches from other KDE developers, applying a fix before it is officially released and finds its way into ''nixpkgs'' or developing contributions for the KDE project.


This is caused by a stale QML cache [https://github.com/NixOS/nixpkgs/issues/177720 (see this issue)]. A dirty way to fix this is by running on a terminal the following command:
=== Customizing ''nixpkgs'' ===
To override KDE packages, the common way using <code>overrideAttrs</code> won't work, since they are part of the <code>kdePackages</code>scope, which requires the usage of <code>overrideScope</code> first:<syntaxhighlight lang="nix">
nixpkgs-overlay = final: prev: {
  kdePackages = prev.kdePackages.overrideScope(kdeFinal: kdePrev: {
    somepackage = kdePrev.somepackage.overrideAttrs(prevPkgAttrs: {
      someattribute = …;
    };
  };
};
</syntaxhighlight>The following examples will demonstrate various ways how to achieve the customization of the KDE package <code>powerdevil</code> in different scenarios:


<syntaxHighlight lang=sh>
==== Using a single diff from a remote URL ====
find ${XDG_CACHE_HOME:-$HOME/.cache}/**/qmlcache -type f -delete
A KDE developer might have provided a diff that one wants to utilize locally to test it or to make use of it until it's included in an upcoming release.
</syntaxHighlight>


=== GTK themes are not applied in Wayland applications / Window Decorations missing / Cursor looks different ===
# Generate the SRI hash of the file: <code>nix store prefetch-file <nowiki>https://invent.kde.org/plasma/powerdevil/-/commit/f731c18e377b87c57f7205d9c1812a34f588c577.diff</nowiki> --json --name toggle-nightlight.diff</code>
This affects GTK applications including Firefox and Thunderbird.
# Override the <code>patches</code> attribute of the <code>powerdevil</code>package:<syntaxhighlight lang="nix">
kdePackages = prev.kdePackages.overrideScope(kdeFinal: kdePrev: {
  powerdevil = kdePrev.powerdevil.overrideAttrs (prevPdAttrs: {
    patches = prevPdAttrs.patches or [] ++ [
      (prev.fetchpatch {
        name = "toggle-nightlight.diff";
        url = "https://invent.kde.org/plasma/powerdevil/-/commit/f731c18e377b87c57f7205d9c1812a34f588c577.diff";
        sha256 = "sha256-X0ZHSRnSLqmp2fcLGx9DUTn7F9BFh5puh9Q4YAj6/5o=";
      })
    ];
  });
});
</syntaxhighlight>


If you are using Plasma 5, add to your configuration.nix the following line:
==== Using commits of a repository ====
Either a local clone or remote repository might provide the code that should be used to build the package in question instead.


<syntaxHighlight lang=nix>
===== Remote repository =====
programs.dconf.enable = true;
<syntaxhighlight lang="nix">
</syntaxHighlight>
kdePackages = prev.kdePackages.overrideScope(kdeFinal: kdePrev: {
  powerdevil = kdePrev.powerdevil.overrideAttrs (prevPdAttrs: {
    src = builtins.fetchGit {
      url = "https://invent.kde.org/plasma/powerdevil";
      rev = "f731c18e377b87c57f7205d9c1812a34f588c577";
    };
  });
});


You might also need to set a GTK theme ''Breeze'' imitating the KDE theme with the same name in ''System Settings -> Application Style -->Configure GNOME/GTK Application Style''.
</syntaxhighlight>


[https://github.com/NixOS/nixpkgs/issues/180720 (See this issue)]
===== Local repository =====
{{Note|This will ignore files that are present in the worktree, but not committed yet.}}
<syntaxhighlight lang="nix">
kdePackages = prev.kdePackages.overrideScope(kdeFinal: kdePrev: {
  powerdevil = kdePrev.powerdevil.overrideAttrs (prevPdAttrs: {
    src = builtins.fetchGit {
      url = "file:///home/eliasp/code-repositories/public/KDE/plasma/powerdevil";
      rev = "f731c18e377b87c57f7205d9c1812a34f588c577";
    };
  });
});


== Tips and tricks ==
</syntaxhighlight>


=== Plasma-Manager ===
==== Using the worktree of a local repository ====
{{Note|Since this relies on reading directly from the filesystem during the build, the impure mode has to be used, e.g.: <code>nixos-rebuild --impure …</code>}}
Now one might not want to commit each and every change during development to iterate more quickly, but to just rebuild after having saved the latest changes.


{{note|  [https://github.com/pjones/plasma-manager Plasma-Manager] is not matured yet and unofficial community project}}
By just redirecting <code>src</code>to the path of the working directory, where the required code resides, quick & dirty rebuilds are possible:<syntaxhighlight lang="nix">
By default, the Plasma configuration can be handled like on [https://wiki.archlinux.org/title/KDE traditional systems].  
kdePackages = prev.kdePackages.overrideScope(kdeFinal: kdePrev: {
With [https://github.com/pjones/plasma-manager plasma-manager], it is possible to make Plasma configurations via nix by providing [https://github.com/nix-community/home-manager home-manager] modules.
  powerdevil = kdePrev.powerdevil.overrideAttrs (prevPdAttrs: {
    src = /home/eliasp/code-repositories/public/KDE/plasma/powerdevil;
  });
});


</syntaxhighlight>
[[Category:Desktop environment]]
[[Category:Desktop environment]]
[[Category:Applications]]
[[Category:Applications]]
[[Category:KDE]]