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; // optional
   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>
<syntaxhighlight lang="nix">
services.xserver.displayManager.sddm.settings.General.DisplayServer = "x11-user";
# Using X11 as a non-root user
</syntaxHighlight>
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.name = "adwaita-dark";
   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>
<syntaxhighlight lang="nix">
qt = {
qt = {
   enable = true;
   enable = true;
   platformTheme = "qtct";
   platformTheme = "qtct";
   style.name = "kvantum";
   style = "kvantum";
};
};


Line 87: Line 91:
   "Kvantum/kvantum.kvconfig".text = "[General]\ntheme=ArcDark";
   "Kvantum/kvantum.kvconfig".text = "[General]\ntheme=ArcDark";
};
};
</syntaxHighlight>
</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>
<syntaxhighlight lang="nix">
services.xserver.displayManager.defaultSession = "plasmax11";
services.displayManager.defaultSession = "plasmax11";
</syntaxHighlight>
</syntaxhighlight>


==== SDDM on Wayland ====
==== SDDM on Wayland ====


<syntaxHighlight lang=nix>
<syntaxhighlight lang="nix">
services.xserver.displayManager.sddm.wayland.enable = true;
services.displayManager.sddm.wayland.enable = true;
</syntaxHighlight>
</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>
<syntaxhighlight lang="nix">
services.xserver.displayManager.defaultSession = "plasmawayland";
services.displayManager.defaultSession = "plasmawayland";
</syntaxHighlight>
</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]]