From 173f56b4ad4a515fa80b6362a094b3b891f1aabe Mon Sep 17 00:00:00 2001 From: Vasiliy Stelmachenok Date: Wed, 11 Feb 2026 15:33:31 +0300 Subject: [PATCH 01/12] calamares: Introduce check on target platform Signed-off-by: Vasiliy Stelmachenok --- src/libcalamares/pybind11/PythonJob.cpp | 2 ++ src/libcalamares/pyboost/PythonJob.cpp | 4 ++++ src/libcalamares/python/Api.cpp | 8 ++++++++ src/libcalamares/python/Api.h | 1 + src/libcalamares/utils/System.cpp | 16 ++++++++++++++++ src/libcalamares/utils/System.h | 3 +++ 6 files changed, 34 insertions(+) diff --git a/src/libcalamares/pybind11/PythonJob.cpp b/src/libcalamares/pybind11/PythonJob.cpp index 7aba11035d..22350dc12f 100644 --- a/src/libcalamares/pybind11/PythonJob.cpp +++ b/src/libcalamares/pybind11/PythonJob.cpp @@ -149,6 +149,8 @@ populate_utils( py::module_& m ) "Displays warning to user", py::arg( "title" ), py::arg( "description" )); + + m.def( "get_target_platform", &Calamares::Python::get_target_platform, "Get target platform name" ); } void diff --git a/src/libcalamares/pyboost/PythonJob.cpp b/src/libcalamares/pyboost/PythonJob.cpp index 285f4d8918..0fa0b96515 100644 --- a/src/libcalamares/pyboost/PythonJob.cpp +++ b/src/libcalamares/pyboost/PythonJob.cpp @@ -187,6 +187,10 @@ BOOST_PYTHON_MODULE( libcalamares ) "Applying the function to a string obscured by this function will result " "in the original string." ); + bp::def( "get_target_platform", + &Calamares::Python::get_target_platform, + "Get target platform name" ); + // .. Translation functions bp::def( "gettext_languages", &Calamares::Python::gettext_languages, diff --git a/src/libcalamares/python/Api.cpp b/src/libcalamares/python/Api.cpp index 1d55c87da1..fd5b61058f 100644 --- a/src/libcalamares/python/Api.cpp +++ b/src/libcalamares/python/Api.cpp @@ -15,6 +15,7 @@ #include "JobQueue.h" #include "locale/Global.h" #include "partition/Mount.h" +#include "utils/System.h" #include "utils/Logger.h" #include "utils/RAII.h" #include "utils/String.h" @@ -215,5 +216,12 @@ show_warning( const std::string& title, const std::string& description ) return Python::None(); } +Python::Object +get_target_platform() +{ + QString platform = Calamares::System::instance()->getTargetPlatform(); + return String( platform.toStdString() ); +} + } } diff --git a/src/libcalamares/python/Api.h b/src/libcalamares/python/Api.h index 47fdf26f5f..f1ffa4adf8 100644 --- a/src/libcalamares/python/Api.h +++ b/src/libcalamares/python/Api.h @@ -43,6 +43,7 @@ namespace Python __attribute__( ( visibility( "hidden" ) ) ) const std::string& options = std::string() ); Object show_warning( const std::string& title, const std::string& description ); + Object get_target_platform(); } } diff --git a/src/libcalamares/utils/System.cpp b/src/libcalamares/utils/System.cpp index dd098af32a..27785f6bfb 100644 --- a/src/libcalamares/utils/System.cpp +++ b/src/libcalamares/utils/System.cpp @@ -47,6 +47,7 @@ System::System( bool doChroot, QObject* parent ) { Calamares::JobQueue::instance()->globalStorage()->insert( "rootMountPoint", "/" ); } + } System::~System() {} @@ -287,6 +288,21 @@ System::doChroot() const return m_doChroot; } +QString +System::getTargetPlatform() const +{ + QFile tag("/etc/edition-tag"); + QString platform; + + if (tag.open(QIODevice::ReadOnly | QIODevice::Text)) + { + QByteArray edition = tag.readLine().trimmed(); + platform = QString(edition); + } + + return platform.simplified(); +} + Calamares::JobResult ProcessResult::explainProcess( int ec, const QString& command, const QString& output, std::chrono::seconds timeout ) { diff --git a/src/libcalamares/utils/System.h b/src/libcalamares/utils/System.h index 6b6eba12bc..09b0cbf422 100644 --- a/src/libcalamares/utils/System.h +++ b/src/libcalamares/utils/System.h @@ -15,6 +15,7 @@ #include "Job.h" +#include #include #include #include @@ -354,6 +355,8 @@ class DLLEXPORT System : public QObject DLLEXPORT bool doChroot() const; + DLLEXPORT QString getTargetPlatform() const; + private: static System* s_instance; From c453129d96ded5623393b3fd6c2a0e2f6b20a5bd Mon Sep 17 00:00:00 2001 From: Vasiliy Stelmachenok Date: Wed, 11 Feb 2026 15:34:48 +0300 Subject: [PATCH 02/12] packagechooser: Add option to specify items only for handheld systems Signed-off-by: Vasiliy Stelmachenok --- src/modules/packagechooser/Config.cpp | 10 ++++++++++ .../packagechooser/packagechooser_desktop.conf | 17 +++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/src/modules/packagechooser/Config.cpp b/src/modules/packagechooser/Config.cpp index ed38a6eff8..0802043001 100644 --- a/src/modules/packagechooser/Config.cpp +++ b/src/modules/packagechooser/Config.cpp @@ -26,6 +26,7 @@ #include "packages/Globals.h" #include "utils/Logger.h" #include "utils/Variant.h" +#include "utils/System.h" /** @brief This removes any values from @p groups that match @p source * @@ -273,6 +274,8 @@ fillModel( PackageListModel* model, const QVariantList& items ) bool poolOk = false; #endif + QString targetPlatform = Calamares::System::instance()->getTargetPlatform(); + cDebug() << "Loading PackageChooser model items from config"; int item_index = 0; for ( const auto& item_it : items ) @@ -291,6 +294,13 @@ fillModel( PackageListModel* model, const QVariantList& items ) continue; } + QString platform = item_map.value("platform").toString(); + if ( !platform.isEmpty() && platform != targetPlatform ) + { + cWarning() << "PackageChooser entry" << item_index << "is only for" << platform << "systems."; + continue; + } + if ( item_map.contains( "appdata" ) ) { #ifdef HAVE_XML diff --git a/src/modules/packagechooser/packagechooser_desktop.conf b/src/modules/packagechooser/packagechooser_desktop.conf index c70a7ed447..85b150f3c2 100644 --- a/src/modules/packagechooser/packagechooser_desktop.conf +++ b/src/modules/packagechooser/packagechooser_desktop.conf @@ -50,6 +50,7 @@ items: - id: GNOME-Desktop name: "GNOME" + platform: "desktop" description: "Get things done with ease, comfort, and control. An easy and elegant way to use your computer, GNOME is designed to help you have the best possible computing experience." description[de]: "Erledigen Sie Ihre Aufgaben mit Leichtigkeit, Komfort und Kontrolle. GNOME ist eine einfache und elegante Art und Weise, Ihren Computer zu benutzen, und wurde entwickelt, um Ihnen das bestmögliche Computererlebnis zu bieten." description[fr]: "Réalisez vos tâches avec facilité, confort et contrôle. Une façon simple et élégante d'utiliser votre ordinateur, GNOME est conçu pour vous aider à avoir la meilleure expérience informatique possible." @@ -63,6 +64,7 @@ items: - id: Cosmic name: "Cosmic" + platform: "desktop" description: "As a whole, COSMIC is a comprehensive operating system GUI (graphical user interface) environment that features advanced functionality and a responsive design. Its modular architecture is specifically designed to facilitate the creation of unique, branded user experiences with ease." description[de]: "Insgesamt ist COSMIC eine umfassende Betriebssystem-GUI (grafische Benutzeroberfläche), die erweiterte Funktionalitäten und ein reaktionsschnelles Design bietet. Seine modulare Architektur ist speziell darauf ausgelegt, die Erstellung einzigartiger, markenspezifischer Benutzererfahrungen zu erleichtern." description[fi]: "Kaiken kaikkiaan COSMIC on kattava käyttöjärjestelmän graafinen käyttöliittymä (GUI), joka tarjoaa edistyneitä toimintoja ja reagoivan suunnittelun. Sen modulaarinen arkkitehtuuri on erityisesti suunniteltu helpottamaan ainutlaatuisten, brändättyjen käyttäjäkokemusten luomista." @@ -78,6 +80,7 @@ items: - id: Niri name: "Niri" + platform: "desktop" description: "A scrollable-tiling Wayland compositor." description[de]: "Ein Wayland-Kompositor mit scrollbarem Tiling." description[fr]: "Un compositeur Wayland en mosaïque défilable." @@ -91,6 +94,7 @@ items: - id: Cinnamon name: "Cinnamon" + platform: "desktop" description: "Cinnamon is a Linux desktop which provides advanced innovative features and a traditional user experience." description[de]: "Cinnamon ist ein Linux-Desktop, der fortschrittliche innovative Funktionen und ein traditionelles Benutzererlebnis bietet." description[fr]: "Cinnamon est un bureau Linux qui offre des fonctionnalités innovantes et une expérience utilisateur traditionnelle." @@ -104,6 +108,7 @@ items: - id: Budgie-Desktop name: "Budgie" + platform: "desktop" description: "Budgie Desktop is a feature-rich, modern desktop. Budgie's design emphasizes simplicity, minimalism, and elegance." description[de]: "Budgie Desktop ist ein funktionsreicher, moderner Desktop. Das Design von Budgie setzt auf Einfachheit, Minimalismus und Eleganz." description[fi]: "Budgie Desktop on monipuolinen, moderni työpöytä. Budgien suunnittelussa korostuu yksinkertaisuus, minimalismi ja tyylikkyys." @@ -119,6 +124,7 @@ items: - id: MATE-Desktop name: "Mate" + platform: "desktop" description: "The MATE Desktop Environment is the continuation of GNOME 2. It provides an intuitive and attractive desktop environment using traditional metaphors for Linux and other Unix-like operating systems. MATE is under active development to add support for new technologies while preserving a traditional desktop experience.." description[de]: "Die MATE-Arbeitsumgebung ist die Fortführung von GNOME 2. Sie bietet für Linux und andere Unix-artige Betriebssysteme eine intuitive und attraktive Arbeitsumgebung, die sich der traditionell verwendeten Metaphern bedient." description[fi]: "MATE-työpöytäympäristö on jatkoa GNOME 2:lle. Se tarjoaa intuitiivisen ja houkuttelevan työpöytäympäristön, jossa käytetään Linuxin ja muiden Unixin kaltaisten käyttöjärjestelmien perinteisiä metaforia. MATEa kehitetään aktiivisesti, jotta se tukisi uusia tekniikoita ja säilyttäisi samalla perinteisen työpöytäkokemuksen." @@ -134,6 +140,7 @@ items: - id: Xfce4 name: "Xfce4" + platform: "desktop" description: "Xfce is a lightweight desktop environment for UNIX-like operating systems. It aims to be fast and low on system resources, while still being visually appealing and user friendly." description[de]: "Xfce ist eine leichtgewichtige Arbeitsumgebung für UNIX-ähnliche Betriebssysteme. Ziel ist es, schnell und ressourcenschonend, aber auch optisch ansprechend und benutzerfreundlich zu sein." description[fr]: "Xfce est un environnement de bureau léger pour les systèmes d'exploitation de type UNIX. Il vise à être rapide, peu gourmand en ressources système, tout en étant visuellement attrayant et convivial." @@ -147,6 +154,7 @@ items: - id: LXQT-Desktop name: "LXQT" + platform: "desktop" description: "LXQt is a lightweight Qt desktop environment. It will not get in your way. It will not hang or slow down your system. It is focused on being a classic desktop with a modern look and feel. " description[de]: "LXQt ist eine leichtgewichtige Qt-Desktop-Umgebung. Die nicht im Weg stehen wird. Es wird nicht stocken oder Dein System verlangsamen. Es ist darauf ausgerichtet, ein klassischer Desktop mit einem modernen Look and Feel zu sein." description[fr]: "LXQt est un environnement de bureau Qt léger. Il ne vous gênera pas. Il ne bloquera pas et ne ralentira pas votre système. Il se concentre sur un bureau classique avec un look et une sensation modernes." @@ -160,6 +168,7 @@ items: - id: LXDE-Desktop name: "LXDE" + platform: "desktop" description: "LXDE, which stands for Lightweight X11 Desktop Environment, is a desktop environment which is lightweight and fast. It is designed to be user friendly and slim, while keeping the resource usage low. LXDE uses less RAM and less CPU while being a feature rich desktop environment. Unlike other tightly integrated desktops LXDE strives to be modular, so each component can be used independently with few dependencies." description[de]: "LXDE, die Abkürzung für Lightweight X11 Desktop Environment, ist eine leichtgewichtige und schnelle Desktop-Umgebung mit einem benutzerfreundlichen, schlanken Design und geringem Ressourcenverbrauch. Mit einem benutzerfreundlichen, schlanken Design und einer geringen Ressourcennutzung ist LXDE eine funktionsreiche Desktop-Umgebung, die weniger RAM und CPU benötigt. Im Gegensatz zu anderen fest integrierten Desktops ist LXDE modular aufgebaut, so dass jede Komponente unabhängig und mit wenig oder gar keinen Abhängigkeiten verwendet werden kann." description[fi]: "LXDE (lyhenne sanoista Lightweight X11 Desktop Environment) on kevyt ja nopea työpöytäympäristö. Se on suunniteltu käyttäjäystävälliseksi ja ohueksi pitäen samalla resurssien käytön alhaisena. LXDE käyttää vähemmän RAM-muistia ja prosessoria, vaikka se on ominaisuuksiltaan rikas työpöytäympäristö. Toisin kuin muut tiukasti integroidut työpöydät, LXDE pyrkii olemaan modulaarinen, joten jokaista komponenttia voidaan käyttää itsenäisesti ja ilman suuria riippuvuuksia." @@ -175,6 +184,7 @@ items: - id: Hyprland name: "Hyprland" + platform: "desktop" description: "Hyprland is a highly customizable dynamic tiling Wayland compositor that doesn't sacrifice on its looks." description[de]: "Hyprland ist ein hochgradig anpassbarer dynamischer Wayland-Kompositor, der keine Abstriche beim Aussehen macht." description[fr]: "Hyprland est un compositeur Wayland à tuiles dynamiques hautement personnalisable qui ne sacrifie pas son apparence." @@ -188,6 +198,7 @@ items: - id: MangoWM name: "MangoWM" + platform: "desktop" description: "Mango is a lightweight and fast Wayland compositor based on dwl. It provides excellent Xwayland support, complete and customizable animations, flexible window layouts, and beautiful window effects to make your daily workflow more convenient." description[de]: "Mango ist ein leichter und schneller Wayland-Kompositor, der auf dwl basiert. Er bietet eine hervorragende Xwayland-Unterstützung, vollständige und anpassbare Animationen, flexible Fenster-Layouts und schöne Fenstereffekte, um den täglichen Arbeitsablauf komfortabler zu gestalten." description[fi]: "Mango on kevyt ja nopea dwl-pohjainen Wayland-kompositori. Se tarjoaa erinomaisen Xwayland-tuen, täydelliset ja mukautettavat animaatiot, joustavat ikkuna-asettelut sekä kauniit ikkunatehosteet, jotka tekevät päivittäisestä työnkulustasi kätevämpää." @@ -204,6 +215,7 @@ items: - id: Sway name: "Sway" + platform: "desktop" description: "Sway is a tiling Wayland compositor and a drop-in replacement for the i3 window manager for X11. It works with your existing i3 configuration and supports most of i3's features, plus a few extras." description[de]: "Sway ist ein kachelnder Wayland-Compositor und ein Drop-in-Ersatz für den i3-Fenstermanager für X11. Er arbeitet mit Ihrer bestehenden i3-Konfiguration und unterstützt die meisten Funktionen von i3, plus ein paar Extras." description[pt_BR]: "Sway é um compositor Wayland em mosaico e um substituto direto para o gerenciador de janelas i3 no X11. Ele funciona com sua configuração existente do i3 e oferece suporte à maioria dos recursos do i3, além de alguns adicionais." @@ -212,6 +224,7 @@ items: - id: Wayfire name: "Wayfire" + platform: "desktop" description: "Wayfire is a wayland compositor based on wlroots. It aims to create a customizable, extendable and lightweight environment without sacrificing its appearance." description[de]: "Wayfire ist ein Wayland-Compositor, der auf wlroots basiert. Er zielt darauf ab, eine anpassbare, erweiterbare und leichtgewichtige Umgebung zu schaffen, ohne dabei sein Aussehen zu beeinträchtigen." description[pt_BR]: "Wayfire é um compositor Wayland baseado no wlroots. Seu objetivo é criar um ambiente personalizável, extensível e leve, sem comprometer a estética." @@ -220,6 +233,7 @@ items: - id: i3-Window-Manager name: "i3 Window Manager" + platform: "desktop" description: "i3 is a tiling window manager designed for X11, inspired by wmii and written in C. It supports tiling, stacking, and tabbing layouts, which it handles dynamically. Configuration is achieved via plain text file and extending i3 is possible using its Unix domain socket and JSON based IPC interface from many programming languages." description[de]: "i3 ist ein Tiling Window Manager für X11, inspiriert von wmii und geschrieben in C. Er unterstützt Tiling-, Stacking- und Tabbing-Layouts, die er dynamisch verarbeitet. Die Konfiguration erfolgt über eine einfache Textdatei, und die Erweiterung von i3 ist über den Unix-Domain-Socket und die JSON-basierte IPC-Schnittstelle von vielen Programmiersprachen aus möglich." description[fr]: "i3 est un gestionnaire de fenêtres à tuiles conçu pour X11, inspiré de wmii et écrit en C. Il supporte les dispositions de tuiles, d'empilement et de tabulation, qu'il gère dynamiquement. La configuration est réalisée via un fichier texte simple et l'extension de i3 est possible en utilisant son socket du domaine Unix et son interface IPC basée sur JSON à partir de nombreux langages de programmation." @@ -233,6 +247,7 @@ items: - id: Qtile name: "Qtile" + platform: "desktop" description: "Qtile is a X11 window manager that is configured with the Python programming language." description[de]: "Qtile ist ein X11-Fenstermanager, der mit der Programmiersprache Python konfiguriert ist." description[fr]: "Qtile est un gestionnaire de fenêtres X11 configuré avec le langage de programmation Python." @@ -246,6 +261,7 @@ items: - id: bspwm name: "bspwm" + platform: "desktop" description: "bspwm is a tiling window manager that represents windows as the leaves of a full binary tree. bspwm supports multiple monitors and is configured and controlled through messages." description[de]: "bspwm ist ein Fenstermanager mit Kacheln, der Fenster als Blätter eines vollständigen Binärbaums darstellt. bspwm unterstützt mehrere Monitore und wird über Nachrichten konfiguriert und gesteuert." description[fr]: "bspwm est un gestionnaire de fenêtres en mosaïque qui représente les fenêtres comme les feuilles d'un arbre binaire complet. bspwm prend en charge plusieurs moniteurs et est configuré et contrôlé via des messages." @@ -259,6 +275,7 @@ items: - id: Openbox name: "Openbox" + platform: "desktop" description: "Openbox is a highly configurable, floating window manager with extensive standards support." description[de]: "Openbox ist ein hochgradig konfigurierbarer, floating Windowmanager mit umfassender Unterstützung von Standards." description[fr]: "Openbox est un gestionnaire de fenêtres flottantes hautement configurable avec une prise en charge étendue des normes." From 0c5b607b673a12ffe04308f92d99ab7a8d68341c Mon Sep 17 00:00:00 2001 From: Vasiliy Stelmachenok Date: Wed, 11 Feb 2026 00:55:43 +0300 Subject: [PATCH 03/12] netinstall: Add option to specify items only for specific platform Signed-off-by: Vasiliy Stelmachenok --- src/modules/netinstall/PackageModel.cpp | 20 +++++--- src/modules/netinstall/PackageTreeItem.cpp | 4 +- src/modules/netinstall/PackageTreeItem.h | 2 + src/modules/netinstall/netinstall.schema.yaml | 1 + src/modules/netinstall/netinstall.yaml | 47 ++++++++++++++++++- 5 files changed, 66 insertions(+), 8 deletions(-) diff --git a/src/modules/netinstall/PackageModel.cpp b/src/modules/netinstall/PackageModel.cpp index a80ae09b80..ed44d685cc 100644 --- a/src/modules/netinstall/PackageModel.cpp +++ b/src/modules/netinstall/PackageModel.cpp @@ -13,6 +13,7 @@ #include "compat/Variant.h" #include "utils/Logger.h" +#include "utils/System.h" #include "utils/Variant.h" #include "utils/Yaml.h" #include "widgets/TranslationFix.h" @@ -367,6 +368,7 @@ PackageModel::getItemPackages( PackageTreeItem* item ) const void PackageModel::setupModelData( const QVariantList& groupList, PackageTreeItem* parent ) { + QString targetPlatform = Calamares::System::instance()->getTargetPlatform(); for ( const auto& group : groupList ) { QVariantMap groupMap = group.toMap(); @@ -436,17 +438,23 @@ PackageModel::setupModelData( const QVariantList& groupList, PackageTreeItem* pa } if ( item->isHidden() ) { - m_hiddenItems.append( item ); - if ( !item->isSelected() ) + if ( item->platform() == targetPlatform || item->platform() == "any" ) { - cWarning() << "Item" << ( item->parentItem() ? item->parentItem()->name() : QString() ) << '.' - << item->name() << "is hidden, but not selected."; + m_hiddenItems.append( item ); + if ( !item->isSelected() ) + { + cWarning() << "Item" << ( item->parentItem() ? item->parentItem()->name() : QString() ) << '.' + << item->name() << "is hidden, but not selected."; + } } } else { - item->setCheckable( true ); - parent->appendChild( item ); + if ( item->platform() == targetPlatform || item->platform() == "any" ) + { + item->setCheckable( true ); + parent->appendChild( item ); + } } } } diff --git a/src/modules/netinstall/PackageTreeItem.cpp b/src/modules/netinstall/PackageTreeItem.cpp index 76f97fa1ce..0f0873b033 100644 --- a/src/modules/netinstall/PackageTreeItem.cpp +++ b/src/modules/netinstall/PackageTreeItem.cpp @@ -58,6 +58,7 @@ PackageTreeItem::PackageTreeItem( const QVariantMap& groupData, PackageTag&& par , m_packageName( Calamares::getString( groupData, "name" ) ) , m_selected( parentCheckState( parent.parent ) ) , m_description( Calamares::getString( groupData, "description" ) ) + , m_platform( Calamares::getString( groupData, "platform", "any" ) ) , m_isGroup( false ) , m_isCritical( parent.parent ? parent.parent->isCritical() : false ) , m_showReadOnly( parent.parent ? parent.parent->isImmutable() : false ) @@ -70,6 +71,7 @@ PackageTreeItem::PackageTreeItem( const QVariantMap& groupData, GroupTag&& paren , m_name( Calamares::getString( groupData, "name" ) ) , m_selected( parentCheckState( parent.parent ) ) , m_description( Calamares::getString( groupData, "description" ) ) + , m_platform( Calamares::getString( groupData, "platform", "any" ) ) , m_preScript( Calamares::getString( groupData, "pre-install" ) ) , m_postScript( Calamares::getString( groupData, "post-install" ) ) , m_source( Calamares::getString( groupData, "source" ) ) @@ -302,7 +304,7 @@ PackageTreeItem::operator==( const PackageTreeItem& rhs ) const { return name() == rhs.name() && description() == rhs.description() && preScript() == rhs.preScript() && postScript() == rhs.postScript() && isCritical() == rhs.isCritical() && isHidden() == rhs.isHidden() - && m_showReadOnly == rhs.m_showReadOnly && expandOnStart() == rhs.expandOnStart(); + && m_showReadOnly == rhs.m_showReadOnly && expandOnStart() == rhs.expandOnStart() && platform() == rhs.platform(); } else { diff --git a/src/modules/netinstall/PackageTreeItem.h b/src/modules/netinstall/PackageTreeItem.h index 074bc3dc28..873e5980a9 100644 --- a/src/modules/netinstall/PackageTreeItem.h +++ b/src/modules/netinstall/PackageTreeItem.h @@ -54,6 +54,7 @@ class PackageTreeItem : public QStandardItem QString packageName() const { return m_packageName; } QString description() const { return m_description; } + QString platform() const { return m_platform; } QString preScript() const { return m_preScript; } QString postScript() const { return m_postScript; } QString source() const { return m_source; } @@ -165,6 +166,7 @@ class PackageTreeItem : public QStandardItem // These are only useful for groups QString m_description; + QString m_platform; QString m_preScript; QString m_postScript; QString m_source; diff --git a/src/modules/netinstall/netinstall.schema.yaml b/src/modules/netinstall/netinstall.schema.yaml index 1faf656513..7074fc8389 100644 --- a/src/modules/netinstall/netinstall.schema.yaml +++ b/src/modules/netinstall/netinstall.schema.yaml @@ -32,6 +32,7 @@ definitions: critical: { type: boolean, default: false } immutable: { type: boolean } noncheckable: { type: boolean } + platform: { type: string } expanded: { type: boolean } subgroups: type: array diff --git a/src/modules/netinstall/netinstall.yaml b/src/modules/netinstall/netinstall.yaml index 95305260f1..569baef48a 100644 --- a/src/modules/netinstall/netinstall.yaml +++ b/src/modules/netinstall/netinstall.yaml @@ -10,11 +10,27 @@ - cachyos-v3-mirrorlist - cachyos-v4-mirrorlist - cachyos-rate-mirrors + - chwd +- name: "CachyOS kernels (hidden)" + description: "CachyOS kernels to install" + hidden: true + selected: true + critical: true + platform: "desktop" + packages: - linux-cachyos - linux-cachyos-headers - linux-cachyos-lts - linux-cachyos-lts-headers - - chwd +- name: "CachyOS kernels (hidden/handheld)" + description: "CachyOS kernels to install (Handheld)" + hidden: true + selected: true + critical: true + platform: "handheld" + packages: + - linux-cachyos-deckify + - linux-cachyos-deckify-headers - name: "CachyOS Packages" description: "needed CachyOS packages" hidden: false @@ -238,6 +254,16 @@ - spectacle - tesseract-data-eng - xsettingsd +- name: "CachyOS Handhelds" + description: "Basic packages for handhelds" + platform: "handheld" + hidden: false + selected: true + critical: true + packages: + - cachyos-handheld + - plasma-keyboard + - v4l-utils - name: "GNOME-Desktop" description: "GNOME desktop environment - designed to put you in control and get things done." description[de]: "Erledigen Sie Ihre Aufgaben mit Leichtigkeit, Komfort und Kontrolle. GNOME ist eine einfache und elegante Art und Weise, Ihren Computer zu benutzen, und wurde entwickelt, um Ihnen das bestmögliche Computererlebnis zu bieten." @@ -248,6 +274,7 @@ description[ru]: "Делайте все с легкостью, комфортом и контролем. Простой и элегантный способ использования компьютера, GNOME создан для того, чтобы помочь вам получить наилучшие впечатления от работы на компьютере." description[zh_CN]: "以轻松、舒适和控制的方式完成事情。作为使用计算机的一种简单而优雅的方式,GNOME被设计用来帮助您获得最佳的计算体验。" description[ja]: "簡単で、快適で、コントロールしやすい。コンピュータを使うための簡単でエレガントな方法である GNOME は、あなたが可能な限り最高のコンピュータ体験をできるように設計されています。" + platform: "desktop" hidden: false selected: false critical: true @@ -300,6 +327,7 @@ description[ja]: "全体として、COSMIC は高度な機能と応答性の高いデザインを備えた包括的なオペレーティング システム GUI (グラフィカル ユーザー インターフェイス) 環境です。そのモジュラー アーキテクチャは、独自のブランド化されたユーザー エクスペリエンスの作成を容易にするように特別に設計されています。" description[sv]: "Som helhet är COSMIC en omfattande operativsystem-GUI (grafiskt användargränssnitt) miljö som har avancerad funktionalitet och en responsiv design. Dess modulära arkitektur är specifikt utformad för att underlätta skapandet av unika, varumärkesanpassade användarupplevelser." description[pt_BR]: "Como um todo, o COSMIC é um ambiente de sistema operacional GUI (interface gráfica do usuário) abrangente que apresenta funcionalidades avançadas e um design responsivo. Sua arquitetura modular é especificamente projetada para facilitar a criação de experiências de usuário únicas e personalizadas." + platform: "desktop" hidden: false selected: false critical: true @@ -341,6 +369,7 @@ description[ru]: "Композитор Wayland с прокручиваемым тайлингом." description[zh_CN]: "一款可滚动平铺的 Wayland 合成器。" description[ja]: "スクロール可能なタイリング方式の Wayland コンポジタ。" + platform: "desktop" hidden: false selected: false expanded: false @@ -358,6 +387,7 @@ description[ru]: "Cinnamon - это рабочий стол Linux, который предоставляет передовые инновационные функции и традиционный пользовательский опыт." description[zh_CN]: "Cinnamon是Linux桌面,提供先进的创新功能和传统的用户体验。" description[ja]: "Cinnamonは、先進的な革新的機能と伝統的なユーザーエクスペリエンスを提供するLinuxデスクトップです。" + platform: "desktop" hidden: false selected: false critical: true @@ -382,6 +412,7 @@ description[ja]: "Budgie Desktopは、機能豊富でモダンなデスクトップです。Budgieのデザインは、シンプルさ、ミニマリズム、そしてエレガンスを強調しています" description[sv]: "Budgie Skrivbordet är ett funktionsrikt, modernert Skrivbord. Budgies design betonar enkelhet, minimalism och elegans." description[pt_BR]: "Budgie Desktop é um ambiente moderno rico em funcionalidade. O design do Budgie enfatiza a simplicidade, o minimalismo e a elegância." + platform: "desktop" hidden: false selected: false critical: true @@ -423,6 +454,7 @@ description[ja]: "MATE デスクトップ環境は GNOME 2 開発の延長線上にあります。Linux や他の Unix ライクな OS 向けの伝統的な手法を用いた、直感的で魅力的なデスクトップ環境を提供します。" description[sv]: "MATE Skrivbordsmiljö är en fortsättningen på GNOME 2. Den ger en intuitiv och attraktiv skrivbordsmiljö med traditionella metaforer för Linux och andra Unix-liknande operativsystem. MATE är under aktiv utveckling för att lägga till stöd för ny teknik samtidigt som en traditionell skrivbordsupplevelse bevaras.." description[pt_BR]: "O MATE Desktop Environment é a continuação do GNOME 2. Ele fornece um ambiente de trabalho intuitivo e atraente usando convenções tradicionais de Linux e outros sistemas operacionais do tipo Unix" + platform: "desktop" hidden: false selected: false critical: true @@ -450,6 +482,7 @@ description[ru]: "Xfce - это облегченная среда рабочего стола для UNIX-подобных операционных систем. Он нацелен на то, чтобы быть быстрым и экономить системные ресурсы, оставаясь при этом визуально привлекательным и удобным для пользователя." description[zh_CN]: "Xfce 是类 UNIX 操作系统上的轻量级桌面环境。虽然它致力于快速与低资源消耗,但仍然具有视觉吸引力且易于使用。" description[ja]: "Xfce は UNIX ライクなオペレーティングシステム用の軽量デスクトップ環境です。魅力的なヴィジュアルと使い勝手の良さを保ちつつ、高速でシステムリソースの使用が少ないことを目指しています。" + platform: "desktop" hidden: false selected: false critical: true @@ -496,6 +529,7 @@ description[ru]: "LXQt - это легкая среда рабочего стола Qt. Она не будет мешать вам. Она не будет зависать или замедлять работу вашей системы. Она ориентирована на то, чтобы быть классическим рабочим столом с современным внешним видом и ощущениями." description[zh_CN]: "LXQt是一个轻量级的Qt桌面环境。它不会妨碍您的工作。它不会挂起或减慢您的系统。它专注于成为一个具有现代感的经典桌面。" description[ja]: "LXQtは、軽量のQtデスクトップ環境です。邪魔になることはありません。ハングアップしたり、システムが遅くなったりすることはありません。モダンなルック&フィールでクラシックなデスクトップであることに重点を置いています。" + platform: "desktop" hidden: false selected: false critical: true @@ -534,6 +568,7 @@ description[ja]: "LXDEは、Lightweight X11 Desktop Environmentの略で、ユーザーフレンドリーでスリムなデザインと低リソース使用量を特徴とする軽量で高速なデスクトップ環境である。ユーザーフレンドリーでスリムなデザインと低リソース使用量を誇るLXDEは、機能豊富なデスクトップ環境でありながら、RAMやCPUの使用量が少なくて済みます。他の緊密に統合されたデスクトップとは異なり、LXDEはモジュール化を目指しているため、各コンポーネントはほとんど依存せず独立して使用することができます。" description[sv]: "LXDE, som står för lättviktig X11 skrivbordsmiljö, är en skrivbordsmiljö som är lättviktig och snabb. Den är designad att vara användarvänlig och smal, samtidigt som resursanvändningen hålls låg. LXDE använder mindre RAM och mindre CPU samtidigt som det är en funktionsrik skrivbordsmiljö. Till skillnad från andra tätt integrerade stationära datorer strävar LXDE efter att vara modulärt, så varje komponent kan användas oberoende med få beroenden." description[pt_BR]: "LXDE, que significa Lightweight X11 Desktop Environment (Ambiente de Trabalho Leve para X11), é um ambiente de trabalho que é leve e rápido. Ele foi projetado para ser fácil de usar e rápido, enquanto mantém o uso de recursos baixo. O LXDE usa menos memória RAM e menos CPU, ao mesmo tempo em que é um ambiente de trabalho rico em funcionalidade. Ao contrário de outros ambientes de trabalho firmemente integrados, o LXDE se esforça para ser modular, de modo que cada componente pode ser usado independentemente com poucas dependências." + platform: "desktop" hidden: false selected: false critical: true @@ -573,6 +608,7 @@ description[ru]: "Hyprland - это очень настраиваемый динамический композитор Wayland, который не жертвует своим внешним видом." description[zh_CN]: "Hyprland是一个高度可定制的动态平铺Wayland合成器,并不牺牲其外观。" description[ja]: "Hyprlandは、見た目を犠牲にすることなく、高度にカスタマイズ可能な動的タイリングのWaylandコンポジターです。" + platform: "desktop" hidden: false selected: false expanded: false @@ -596,6 +632,7 @@ description[zh_CN]: "MangoWM 是一个 Wayland 合成器,通过 Quickshell 使用 Dank Material Shell,并提供由 CachyOS 维护的 dotfiles。" description[ja]: "MangoWM は Quickshell 経由で Dank Material Shell を使用する Wayland コンポジタで、CachyOS が提供する dotfiles が含まれています。" description[sv]: "MangoWM är en Wayland-kompositor som använder Dank Material Shell via Quickshell, med dotfiles från CachyOS." + platform: "desktop" hidden: false selected: false expanded: false @@ -608,6 +645,7 @@ description[de]: "Sway ist ein kachelnder Wayland-Compositor und ein Drop-in-Ersatz für den i3-Fenstermanager für X11. Er arbeitet mit Ihrer bestehenden i3-Konfiguration und unterstützt die meisten Funktionen von i3, plus ein paar Extras." description[pt_BR]: "Sway é um compositor Wayland em mosaico e um substituto direto para o gerenciador de janelas i3 no X11. Ele funciona com sua configuração existente do i3 e oferece suporte à maioria dos recursos do i3, além de alguns adicionais." description[ru]: "Sway - это тайлинговый Wayland композитор и встроенная замена оконному менеджеру i3 для X11. Он работает с вашей существующей конфигурацией i3 и поддерживает большинство функций i3, а также несколько дополнительных функций." + platform: "desktop" hidden: false selected: false critical: true @@ -629,6 +667,7 @@ description[de]: "Wayfire ist ein Wayland-Compositor, der auf wlroots basiert. Er zielt darauf ab, eine anpassbare, erweiterbare und leichtgewichtige Umgebung zu schaffen, ohne dabei sein Aussehen zu beeinträchtigen." description[pt_BR]: "Wayfire é um compositor Wayland baseado no wlroots. Seu objetivo é criar um ambiente personalizável, extensível e leve, sem comprometer a estética." description[ru]: "Wayfire - это композитор wayland, основанный на wlroots. Он направлен на создание настраиваемой, расширяемой и легкой среды без ущерба для ее внешнего вида." + platform: "desktop" hidden: false selected: false expanded: false @@ -652,6 +691,7 @@ description[ru]: "i3 - это тайлинговый оконный менеджер, разработанный для X11, вдохновленный wmii и написанный на C. Он поддерживает компоновку листов, укладку и табуляцию макетов, которые он обрабатывает динамически. Конфигурация достигается с помощью обычного текстового файла, а расширение i3 возможно с помощью его сокета домена Unix и интерфейса IPC на основе JSON со многих языков программирования." description[zh_CN]: "i3是一个为X11设计的平铺式窗口管理器,受wmii的启发,用C语言编写。它支持平铺、堆叠和标签布局,并动态处理。配置是通过纯文本文件实现的,扩展i3可以使用它的Unix域套接字和基于JSON的IPC接口,从许多编程语言。" description[ja]: "i3 は X11 用に設計されたタイル型ウィンドウマネージャで、wmii に触発されて C で書かれています。 タイル型、スタック型、タブ型のレイアウトをサポートし、これらは動的に処理されます。設定はプレーンテキストファイルで行い、i3 の拡張は Unix ドメインソケットと JSON ベースの IPC インターフェースを用いて多くのプログラミング言語から行うことができます。" + platform: "desktop" hidden: false selected: false expanded: false @@ -680,6 +720,7 @@ description[ru]: "Qtile - это оконный менеджер X11, настроенный на язык программирования Python." description[zh_CN]: "Qtile是一个用Python编程语言配置的X11窗口管理器。" description[ja]: "Qtileは、プログラミング言語Pythonで構成されるX11ウィンドウマネージャです。" + platform: "desktop" hidden: false selected: false critical: true @@ -713,6 +754,7 @@ description[ru]: "bspwm - это тайлинговый оконный менеджер, который представляет окна как листья полного двоичного дерева. bspwm поддерживает несколько мониторов и настраивается и управляется с помощью сообщений." description[zh_CN]: "bspwm 是一个平铺窗口管理器,它将窗口表示为完整二叉树的叶子。 bspwm 支持多个监视器,并通过消息进行配置和控制。" description[ja]: "bspwmは、ウィンドウを完全な二分木の葉として表すタイル型ウィンドウマネージャーです。 bspwmは複数のモニターをサポートし、メッセージを介して構成および制御されます。" + platform: "desktop" hidden: false selected: false critical: true @@ -737,6 +779,7 @@ description[ru]: "Openbox - это легко настраиваемый диспетчер плавающих окон с обширной поддержкой стандартов." description[zh_CN]: "Openbox 是一個高度可配置的浮動窗口管理器,具有廣泛的標準支持。" description[ja]: "Openboxは、高度に構成可能なフローティングウィンドウマネージャーであり、広範な標準をサポートしています。" + platform: "desktop" hidden: false selected: false critical: true @@ -793,6 +836,7 @@ - firefox-i18n-$LOCALE - name: "Printing-Support" description: "Support for printing (Cups)" + platform: "desktop" hidden: false selected: false critical: true @@ -812,6 +856,7 @@ - system-config-printer - name: "Support for HP Printer/Scanner" description: "Extra Packages for HP Printer/Scanner" + platform: "desktop" hidden: false selected: false critical: true From 375aa99c17b6d71dd0380b9efdf8b5a8ef511d91 Mon Sep 17 00:00:00 2001 From: Vasiliy Stelmachenok Date: Wed, 11 Feb 2026 01:17:22 +0300 Subject: [PATCH 04/12] packagechooser: Limit some bootloaders only for desktop systems Signed-off-by: Vasiliy Stelmachenok --- src/modules/packagechooser/packagechooser_bootloader.conf | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/modules/packagechooser/packagechooser_bootloader.conf b/src/modules/packagechooser/packagechooser_bootloader.conf index dd0ce38cb9..d7b202c762 100644 --- a/src/modules/packagechooser/packagechooser_bootloader.conf +++ b/src/modules/packagechooser/packagechooser_bootloader.conf @@ -16,12 +16,14 @@ default: limine items: - id: grub name: "GRUB" + platform: "desktop" description: "GRUB is the oldest of the available boot managers. It has a very large feature set, works on almost every machine, and remains the most widely used Linux boot manager. Tip: Choose GRUB if you need encrypted /boot, BIOS compatibility, or want Btrfs snapshots with a stable, mature boot manager." description[pt_BR]: "O GRUB é o mais antigo dos gerenciadores de inicialização disponíveis. Oferece muitos recursos, funciona em praticamente qualquer máquina e continua sendo o gerenciador de inicialização mais utilizado no Linux. Dica: escolha o GRUB se precisar de /boot criptografado, compatibilidade com BIOS ou quiser snapshots Btrfs com um gerenciador de inicialização estável e maduro." screenshot: "/etc/calamares/images/bootloaders/grub.jxl" - id: refind name: "rEFInd" + platform: "desktop" efiOnly: true description: "A fork of rEFIt, rEFInd was primarily made to make it easier for MacOS users to multi-boot. However, rEFInd has evolved into being hardware agnostic, making it a great choice for multi-booting on any system. The main draw of rEFInd is its ability to scan all storage devices at boot and correspondingly display entries for each OS/Kernel found. Tip: Choose rEFInd if you want a polished graphical interface and automatic multi-boot detection on UEFI systems." description[pt_BR]: "Um fork do rEFIt, o rEFInd foi criado principalmente para facilitar o multi-boot para usuários de macOS. Com o tempo, porém, evoluiu para se tornar independente do hardware, tornando-se uma ótima escolha para multi-boot em qualquer sistema. O principal destaque do rEFInd é sua capacidade de varrer todos os dispositivos de armazenamento durante a inicialização e exibir automaticamente entradas para cada sistema operacional ou kernel encontrado. Dica: escolha o rEFInd se quiser uma interface gráfica refinada e detecção automática de multi-boot em sistemas UEFI." @@ -29,6 +31,7 @@ items: - id: refind-ai name: "rEFInd + AI SDK" + platform: "desktop" efiOnly: true description: "This is a refind option with the AI SDK. If you don’t know why you need it, don’t choose it instead of usual rEFInd variant." description[pt_BR]: "Esta é uma opção do rEFInd com o AI SDK. Se você não sabe por que precisa disso, não a escolha em vez da variante normal do rEFInd." From 67a669ef57c9a9757f467535bc3c3f5204ddc560 Mon Sep 17 00:00:00 2001 From: Vasiliy Stelmachenok Date: Wed, 11 Feb 2026 13:38:18 +0300 Subject: [PATCH 05/12] unpackfs: Add deckify kernel Signed-off-by: Vasiliy Stelmachenok --- src/modules/unpackfs/unpackfs.conf | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/modules/unpackfs/unpackfs.conf b/src/modules/unpackfs/unpackfs.conf index b6fdf5d109..ac78d18f56 100644 --- a/src/modules/unpackfs/unpackfs.conf +++ b/src/modules/unpackfs/unpackfs.conf @@ -122,3 +122,8 @@ unpack: - source: "/run/archiso/bootmnt/arch/boot/x86_64/vmlinuz-linux-cachyos" sourcefs: "file" destination: "/boot/vmlinuz-linux-cachyos" + optional: true + - source: "/run/archiso/bootmnt/arch/boot/x86_64/vmlinuz-linux-cachyos-deckify" + sourcefs: "file" + destination: "/boot/vmlinuz-linux-cachyos-deckify" + optional: true From 5e6cde33de87996b198da895c0cd3194cdc05ad0 Mon Sep 17 00:00:00 2001 From: Vasiliy Stelmachenok Date: Wed, 11 Feb 2026 13:55:34 +0300 Subject: [PATCH 06/12] displaymanager: Skip displaymanager configuration for handhelds It's already part of cachyos-handheld package Signed-off-by: Vasiliy Stelmachenok --- src/modules/displaymanager/main.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/modules/displaymanager/main.py b/src/modules/displaymanager/main.py index 29be5a1bae..60d636890d 100644 --- a/src/modules/displaymanager/main.py +++ b/src/modules/displaymanager/main.py @@ -1026,6 +1026,12 @@ def run(): If a displaymanager is in the list but not installed, a debugging message is printed and the entry ignored. """ + if libcalamares.utils.get_target_platform() == "handheld": + libcalamares.utils.warning( + "Skipping, due to installation on handheld system" + ) + return None + # Get configuration settings for display managers displaymanagers = None if "displaymanagers" in libcalamares.job.configuration: From 71241820f72ebb7f67e3271a86e9ff298153f257 Mon Sep 17 00:00:00 2001 From: Vasiliy Stelmachenok Date: Wed, 11 Feb 2026 14:17:13 +0300 Subject: [PATCH 07/12] pacstrap: Install kernel based on platform type Signed-off-by: Vasiliy Stelmachenok --- src/modules/pacstrap/main.py | 12 +++++++++++- src/modules/pacstrap/pacstrap.conf | 4 ---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/modules/pacstrap/main.py b/src/modules/pacstrap/main.py index 67947cf5bb..e97005c184 100755 --- a/src/modules/pacstrap/main.py +++ b/src/modules/pacstrap/main.py @@ -91,6 +91,12 @@ def run(): else: return "No configuration found", "Aborting due to missing configuration" + if libcalamares.utils.get_target_platform() == "handheld": + base_packages += ["linux-cachyos-deckify", "linux-cachyos-deckify-headers"] + else: + base_packages += ["linux-cachyos", "linux-cachyos-headers", + "linux-cachyos-lts", "linux-cachyos-lts-headers"] + bootloader = libcalamares.globalstorage.value("packagechooser_bootloader") @@ -129,7 +135,11 @@ def run(): libcalamares.utils.warning("Failed to detect CPU vendor for microcode: {!s}".format(e)) if (is_root_on_zfs): - base_packages += ["zfs-utils", "linux-cachyos-zfs", "linux-cachyos-lts-zfs"] + base_packages += ["zfs-utils"] + if libcalamares.utils.get_target_platform() == "handheld": + base_packages += ["linux-cachyos-deckify-zfs"] + else: + base_packages += ["linux-cachyos-zfs", "linux-cachyos-lts-zfs"] elif is_root_on_btrfs: libcalamares.utils.debug("Root on BTRFS") if bootloader == "limine": diff --git a/src/modules/pacstrap/pacstrap.conf b/src/modules/pacstrap/pacstrap.conf index e1df71bbfc..70737cd04b 100644 --- a/src/modules/pacstrap/pacstrap.conf +++ b/src/modules/pacstrap/pacstrap.conf @@ -32,10 +32,6 @@ basePackages: - inetutils - jfsutils - less - - linux-cachyos - - linux-cachyos-headers - - linux-cachyos-lts - - linux-cachyos-lts-headers - linux-firmware - logrotate - lsb-release From 9d497979bfc5bd30c754ba9ff6f3e56720f49afd Mon Sep 17 00:00:00 2001 From: Vasiliy Stelmachenok Date: Wed, 11 Feb 2026 15:51:17 +0300 Subject: [PATCH 08/12] users: Set presets based on platform type Signed-off-by: Vasiliy Stelmachenok --- src/modules/users/Config.cpp | 17 ++++++++++++++-- src/modules/users/users.conf | 25 +++++++++++++++++------- src/modules/users/users.schema.yaml | 30 +++++++++++++++++++++++------ 3 files changed, 57 insertions(+), 15 deletions(-) diff --git a/src/modules/users/Config.cpp b/src/modules/users/Config.cpp index 09a3a82b12..4b233ba289 100644 --- a/src/modules/users/Config.cpp +++ b/src/modules/users/Config.cpp @@ -22,6 +22,7 @@ #include "utils/Permissions.h" #include "utils/String.h" #include "utils/StringExpander.h" +#include "utils/System.h" #include "utils/Variant.h" #include @@ -1050,8 +1051,20 @@ Config::setConfigurationMap( const QVariantMap& configurationMap ) updateGSAutoLogin( doAutoLogin(), loginName() ); checkReady(); - ApplyPresets( *this, configurationMap ) << "fullName" - << "loginName"; + bool ok = false; + auto platformOverrides = Calamares::getSubMap( configurationMap, "platform", ok ); + + if ( ok ) + { + QString targetPlatform = Calamares::System::instance()->getTargetPlatform(); + auto preset = Calamares::getSubMap( platformOverrides, targetPlatform, ok ); + + if ( ok ) + { + ApplyPresets( *this, preset ) << "fullName" + << "loginName"; + } + } } void diff --git a/src/modules/users/users.conf b/src/modules/users/users.conf index 847a16535b..939af390ca 100644 --- a/src/modules/users/users.conf +++ b/src/modules/users/users.conf @@ -136,10 +136,21 @@ hostname: # It requires realmd as a runtime dependency of Calamares, if enabled allowActiveDirectory: false -presets: - fullName: - # value: "OEM User" - editable: true - loginName: - # value: "oem" - editable: true +# Preset values based on platform type +platform: + desktop: + presets: + fullName: + # value: "OEM User" + editable: true + loginName: + # value: "oem" + editable: true + handheld: + presets: + fullName: + value: "Deck" + editable: true + loginName: + value: "deck" + editable: true diff --git a/src/modules/users/users.schema.yaml b/src/modules/users/users.schema.yaml index 9d245939e8..fd128b8254 100644 --- a/src/modules/users/users.schema.yaml +++ b/src/modules/users/users.schema.yaml @@ -62,12 +62,30 @@ properties: # TODO: lift up somewhere, since this will return in many modules; # the type for each field (fullName, loginName) is a # preset-description (value, editable). - presets: - type: object - additionalProperties: false - properties: - fullName: { type: object } - loginName: { type: object } + platform: + type: object + additionalProperties: false + properties: + desktop: + additionalProperties: false + type: object + properties: + presets: + type: object + additionalProperties: false + properties: + fullName: { type: object } + loginName: { type: object } + handheld: + additionalProperties: false + type: object + properties: + presets: + type: object + additionalProperties: false + properties: + fullName: { type: object } + loginName: { type: object } required: - defaultGroups From 9c51139d504c10e3a26dbed3050734dc721138e2 Mon Sep 17 00:00:00 2001 From: Vasiliy Stelmachenok Date: Wed, 11 Feb 2026 17:37:45 +0300 Subject: [PATCH 09/12] services: Install ufw only for desktop platform Signed-off-by: Vasiliy Stelmachenok --- src/modules/netinstall/netinstall.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/modules/netinstall/netinstall.yaml b/src/modules/netinstall/netinstall.yaml index 569baef48a..56d4c9f091 100644 --- a/src/modules/netinstall/netinstall.yaml +++ b/src/modules/netinstall/netinstall.yaml @@ -75,6 +75,7 @@ - name: "firewall" description: "Firewall support" selected: true + platform: "desktop" packages: - ufw - ufw-extras From e9f7de543506f6ac6ffa35de1f8f22fc6d320d52 Mon Sep 17 00:00:00 2001 From: Vasiliy Stelmachenok Date: Sun, 15 Feb 2026 19:14:51 +0300 Subject: [PATCH 10/12] bootloader: Rotate Limine interface by default properly on handhelds MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Eric Naim Co-authored-by: Anton Ždanov Signed-off-by: Vasiliy Stelmachenok --- src/modules/bootloader/main.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/modules/bootloader/main.py b/src/modules/bootloader/main.py index 34e5a9fd2b..4e9095d64c 100644 --- a/src/modules/bootloader/main.py +++ b/src/modules/bootloader/main.py @@ -26,6 +26,7 @@ import re import shutil import subprocess +import json import libcalamares @@ -751,6 +752,24 @@ def add_additional_entries_limine(efi_directory, installation_root_path, fw_type config_file.write(f"\tdrive: {diskseq}\n") config_file.write(f"\tpartition: {partition_number}\n") + +def get_device_rotation(): + drm_info = subprocess.check_output(['drm_info', '-j'], stderr=subprocess.DEVNULL) + data = json.loads(drm_info) + + for _, card in data.items(): + connectors = card.get("connectors") + + if not connectors: + continue + + properties = connectors[0].get("properties", {}) + + if "panel orientation" in properties: + return properties["panel orientation"].get("value", 0) + + return 0 + def update_limine_config(efi_directory, installation_root_path, fw_type): """ :param efi_directory: The path to the efi directory relative to the root @@ -765,8 +784,19 @@ def update_limine_config(efi_directory, installation_root_path, fw_type): with open(config_path, 'w') as config_file: config_file.write("timeout: 5\n") config_file.write("default_entry: 2\n") + if fw_type == "efi": config_file.write("remember_last_entry: yes\n") + + if libcalamares.utils.get_target_platform() == "handheld": + rotation = get_device_rotation() + if rotation == 1: + config_file.write("interface_rotation: 180\n") + elif rotation == 2: + config_file.write("interface_rotation: 270\n") + elif rotation == 3: + config_file.write("interface_rotation: 90\n") + config_file.write("\n") # Copy splash logo From d1835f265ec3a2624b4a640bb3c006a13fb44711 Mon Sep 17 00:00:00 2001 From: Eric Naim Date: Thu, 5 Mar 2026 21:42:11 +0800 Subject: [PATCH 11/12] settings_online: sequence: Create user before installing packages A user must exist before installing the cachyos-handheld package for the autologin setup. Signed-off-by: Eric Naim --- settings_online.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings_online.conf b/settings_online.conf index a7a59c2888..9be0bf4250 100644 --- a/settings_online.conf +++ b/settings_online.conf @@ -72,6 +72,7 @@ sequence: - shellprocess@before-online - pacstrap - machineid + - users - locale - keyboard - localecfg @@ -84,7 +85,6 @@ sequence: - zfshostid - initcpiocfg - initcpio - - users - networkcfg - displaymanager - hwclock From 0ccedc077b48389fb1bb95bf2a9d208615d33885 Mon Sep 17 00:00:00 2001 From: Peter Jung Date: Sun, 28 Jun 2026 19:36:37 +0200 Subject: [PATCH 12/12] netinstall.conf: Change to the dev branch Signed-off-by: Peter Jung --- src/modules/netinstall/netinstall.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/netinstall/netinstall.conf b/src/modules/netinstall/netinstall.conf index 199ee62f1a..82d08271eb 100644 --- a/src/modules/netinstall/netinstall.conf +++ b/src/modules/netinstall/netinstall.conf @@ -6,7 +6,7 @@ --- groupsUrl: - - https://raw.githubusercontent.com/CachyOS/cachyos-calamares/cachyos/src/modules/netinstall/netinstall.yaml + - https://raw.githubusercontent.com/CachyOS/cachyos-calamares/cachyos-dev-deckify/src/modules/netinstall/netinstall.yaml - file:///etc/calamares/modules/netinstall.yaml required: true