KWin is the window manager used in KDE Plasma. It increasingly sees adoption on Qt-based desktop systems that are otherwise not using KDE Plasma, including CutefishOS, CyberOS, Deepin, Nitrux, and helloSystem beginning with 0.5.0. However, KWin and its packaging are currently not optimized for use outside of KDE Plasma yet, drawing in "half of KDE Plasma" as dependencies.
Installing the FreeBSD plasma5-kwin package on helloSystem draws in hundreds of megabytes.
FreeBSD% sudo pkg install plasma5-kwin Updating FreeBSD repository catalogue... FreeBSD repository is up to date. All repositories are up to date. The following 110 package(s) will be affected (of 0 checked): New packages to be INSTALLED: aspell: 0.60.8_1,1 boost-libs: 1.72.0_4 brotli: 1.0.9,1 docbook: 1.5 docbook-sgml: 4.5_1 docbook-xml: 5.0_3 docbook-xsl: 1.79.1_1,1 dotconf: 1.3_1 espeak: 1.48.04_7 fftw3: 3.3.9 flac: 1.3.3 gnupg: 2.2.27 gpgme: 1.15.1 gpgme-cpp: 1.15.1 gpgme-qt5: 1.15.1 gstreamer1-libav: 1.16.2 gstreamer1-plugins-a52dec: 1.16.2 gstreamer1-plugins-core: 1.16 gstreamer1-plugins-dts: 1.16.2 gstreamer1-plugins-dvdread: 1.16.2_1 gstreamer1-plugins-mpg123: 1.16.2 gstreamer1-plugins-pango: 1.16.2 gstreamer1-plugins-png: 1.16.2 gstreamer1-plugins-resindvd: 1.16.2_1 gstreamer1-plugins-theora: 1.16.2 gstreamer1-plugins-ugly: 1.16.2 hyphen: 2.8.8 iso8879: 1986_3 kf5-attica: 5.80.0 kf5-breeze-icons: 5.80.0 kf5-frameworkintegration: 5.80.0 kf5-kactivities: 5.80.0 kf5-karchive: 5.80.0 kf5-kauth: 5.80.0 kf5-kbookmarks: 5.80.0 kf5-kcmutils: 5.80.0 kf5-kcodecs: 5.80.0 kf5-kcompletion: 5.80.0 kf5-kconfigwidgets: 5.80.0 kf5-kcrash: 5.80.0 kf5-kdeclarative: 5.80.0 kf5-kded: 5.80.0 kf5-kdelibs4support: 5.80.0 kf5-kdesignerplugin: 5.80.0 kf5-kdewebkit: 5.80.0 kf5-kdoctools: 5.80.0 kf5-kemoticons: 5.80.0 kf5-kglobalaccel: 5.80.0 kf5-kguiaddons: 5.80.0 kf5-kiconthemes: 5.80.0 kf5-kidletime: 5.80.0 kf5-kinit: 5.80.0 kf5-kio: 5.80.1 kf5-kirigami2: 5.80.0 kf5-kitemmodels: 5.80.0 kf5-kitemviews: 5.80.0 kf5-kjobwidgets: 5.80.0 kf5-knewstuff: 5.80.0 kf5-knotifications: 5.80.0 kf5-kpackage: 5.80.0 kf5-kparts: 5.80.0 kf5-kplotting: 5.80.0 kf5-kservice: 5.80.0 kf5-ktextwidgets: 5.80.0 kf5-kunitconversion: 5.80.0 kf5-kwallet: 5.80.0 kf5-kwayland: 5.80.0 kf5-kwidgetsaddons: 5.80.0 kf5-kxmlgui: 5.80.0 kf5-plasma-framework: 5.80.0 kf5-solid: 5.80.0 kf5-sonnet: 5.80.0 liba52: 0.7.4_3 libassuan: 2.5.4 libcanberra: 0.30_5 libcanberra-gtk3: 0.30_5 libdca: 0.0.7 libksba: 1.5.0 libsndfile: 1.0.31 mpg123: 1.26.5 npth: 1.6 phonon-qt5: 4.11.1 pinentry: 1.1.1 pinentry-curses: 1.1.1 pinentry-qt5: 1.1.1 plasma-wayland-protocols: 1.2.1 plasma5-breeze: 5.20.5 plasma5-kdecoration: 5.20.5 plasma5-kscreenlocker: 5.20.5 plasma5-kwayland-server: 5.20.5 plasma5-kwin: 5.20.5_1 portaudio: 19.6.0_5,1 qt5-assistant: 5.15.2 qt5-designer: 5.15.2_1 qt5-help: 5.15.2_1 qt5-qdbus: 5.15.2 qt5-sensors: 5.15.2_1 qt5-speech: 5.15.2 qt5-uiplugin: 5.15.2 qt5-uitools: 5.15.2_1 qt5-virtualkeyboard: 5.15.2_1 qt5-wayland: 5.15.2_1 qt5-webkit: 5.212.0.a4_4 sdocbook-xml: 1.1_2,2 speech-dispatcher: 0.8.8_1 woff2: 1.0.2_4 xcb-util-cursor: 0.1.3 xmlcatmgr: 2.2_2 xmlcharent: 0.3_2 xwayland-devel: 1.20.0.907 Number of packages to be installed: 110 The process will require 552 MiB more space. 108 MiB to be downloaded. Hence this approach at packaging KWin and BreezeEnhanced in a way that minimizes its dependencies. The resulting KWin.appapplication bundle is smaller by roughly a factor of 20 compared to FreeBSD packaging.
This repository is intended as a starting point to work with upstream KWin developers on "KWinLite", a build configuration of KWin that draws in as few dependencies as possible while still maintaining the core functionality of a window manager to be used on Qt-based desktop systems other than KDE Plasma.
- Run helloSystem 0.4.0 Live ISO (it does not contain the
plasma5-kwinandbreezeenhancedpackages nor many of their dependencies) sudo pkg install -y xcb-util-cursor qt5-sensors qt5-wayland- Download KWin.app.zip from GitHub Releases
killall picom openboxto quit the previous compositor and window manager- Double-click to open the zip file
- Double-click KWin to launch it
- Run FreeBSD 12.2 with the
plasma5-kwinandbreezeenhancedpackages installed - Create and change to a temporary directory
- Run
makebundle.sh
- Part of the size reduction comes from using stub libraries that just do nothing but implement the symbols to satisfy the dependencies without having to change the source code.
kwin_x11can run fine when using stubs for libKF5Attica, libKF5Crash, libKScreenLocker, libKF5Notifications, libKF5Codecs, libKF5Auth, libKF5AuthCore, libKF5WidgetsAddons, libKF5WaylandClient, libKWaylandServer, libwayland-server - Hence, making those weak (optional) dependencies or removing them altogether as dependencies should be possible by patching the KWin source code. Any help appreciated.
- When trying to also replace the libKF5KIOCore, libKF5KIOWidgets, libKF5XmlGui libraries with stubs, then we get
dbus[2585]: arguments to dbus_message_iter_append_basic() were incorrect, assertion "*bool_p == 0 || *bool_p == 1" failed in file dbus-message.c line 2783.Possibly this can be solved by patching the KWin source code. Any help appreciated. - When trying to also replace the libKF5ConfigGui and libKF5ConfigWidgets libraries with stubs, then
kwin_x11refuses to run even when invoked with--lock. Possibly this can be solved by patching the KWin source code. Any help appreciated. - It is not clear how central the following are to the operation of KWin and whether making them optional would be feasible: libKF5Plasma, libKF5GuiAddons, libKF5Package, libKF5ConfigGui, libKF5Service, libKF5CoreAddons, libKF5I18n. Trying to replace those with stubs leads to crashes. Possibly this can be solved by patching the KWin source code. Any help appreciated.
- Work with upstream to remove the need for stub libraries by making the respective libraries weak (optional) dependencies or removing them altogether as dependencies