Manjaro Control Panel, 2025

Manjaro Control Panel, 2025

Preamble

Ok it’s been a while… I was busy with a lot of things but finally I’ve found time and motivation to work on Manjaro Control Panel. I’ve fully reworked Kernels so far and started some groundwork for Drivers.

Currently supported features:

  • Unified backend for multiple UIs, based on libpamac
  • Qt/QML 6 modern UI (Kirigami)
  • KCM (Plasma’s System Settings page), based on Qt/QML UI

Features that are planned:

  • Command Line Interface – almost finished but needs a bit more work, will be ready in a couple of days I think.
  • GNOME UI – haven’t worked on that for now.

Features that would be nice to have:

  • Classic Qt-based UI for non-KDE users. I have a working concept but not sure I’ll have enough time to support it in any way.

What’s next

Current scope of the tool is Kernels and Drivers only. I plan to go iteratively this time and the plan is:

  1. Test and roll out Kernels Qt and CLI
  2. Continue working on Drivers
  3. Test and roll out Drivers
  4. Start with GNOME UI

Screenshots:

Qt/QML/KCM



CLI



Known issues

  • Kernel list doesn’t update after installation
  • Installation status can show up out-of-order
  • Translations are missing
  • You tell me (better using issues page)

The repository is: GitHub - LordTermor/manjaro-control-panel: New Manjaro settings manager

In packaging subfolder there is PKGBUILD. You can try building it yourself to test.

24 Likes

The cli looks nice. The gui does not have indicator for installed kernel (from the screenshot).

Other than that i fail to see how this will replace MSM if it does not support xfce and is missing half of the modules like the time for example. And you don’t even plan to do that.

As with all recent manjaro development, this is rising more questions than giving answers. Like are you, the manjaro developers, planning to officially drop support for xfce?

At the top of the image there’s kernel 6.18 showing as current.

It could probably be highlighted more somehow to make it obvious. Perhaps forcing a brighter border (green) to attract the eye. But, then again, I found it easily enough. :wink:

It does support XFCE, just like the previous one.

I’m open to adding some features specific to other DEs (as Plasma has time settings itself) especially more trivial ones. I just don’t want Plasma to have duplicates as we’ve got a talk with KDE devs about time in past.

We have dozen of devs who use different DEs. It just happened that I use Plasma and work with Plasma input data (design language, available settings). As far as I know nobody is planning to drop XFCE.

Maybe renaming to “currently installed” as i understood “current” as “latest”

It should be “currently in use” I guess…

Yes.
But still if you have many kernels installed it should als be indicated on the list.

It doesn’t show up in list at all now, only on top, to have it harder to mix up. Installed kernels have their own section.

2 Likes
  • Active or In use seems to be self-explanatory.
  • Installed for those kernels, err … installed.
  • something neutral (or no indicator) for other kernel options.

:man_shrugging:

So, just to be clear: is this a tool that will coexist with MSM or will it replace MSM.

I don’t know. I’d like it to replace MSM but not sure it’s possible. We can integrate old modules into this codebase partially (requires porting to Qt6) I think, for “classic” version. But I really want to focus on current scope.

When building w/ manjaro-chrootbuild PKGBUILD has to look like (build on XFCE):

libpamac needed as make dependency

# Maintainer: Manjaro Team

pkgbase=mcp
pkgname=(
    'libmcp'
    'mcp-cli'
    'mcp-qt'
#    'mcp-qt-classic'
#    'mcp-kcm'
)
pkgver=0.1.0
pkgrel=1
pkgdesc="Manjaro Control Panel"
arch=('x86_64' 'aarch64')
url="https://github.com/LordTermor/manjaro-control-panel"
license=('GPL-3.0-or-later')
makedepends=(
    'cmake'
    'ninja'
    'git'
    'extra-cmake-modules'
    'meson'
    'vala'
    'gobject-introspection'
    'qt6-base'
    'qt6-declarative'
    'kirigami'
    'ki18n'
    'kcoreaddons'
    'kauth'
    'kcmutils'
    'fmt'
    'libsigc++-3.0'
    'libsoup3'
    'qcoro'
    'libpamac'
)
source=("git+https://github.com/LordTermor/manjaro-control-panel.git")
sha256sums=('SKIP')

build() {
    cmake -B build -S manjaro-control-panel \
        -G Ninja \
        -DCMAKE_BUILD_TYPE=Release \
        -DCMAKE_INSTALL_PREFIX=/usr \
        -DMCP_BUILD_LIB=ON \
        -DMCP_BUILD_CLI=ON \
        -DMCP_BUILD_QT=ON \
        -DMCP_BUILD_QT_CLASSIC=ON \
        -DMCP_BUILD_KCM=OFF

    cmake --build build
}

