+-----------------------------------------------------------------------
| Running kde-plasma on OpenBSD
+-----------------------------------------------------------------------

X11 Startup
===========
KDE Plasma desktop environment is launched through the 'startplasma-x11'
executable. Simply add '/usr/local/bin/startplasma-x11' to your .xinitrc
or .xsession script if you use startx(1) or xenodm(1), respectively. You can
find an example below. The 'XDG_RUNTIME_DIR' should be present before calling
'startplasma-x11'

export XDG_RUNTIME_DIR=/tmp/run/$(id -u)
if [ ! -d $XDG_RUNTIME_DIR ]; then
    mkdir -m 700 -p $XDG_RUNTIME_DIR
fi

if [ -x /usr/local/bin/dbus-launch -a -z "${DBUS_SESSION_BUS_ADDRESS}" ]; then
    eval `dbus-launch --sh-syntax --exit-with-x11`
fi

/usr/local/bin/ck-launch-session /usr/local/bin/startplasma-x11

Logging out and shutting down the computer
==========================================
If your user is part of the _shutdown group and thus can execute shutdown(8),
you should be able to shutdown/logout without further configuration.

Otherwise, halting and rebooting from KDE Plasma require consolekit2 and
polkit-kde-agent: you'll need to run a systemwide D-BUS service

# rcctl enable messagebus

If you don't want to use messagebus/polkit-kde-agent, you can still configure
doas(1) to allow your user to run shutdown/halt -p without having to enter a
password, and create a launcher executing 'doas shutdown -p' (or doas halt -p).

Power management
================
If you use KDE Plasma on a laptop, make sure that the powerdevil package
is installed, which will provide battery levels/information, and will
allow to configure actions upon low battery level or AC plugging. For
proper function, it requires messagebus and upowerd running. If using
consolekit2 and polkit-kde-agent, it will also allow you to suspend the
laptop from the logout dialog.

Resource limits
===============

The "default" login-class resource limits are too conservative for KDE Plasma
users. It is recommended to use the login-class "kde" for all KDE Plasma
users.

Depending on the application and if KDE widgets or plasmashell (you will find a
plasmashell.core in your $HOME) constantly crash, the value must be set
correspondingly higher.

You can easily change the login class with the following command:

# usermod -L kde your-user-name

You might want to consider increasing the kern.maxfiles tunable. Many services
and applications need to monitor activity of a lot of files.

# sysctl kern.maxfiles=65535
# echo "kern.maxfiles=65535" >> /etc/sysctl.conf

Touch screen calibration
========================
xtsscale(1) can be used for touch screen calibration, however it will not
work under kwin, as a workaround, you can kill kwin first, calibrate your
screen, then launch kwin_x11 again.

Screen compositor
=================
You can deactivate the screen compositor under: "System Setting" -> "Display
Configuration" -> "Compositor" or in `~/.config/kwinrc":

[Compositing]
Enabled=false

It is also possible to use a window manager other than KWin with Plasma.

export KDEWM=/usr/local/bin/picom

Desktop search
==============
The auto start Baloo file indexer is disabled by default on OpenBSD. However,
KDE Plasma automatically starts the indexer anyway. To disable it, go to
"Search" -> "File Search" in Systemsettings, or run this command after your
first startup:

/usr/local/bin/balooctl6 enable

Wayland
=======
The KDE Plasma Wayland support is currently experimental and **does not work
out-of-box yet**. You can use the following script to test it:

#! /bin/sh

export XDG_RUNTIME_DIR=/tmp/run/$(id -u)
if [ ! -d $XDG_RUNTIME_DIR ]; then
    mkdir -m 700 -p $XDG_RUNTIME_DIR
fi

GROUP=`id -g $USER`

doas chown $USER:$GROUP /dev/console
if [ -c /dev/dri/card0 ]; then
    doas chown $USER:$GROUP /dev/dri/card0
fi
if [ -c /dev/dri/renderD128 ]; then
    doas chown $USER:$GROUP /dev/dri/renderD128
fi

# You can try and play with this options:
export KWIN_DRM_DEVICES=/dev/dri/card0:/dev/dri/renderD128
export WAYLAND_DISPLAY=wayland-0
export LIBSEAT_BACKEND=consolekit2
#export QT_QPA_PLATFORM=wayland
#export XDG_SESSION_TYPE=wayland

if [ -x /usr/local/bin/dbus-launch -a -z "${DBUS_SESSION_BUS_ADDRESS}" ]; then
	eval $(dbus-launch --sh-syntax )
fi

/usr/local/bin/ck-launch-session /usr/local/bin/startplasma-wayland

KDE PIM and Akonadi
===================
KDE PIM applications like Akonadi, KMail, and Kontact use large messages on the
local machine. The default size on OpenBSD is too small, which causes local
connection issues, and Akonadi-based applications will be flaky (e.g. mailboxes
do not display, messages cannot be found).

Increasing the buffer size is recommended:

# sysctl net.unix.stream.recvspace=65536
# echo "net.unix.stream.recvspace=65536" >> /etc/sysctl.conf

# sysctl net.unix.stream.sendspace=65536
# echo "net.unix.stream.sendspace=65536" >> /etc/sysctl.conf

Known issues
============
- The first start may take a little longer.
- Touchscreen configuration does not work

Not yet ported Plasma applications/plugins
==========================================
 - aura-browser
 - bluedevil
 - breeze-plymouth
 - discover
 - drkonqi
 - flatpak-kcm
 - kwallet-pam
 - plank-player
 - plasma-bigscreen
 - plasma-disks
 - plasma-firewall
 - plasma-integration
 - plasma-mobile
 - plasma-nm
 - plasma-remotecontrollers
 - plasma-systemmonitor
 - plasma-thunderbolt
 - plasma-vault
 - plasma-welcome
 - plymouth-kcm
 - sddm-kcm

Cheat sheet
===========
# Replace plasmashell and kwin
$ plasmashell --replace
$ kwin_{x11,wayland} --replace

Support
=======
Please help to improve this situation and report what works well and what does
not. So that issues are known and a solution can be worked on. Please provide
reports with debugging information:

/usr/local/bin/qdbus-qt6 org.kde.KWin /KWin supportInformation

You can also output all error/info messages by starting `startplasma-x11` with
the following options and provide a full error log.

export QT_FORCE_STDERR_LOGGING=1
export QT_LOGGING_RULES="*=true"
