Name: shiva-branding Version: 1.0 Release: 1%{?dist} Summary: ShivaOS — Thème SDDM, lock screen et branding visuel License: MIT URL: https://shivaos.com BuildArch: noarch Requires: sddm, plasma-workspace %description Thème visuel ShivaOS complet : - Écran de connexion SDDM (boot + déconnexion) — fond noir, logo orange, bouton "ENTRER DANS LA FORGE" - Écran de verrouillage KDE Plasma 6 — même style, saisie mot de passe - Configuration automatique SDDM + KDE pour utiliser le thème ShivaOS %prep # no sources %build # no compilation %install # ── 1. Thème SDDM ──────────────────────────────────────────────── mkdir -p %{buildroot}/usr/share/sddm/themes/shivaos cat > %{buildroot}/usr/share/sddm/themes/shivaos/metadata.desktop << 'EOF' [SddmGreeterTheme] Name=ShivaOS Description=Shiva OS Gaming Login Screen Author=ShivaOS Team Website=https://shivaos.com Version=2.0 EOF # Copie du wallpaper (symlink vers le wallpaper système) ln -sf /usr/share/wallpapers/ShivaOS/contents/images/shivaos-wallpaper.png \ %{buildroot}/usr/share/sddm/themes/shivaos/background.png || true # Logo mkdir -p %{buildroot}/usr/share/icons/hicolor/128x128/apps # Le logo est fourni par shivaos-logos — on référence celui-ci ln -sf /usr/share/pixmaps/shivaos-logo.png \ %{buildroot}/usr/share/sddm/themes/shivaos/shivaos-logo-128.png 2>/dev/null || true cat > %{buildroot}/usr/share/sddm/themes/shivaos/Main.qml << 'EOF' import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Layouts 1.15 import SddmComponents 2.0 Rectangle { id: root width: Screen.width; height: Screen.height color: "#0a0a0a" Image { anchors.fill: parent source: "background.png" fillMode: Image.PreserveAspectCrop smooth: true } Rectangle { anchors.fill: parent color: "#000000" opacity: 0.50 } Column { anchors.horizontalCenter: parent.horizontalCenter anchors.top: parent.top anchors.topMargin: parent.height * 0.08 spacing: 14 Image { source: "shivaos-logo-128.png" width: 128; height: 128 anchors.horizontalCenter: parent.horizontalCenter smooth: true } Text { text: "SHIVA OS" color: "#FF8C00" font.family: "Arial Black, Arial" font.pixelSize: 44 font.bold: true font.letterSpacing: 8 anchors.horizontalCenter: parent.horizontalCenter } Text { text: "Pure Gaming Ecosystem" color: "#FF8C00" opacity: 0.55 font.pixelSize: 16 font.letterSpacing: 4 anchors.horizontalCenter: parent.horizontalCenter } } Rectangle { id: loginCard width: 400; height: 320 anchors.centerIn: parent anchors.verticalCenterOffset: 30 color: Qt.rgba(1, 1, 1, 0.04) border.color: Qt.rgba(255/255, 140/255, 0/255, 0.35) border.width: 1 radius: 24 Column { anchors.centerIn: parent spacing: 20 width: 320 Text { text: userModel.count > 0 ? userModel.data(userModel.index(0,0), Qt.DisplayRole) : "" color: "#FF8C00" font.pixelSize: 15 font.bold: true opacity: 0.8 anchors.horizontalCenter: parent.horizontalCenter } TextField { id: pwField width: parent.width height: 52 echoMode: TextInput.Password placeholderText: "Mot de passe / Password" color: "white" font.pixelSize: 15 background: Rectangle { color: Qt.rgba(1,1,1,0.06) border.color: pwField.activeFocus ? "#FF8C00" : Qt.rgba(1,1,1,0.18) border.width: 1 radius: 12 } leftPadding: 16 Keys.onReturnPressed: doLogin() } Rectangle { width: parent.width; height: 52 color: loginMouse.containsMouse ? "#e67e00" : "#FF8C00" radius: 12 Behavior on color { ColorAnimation { duration: 150 } } Text { text: "ENTRER DANS LA FORGE" anchors.centerIn: parent color: "#0a0a0a" font.pixelSize: 13 font.bold: true font.letterSpacing: 2 } MouseArea { id: loginMouse anchors.fill: parent hoverEnabled: true onClicked: doLogin() } } } } function doLogin() { var user = userModel.count > 0 ? userModel.data(userModel.index(0,0), 257) : "" sddm.login(user, pwField.text, sessionIndex) } Text { anchors.bottom: parent.bottom anchors.right: parent.right anchors.margins: 32 text: Qt.formatTime(new Date(), "hh:mm") color: "#FF8C00" opacity: 0.55 font.pixelSize: 24 font.bold: true } Text { anchors.bottom: parent.bottom anchors.left: parent.left anchors.margins: 32 text: "ShivaOS 44 — shivaos.com" color: "#FF8C00" opacity: 0.30 font.pixelSize: 13 font.letterSpacing: 2 } property int sessionIndex: sessionModel.lastIndex Component.onCompleted: { if (userModel.count > 0) pwField.forceActiveFocus() } } EOF # ── 2. Config SDDM → utiliser le thème ShivaOS ─────────────────── mkdir -p %{buildroot}/usr/lib/sddm/sddm.conf.d cat > %{buildroot}/usr/lib/sddm/sddm.conf.d/shivaos.conf << 'EOF' [Theme] Current=shivaos EOF # ── 3. KDE Look-and-Feel — Lock Screen ShivaOS ─────────────────── LNFDIR="%{buildroot}/usr/share/plasma/look-and-feel/com.shivaos.desktop" mkdir -p "$LNFDIR/contents/lockscreen" mkdir -p "$LNFDIR/contents/splash/images" cat > "$LNFDIR/metadata.json" << 'EOF' { "KPlugin": { "Authors": [{"Name": "ShivaOS Team", "Email": "contact@shivaos.com"}], "Description": "ShivaOS Gaming Lock Screen", "Id": "com.shivaos.desktop", "License": "MIT", "Name": "ShivaOS", "Version": "1.0", "Website": "https://shivaos.com" } } EOF cat > "$LNFDIR/contents/lockscreen/LockScreen.qml" << 'EOF' import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Layouts 1.15 import org.kde.plasma.core 2.0 as PlasmaCore import org.kde.plasma.components 3.0 as PlasmaComponents Item { id: root anchors.fill: parent Rectangle { anchors.fill: parent color: "#0a0a0a" } Image { anchors.fill: parent source: "/usr/share/wallpapers/ShivaOS/contents/images/shivaos-wallpaper.png" fillMode: Image.PreserveAspectCrop smooth: true } Rectangle { anchors.fill: parent color: "#000000" opacity: 0.55 } Column { anchors.horizontalCenter: parent.horizontalCenter anchors.top: parent.top anchors.topMargin: parent.height * 0.08 spacing: 14 Image { source: "/usr/share/pixmaps/shivaos-logo.png" width: 100; height: 100 anchors.horizontalCenter: parent.horizontalCenter smooth: true } Text { text: "SHIVA OS" color: "#FF8C00" font.family: "Arial Black, Arial" font.pixelSize: 38 font.bold: true font.letterSpacing: 8 anchors.horizontalCenter: parent.horizontalCenter } Text { text: Qt.formatDateTime(new Date(), "dddd d MMMM — hh:mm") color: "#FF8C00" opacity: 0.7 font.pixelSize: 17 font.letterSpacing: 2 anchors.horizontalCenter: parent.horizontalCenter } } Rectangle { id: unlockCard width: 380; height: 200 anchors.centerIn: parent anchors.verticalCenterOffset: 40 color: Qt.rgba(1, 1, 1, 0.04) border.color: Qt.rgba(255/255, 140/255, 0/255, 0.35) border.width: 1 radius: 24 Column { anchors.centerIn: parent spacing: 20 width: 300 TextField { id: pwField width: parent.width height: 52 echoMode: TextInput.Password placeholderText: "Mot de passe / Password" color: "white" font.pixelSize: 15 background: Rectangle { color: Qt.rgba(1,1,1,0.06) border.color: pwField.activeFocus ? "#FF8C00" : Qt.rgba(1,1,1,0.18) border.width: 1 radius: 12 } leftPadding: 16 Keys.onReturnPressed: authenticator.tryUnlock(pwField.text) } Rectangle { width: parent.width; height: 52 color: unlockMouse.containsMouse ? "#e67e00" : "#FF8C00" radius: 12 Behavior on color { ColorAnimation { duration: 150 } } Text { text: "DÉVERROUILLER" anchors.centerIn: parent color: "#0a0a0a" font.pixelSize: 13 font.bold: true font.letterSpacing: 2 } MouseArea { id: unlockMouse anchors.fill: parent hoverEnabled: true onClicked: authenticator.tryUnlock(pwField.text) } } } } Text { anchors.bottom: parent.bottom anchors.left: parent.left anchors.margins: 32 text: "ShivaOS 44 — shivaos.com" color: "#FF8C00" opacity: 0.28 font.pixelSize: 13 font.letterSpacing: 2 } Component.onCompleted: pwField.forceActiveFocus() } EOF # ── 4. Config KDE → utiliser le look-and-feel ShivaOS ──────────── mkdir -p %{buildroot}/etc/skel/.config cat > %{buildroot}/etc/skel/.config/kscreenlockerrc << 'EOF' [Greeter] Theme=com.shivaos.desktop EOF cat > %{buildroot}/etc/skel/.config/kdeglobals << 'EOF' [KDE] LookAndFeelPackage=com.shivaos.desktop EOF # Config système (pour les utilisateurs existants via %post) mkdir -p %{buildroot}/usr/share/plasma/plasmoids %post # Appliquer le lock screen à tous les utilisateurs existants for HOME_DIR in /home/*; do [ -d "$HOME_DIR" ] || continue mkdir -p "$HOME_DIR/.config" # Ne pas écraser si déjà personnalisé if ! grep -q "shivaos" "$HOME_DIR/.config/kscreenlockerrc" 2>/dev/null; then cat > "$HOME_DIR/.config/kscreenlockerrc" << 'KEOF' [Greeter] Theme=com.shivaos.desktop KEOF fi done %files /usr/share/sddm/themes/shivaos/metadata.desktop /usr/share/sddm/themes/shivaos/Main.qml /usr/lib/sddm/sddm.conf.d/shivaos.conf /usr/share/plasma/look-and-feel/com.shivaos.desktop/metadata.json /usr/share/plasma/look-and-feel/com.shivaos.desktop/contents/lockscreen/LockScreen.qml /etc/skel/.config/kscreenlockerrc /etc/skel/.config/kdeglobals %changelog * Fri May 09 2026 ShivaOS Team - 1.0-1 - Release initiale : thème SDDM ShivaOS (boot + login) - Lock screen KDE Plasma 6 (kscreenlocker) — même style orange/noir - Config auto SDDM + KDE pour tous les utilisateurs