summaryrefslogtreecommitdiff
path: root/raveos-calamares-module
diff options
context:
space:
mode:
authorNippy <nippy@rp1.hu>2026-06-26 17:31:35 +0200
committerNippy <nippy@rp1.hu>2026-06-26 17:31:35 +0200
commitbd924d00acaec482a466865709edbf6833f905a4 (patch)
tree49632ec36c5360c91bee0a2cf107e717280a89b5 /raveos-calamares-module
parent69aa2e2836af1f5177187bdef2ebd9eefdbfc95a (diff)
downloadRaveOS-PKGBUILD-bd924d00acaec482a466865709edbf6833f905a4.tar.gz
RaveOS-PKGBUILD-bd924d00acaec482a466865709edbf6833f905a4.zip
test selector
Diffstat (limited to 'raveos-calamares-module')
-rw-r--r--raveos-calamares-module/CMakeLists.txt1
-rw-r--r--raveos-calamares-module/PKGBUILD4
-rw-r--r--raveos-calamares-module/desktopselect/CMakeLists.txt30
-rw-r--r--raveos-calamares-module/desktopselect/DesktopBackend.cpp35
-rw-r--r--raveos-calamares-module/desktopselect/DesktopBackend.h31
-rw-r--r--raveos-calamares-module/desktopselect/DesktopSelectViewStep.cpp117
-rw-r--r--raveos-calamares-module/desktopselect/DesktopSelectViewStep.h42
-rw-r--r--raveos-calamares-module/desktopselect/desktopselect.conf152
-rw-r--r--raveos-calamares-module/desktopselect/module.desc5
-rw-r--r--raveos-calamares-module/desktopselect/ui/desktopselect.qml115
-rw-r--r--raveos-calamares-module/desktopselect/ui/qmldir1
11 files changed, 531 insertions, 2 deletions
diff --git a/raveos-calamares-module/CMakeLists.txt b/raveos-calamares-module/CMakeLists.txt
index cc3589d..1a56796 100644
--- a/raveos-calamares-module/CMakeLists.txt
+++ b/raveos-calamares-module/CMakeLists.txt
@@ -6,3 +6,4 @@ find_package(Calamares REQUIRED)
add_subdirectory(wifi)
add_subdirectory(welcome)
+add_subdirectory(desktopselect)
diff --git a/raveos-calamares-module/PKGBUILD b/raveos-calamares-module/PKGBUILD
index 36870a7..3d4bacb 100644
--- a/raveos-calamares-module/PKGBUILD
+++ b/raveos-calamares-module/PKGBUILD
@@ -1,7 +1,7 @@
pkgname=raveos-calamares-module
pkgver=2.0.0
-pkgrel=4
-pkgdesc="RaveOS Calamares Wi-Fi viewmodule"
+pkgrel=5
+pkgdesc="RaveOS Calamares modules: Wi-Fi, Welcome, Desktop Selector"
arch=('x86_64')
options=('!debug')
url="https://git.rp1.hu/RaveOS"
diff --git a/raveos-calamares-module/desktopselect/CMakeLists.txt b/raveos-calamares-module/desktopselect/CMakeLists.txt
new file mode 100644
index 0000000..c10c57c
--- /dev/null
+++ b/raveos-calamares-module/desktopselect/CMakeLists.txt
@@ -0,0 +1,30 @@
+find_package(Qt6 REQUIRED COMPONENTS Widgets Quick QuickWidgets)
+
+calamares_add_plugin(desktopselect
+ TYPE viewmodule
+ EXPORT_MACRO PLUGINDLLEXPORT_PRO
+ SOURCES
+ DesktopSelectViewStep.cpp
+ DesktopBackend.cpp
+ LINK_LIBRARIES
+ Qt6::Widgets
+ Qt6::Quick
+ Qt6::QuickWidgets
+)
+
+install(
+ FILES module.desc
+ DESTINATION lib/calamares/modules/desktopselect
+)
+
+install(
+ FILES desktopselect.conf
+ DESTINATION share/calamares/modules
+)
+
+install(
+ FILES
+ ui/desktopselect.qml
+ ui/qmldir
+ DESTINATION lib/calamares/modules/desktopselect/ui
+)
diff --git a/raveos-calamares-module/desktopselect/DesktopBackend.cpp b/raveos-calamares-module/desktopselect/DesktopBackend.cpp
new file mode 100644
index 0000000..9fd1cc2
--- /dev/null
+++ b/raveos-calamares-module/desktopselect/DesktopBackend.cpp
@@ -0,0 +1,35 @@
+#include "DesktopBackend.h"
+
+DesktopBackend::DesktopBackend(QObject* parent)
+ : QObject(parent)
+{}
+
+void DesktopBackend::setDesktops(const QVariantList& desktops)
+{
+ m_desktops = desktops;
+ m_selectedIndex = -1;
+ emit desktopsChanged();
+ emit selectedIndexChanged();
+}
+
+void DesktopBackend::selectDesktop(int index)
+{
+ if (index == m_selectedIndex)
+ return;
+ if (index < 0 || index >= m_desktops.size())
+ return;
+ m_selectedIndex = index;
+ emit selectedIndexChanged();
+ emit selectionMade();
+}
+
+QStringList DesktopBackend::selectedPackages() const
+{
+ if (m_selectedIndex < 0 || m_selectedIndex >= m_desktops.size())
+ return {};
+ const QVariantMap desktop = m_desktops[m_selectedIndex].toMap();
+ QStringList pkgs;
+ for (const auto& v : desktop.value("packages").toList())
+ pkgs << v.toString();
+ return pkgs;
+}
diff --git a/raveos-calamares-module/desktopselect/DesktopBackend.h b/raveos-calamares-module/desktopselect/DesktopBackend.h
new file mode 100644
index 0000000..4ceb6cb
--- /dev/null
+++ b/raveos-calamares-module/desktopselect/DesktopBackend.h
@@ -0,0 +1,31 @@
+#pragma once
+#include <QObject>
+#include <QStringList>
+#include <QVariantList>
+
+class DesktopBackend : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QVariantList desktops READ desktops NOTIFY desktopsChanged)
+ Q_PROPERTY(int selectedIndex READ selectedIndex NOTIFY selectedIndexChanged)
+
+public:
+ explicit DesktopBackend(QObject* parent = nullptr);
+
+ QVariantList desktops() const { return m_desktops; }
+ int selectedIndex() const { return m_selectedIndex; }
+
+ void setDesktops(const QVariantList& desktops);
+ QStringList selectedPackages() const;
+
+ Q_INVOKABLE void selectDesktop(int index);
+
+signals:
+ void desktopsChanged();
+ void selectedIndexChanged();
+ void selectionMade();
+
+private:
+ QVariantList m_desktops;
+ int m_selectedIndex = -1;
+};
diff --git a/raveos-calamares-module/desktopselect/DesktopSelectViewStep.cpp b/raveos-calamares-module/desktopselect/DesktopSelectViewStep.cpp
new file mode 100644
index 0000000..4af261c
--- /dev/null
+++ b/raveos-calamares-module/desktopselect/DesktopSelectViewStep.cpp
@@ -0,0 +1,117 @@
+#include "DesktopSelectViewStep.h"
+
+#include <QDir>
+#include <QFile>
+#include <QSet>
+#include <QVBoxLayout>
+#include <QQuickWidget>
+#include <QQmlContext>
+#include <QQmlEngine>
+
+#include <GlobalStorage.h>
+#include <JobQueue.h>
+
+CALAMARES_PLUGIN_FACTORY_DEFINITION(DesktopSelectViewStepFactory, registerPlugin<DesktopSelectViewStep>();)
+
+DesktopSelectViewStep::DesktopSelectViewStep(QObject* parent)
+ : Calamares::ViewStep(parent)
+ , m_backend(new DesktopBackend(this))
+{
+ connect(m_backend, &DesktopBackend::selectionMade, this, [this]() {
+ emit nextStatusChanged(true);
+ });
+}
+
+DesktopSelectViewStep::~DesktopSelectViewStep()
+{
+ if (m_widget && m_widget->parent() == nullptr)
+ delete m_widget;
+}
+
+QString DesktopSelectViewStep::prettyName() const
+{
+ return tr("Desktop");
+}
+
+void DesktopSelectViewStep::buildWidget()
+{
+ m_widget = new QWidget();
+ auto* layout = new QVBoxLayout(m_widget);
+ layout->setContentsMargins(0, 0, 0, 0);
+
+ m_quickWidget = new QQuickWidget();
+ m_quickWidget->setResizeMode(QQuickWidget::SizeRootObjectToView);
+
+ QString modulePath = QStringLiteral("/usr/lib/calamares/modules/desktopselect/ui");
+ if (!QDir(modulePath).exists())
+ modulePath = QDir::currentPath() + QStringLiteral("/desktopselect/ui");
+
+ m_quickWidget->engine()->addImportPath(modulePath);
+ m_quickWidget->rootContext()->setContextProperty("backend", m_backend);
+
+ QString qmlPath = QStringLiteral("/usr/lib/calamares/modules/desktopselect/ui/desktopselect.qml");
+ if (!QFile::exists(qmlPath))
+ qmlPath = QDir::currentPath() + QStringLiteral("/desktopselect/ui/desktopselect.qml");
+
+ m_quickWidget->setSource(QUrl::fromLocalFile(qmlPath));
+ layout->addWidget(m_quickWidget);
+}
+
+QWidget* DesktopSelectViewStep::widget()
+{
+ if (!m_widget)
+ buildWidget();
+ return m_widget;
+}
+
+bool DesktopSelectViewStep::isNextEnabled() const
+{
+ return m_backend && m_backend->selectedIndex() >= 0;
+}
+
+bool DesktopSelectViewStep::isBackEnabled() const { return true; }
+bool DesktopSelectViewStep::isAtBeginning() const { return true; }
+bool DesktopSelectViewStep::isAtEnd() const { return true; }
+
+Calamares::JobList DesktopSelectViewStep::jobs() const { return {}; }
+
+void DesktopSelectViewStep::onLeave()
+{
+ if (!m_backend || m_backend->selectedIndex() < 0)
+ return;
+
+ // Merge mandatory + selected desktop packages, deduplicated
+ QStringList combined = m_mandatoryPackages + m_backend->selectedPackages();
+ QStringList unique;
+ QSet<QString> seen;
+ for (const QString& pkg : combined) {
+ if (!seen.contains(pkg)) {
+ seen.insert(pkg);
+ unique << pkg;
+ }
+ }
+
+ QVariantMap op;
+ op[QStringLiteral("install")] = unique;
+ QVariantList ops;
+ ops.append(op);
+
+ if (!Calamares::JobQueue::instance())
+ return;
+ auto* gs = Calamares::JobQueue::instance()->globalStorage();
+ if (gs)
+ gs->insert(QStringLiteral("packageOperations"), ops);
+}
+
+void DesktopSelectViewStep::setConfigurationMap(const QVariantMap& config)
+{
+ m_mandatoryPackages.clear();
+ for (const auto& v : config.value("mandatory_packages").toList())
+ m_mandatoryPackages << v.toString();
+
+ QVariantList desktops;
+ for (const auto& item : config.value("desktops").toList())
+ desktops << item;
+
+ m_backend->setDesktops(desktops);
+}
diff --git a/raveos-calamares-module/desktopselect/DesktopSelectViewStep.h b/raveos-calamares-module/desktopselect/DesktopSelectViewStep.h
new file mode 100644
index 0000000..4874ba3
--- /dev/null
+++ b/raveos-calamares-module/desktopselect/DesktopSelectViewStep.h
@@ -0,0 +1,42 @@
+#pragma once
+#include <viewpages/ViewStep.h>
+#include <utils/PluginFactory.h>
+#include <Job.h>
+#include <QObject>
+#include <QWidget>
+#include <QStringList>
+#include "DesktopBackend.h"
+
+class QQuickWidget;
+
+class PLUGINDLLEXPORT DesktopSelectViewStep : public Calamares::ViewStep
+{
+ Q_OBJECT
+
+public:
+ explicit DesktopSelectViewStep(QObject* parent = nullptr);
+ ~DesktopSelectViewStep() override;
+
+ QString prettyName() const override;
+ QWidget* widget() override;
+
+ bool isNextEnabled() const override;
+ bool isBackEnabled() const override;
+ bool isAtBeginning() const override;
+ bool isAtEnd() const override;
+
+ Calamares::JobList jobs() const override;
+
+ void setConfigurationMap(const QVariantMap& config) override;
+ void onLeave() override;
+
+private:
+ void buildWidget();
+
+ QWidget* m_widget = nullptr;
+ QQuickWidget* m_quickWidget = nullptr;
+ DesktopBackend* m_backend = nullptr;
+ QStringList m_mandatoryPackages;
+};
+
+CALAMARES_PLUGIN_FACTORY_DECLARATION(DesktopSelectViewStepFactory)
diff --git a/raveos-calamares-module/desktopselect/desktopselect.conf b/raveos-calamares-module/desktopselect/desktopselect.conf
new file mode 100644
index 0000000..8935e64
--- /dev/null
+++ b/raveos-calamares-module/desktopselect/desktopselect.conf
@@ -0,0 +1,152 @@
+---
+mandatory_packages:
+ - wget
+ - noto-fonts
+ - noto-fonts-cjk
+ - noto-fonts-emoji
+ - noto-fonts-extra
+ - qt6-wayland
+ - qt5-wayland
+ - ttf-ubuntu-font-family
+ - rsync
+ - gvfs
+ - gvfs-smb
+ - gvfs-mtp
+ - gvfs-nfs
+ - ufw
+ - gufw
+ - flatpak
+ - pavucontrol
+ - xdg-user-dirs
+ - xdg-user-dirs-gtk
+ - sddm
+ - sddm-astronaut-theme
+ - pipewire
+ - wireplumber
+ - pipewire-audio
+ - libpipewire
+ - libwireplumber
+ - lib32-libpipewire
+ - lib32-pipewire
+ - pipewire-jack
+ - pipewire-pulse
+ - pipewire-session-manager
+ - hblock
+ - reflector
+ - raveos-tools
+ - gamemode
+ - lib32-gamemode
+ - ananicy-cpp
+ - cachyos-ananicy-rules-git
+
+desktops:
+ - name: "KDE Plasma Desktop"
+ description: "Alap KDE RaveOS Témával. Teljes értékű asztali környezet."
+ badge: "STABIL"
+ badge_color: "#2e7d32"
+ packages:
+ - plasma
+ - kde-applications
+ - konsole
+ - gvfs
+ - gvfs-smb
+ - gvfs-nfs
+ - gvfs-mtp
+ - raveos-kde-theme
+
+ - name: "GNOME Desktop"
+ description: "Teljes RaveOS Flavour. Modern, letisztult felület."
+ badge: "STABIL"
+ badge_color: "#2e7d32"
+ packages:
+ - gnome-session
+ - gnome-console
+ - gedit
+ - gnome-disk-utility
+ - gnome-system-monitor
+ - gvfs
+ - gvfs-smb
+ - gvfs-nfs
+ - gvfs-mtp
+ - fuse2
+ - eog
+ - gnome-calculator
+ - baobab
+ - gnome-control-center
+ - gnome-tweaks
+ - gnome-browser-connector
+ - xdg-desktop-portal
+ - gnome-keyring
+ - xdg-desktop-portal-gnome
+ - xdg-desktop-portal-gtk
+ - xdg-desktop-portal-wlr
+ - gnome-settings-daemon
+ - nautilus
+ - gnome-shell-extensions
+ - yaru-gtk-theme
+ - raveos-gnome-theme
+
+ - name: "Cosmic Desktop"
+ description: "RaveOS témával, de erősen BÉTA még mindig."
+ badge: "BÉTA"
+ badge_color: "#c62828"
+ packages:
+ - cosmic
+ - cosmic-text-editor
+ - cosmic-files
+ - cosmic-terminal
+ - cosmic-player
+ - cosmic-wallpapers
+ - raveos-cosmic-theme
+ - gvfs
+ - gvfs-smb
+ - gvfs-nfs
+ - gvfs-mtp
+
+ - name: "Hyprland"
+ description: "FULLOS RaveOS Konfigurációval, kulcsra készen."
+ badge: "HAMAROSAN"
+ badge_color: "#e65100"
+ packages:
+ - hyprland
+ - aquamarine
+ - nwg-displays
+ - nwg-look
+ - hyprwayland-scanner
+ - xdg-desktop-portal-hyprland
+ - xdg-desktop-portal
+ - hyprland-qt-support
+ - hyprpolkitagent
+ - hyprland-guiutils
+ - hyprpwcenter
+ - hyprlauncher
+ - hyprtoolkit
+ - hyprgraphics
+ - hyprcursor
+ - hyprpicker
+ - hyprshot
+ - hypridle
+ - hyprlock
+ - hyprwire
+ - hyprpaper
+ - dms-shell-hyprland
+ - hyprshell
+ - kitty
+ - thunar
+ - thunar-volman
+ - thunar-archive-plugin
+ - thunar-media-tags-plugin
+ - thunar-shares-plugin
+ - file-roller
+ - unzip
+ - unrar
+ - flatseal
+ - tumbler
+ - gedit
+ - gnome-calculator
+ - polkit-gnome
+ - raveos-hyprland-theme
+ - gvfs
+ - gvfs-smb
+ - gvfs-mtp
+ - gvfs-nfs
diff --git a/raveos-calamares-module/desktopselect/module.desc b/raveos-calamares-module/desktopselect/module.desc
new file mode 100644
index 0000000..5185a6f
--- /dev/null
+++ b/raveos-calamares-module/desktopselect/module.desc
@@ -0,0 +1,5 @@
+---
+type: "viewmodule"
+name: "desktopselect"
+interface: "qtplugin"
+load: "libcalamares_viewmodule_desktopselect.so"
diff --git a/raveos-calamares-module/desktopselect/ui/desktopselect.qml b/raveos-calamares-module/desktopselect/ui/desktopselect.qml
new file mode 100644
index 0000000..02cb365
--- /dev/null
+++ b/raveos-calamares-module/desktopselect/ui/desktopselect.qml
@@ -0,0 +1,115 @@
+import QtQuick 2.15
+import QtQuick.Controls 2.15
+import QtQuick.Layouts 1.15
+
+Rectangle {
+ id: root
+ color: "#404040"
+
+ // Nagy külső keret — cím, banner, kártyák mind benne
+ Rectangle {
+ anchors.fill: parent
+ anchors.margins: 20
+ color: "#2B2B2B"
+ radius: 10
+
+ ColumnLayout {
+ anchors.fill: parent
+ anchors.margins: 16
+ spacing: 14
+
+ // Cím
+ Text {
+ text: "Desktop kiválasztása"
+ font.pixelSize: 24
+ font.bold: true
+ color: "#ffffff"
+ }
+
+ // Figyelmeztető banner
+ Rectangle {
+ Layout.fillWidth: true
+ height: 50
+ color: "#1e1e1e"
+ border.color: "#e67e22"
+ border.width: 2
+ radius: 6
+
+ Text {
+ anchors.centerIn: parent
+ text: "Válassz egy desktop környezetet. Csak egyet választhatsz!"
+ color: "#e0e0e0"
+ font.pixelSize: 13
+ }
+ }
+
+ // Kártyák
+ ListView {
+ id: desktopList
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ spacing: 8
+ clip: true
+ model: backend.desktops
+
+ delegate: Rectangle {
+ width: desktopList.width
+ height: 78
+ radius: 8
+ color: backend.selectedIndex === index ? "#2a4a2a" : "#333333"
+ border.color: backend.selectedIndex === index ? "#5cb85c" : "#555555"
+ border.width: 2
+
+ RowLayout {
+ anchors.fill: parent
+ anchors.leftMargin: 16
+ anchors.rightMargin: 16
+ spacing: 12
+
+ Column {
+ Layout.fillWidth: true
+ spacing: 5
+
+ Text {
+ text: modelData.name || ""
+ color: "#ffffff"
+ font.pixelSize: 15
+ font.bold: true
+ }
+
+ Text {
+ text: modelData.description || ""
+ color: "#b2b2b2"
+ font.pixelSize: 12
+ width: parent.width
+ elide: Text.ElideRight
+ }
+ }
+
+ Rectangle {
+ width: badgeText.implicitWidth + 20
+ height: 28
+ radius: 4
+ color: modelData.badge_color || "#555555"
+
+ Text {
+ id: badgeText
+ anchors.centerIn: parent
+ text: modelData.badge || ""
+ color: "#ffffff"
+ font.pixelSize: 11
+ font.bold: true
+ }
+ }
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ cursorShape: Qt.PointingHandCursor
+ onClicked: backend.selectDesktop(index)
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/raveos-calamares-module/desktopselect/ui/qmldir b/raveos-calamares-module/desktopselect/ui/qmldir
new file mode 100644
index 0000000..442b282
--- /dev/null
+++ b/raveos-calamares-module/desktopselect/ui/qmldir
@@ -0,0 +1 @@
+module DesktopSelectModule