KDE: Difference between revisions
give some more nuance on how to install plasma 6 and what it comes with |
Add Troubleshoot for Bluetooh |
||
(38 intermediate revisions by 16 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 == | ||
=== 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"> | <syntaxhighlight lang="nix"> | ||
# Using X11 as a non-root user | |||
services | services.displayManager.sddm.settings.General.DisplayServer = "x11-user"; | ||
# Using Wayland (preferred) | |||
services. | services.displayManager.sddm.settings.General.DisplayServer = "wayland"; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== Excluding | === Excluding applications from the default install === | ||
==== Plasma | 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> | ||
environment. | environment.plasma6.excludePackages = with pkgs.kdePackages; [ | ||
plasma-browser-integration | plasma-browser-integration | ||
konsole | konsole | ||
elisa | |||
]; | ]; | ||
</syntaxHighlight> | </syntaxHighlight> | ||
==== Plasma | ==== 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. | environment.plasma5.excludePackages = with pkgs.libsForQt5; [ | ||
plasma-browser-integration | plasma-browser-integration | ||
konsole | konsole | ||
Line 36: | Line 65: | ||
]; | ]; | ||
</syntaxHighlight> | </syntaxHighlight> | ||
=== 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"> | ||
qt = { | qt = { | ||
enable = true; | enable = true; | ||
Line 49: | Line 76: | ||
style = "adwaita-dark"; | 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: | 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 = { | qt = { | ||
enable = true; | enable = true; | ||
platformTheme = "qtct"; | platformTheme = "qtct"; | ||
style | style = "kvantum"; | ||
}; | }; | ||
Line 64: | Line 91: | ||
"Kvantum/kvantum.kvconfig".text = "[General]\ntheme=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. | 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> | |||
== 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. | ||
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 === | |||
# Close Signal | |||
# Open ~/.config/Signal/config.json | |||
# Replace <code>"safeStorageBackend": "kwallet5"</code> with <code>"safeStorageBackend": "kwallet6"</code> (change 5 to 6) | |||
# Start Signal | |||
=== Bluetooth configuration not available === | |||
Add the following configuration (generally in harwdare-configuration.nix): | |||
<syntaxHighlight lang=nix> | |||
hardware.bluetooth.enable = true; | |||
</syntaxHighlight> | |||
This will add the following packages: | |||
<syntaxHighlight lang=nix> | <syntaxHighlight lang=nix> | ||
[ | |||
bluedevil | |||
bluez-qt | |||
pkgs.openobex | |||
pkgs.obexftp | |||
] | |||
</syntaxHighlight> | </syntaxHighlight> | ||
[https://github.com/ | == Tips and tricks == | ||
=== 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. | |||
< | === 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]] |