package_libmcp() {
    pkgdesc="Core library for Manjaro Control Panel"
    depends=(
        'glib2'
        'libsigc++-3.0'
        'libalpm.so'
        'libsoup3'
    )

    DESTDIR="$pkgdir" cmake --install build/libmcp
}

package_mcp-cli() {
    pkgdesc="CLI tools for Manjaro Control Panel"
    depends=('libmcp' 'fmt')

    DESTDIR="$pkgdir" cmake --install build/cli
}

package_mcp-qt() {
    pkgdesc="Qt/QML standalone app for Manjaro Control Panel"
    depends=(
        'libmcp'
        'qt6-base'
        'qt6-declarative'
        'kirigami'
        'ki18n'
        'kcoreaddons'
        'kauth'
        'fmt'
    )

    # Install mcp-qt binary
    install -Dm755 build/bin/mcp-qt "$pkgdir/usr/bin/mcp-qt"

    # Install shared libraries
    DESTDIR="$pkgdir" cmake --install build/mcp-qt/common
    DESTDIR="$pkgdir" cmake --install build/mcp-qt/modules

    # Install transaction agent
    install -Dm755 build/bin/mcp-transaction-agent "$pkgdir/usr/bin/mcp-transaction-agent"

    # Install icon
    install -Dm644 manjaro-control-panel/mcp-qt/data/assets/icon.svg "$pkgdir/usr/share/icons/hicolor/scalable/apps/mcp.svg"
}

package_mcp-qt-classic() {
    pkgdesc="Qt Widgets classic app for Manjaro Control Panel"
    depends=(
        'libmcp'
        'qt6-base'
        'qt6-declarative'
        'kirigami'
        'ki18n'
        'kcoreaddons'
        'kauth'
        'fmt'
    )

    # Install mcp-qt-classic binary
    install -Dm755 build/bin/mcp-qt-classic "$pkgdir/usr/bin/mcp-qt-classic"

    # Shared libs are provided by mcp-qt package, so this is a minimal install
}

package_mcp-kcm() {
    pkgdesc="KDE System Settings modules for Manjaro Control Panel"
    depends=(
        'libmcp'
        'qt6-base'
        'qt6-declarative'
        'kirigami'
        'ki18n'
        'kcoreaddons'
        'kauth'
        'kcmutils'
        'systemsettings'
        'fmt'
    )

    # Install KCM plugin
    DESTDIR="$pkgdir" cmake --install build/mcp-qt/modules/kernel/kcm

    # Install category file
    install -Dm644 manjaro-control-panel/mcp-qt/data/categories/settings-system-administration-mcp.desktop \
        "$pkgdir/usr/share/kservices6/settings-system-administration-mcp.desktop"
}

libpamac is bundled to libmcp as a static library, can you share the output?

mcp-qt includes mcp-qt-classic is this intended?

Sure, build without libpamac:

FAILED: [code=1] libmcp/CMakeFiles/libmcp.dir/ProgressFlattener.cpp.o.ddi 
/usr/bin/c++ -Dlibmcp_EXPORTS -I/build/mcp/src/manjaro-control-panel/libmcp -I/build/mcp/src/build/_deps/libpamac-cpp-src/include -I/build/mcp/src/build/_deps/libpamac-src/src -isystem /usr/include/sigc++-3.0 -isystem /usr/lib/sigc++-3.0/include -isystem /usr/include/glib-2.0 -isystem /usr/lib/glib-2.0/include -isystem /usr/include/libmount -isystem /usr/include/blkid -isystem /usr/include/sysprof-6 -isystem /usr/include/libsoup-3.0 -march=x86-64 -mtune=generic -O2 -pipe -fno-plt -fexceptions         -Wp,-D_FORTIFY_SOURCE=3 -Wformat -Werror=format-security         -fstack-clash-protection -fcf-protection         -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -Wp,-D_GLIBCXX_ASSERTIONS -flto=auto -O3 -DNDEBUG -std=gnu++23 -fPIC -pthread -D_FILE_OFFSET_BITS=64 -E -x c++ /build/mcp/src/manjaro-control-panel/libmcp/ProgressFlattener.cpp -MT libmcp/CMakeFiles/libmcp.dir/ProgressFlattener.cpp.o.ddi -MD -MF libmcp/CMakeFiles/libmcp.dir/ProgressFlattener.cpp.o.ddi.d -fmodules-ts -fdeps-file=libmcp/CMakeFiles/libmcp.dir/ProgressFlattener.cpp.o.ddi -fdeps-target=libmcp/CMakeFiles/libmcp.dir/ProgressFlattener.cpp.o -fdeps-format=p1689r5 -o libmcp/CMakeFiles/libmcp.dir/ProgressFlattener.cpp.o.ddi.i
In file included from /build/mcp/src/build/_deps/libpamac-cpp-src/include/pamac/alpm_package.hpp:12,
                 from /build/mcp/src/build/_deps/libpamac-cpp-src/include/pamac/database.hpp:11,
                 from /build/mcp/src/build/_deps/libpamac-cpp-src/include/pamac/transaction.hpp:12,
                 from /build/mcp/src/manjaro-control-panel/libmcp/ProgressFlattener.cpp:10:
