KDE: Difference between revisions

1sixth (talk | contribs)
m remove redundant sddm setting, see https://github.com/NixOS/nixpkgs/commit/7a2cb2ad1573b79c94fb047bd6cdc6fe73726f2a
DHCP (talk | contribs)
m style fixes
 
(27 intermediate revisions by 8 users not shown)
Line 3: Line 3:
== Installation ==
== Installation ==


=== Plasma 6 ===
To use KDE Plasma, add this to your configuration.nix:


{{file|3=<nowiki>
{{file|3={
{
   # Enable Plasma
   services.xserver.enable = true; # optional
   services = {
   services.displayManager.sddm.enable = true;
    desktopManager.plasma6.enable = true;
  services.desktopManager.plasma6.enable = true;
}
</nowiki>|name=/etc/nixos/configuration.nix|lang=nix}}


=== Plasma 5 ===
    # Default display manager for Plasma
 
    displayManager.plasma-login-manager.enable = true;
{{file|/etc/nixos/configuration.nix|nix|<nowiki>
{
  services.xserver.enable = true;
  services.displayManager.sddm.enable = true;
  services.xserver.desktopManager.plasma5.enable = true;
}
</nowiki>}}''<big>'''Note:'''</big> As of 2024, KDE Plasma 5 is end of life will not be available after NixOS 25.05.''


    # Optionally enable xserver
    # xserver.enable = true;
  };
}|name=configuration.nix|lang=nix}}
== Configuration ==
== 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">
# 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 41: Line 23:
Some optional packages can be excluded if they are not needed at the cost of functionality.
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/7e495b747b51f95ae15e74377c5ce1fe69c1765f/nixos/modules/services/desktop-managers/plasma6.nix#L150-L170]
 
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>
environment.plasma6.excludePackages = with pkgs.kdePackages; [
  plasma-browser-integration
  konsole
  elisa
];
</syntaxHighlight>
 
==== 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]
{{File|3={
 
  environment.plasma6.excludePackages = with pkgs.kdePackages; [
<syntaxHighlight lang=nix>
    plasma-browser-integration
environment.plasma5.excludePackages = with pkgs.libsForQt5; [
    konsole
  plasma-browser-integration
    elisa
  konsole
   ];
   oxygen
}|name=configuration.nix|lang=nix}}
];
</syntaxHighlight>


=== Default Wayland/X11 session ===
=== Default Wayland/X11 session ===


==== Plasma 6 ====
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:
{{File|3={ 
  services.displayManager.defaultSession = "plasmax11";
}|name=configuration.nix|lang=nix}}


<syntaxhighlight lang="nix">
services.displayManager.defaultSession = "plasmax11";
</syntaxhighlight>


==== SDDM on Wayland ====
=== Unlock KDE Wallet with LUKS password ===


When using LUKS disk encryption and autologin in your display manager, it is possible to unlock KDE Wallet with the LUKS password. Set the LUKS password, login password, and KWallet keyring password all to the same string, and for NixOS 25.11 and below use the following configuration:
<syntaxhighlight lang="nix">
<syntaxhighlight lang="nix">
services.displayManager.sddm.wayland.enable = true;
{
  boot.initrd.systemd.enable = true;
  systemd.services.display-manager.serviceConfig.KeyringMode = "inherit";
  security.pam.services.sddm-autologin.text = pkgs.lib.mkBefore ''
    auth optional ${pkgs.systemd}/lib/security/pam_systemd_loadkey.so
    auth include sddm
  '';
}
</syntaxhighlight>
</syntaxhighlight>


==== Plasma 5 ====
For Plasma Login Manager in NixOS 26.05 or above, use:
 
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.displayManager.defaultSession = "plasmawayland";
{
  boot.initrd.systemd.enable = true;
  systemd.services.plasmalogin.serviceConfig.KeyringMode = "inherit";
  security.pam.services.plasmalogin-autologin.rules.auth = {
    systemd_loadkey = {
      order = 0;
      control = "optional";
      modulePath = "${pkgs.systemd}/lib/security/pam_systemd_loadkey.so";
    };
    plasmalogin = {
      order = 1;
      control = "include";
      modulePath = "plasmalogin";
    };
  };
}
</syntaxhighlight>
</syntaxhighlight>


Line 95: Line 82:
This is caused by a stale QML cache [https://github.com/NixOS/nixpkgs/issues/177720 (see this issue)]. A dirty way to fix this is by running on a terminal the following command:
This is caused by a stale QML cache [https://github.com/NixOS/nixpkgs/issues/177720 (see this issue)]. A dirty way to fix this is by running on a terminal the following command:


<syntaxHighlight lang=sh>
<syntaxHighlight lang=console>
find ${XDG_CACHE_HOME:-$HOME/.cache}/**/qmlcache -type f -delete
$ find ${XDG_CACHE_HOME:-$HOME/.cache}/**/qmlcache -type f -delete
</syntaxHighlight>
</syntaxHighlight>


Line 118: Line 105:


<syntaxHighlight lang=nix>
<syntaxHighlight lang=nix>
hardware.bluetooth.enable = true;
hardware.bluetooth.enable = true;
</syntaxHighlight>
</syntaxHighlight>


Line 125: Line 112:
<syntaxHighlight lang=nix>
<syntaxHighlight lang=nix>
[
[
bluedevil
  bluedevil
bluez-qt
  bluez-qt
pkgs.openobex
  pkgs.openobex
pkgs.obexftp
  pkgs.obexftp
]
]
</syntaxHighlight>
</syntaxHighlight>
=== 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. Note that you do not need to add <code>ddcutil</code> to your system packages because PowerDevil uses libddcutil.
=== Plasma wallpaper reverts back to default after a Nix GC ===
When setting a wallpaper, Plasma may save the path as a <code>/nix/store/*/share/wallpapers</code> path instead of <code>/run/current-system/sw/share/wallpapers/</code>. To fix this, open <code>$XDG_CONFIG_HOME/plasma-org.kde.plasma.desktop-appletsrc</code> and manually change the paths.
=== No available locale settings in the Plasma system settings ===
The "Region & Language" page in the Plasma system settings is somewhat broken on NixOS. Instead, edit the <code>$XDG_CONFIG_HOME/plasma-localerc</code> file.
If you really want to configure locale in settings, you can use this workaround:
<syntaxhighlight lang="nix">
{ pkgs, ... }:
{
  i18n = {
    extraLocales = "all";
    imperativeLocale = true; # Unknown if needed (system settings sets user-level override?)
  };
  environment = {
    systemPackages = [ pkgs.stdenv.cc.libc.out ]; # this derivation contains the locales
    pathsToLink = [ "/share/i18n" ];
  };
}
</syntaxhighlight>
Switch to that configuration, then run:
<syntaxhighlight lang=console>
# mkdir -p /usr/share/i18n
# ln -s /run/current-system/sw/share/i18n/locales /usr/share/i18n/locales
</syntaxhighlight>
That is a very dirty command, and I don't know if it persists across reboots.


== Tips and tricks ==
== Tips and tricks ==
Line 136: Line 155:
=== Plasma-Manager ===
=== Plasma-Manager ===


{{note|  [https://github.com/pjones/plasma-manager Plasma-Manager] is an unofficial community project and is not yet mature}}  
{{note|  [https://github.com/nix-community/plasma-manager Plasma-Manager] is a community project}}  
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/nix-community/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) ===
=== User icon (avatar) ===