KDE: Difference between revisions

imported>Lumarius
Added an example for installing a Qt theme using Kvantum.
Add Troubleshoot for Bluetooh
 
(40 intermediate revisions by 17 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 ==


To use KDE Plasma, add this to your configuration.nix:
=== Plasma 6 ===


<syntaxHighlight lang=nix>
{{file|/etc/nixos/configuration.nix|nix|<nowiki>
services.xserver.enable = true;
{
services.xserver.displayManager.sddm.enable = true;
  services.xserver.enable = true; # optional
services.xserver.desktopManager.plasma5.enable = true;
  services.displayManager.sddm.enable = true;
# KDE Plasma 6 is now available on unstable
  services.displayManager.sddm.wayland.enable = true;
# services.desktopManager.plasma6.enable = true;
  services.desktopManager.plasma6.enable = true;
</syntaxHighlight>
}
</nowiki>}}
 
=== Plasma 5 ===
 
{{file|/etc/nixos/configuration.nix|nix|<nowiki>
{
  services.xserver.enable = true;
  services.displayManager.sddm.enable = true;
  services.xserver.desktopManager.plasma5.enable = true;
}
</nowiki>}}
 
== Configuration ==
 
=== 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 better tested and thus preferred:
 
<syntaxhighlight lang="nix">
# Using X11 as a non-root user
services.displayManager.sddm.settings.General.DisplayServer = "x11-user";
 
# Using Wayland (preferred)
services.displayManager.sddm.settings.General.DisplayServer = "wayland";
</syntaxhighlight>
 
=== Excluding applications from the default install ===


=== Excluding some KDE Plasma applications from the default install ===
Some optional packages can be excluded if they are not needed at the cost of functionality.


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


Not all applications that come pre-installed with the KDE Plasma desktop environment are desirable for everyone to have on their machines. There's a way to edit configuration.nix to exclude some [https://github.com/NixOS/nixpkgs/blob/nixos-23.11/nixos/modules/services/x11/desktop-managers/plasma5.nix#L275-L284 optional packages], for example as follows:
Optional packages: [https://github.com/NixOS/nixpkgs/blob/nixos-unstable/nixos/modules/services/desktop-managers/plasma6.nix#L136-L149 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/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
Line 36: Line 65:
];
];
</syntaxHighlight>
</syntaxHighlight>
== Configuration ==


=== GNOME desktop integration ===
=== GNOME desktop integration ===
Line 43: Line 70:
Using the following example configuration, QT applications will have a look similar to the [[GNOME]] desktop, using a dark theme.
Using the following example configuration, QT applications will have a look similar to the [[GNOME]] desktop, using a dark theme.