/build/mcp/src/build/_deps/libpamac-cpp-src/include/pamac/package.hpp:15:10: fatal error: pamac.h: No such file or directory
   15 | #include <pamac.h>
      |          ^~~~~~~~~
compilation terminated.
[4/96] Scanning /build/mcp/src/manjaro-control-panel/libmcp/kernel/KernelManager.cpp for CXX dependencies
FAILED: [code=1] libmcp/kernel/CMakeFiles/libmcp-kernel.dir/KernelManager.cpp.o.ddi 
/usr/bin/c++ -Dlibmcp_kernel_EXPORTS -I/build/mcp/src/manjaro-control-panel/libmcp/kernel/.. -I/build/mcp/src/build/_deps/libcoro-src/include -I/build/mcp/src/build/_deps/libcoro-build/include -I/build/mcp/src/build/_deps/libpamac-cpp-src/include -I/build/mcp/src/build/_deps/libpamac-src/src -isystem /usr/include/glib-2.0 -isystem /usr/lib/glib-2.0/include -isystem /usr/include/libmount -isystem /usr/include/blkid -isystem /usr/include/sysprof-6 -isystem /usr/include/sigc++-3.0 -isystem /usr/lib/sigc++-3.0/include -isystem /usr/include/libsoup-3.0 -march=x86-64 -mtune=generic -O2 -pipe -fno-plt -fexceptions         -Wp,-D_FORTIFY_SOURCE=3 -Wformat -Werror=format-security         -fstack-clash-protection -fcf-protection         -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -Wp,-D_GLIBCXX_ASSERTIONS -flto=auto -O3 -DNDEBUG -std=gnu++23 -fPIC -fexceptions -Wall -Wextra -pipe -pthread -D_FILE_OFFSET_BITS=64 -E -x c++ /build/mcp/src/manjaro-control-panel/libmcp/kernel/KernelManager.cpp -MT libmcp/kernel/CMakeFiles/libmcp-kernel.dir/KernelManager.cpp.o.ddi -MD -MF libmcp/kernel/CMakeFiles/libmcp-kernel.dir/KernelManager.cpp.o.ddi.d -fmodules-ts -fdeps-file=libmcp/kernel/CMakeFiles/libmcp-kernel.dir/KernelManager.cpp.o.ddi -fdeps-target=libmcp/kernel/CMakeFiles/libmcp-kernel.dir/KernelManager.cpp.o -fdeps-format=p1689r5 -o libmcp/kernel/CMakeFiles/libmcp-kernel.dir/KernelManager.cpp.o.ddi.i
In file included from /build/mcp/src/build/_deps/libpamac-cpp-src/include/pamac/alpm_package.hpp:12,
                 from /build/mcp/src/build/_deps/libpamac-cpp-src/include/pamac/database.hpp:11,
                 from /build/mcp/src/manjaro-control-panel/libmcp/kernel/KernelProvider.hpp:17,
                 from /build/mcp/src/manjaro-control-panel/libmcp/kernel/KernelManager.hpp:15,
                 from /build/mcp/src/manjaro-control-panel/libmcp/kernel/KernelManager.cpp:8:
/build/mcp/src/build/_deps/libpamac-cpp-src/include/pamac/package.hpp:15:10: fatal error: pamac.h: No such file or directory
   15 | #include <pamac.h>
      |          ^~~~~~~~~
