I tried maliit-keyboard as suggested by @crazymevt I tried with just specifying the impute method, then expanded to ensure the setup script would load, and when that failed, even tried adding a delay, because I worried perhaps I was racing somewhere (nothing in the logs suggest this, but I thought it wouldn’t hurt).
Still no luck.
# ----------------------------------------
# 🖼️ Graphical Desktop.
# ----------------------------------------
# 🖼️ Enable KDE Plasma (Graphical Desktop).
# This enables the KDE Plasma desktop — a modern, user-friendly graphical interface.
# It also enables SDDM (the login screen), which is required for graphical logins.
# Without it, you won't see a login screen or access KDE.
services.desktopManager.plasma6.enable = true; # Enables the KDE Plasma desktop environment.
services.displayManager.sddm.enable = true; # Required for graphical login.
# ⌨️ This configuration enables the virtual keyboard.
# In addition to supporting accessibility needs, it can also be helpful if your Bluetooth keyboard fails to connect before logging in.
services.displayManager.sddm.setupScript = ''
sleep 2
${pkgs.maliit-keyboard}/bin/maliit-keyboard &
'';
services.displayManager.sddm.settings = {
General = {
InputMethod = "maliit-keyboard";
};
};
# This is important: use a theme that supports the virtual keyboard
services.displayManager.sddm.theme = "breeze"; # Or another theme that shows the "keyboard" icon
services.displayManager.sddm.extraPackages = with pkgs.kdePackages; [
pkgs.maliit-keyboard
pkgs.maliit-framework
sddm-kcm # Optional: KDE SDDM Config Module
breeze
];
# 🖥️ X11 vs Wayland.
# At the SDDM login screen, you can choose either "Plasma (X11)" or "Plasma (Wayland)".
# Click the gear icon before logging in to pick your session.
#
# ✅ Tip: If you're unsure, try Wayland — you can switch back at any time.
# 🪟 Enable Wayland (modern graphical system).
services.displayManager.sddm.wayland.enable = true;
# 🖼️ Enable X11 (legacy graphical system).
# KDE Plasma supports both. You can leave both enabled if you're not sure which to use.
services.xserver.enable = true;
# 🧑💻 Keyboard Layout (X11 only).
# Sets the keyboard layout for X11. Wayland layouts are handled through KDE settings.
# Change the layout code below if you're using something other than US QWERTY.
services.xserver.xkb = {
layout = "us"; # ⬅️ Change this to your layout (e.g., "de", "fr", "uk").
variant = ""; # Optional: Variant for more specific layouts.
};
# ----------------------------------------
# 🖱️ Touchpad & Input Device Support.
# ----------------------------------------
# This enables the libinput driver for touchpads and other input devices.
# KDE handles most input automatically under Wayland, but enabling this ensures
# proper support across both X11 and Wayland — especially for touchpads and touchscreens.
services.libinput.enable = true; # Recommended for reliable input device support.