KDE: Difference between revisions

Sdht0 (talk | contribs)
Add Tips and tricks section
Malix (talk | contribs)
m Installation: feat: link to PLM
 
(58 intermediate revisions by 26 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/plasma-desktop/ KDE Plasma] is a desktop environment that aims to be simple by default, powerful when needed.


== Installation ==
== Installation ==
Line 5: Line 5:
To use KDE Plasma, add this to your configuration.nix:
To use KDE Plasma, add this to your configuration.nix:


<syntaxhighlight lang="nix">
{{file|3={
services.xserver.enable = true;
  # Enable Plasma  
services.xserver.displayManager.sddm.enable = true;
  services.desktopManager.plasma6.enable = true;
services.xserver.desktopManager.plasma5.enable = true;
</syntaxhighlight>Or if you want to use Plasma 6, available on nixpkgs-unstable:<syntaxhighlight lang="nix">
services.xserver.enable = true;
services.xserver.displayManager.sddm.enable = true;
services.desktopManager.plasma6.enable = true;
</syntaxhighlight>


=== Excluding some KDE Plasma applications from the default install ===
  # Default display manager for Plasma
  services.displayManager.sddm = {
    enable = true;
 
  # To use Wayland (Experimental for SDDM)
    wayland.enable = true;
  };


==== Plasma 5 ====
  # Optionally enable xserver
  services.xserver.enable = true;
}|name=configuration.nix|lang=nix}}{{Warning|SDDM is no longer supported on the unstable branch, users on unstable should use [[KDE#Plasma Login Manager|Plasma Login Manager]] instead. See configuration later in this page.}}


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:
== Configuration ==


<syntaxHighlight lang=nix>
=== Excluding applications from the default install ===
environment.plasma5.excludePackages = with pkgs.libsForQt5; [
  plasma-browser-integration
  konsole
  oxygen
];
</syntaxHighlight>


==== Plasma 6 ====
Some optional packages can be excluded if they are not needed at the cost of functionality.


<syntaxHighlight lang=nix>
Optional packages: [https://github.com/NixOS/nixpkgs/blob/nixos-24.11/nixos/modules/services/desktop-managers/plasma6.nix#L159-L174 plasma6.nix]
environment.plasma6.excludePackages = with pkgs.kdePackages; [
  plasma-browser-integration
  konsole
  oxygen
];
</syntaxHighlight>


== Configuration ==
{{File|3={
  environment.plasma6.excludePackages = with pkgs.kdePackages; [
    plasma-browser-integration
    konsole
    elisa
  ];
}|name=configuration.nix|lang=nix}}


=== GNOME desktop integration ===
=== Plasma Login Manager ===


Using the following example configuration, QT applications will have a look similar to the [[GNOME]] desktop, using a dark theme.
[https://github.com/KDE/plasma-login-manager Plasma Login Manager] is currently only available in unstable. If you are on unstable you can enable it with the following configuration.


<syntaxHighlight lang=nix>
{{File|3={
qt = {
  services.displayManager.plasma-login-manager = {
  enable = true;
    enable = true;
   platformTheme = "gnome";
   };
  style = "adwaita-dark";
}|name=configuration.nix|lang=nix}}
};
</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:
=== Default Wayland/X11 session ===


<syntaxHighlight lang=nix>
Plasma 6 runs on Wayland by default. To launch an X11 session by default:
qt = {
  enable = true;
  platformTheme = "qtct";
  style.name = "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.
{{File|3={ 
  services.displayManager.defaultSession = "plasmax11";
}|name=configuration.nix|lang=nix}}


== Troubleshooting ==
== Troubleshooting ==
Line 83: Line 68:
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>
=== After Update to Plasma 6 Signal-Desktop complains about a Database Error involving kwallet5 ===
 
# Close Signal
# Open ~/.config/Signal/config.json
# Replace <code>"safeStorageBackend": "kwallet5"</code> with <code>"safeStorageBackend": "kwallet6"</code> (change 5 to 6)
# Start Signal


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''.
=== Bluetooth configuration not available ===


[https://github.com/NixOS/nixpkgs/issues/180720 (See this issue)]
Add the following configuration (generally in hardware-configuration.nix):


=== KMail Renders Blank Messages ===
<syntaxHighlight lang=nix>
hardware.bluetooth.enable = true;
</syntaxHighlight>


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:
This will add the following packages:


<syntaxHighlight lang=nix>
<syntaxHighlight lang=nix>
environment.sessionVariables = {
[
  NIX_PROFILES = "${pkgs.lib.concatStringsSep " " (pkgs.lib.reverseList config.environment.profiles)}";
bluedevil
};
bluez-qt
pkgs.openobex
pkgs.obexftp
]
</syntaxHighlight>
</syntaxHighlight>


[https://github.com/NixOS/nixpkgs/issues/160599 (See this issue)]
=== Brightness and Color brightness control sets gamma instead of brightness on external monitors ===
To allow <code>powerdevil</code> (and by extension the "Brightness and Color" status tray menu) to control brightness on supported monitors directly instead of adjusting gamma, [[Backlight#Via ddcutil|configure your system to enable ddcutil]], and allow your user to use DDC/CI without root.
 
== Tips and tricks ==


=== Launch KDE in Wayland session ===
=== Plasma-Manager ===


==== Plasma 5 ====
{{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) ===
services.xserver.displayManager.defaultSession = "plasmawayland";
You can add a profile picture to your user by using a png file in <code>~/.face.icon</code>.
</syntaxHighlight>


==== Plasma 6 ====
== 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.


For KDE Plasma 6, the defaults have changed. KDE Plasma 6 runs on Wayland with the default session set to <code>plasma</code>.
=== Customizing ''nixpkgs'' ===
If you want to use the X11 session as your default session, change it to <code>plasmax11</code>.
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 lang=nix>
nixpkgs-overlay = final: prev: {
services.xserver.displayManager.defaultSession = "plasma";
  kdePackages = prev.kdePackages.overrideScope(kdeFinal: kdePrev: {
</syntaxHighlight>
    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:


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


It's possible to launch sddm in Wayland too to try to avoid running an X server.
# 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>


<syntaxHighlight lang=nix>
==== Using commits of a repository ====
services.xserver.displayManager.sddm.wayland.enable = true;
Either a local clone or remote repository might provide the code that should be used to build the package in question instead.
</syntaxHighlight>
 
===== 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";
    };
  });
});


== Tips and tricks ==
</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 ====
{{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.


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