KDE: Difference between revisions
m minor wording changes |
Add Troubleshoot for Bluetooh |
||
(10 intermediate revisions by 8 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 == | ||
Line 7: | Line 7: | ||
{{file|/etc/nixos/configuration.nix|nix|<nowiki> | {{file|/etc/nixos/configuration.nix|nix|<nowiki> | ||
{ | { | ||
services.xserver.enable = true; | services.xserver.enable = true; # optional | ||
services.displayManager.sddm.enable = true; | services.displayManager.sddm.enable = true; | ||
services.displayManager.sddm.wayland.enable = true; | services.displayManager.sddm.wayland.enable = true; | ||
Line 30: | Line 30: | ||
{{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: | {{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"> | ||
services | # 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 applications from the default install === | ||
Line 70: | Line 74: | ||
enable = true; | enable = true; | ||
platformTheme = "gnome"; | platformTheme = "gnome"; | ||
style | style = "adwaita-dark"; | ||
}; | }; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Line 76: | Line 80: | ||
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 87: | 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. | ||
Line 97: | Line 101: | ||
Plasma 6 runs on Wayland by default. To launch an X11 session by default: | Plasma 6 runs on Wayland by default. To launch an X11 session by default: | ||
< | <syntaxhighlight lang="nix"> | ||
services | services.displayManager.defaultSession = "plasmax11"; | ||
</ | </syntaxhighlight> | ||
==== SDDM on Wayland ==== | ==== SDDM on Wayland ==== | ||
< | <syntaxhighlight lang="nix"> | ||
services | services.displayManager.sddm.wayland.enable = true; | ||
</ | </syntaxhighlight> | ||
==== Plasma 5 ==== | ==== Plasma 5 ==== | ||
Line 111: | Line 115: | ||
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: | 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 | services.displayManager.defaultSession = "plasmawayland"; | ||
</ | </syntaxhighlight> | ||
== Troubleshooting == | == Troubleshooting == | ||
Line 131: | Line 135: | ||
[https://github.com/NixOS/nixpkgs/issues/180720 (See this issue)] | [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> | |||
[ | |||
bluedevil | |||
bluez-qt | |||
pkgs.openobex | |||
pkgs.obexftp | |||
] | |||
</syntaxHighlight> | |||
== Tips and tricks == | == Tips and tricks == | ||
Line 140: | Line 170: | ||
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 ==== | |||
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]] |