compilation terminated.
[5/96] Scanning /build/mcp/src/manjaro-control-panel/libmcp/kernel/KernelProvider.cpp for CXX dependencies
FAILED: [code=1] libmcp/kernel/CMakeFiles/libmcp-kernel.dir/KernelProvider.cpp.o.ddi 
/usr/bin/c++ -Dlibmcp_kernel_EXPORTS -I/build/mcp/src/manjaro-control-panel/libmcp/kernel/.. -I/build/mcp/src/build/_deps/libcoro-src/include -I/build/mcp/src/build/_deps/libcoro-build/include -I/build/mcp/src/build/_deps/libpamac-cpp-src/include -I/build/mcp/src/build/_deps/libpamac-src/src -isystem /usr/include/glib-2.0 -isystem /usr/lib/glib-2.0/include -isystem /usr/include/libmount -isystem /usr/include/blkid -isystem /usr/include/sysprof-6 -isystem /usr/include/sigc++-3.0 -isystem /usr/lib/sigc++-3.0/include -isystem /usr/include/libsoup-3.0 -march=x86-64 -mtune=generic -O2 -pipe -fno-plt -fexceptions         -Wp,-D_FORTIFY_SOURCE=3 -Wformat -Werror=format-security         -fstack-clash-protection -fcf-protection         -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -Wp,-D_GLIBCXX_ASSERTIONS -flto=auto -O3 -DNDEBUG -std=gnu++23 -fPIC -fexceptions -Wall -Wextra -pipe -pthread -D_FILE_OFFSET_BITS=64 -E -x c++ /build/mcp/src/manjaro-control-panel/libmcp/kernel/KernelProvider.cpp -MT libmcp/kernel/CMakeFiles/libmcp-kernel.dir/KernelProvider.cpp.o.ddi -MD -MF libmcp/kernel/CMakeFiles/libmcp-kernel.dir/KernelProvider.cpp.o.ddi.d -fmodules-ts -fdeps-file=libmcp/kernel/CMakeFiles/libmcp-kernel.dir/KernelProvider.cpp.o.ddi -fdeps-target=libmcp/kernel/CMakeFiles/libmcp-kernel.dir/KernelProvider.cpp.o -fdeps-format=p1689r5 -o libmcp/kernel/CMakeFiles/libmcp-kernel.dir/KernelProvider.cpp.o.ddi.i
In file included from /build/mcp/src/build/_deps/libpamac-cpp-src/include/pamac/alpm_package.hpp:12,
                 from /build/mcp/src/build/_deps/libpamac-cpp-src/include/pamac/database.hpp:11,
                 from /build/mcp/src/manjaro-control-panel/libmcp/kernel/KernelProvider.hpp:17,
                 from /build/mcp/src/manjaro-control-panel/libmcp/kernel/KernelProvider.cpp:8:
/build/mcp/src/build/_deps/libpamac-cpp-src/include/pamac/package.hpp:15:10: fatal error: pamac.h: No such file or directory
   15 | #include <pamac.h>
      |          ^~~~~~~~~
compilation terminated.
[12/96] Building CXX object _deps/libcoro-build/CMakeFiles/libcoro.dir/src/event.cpp.o
ninja: build stopped: subcommand failed.
==> ERROR: A failure occurred in build().
    Aborting...
==> ERROR: Building package [b] failed.
      Cleaning up.
1 Like

Ah, yeah, it needs only header. Weird that it doesn’t use headers from bundled pamac, I think I should add it as an include path… Thanks!

1 Like

I won’t be able to try, unfortunately. I have tried to keep as much of Plasma/KDE as possible off of my Xfce systems.

1 Like

When building the PKGBUILD, there is a conflict with mcp-qt and mcp-kcm:

:: Proceed with installation? [Y/n] 
(3/3) checking keys in keyring                                                                [-------------------------------------------------------] 100%
(3/3) checking package integrity                                                              [-------------------------------------------------------] 100%
(3/3) loading package files                                                                   [-------------------------------------------------------] 100%
(3/3) checking for file conflicts                                                             [-------------------------------------------------------] 100%
error: failed to commit transaction (conflicting files)
/usr/lib/qt6/plugins/plasma/kcms/systemsettings/kcm_mcp_kernel.so exists in both 'mcp-qt' and 'mcp-kcm'
/usr/share/applications/kcm_mcp_kernel.desktop exists in both 'mcp-qt' and 'mcp-kcm'
Errors occurred, no packages were upgraded.
==> WARNING: Failed to install built package(s).
==> Cleaning up...
1 Like

Try now, should work (with clean rebuild from scratch) without new makedepends. libmcp uses main branch of libpamac-cpp, so has to be fine.

Can reproduce. I think I didn’t catch this because was using --overwrite="*" to remove development unpackaged version. I think PKGBUILD needs to be more selective to not add these files to -qt.

1 Like

Both were the same issue and should be fixed.

1 Like
$ mcp-qt-classic
mcp-qt-classic: error while loading shared libraries: libmcp-qt-page-kernel.so: cannot open shared