KDE: Difference between revisions

Sdht0 (talk | contribs)
Copy edit and reorder sections
Malix (talk | contribs)
m Installation: feat: link to PLM
 
(57 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 ===
 
==== 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:
 
<syntaxHighlight lang=nix>
environment.plasma5.excludePackages = with pkgs.libsForQt5; [
  plasma-browser-integration
  konsole
  oxygen
];
</syntaxHighlight>


==== Plasma 6 ====
  # Default display manager for Plasma
  services.displayManager.sddm = {
    enable = true;
 
  # To use Wayland (Experimental for SDDM)
    wayland.enable = true;
  };


<syntaxHighlight lang=nix>
  # Optionally enable xserver
environment.plasma6.excludePackages = with pkgs.kdePackages; [
  services.xserver.enable = true;
  plasma-browser-integration
}|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.}}
  konsole
  oxygen
];
</syntaxHighlight>


== Configuration ==
== Configuration ==


=== GNOME desktop integration ===
=== Excluding applications from the default install ===


Using the following example configuration, QT applications will have a look similar to the [[GNOME]] desktop, using a dark theme.
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]
qt = {
  enable = true;
  platformTheme = "gnome";
  style = "adwaita-dark";
};
</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:
{{File|3={
  environment.plasma6.excludePackages = with pkgs.kdePackages; [
    plasma-browser-integration
    konsole
    elisa
  ];
}|name=configuration.nix|lang=nix}}


<syntaxHighlight lang=nix>
=== Plasma Login Manager ===
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.
[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.


=== Wayland/X11 session ===
{{File|3={
  services.displayManager.plasma-login-manager = {
    enable = true;
  };
}|name=configuration.nix|lang=nix}}


==== Plasma 5 ====
=== Default Wayland/X11 session ===


Plasma 6 runs on X11 by default. To launch wayland:
Plasma 6 runs on Wayland by default. To launch an X11 session by default:


<syntaxHighlight lang=nix>
{{File|3=
services.xserver.displayManager.defaultSession = "plasmawayland";
  services.displayManager.defaultSession = "plasmax11";
</syntaxHighlight>
}|name=configuration.nix|lang=nix}}
 
==== Plasma 6 ====
 
Plasma 6 runs on Wayland by default. To launch X11:
<syntaxHighlight lang=nix>
services.xserver.displayManager.defaultSession = "plasmax11";
</syntaxHighlight>
 
==== SDDM in Wayland ====
 
<syntaxHighlight lang=nix>
services.xserver.displayManager.sddm.wayland.enable = true;
</syntaxHighlight>


== Troubleshooting ==
== Troubleshooting ==
Line 106: 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''.
 
[https://github.com/NixOS/nixpkgs/issues/180720 (See this issue)]
 
=== After Update to Plasma 6 Signal-Desktop complains about a Database Error involving kwallet5 ===


<syntaxHighlight lang=nix>
# Close Signal
programs.dconf.enable = true;
# Open ~/.config/Signal/config.json
</syntaxHighlight>
# 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 ==
== Tips and tricks ==
Line 132: Line 105:
=== Plasma-Manager ===
=== Plasma-Manager ===


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