KDE: Difference between revisions
| m Fix outdated config path | m Add Plasma 5 deprecation notice | ||
| (10 intermediate revisions by 9 users not shown) | |||
| Line 22: | Line 22: | ||
|    services.xserver.desktopManager.plasma5.enable = true; |    services.xserver.desktopManager.plasma5.enable = true; | ||
| } | } | ||
| </nowiki>}} | </nowiki>}}''<big>'''Note:'''</big> As of 2024, KDE Plasma 5 is end of life will not be available after NixOS 25.05.'' | ||
| == Configuration == | == Configuration == | ||
| 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 40: | Line 44: | ||
| ==== Plasma 6 ==== | ==== Plasma 6 ==== | ||
| Optional packages: [https://github.com/NixOS/nixpkgs/blob/nixos- | Optional packages: [https://github.com/NixOS/nixpkgs/blob/nixos-24.11/nixos/modules/services/desktop-managers/plasma6.nix#L159-L174 plasma6.nix] | ||
| <syntaxHighlight lang=nix> | <syntaxHighlight lang=nix> | ||
| Line 61: | Line 65: | ||
| ]; | ]; | ||
| </syntaxHighlight> | </syntaxHighlight> | ||
| === Default Wayland/X11 session === | === Default Wayland/X11 session === | ||
| Line 97: | Line 72: | ||
| 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 86: | ||
| 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 106: | ||
| [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 hardware-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 143: | Line 144: | ||
| You can add a profile picture to your user by using a png file in <code>~/.face.icon</code>. | 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]] | [[Category:KDE]] | ||