KDE: Difference between revisions

imported>Gileri
Only optional packages can be excluded. Thanks to https://discourse.nixos.org/t/cant-remove-kwallet/29873/2
Add Troubleshoot for Bluetooh
 
(48 intermediate revisions by 23 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 ===
 
{{file|/etc/nixos/configuration.nix|nix|<nowiki>
{
  services.xserver.enable = true; # optional
  services.displayManager.sddm.enable = true;
  services.displayManager.sddm.wayland.enable = true;
  services.desktopManager.plasma6.enable = true;
}
</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 ===
 
Some optional packages can be excluded if they are not needed at the cost of functionality.
 
==== Plasma 6 ====
 
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>
services.xserver.enable = true;
environment.plasma6.excludePackages = with pkgs.kdePackages; [
services.xserver.displayManager.sddm.enable = true;
  plasma-browser-integration
services.xserver.desktopManager.plasma5.enable = true;
  konsole
  elisa
];
</syntaxHighlight>
</syntaxHighlight>


=== Excluding some KDE Plasma applications from the default install ===
==== Plasma 5 ====
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-24.05/nixos/modules/services/x11/desktop-managers/plasma5.nix#L278-L282 plasma5.nix]


<syntaxHighlight lang=nix>
<syntaxHighlight lang=nix>
Line 21: Line 65:
];
];
</syntaxHighlight>
</syntaxHighlight>
== Configuration ==


=== GNOME desktop integration ===
=== GNOME desktop integration ===


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 34: 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 is an example using Arc-Dark and [[Home Manager]]. In the Home Manager configuration:
 
<syntaxhighlight lang="nix">
qt = {
  enable = true;
  platformTheme = "qtct";
  style = "kvantum";
};
 
xdg.configFile = {
  "Kvantum/ArcDark".source = "${pkgs.arc-kde-theme}/share/Kvantum/ArcDark";
  "Kvantum/kvantum.kvconfig".text = "[General]\ntheme=ArcDark";
};
</syntaxhighlight>
 
For more details, see [https://discourse.nixos.org/t/guide-to-installing-qt-theme/35523/2 this] forum post.
 
=== 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>


== Troubleshoots ==
== Troubleshooting ==


=== Qt/KDE applications segfault on start ===
=== Qt/KDE applications segfault on start ===
Line 49: 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:
 
=== Launch KDE in Wayland session ===


<syntaxHighlight lang=nix>
<syntaxHighlight lang=nix>
services.xserver.displayManager.defaultSession = "plasmawayland";
[
bluedevil
bluez-qt
pkgs.openobex
pkgs.obexftp
]
</syntaxHighlight>
</syntaxHighlight>
== Tips and tricks ==


=== Plasma-Manager ===
=== Plasma-Manager ===
{{note|  [https://github.com/pjones/plasma-manager Plasma-Manager] is not matured yet and currently unofficial }}
On default the plasma configuration can be handeld 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.


{{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.
=== 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:
==== 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.
# 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>
# 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>
==== 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.
===== 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>
===== 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";
    };
  });
});
</syntaxhighlight>
==== 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]]