commit 77927dcd501a03779ddfb2f5bb68e735e3748d50 Author: = Date: Thu Jul 31 22:50:58 2025 -0500 first commit diff --git a/Background.qml b/Background.qml new file mode 100644 index 0000000..6721e57 --- /dev/null +++ b/Background.qml @@ -0,0 +1,56 @@ +/* + SPDX-FileCopyrightText: 2016 Boudhayan Gupta + + SPDX-License-Identifier: LGPL-2.0-or-later +*/ + +import QtQuick 2.15 + +FocusScope { + id: sceneBackground + + property var sceneBackgroundType + property alias sceneBackgroundColor: sceneColorBackground.color + property alias sceneBackgroundImage: sceneImageBackground.source + + Rectangle { + id: sceneColorBackground + anchors.fill: parent + } + + Image { + id: sceneImageBackground + anchors.fill: parent + sourceSize.width: parent.width + sourceSize.height: parent.height + fillMode: Image.PreserveAspectCrop + smooth: true; + } + + states: [ + State { + name: "imageBackground" + when: sceneBackgroundType === "image" + PropertyChanges { + target: sceneColorBackground + visible: false + } + PropertyChanges { + target: sceneImageBackground + visible: true + } + }, + State { + name: "colorBackground" + when: sceneBackgroundType !== "image" + PropertyChanges { + target: sceneColorBackground + visible: true + } + PropertyChanges { + target: sceneImageBackground + visible: false + } + } + ] +} diff --git a/KeyboardButton.qml b/KeyboardButton.qml new file mode 100644 index 0000000..a2cda05 --- /dev/null +++ b/KeyboardButton.qml @@ -0,0 +1,61 @@ +/* + SPDX-FileCopyrightText: 2016 David Edmundson + SPDX-FileCopyrightText: 2022 Aleix Pol Gonzalez + + SPDX-License-Identifier: LGPL-2.0-or-later +*/ + +import QtQuick 2.15 + +import org.kde.plasma.components 3.0 as PlasmaComponents +import org.kde.kirigami 2.20 as Kirigami + +PlasmaComponents.ToolButton { + id: root + + property int currentIndex: keyboard.currentLayout + onCurrentIndexChanged: keyboard.currentLayout = currentIndex + + text: i18nd("plasma-desktop-sddm-theme", "Keyboard Layout: %1", keyboard.layouts[currentIndex]?.longName ?? "") + visible: keyboard.layouts.length > 1 + + checkable: true + checked: menu.opened + onToggled: { + if (checked) { + menu.popup(root, 0, 0) + } else { + menu.dismiss() + } + } + + signal keyboardLayoutChanged() + + PlasmaComponents.Menu { + id: menu + Kirigami.Theme.colorSet: Kirigami.Theme.Window + Kirigami.Theme.inherit: false + + onAboutToShow: { + if (instantiator.model === null) { + let layouts = keyboard.layouts; + layouts.sort((a, b) => a.longName.localeCompare(b.longName)); + instantiator.model = layouts; + } + } + + Instantiator { + id: instantiator + model: null + onObjectAdded: (index, object) => menu.insertItem(index, object) + onObjectRemoved: (index, object) => menu.removeItem(object) + delegate: PlasmaComponents.MenuItem { + text: modelData.longName + onTriggered: { + keyboard.currentLayout = keyboard.layouts.indexOf(modelData) + root.keyboardLayoutChanged() + } + } + } + } +} diff --git a/Login.qml b/Login.qml new file mode 100644 index 0000000..850a246 --- /dev/null +++ b/Login.qml @@ -0,0 +1,168 @@ +import org.kde.breeze.components + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import QtQuick.Controls 2.15 as QQC2 + +import org.kde.plasma.components 3.0 as PlasmaComponents3 +import org.kde.plasma.extras 2.0 as PlasmaExtras +import org.kde.kirigami 2.20 as Kirigami + +SessionManagementScreen { + id: root + property Item mainPasswordBox: passwordBox + + property bool showUsernamePrompt: !showUserList + + property string lastUserName + property bool loginScreenUiVisible: false + + //the y position that should be ensured visible when the on screen keyboard is visible + property int visibleBoundary: mapFromItem(loginButton, 0, 0).y + onHeightChanged: visibleBoundary = mapFromItem(loginButton, 0, 0).y + loginButton.height + Kirigami.Units.smallSpacing + + property real fontSize: Kirigami.Theme.defaultFont.pointSize + + signal loginRequest(string username, string password) + + onShowUsernamePromptChanged: { + if (!showUsernamePrompt) { + lastUserName = "" + } + } + + onUserSelected: { + // Don't startLogin() here, because the signal is connected to the + // Escape key as well, for which it wouldn't make sense to trigger + // login. + passwordBox.clear() + focusFirstVisibleFormControl(); + } + + QQC2.StackView.onActivating: { + // Controls are not visible yet. + Qt.callLater(focusFirstVisibleFormControl); + } + + function focusFirstVisibleFormControl() { + const nextControl = (userNameInput.visible + ? userNameInput + : (passwordBox.visible + ? passwordBox + : loginButton)); + // Using TabFocusReason, so that the loginButton gets the visual highlight. + nextControl.forceActiveFocus(Qt.TabFocusReason); + } + + /* + * Login has been requested with the following username and password + * If username field is visible, it will be taken from that, otherwise from the "name" property of the currentIndex + */ + function startLogin() { + const username = showUsernamePrompt ? userNameInput.text : userList.selectedUser + const password = passwordBox.text + + footer.enabled = false + mainStack.enabled = false + userListComponent.userList.opacity = 0 + + // This is partly because it looks nicer, but more importantly it + // works round a Qt bug that can trigger if the app is closed with a + // TextField focused. + // + // See https://bugreports.qt.io/browse/QTBUG-55460 + loginButton.forceActiveFocus(); + loginRequest(username, password); + } + + PlasmaComponents3.TextField { + id: userNameInput + font.pointSize: fontSize + 1 + Layout.fillWidth: true + + text: lastUserName + visible: showUsernamePrompt + focus: showUsernamePrompt && !lastUserName //if there's a username prompt it gets focus first, otherwise password does + placeholderText: i18nd("plasma-desktop-sddm-theme", "Username") + + // Add padding for yellow border + leftPadding: Kirigami.Units.smallSpacing * 2 // ~8px padding + rightPadding: Kirigami.Units.smallSpacing * 2 + topPadding: Kirigami.Units.smallSpacing + bottomPadding: Kirigami.Units.smallSpacing + + // Custom background with yellow border and no fill + background: Rectangle { + color: "transparent" // No background fill + border.color: "#FFE710" // Yellow border + border.width: 3 // Border thickness + radius: 4 // Optional: slight rounding for aesthetics + } + + onAccepted: { + if (root.loginScreenUiVisible) { + passwordBox.forceActiveFocus() + } + } + } + + Rectangle { + width: 2560 + height: 1440 + color: "transparent" + + PlasmaExtras.PasswordField { + id: passwordBox + x: -330 + y: 243 + width: parent.width * 0.8 + + font.pointSize: fontSize + 20 + + placeholderText: i18nd("plasma-desktop-sddm-theme", "Password") + + focus: !showUsernamePrompt || lastUserName + rightActions: [] + + leftPadding: Kirigami.Units.smallSpacing * 2 + rightPadding: Kirigami.Units.smallSpacing * 2 + topPadding: Kirigami.Units.smallSpacing + bottomPadding: Kirigami.Units.smallSpacing + + background: Rectangle { + color: "transparent" + } + + visible: root.showUsernamePrompt || userList.currentItem.needsPassword + + onAccepted: { + if (root.loginScreenUiVisible) { + startLogin(); + } + } + + Keys.onEscapePressed: { + mainStack.currentItem.forceActiveFocus(); + } + + Keys.onPressed: event => { + if (event.key === Qt.Key_Left && !text) { + userList.decrementCurrentIndex(); + event.accepted = true + } + if (event.key === Qt.Key_Right && !text) { + userList.incrementCurrentIndex(); + event.accepted = true + } + } + + Connections { + target: sddm + function onLoginFailed() { + passwordBox.selectAll() + passwordBox.forceActiveFocus() + } + } + } + } +} diff --git a/Main.qml b/Main.qml new file mode 100644 index 0000000..8b58659 --- /dev/null +++ b/Main.qml @@ -0,0 +1,402 @@ +/* + SPDX-FileCopyrightText: 2016 David Edmundson + + SPDX-License-Identifier: LGPL-2.0-or-later +*/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import QtQuick.Controls 2.15 as QQC2 +import Qt5Compat.GraphicalEffects + +import org.kde.plasma.components 3.0 as PlasmaComponents3 +import org.kde.plasma.private.keyboardindicator as KeyboardIndicator +import org.kde.kirigami 2.20 as Kirigami + +import org.kde.breeze.components + +Item { + id: root + + // If we're using software rendering, draw outlines instead of shadows + // See https://bugs.kde.org/show_bug.cgi?id=398317 + readonly property bool softwareRendering: GraphicsInfo.api === GraphicsInfo.Software + + Kirigami.Theme.colorSet: Kirigami.Theme.Complementary + Kirigami.Theme.inherit: false + + width: 1600 + height: 900 + + property string notificationMessage + + LayoutMirroring.enabled: Qt.application.layoutDirection === Qt.RightToLeft + LayoutMirroring.childrenInherit: true + + KeyboardIndicator.KeyState { + id: capsLockState + key: Qt.Key_CapsLock + } + + Item { + id: wallpaper + anchors.fill: parent + Repeater { + model: screenModel + + Background { + x: geometry.x; y: geometry.y; width: geometry.width; height: geometry.height + sceneBackgroundType: config.type + sceneBackgroundColor: config.color + sceneBackgroundImage: config.background + } + } + } + + RejectPasswordAnimation { + id: rejectPasswordAnimation + target: mainStack + } + + MouseArea { + id: loginScreenRoot + anchors.fill: parent + + property bool uiVisible: true + property bool blockUI: mainStack.depth > 1 || userListComponent.mainPasswordBox.text.length > 0 || inputPanel.keyboardActive || config.type !== "image" + + hoverEnabled: true + drag.filterChildren: true + onPressed: uiVisible = true; + onPositionChanged: uiVisible = true; + onUiVisibleChanged: { + if (blockUI) { + fadeoutTimer.running = false; + } else if (uiVisible) { + fadeoutTimer.restart(); + } + } + onBlockUIChanged: { + if (blockUI) { + fadeoutTimer.running = false; + uiVisible = true; + } else { + fadeoutTimer.restart(); + } + } + + Keys.onPressed: event => { + uiVisible = true; + event.accepted = false; + } + + QQC2.StackView { + id: mainStack + anchors { + left: parent.left + right: parent.right + } + height: root.height + Kirigami.Units.gridUnit * 3 + + // If true (depends on the style and environment variables), hover events are always accepted + // and propagation stopped. This means the parent MouseArea won't get them and the UI won't be shown. + // Disable capturing those events while the UI is hidden to avoid that, while still passing events otherwise. + // One issue is that while the UI is visible, mouse activity won't keep resetting the timer, but when it + // finally expires, the next event should immediately set uiVisible = true again. + hoverEnabled: loginScreenRoot.uiVisible ? undefined : false + + focus: true //StackView is an implicit focus scope, so we need to give this focus so the item inside will have it + + Timer { + //SDDM has a bug in 0.13 where even though we set the focus on the right item within the window, the window doesn't have focus + //it is fixed in 6d5b36b28907b16280ff78995fef764bb0c573db which will be 0.14 + //we need to call "window->activate()" *After* it's been shown. We can't control that in QML so we use a shoddy timer + //it's been this way for all Plasma 5.x without a huge problem + running: true + repeat: false + interval: 200 + onTriggered: mainStack.forceActiveFocus() + } + + initialItem: Login { + id: userListComponent + userListModel: userModel + loginScreenUiVisible: loginScreenRoot.uiVisible + userListCurrentIndex: userModel.lastIndex >= 0 ? userModel.lastIndex : 0 + lastUserName: userModel.lastUser + showUserList: { + userListComponent.userList.opacity = 0 + if (!userListModel.hasOwnProperty("count") + || !userListModel.hasOwnProperty("disableAvatarsThreshold")) { + return false + } + + if (userListModel.count === 0 ) { + return false + } + + if (userListModel.hasOwnProperty("containsAllUsers") && !userListModel.containsAllUsers) { + return false + } + + return userListModel.count <= userListModel.disableAvatarsThreshold + } + + notificationMessage: { + const parts = []; + if (capsLockState.locked) { + parts.push(i18nd("plasma-desktop-sddm-theme", "Caps Lock is on")); + } + if (root.notificationMessage) { + parts.push(root.notificationMessage); + } + return parts.join(" • "); + } + + /*actionItemsVisible: !inputPanel.keyboardActive + actionItems: [ + ActionButton { + icon.name: "system-suspend" + text: i18ndc("plasma-desktop-sddm-theme", "Suspend to RAM", "Sleep") + onClicked: sddm.suspend() + enabled: sddm.canSuspend + }, + ActionButton { + icon.name: "system-reboot" + text: i18nd("plasma-desktop-sddm-theme", "Restart") + onClicked: sddm.reboot() + enabled: sddm.canReboot + }, + ActionButton { + icon.name: "system-shutdown" + text: i18nd("plasma-desktop-sddm-theme", "Shut Down") + onClicked: sddm.powerOff() + enabled: sddm.canPowerOff + }, + ActionButton { + icon.name: "system-user-prompt" + text: i18ndc("plasma-desktop-sddm-theme", "For switching to a username and password prompt", "Other…") + onClicked: mainStack.push(userPromptComponent) + visible: !userListComponent.showUsernamePrompt + }]*/ + + onLoginRequest: { + root.notificationMessage = "" + sddm.login(username, password, sessionButton.currentIndex) + } + } + + Behavior on opacity { + OpacityAnimator { + duration: Kirigami.Units.longDuration + } + } + + readonly property real zoomFactor: 1.5 + + popEnter: Transition { + ScaleAnimator { + from: mainStack.zoomFactor + to: 1 + duration: Kirigami.Units.veryLongDuration + easing.type: Easing.OutCubic + } + OpacityAnimator { + from: 0 + to: 1 + duration: Kirigami.Units.veryLongDuration + easing.type: Easing.OutCubic + } + } + + popExit: Transition { + ScaleAnimator { + from: 1 + to: 1 / mainStack.zoomFactor + duration: Kirigami.Units.veryLongDuration + easing.type: Easing.OutCubic + } + OpacityAnimator { + from: 1 + to: 0 + duration: Kirigami.Units.veryLongDuration + easing.type: Easing.OutCubic + } + } + + pushEnter: Transition { + ScaleAnimator { + from: 1 / mainStack.zoomFactor + to: 1 + duration: Kirigami.Units.veryLongDuration + easing.type: Easing.OutCubic + } + OpacityAnimator { + from: 0 + to: 1 + duration: Kirigami.Units.veryLongDuration + easing.type: Easing.OutCubic + } + } + + pushExit: Transition { + ScaleAnimator { + from: 1 + to: mainStack.zoomFactor + duration: Kirigami.Units.veryLongDuration + easing.type: Easing.OutCubic + } + OpacityAnimator { + from: 1 + to: 0 + duration: Kirigami.Units.veryLongDuration + easing.type: Easing.OutCubic + } + } + } + + VirtualKeyboardLoader { + id: inputPanel + + z: 1 + + screenRoot: root + mainStack: mainStack + mainBlock: userListComponent + passwordField: userListComponent.mainPasswordBox + } + + Component { + id: userPromptComponent + Login { + showUsernamePrompt: true + notificationMessage: root.notificationMessage + loginScreenUiVisible: loginScreenRoot.uiVisible + fontSize: Kirigami.Theme.defaultFont.pointSize + 2 + + // using a model rather than a QObject list to avoid QTBUG-75900 + userListModel: ListModel { + ListElement { + name: "" + icon: "" + } + Component.onCompleted: { + // as we can't bind inside ListElement + setProperty(0, "name", i18nd("plasma-desktop-sddm-theme", "Type in Username and Password")); + setProperty(0, "icon", Qt.resolvedUrl("faces/.face.icon")) + } + } + + onLoginRequest: { + root.notificationMessage = "" + sddm.login(username, password, sessionButton.currentIndex) + } + + actionItemsVisible: !inputPanel.keyboardActive + actionItems: [ + ActionButton { + icon.name: "system-suspend" + text: i18ndc("plasma-desktop-sddm-theme", "Suspend to RAM", "Sleep") + onClicked: sddm.suspend() + enabled: sddm.canSuspend + }, + ActionButton { + icon.name: "system-reboot" + text: i18nd("plasma-desktop-sddm-theme", "Restart") + onClicked: sddm.reboot() + enabled: sddm.canReboot + }, + ActionButton { + icon.name: "system-shutdown" + text: i18nd("plasma-desktop-sddm-theme", "Shut Down") + onClicked: sddm.powerOff() + enabled: sddm.canPowerOff + }, + ActionButton { + icon.name: "system-user-list" + text: i18nd("plasma-desktop-sddm-theme", "List Users") + onClicked: mainStack.pop() + } + ] + } + } + + // Note: Containment masks stretch clickable area of their buttons to + // the screen edges, essentially making them adhere to Fitts's law. + // Due to virtual keyboard button having an icon, buttons may have + // different heights, so fillHeight is required. + // + // Note for contributors: Keep this in sync with LockScreenUi.qml footer. + RowLayout { + id: footer + anchors { + bottom: parent.bottom + left: parent.left + right: parent.right + margins: Kirigami.Units.smallSpacing + } + spacing: Kirigami.Units.smallSpacing + + Behavior on opacity { + OpacityAnimator { + duration: Kirigami.Units.longDuration + } + } + + SessionButton { + id: sessionButton + + onSessionChanged: { + // Otherwise the password field loses focus and virtual keyboard + // keystrokes get eaten + userListComponent.mainPasswordBox.forceActiveFocus(); + } + + Layout.fillHeight: true + containmentMask: Item { + parent: sessionButton + anchors.fill: parent + anchors.leftMargin: virtualKeyboardButton.visible || keyboardButton.visible + ? 0 : -footer.anchors.margins + anchors.bottomMargin: -footer.anchors.margins + } + } + + Item { + Layout.fillWidth: true + } + + Battery {} + } + } + + Connections { + target: sddm + function onLoginFailed() { + notificationMessage = i18nd("plasma-desktop-sddm-theme", "Login Failed") + footer.enabled = true + mainStack.enabled = true + userListComponent.userList.opacity = 0 + rejectPasswordAnimation.start() + } + function onLoginSucceeded() { + //note SDDM will kill the greeter at some random point after this + //there is no certainty any transition will finish, it depends on the time it + //takes to complete the init + mainStack.opacity = 0 + footer.opacity = 0 + } + } + + onNotificationMessageChanged: { + if (notificationMessage) { + notificationResetTimer.start(); + } + } + + Timer { + id: notificationResetTimer + interval: 3000 + onTriggered: notificationMessage = "" + } +} diff --git a/Messages.sh b/Messages.sh new file mode 100644 index 0000000..1ded812 --- /dev/null +++ b/Messages.sh @@ -0,0 +1,2 @@ +#! /usr/bin/env bash +$XGETTEXT `find . -name \*.qml` -L Java -o $podir/plasma-desktop-sddm-theme.pot diff --git a/SessionButton.qml b/SessionButton.qml new file mode 100644 index 0000000..ad387b5 --- /dev/null +++ b/SessionButton.qml @@ -0,0 +1,55 @@ +/* + SPDX-FileCopyrightText: 2016 David Edmundson + SPDX-FileCopyrightText: 2022 Aleix Pol Gonzalez + + SPDX-License-Identifier: LGPL-2.0-or-later +*/ + +import QtQuick 2.15 + +import org.kde.plasma.components 3.0 as PlasmaComponents +import org.kde.kirigami 2.20 as Kirigami + +PlasmaComponents.ToolButton { + id: root + + property int currentIndex: -1 + + text: i18nd("plasma-desktop-sddm-theme", "Desktop Session: %1", instantiator.objectAt(currentIndex).text || "") + visible: menu.count > 1 + + Component.onCompleted: { + currentIndex = sessionModel.lastIndex + } + checkable: true + checked: menu.opened + onToggled: { + if (checked) { + menu.popup(root, 0, 0) + } else { + menu.dismiss() + } + } + + signal sessionChanged() + + PlasmaComponents.Menu { + Kirigami.Theme.colorSet: Kirigami.Theme.Window + Kirigami.Theme.inherit: false + + id: menu + Instantiator { + id: instantiator + model: sessionModel + onObjectAdded: (index, object) => menu.insertItem(index, object) + onObjectRemoved: (index, object) => menu.removeItem(object) + delegate: PlasmaComponents.MenuItem { + text: model.name + onTriggered: { + root.currentIndex = model.index + sessionChanged() + } + } + } + } +} diff --git a/background.png b/background.png new file mode 100644 index 0000000..91d7da7 Binary files /dev/null and b/background.png differ diff --git a/default-logo.svg b/default-logo.svg new file mode 100644 index 0000000..722113d --- /dev/null +++ b/default-logo.svg @@ -0,0 +1,4 @@ + + + + diff --git a/faces/.face.icon b/faces/.face.icon new file mode 100644 index 0000000..ecee991 --- /dev/null +++ b/faces/.face.icon @@ -0,0 +1,14 @@ + + + + + + diff --git a/icons/power.png b/icons/power.png new file mode 100644 index 0000000..18f4c0a Binary files /dev/null and b/icons/power.png differ diff --git a/metadata.desktop b/metadata.desktop new file mode 100644 index 0000000..3df02f4 --- /dev/null +++ b/metadata.desktop @@ -0,0 +1,107 @@ +[SddmGreeterTheme] +Name=Breeze +Name[ar]=نسيم +Name[az]=Breeze +Name[be]=Breeze +Name[bg]=Breeze +Name[ca]=Brisa +Name[ca@valencia]=Brisa +Name[cs]=Breeze +Name[da]=Breeze +Name[de]=Breeze +Name[el]=Breeze +Name[en_GB]=Breeze +Name[eo]=Breeze +Name[es]=Brisa +Name[eu]=Breeze +Name[fi]=Breeze +Name[fr]=Breeze +Name[gl]=Brisa +Name[he]=בריזה +Name[hu]=Breeze +Name[ia]=Breeze (Brisa) +Name[id]=Breeze +Name[is]=Breeze +Name[it]=Brezza +Name[ka]=Breeze +Name[ko]=Breeze +Name[lt]=Breeze +Name[lv]=Breeze +Name[nb]=Breeze +Name[nl]=Breeze +Name[nn]=Breeze +Name[pa]=ਬਰੀਜ਼ +Name[pl]=Bryza +Name[pt_BR]=Breeze +Name[ro]=Breeze +Name[ru]=Breeze +Name[sa]=वायुः +Name[sk]=Vánok +Name[sl]=Sapica +Name[sv]=Breeze +Name[ta]=பிரீஸ் +Name[tr]=Esinti +Name[uk]=Breeze +Name[x-test]=xxBreezexx +Name[zh_CN]=Breeze 微风 +Name[zh_TW]=Breeze +Description=Breeze +Description[ar]=نسيم +Description[az]=Breeze +Description[be]=Breeze +Description[bg]=Breeze +Description[ca]=Brisa +Description[ca@valencia]=Brisa +Description[cs]=Breeze +Description[da]=Breeze +Description[de]=Breeze +Description[el]=Breeze +Description[en_GB]=Breeze +Description[eo]=Brizo +Description[es]=Brisa +Description[eu]=Brisa +Description[fi]=Breeze +Description[fr]=Breeze +Description[gl]=Brisa. +Description[he]=בריזה +Description[hu]=Breeze +Description[ia]=Breeze (Brisa) +Description[id]=Breeze +Description[is]=Breeze +Description[it]=Brezza +Description[ka]=Breeze +Description[ko]=Breeze +Description[lt]=Breeze +Description[lv]=Breeze +Description[nb]=Breeze +Description[nl]=Breeze +Description[nn]=Breeze +Description[pa]=ਬਰੀਜ਼ +Description[pl]=Bryza +Description[pt_BR]=Breeze +Description[ro]=Briză +Description[ru]=Breeze +Description[sa]=वायुः +Description[sk]=Vánok +Description[sl]=Sapica +Description[sv]=Breeze +Description[ta]=பிரீஸ் +Description[tr]=Esinti +Description[uk]=Breeze +Description[x-test]=xxBreezexx +Description[zh_CN]=Breeze 微风 +Description[zh_TW]=Breeze +Author=KDE Visual Design Group +Copyright=(c) 2014, David Edmundson +License=CC-BY-SA +Type=sddm-theme +Version=0.1 +Website=https://github.com/sddm/sddm +Screenshot=preview.png +MainScript=Main.qml +ConfigFile=theme.conf +TranslationsDirectory=translations +Email=plasma-devel@kde.org +Theme-Id=breeze +Theme-API=2.0 +QtVersion=6 diff --git a/preview.png b/preview.png new file mode 100644 index 0000000..1321a95 Binary files /dev/null and b/preview.png differ diff --git a/theme.conf b/theme.conf new file mode 100644 index 0000000..6776d89 --- /dev/null +++ b/theme.conf @@ -0,0 +1,9 @@ +[General] +showlogo=hidden +showClock=true +logo=/nix/store/0gnm173zw3fic8h8hn9fwvg04k2h3szy-plasma-desktop-6.4.3/share/sddm/themes/breeze/default-logo.svg +type=image +color=#1d99f3 +fontSize=10 +background=background.png +needsFullUserModel=false diff --git a/theme.conf.cmake.orig b/theme.conf.cmake.orig new file mode 100644 index 0000000..7436cec --- /dev/null +++ b/theme.conf.cmake.orig @@ -0,0 +1,9 @@ +[General] +showlogo=hidden +showClock=true +logo=${KDE_INSTALL_FULL_DATADIR}/sddm/themes/breeze/default-logo.svg +type=image +color=#1d99f3 +fontSize=10 +background=${KDE_INSTALL_FULL_WALLPAPERDIR}/Next/contents/images/5120x2880.png +needsFullUserModel=false