<syntaxHighlight lang=nix>
<syntaxhighlight lang="nix">
qt = {
qt = {
   enable = true;
   enable = true;
Line 49: Line 76:
   style = "adwaita-dark";
   style = "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 an example using Arc-Dark.
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:


<syntaxHighlight lang=nix>
<syntaxhighlight lang="nix">
qt = {
qt = {
   enable = true;
   enable = true;
   platformTheme = "qtct";
   platformTheme = "qtct";
   style.name = "kvantum";
   style = "kvantum";
};
};


Line 64: Line 91:
   "Kvantum/kvantum.kvconfig".text = "[General]\ntheme=ArcDark";
   "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.
For more details, see [https://discourse.nixos.org/t/guide-to-installing-qt-theme/35523/2 this] forum post.


== Troubleshoots ==
=== Default Wayland/X11 session ===
 
==== 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">
services.displayManager.defaultSession = "plasmawayland";
</syntaxhighlight>
 
== Troubleshooting ==


=== Qt/KDE applications segfault on start ===
=== Qt/KDE applications segfault on start ===
Line 81: Line 132:
This affects GTK applications including Firefox and Thunderbird.
This affects GTK applications including Firefox and Thunderbird.


Add to your configuration.nix the following line:
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''.


<syntaxHighlight lang=nix>
[https://github.com/NixOS/nixpkgs/issues/180720 (See this issue)]
programs.dconf.enable = true;
</syntaxHighlight>


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''.
=== After Update to Plasma 6 Signal-Desktop complains about a Database Error involving kwallet5 ===


[https://github.com/NixOS/nixpkgs/issues/180720 (See this issue)]
# Close Signal
# Open ~/.config/Signal/config.json
# Replace <code>"safeStorageBackend": "kwallet5"</code> with <code>"safeStorageBackend": "kwallet6"</code> (change 5 to 6)
# Start Signal


=== KMail Renders Blank Messages ===
=== Bluetooth configuration not available ===


When you see the message <code>grantlee.template: "Plugin library 'kde_grantlee_plugin' not found."</code> and/or kmail does shows only empty message then add to your configuration.nix the following line:
Add the following configuration (generally in harwdare-configuration.nix):


<syntaxHighlight lang=nix>
<syntaxHighlight lang=nix>
environment.sessionVariables = {
hardware.bluetooth.enable = true;
  NIX_PROFILES = "${pkgs.lib.concatStringsSep " " (pkgs.lib.reverseList config.environment.profiles)}";
};
</syntaxHighlight>
</syntaxHighlight>


[https://github.com/NixOS/nixpkgs/issues/160599 (See this issue)]
This will add the following packages:
 
<syntaxHighlight lang=nix>
[
bluedevil
bluez-qt
pkgs.openobex
pkgs.obexftp
]
</syntaxHighlight>


=== Launch KDE in Wayland session ===
== Tips and tricks ==


==== Plasma 5 ====
=== Plasma-Manager ===
 
{{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.
 
=== User icon (avatar) ===
You can add a profile picture to your user by using a png file in <code>~/.face.icon</code>.
 
== 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.


<syntaxHighlight lang=nix>
=== Customizing ''nixpkgs'' ===
services.xserver.displayManager.defaultSession = "plasmawayland";
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">
</syntaxHighlight>
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:


==== Plasma 6 ====
==== Using a single diff from a remote URL ====
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.


For KDE Plasma 6, the defaults have changed. KDE Plasma 6 runs on Wayland with the default session set to <code>plasma</code>.
# 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>
If you want to use the X11 session as your default session, change it to <code>plasmax11</code>.
# Override the <code>patches</code> attribute of the <code>powerdevil</code>package:<syntaxhighlight lang="nix">
<syntaxHighlight lang=nix>
kdePackages = prev.kdePackages.overrideScope(kdeFinal: kdePrev: {
services.xserver.displayManager.defaultSession = "plasma";
  powerdevil = kdePrev.powerdevil.overrideAttrs (prevPdAttrs: {
</syntaxHighlight>
    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>


==== Launch SDDM in Wayland too ====
==== 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.


It's possible to launch sddm in Wayland too to try to avoid running an X server.
===== Remote repository =====
<syntaxhighlight lang="nix">
kdePackages = prev.kdePackages.overrideScope(kdeFinal: kdePrev: {
  powerdevil = kdePrev.powerdevil.overrideAttrs (prevPdAttrs: {
    src = builtins.fetchGit {
      url = "https://invent.kde.org/plasma/powerdevil";
      rev = "f731c18e377b87c57f7205d9c1812a34f588c577";
    };
  });
});


<syntaxHighlight lang=nix>
</syntaxhighlight>
services.xserver.displayManager.sddm.wayland.enable = true;
</syntaxHighlight>


=== Plasma-Manager ===
===== 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";
    };
  });
});


{{note|  [https://github.com/pjones/plasma-manager Plasma-Manager] is not matured yet and currently unofficial }}
</syntaxhighlight>
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.


==== Using the worktree of a local repository ====
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.


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">
kdePackages = prev.kdePackages.overrideScope(kdeFinal: kdePrev: {
  powerdevil = kdePrev.powerdevil.overrideAttrs (prevPdAttrs: {
    src = /home/eliasp/code-repositories/public/KDE/plasma/powerdevil;
  });
});


</syntaxhighlight>
{{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>}}
[[Category:Desktop environment]]
[[Category:Desktop environment]]
[[Category:Applications]]
[[Category:Applications]]
[[Category:KDE]]