first commit

This commit is contained in:
=
2025-07-31 22:50:58 -05:00
commit 77927dcd50
14 changed files with 887 additions and 0 deletions

56
Background.qml Normal file
View File

@@ -0,0 +1,56 @@
/*
SPDX-FileCopyrightText: 2016 Boudhayan Gupta <bgupta@kde.org>
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
}
}
]
}

61
KeyboardButton.qml Normal file
View File

@@ -0,0 +1,61 @@
/*
SPDX-FileCopyrightText: 2016 David Edmundson <davidedmundson@kde.org>
SPDX-FileCopyrightText: 2022 Aleix Pol Gonzalez <aleixpol@kde.org>
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()
}
}
}
}
}

168
Login.qml Normal file
View File

@@ -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()
}
}
}
}
}

402
Main.qml Normal file
View File

@@ -0,0 +1,402 @@
/*
SPDX-FileCopyrightText: 2016 David Edmundson <davidedmundson@kde.org>
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 = ""
}
}

2
Messages.sh Normal file
View File

@@ -0,0 +1,2 @@
#! /usr/bin/env bash
$XGETTEXT `find . -name \*.qml` -L Java -o $podir/plasma-desktop-sddm-theme.pot

55
SessionButton.qml Normal file
View File

@@ -0,0 +1,55 @@
/*
SPDX-FileCopyrightText: 2016 David Edmundson <davidedmundson@kde.org>
SPDX-FileCopyrightText: 2022 Aleix Pol Gonzalez <aleixpol@kde.org>
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()
}
}
}
}
}

BIN
background.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 575 KiB

4
default-logo.svg Normal file
View File

@@ -0,0 +1,4 @@
<svg width="4626" height="1044" viewBox="0 0 4626 1044" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M712.182 149.566C686.396 149.566 665.636 170.325 665.636 196.111C665.636 221.897 686.396 242.656 712.182 242.656C737.968 242.656 758.727 221.897 758.727 196.111C758.727 170.325 737.968 149.566 712.182 149.566ZM1038 149.566L944.909 242.656L1084.55 382.293L944.909 521.929L1038 615.02L1177.64 475.384L1270.73 382.293L1038 149.566ZM595.818 428.838C557.139 428.838 526 459.977 526 498.656C526 537.336 557.139 568.475 595.818 568.475C634.497 568.475 665.636 537.336 665.636 498.656C665.636 459.977 634.497 428.838 595.818 428.838V428.838ZM805.273 708.111C753.7 708.111 712.182 749.63 712.182 801.202C712.182 852.774 753.7 894.293 805.273 894.293C856.845 894.293 898.364 852.774 898.364 801.202C898.364 749.63 856.845 708.111 805.273 708.111Z" fill="white"/>
<path d="M1736.7 279.263C1806.2 279.263 1856.85 293.413 1888.62 321.712C1920.4 349.516 1936.28 388.49 1936.28 438.635C1936.28 468.424 1929.58 496.227 1916.18 522.045C1903.27 547.862 1881.42 568.963 1850.64 585.347C1819.86 601.234 1778.15 609.178 1725.52 609.178H1668.18V811H1587.75V279.263H1736.7ZM1730.74 347.033H1668.18V541.408H1716.59C1761.77 541.408 1795.78 533.96 1818.62 519.066C1841.95 503.675 1853.62 477.857 1853.62 441.614C1853.62 409.839 1843.69 386.256 1823.83 370.865C1803.97 354.977 1772.94 347.033 1730.74 347.033ZM2113.76 811H2034.81V245.005H2113.76V811ZM2393.37 402.143C2443.52 402.143 2481 413.314 2505.83 435.656C2531.15 457.501 2543.81 492.007 2543.81 539.174V811H2487.95L2472.31 755.145H2469.34C2451.96 776.991 2433.59 793.126 2414.23 803.553C2395.36 813.482 2369.04 818.447 2335.28 818.447C2299.04 818.447 2269 808.766 2245.17 789.403C2221.34 769.543 2209.42 738.761 2209.42 697.056C2209.42 655.848 2224.82 624.817 2255.6 603.965C2286.88 582.616 2334.29 570.949 2397.84 568.963L2466.36 566.729V544.387C2466.36 515.094 2459.65 494.49 2446.25 482.574C2432.84 470.162 2413.98 463.956 2389.65 463.956C2369.29 463.956 2349.68 466.935 2330.82 472.893C2311.95 478.85 2293.83 486.049 2276.45 494.49L2251.13 437.146C2270 427.216 2291.59 419.024 2315.92 412.569C2340.75 405.619 2366.56 402.143 2393.37 402.143ZM2465.61 618.115L2411.99 619.604C2366.31 621.59 2334.54 629.286 2316.67 642.691C2299.29 656.096 2290.6 674.466 2290.6 697.801C2290.6 718.653 2296.81 733.796 2309.22 743.23C2321.63 752.663 2337.77 757.379 2357.63 757.379C2388.41 757.379 2413.98 748.691 2434.33 731.314C2455.19 713.937 2465.61 687.871 2465.61 653.117V618.115ZM2931.98 697.801C2931.98 737.52 2917.58 767.557 2888.78 787.913C2860.48 808.269 2820.51 818.447 2768.88 818.447C2740.58 818.447 2716.25 816.461 2695.9 812.489C2676.04 808.518 2657.67 802.311 2640.79 793.871V724.611C2658.16 733.052 2678.52 740.747 2701.85 747.698C2725.69 754.152 2748.77 757.379 2771.11 757.379C2800.9 757.379 2822.25 752.663 2835.16 743.23C2848.57 733.796 2855.27 721.136 2855.27 705.248C2855.27 696.312 2852.79 688.368 2847.82 681.417C2842.86 673.97 2833.42 666.522 2819.52 659.075C2806.12 651.131 2786.26 642.195 2759.94 632.265C2734.13 622.335 2712.28 612.157 2694.41 601.731C2677.03 591.305 2663.62 578.892 2654.19 564.494C2644.76 550.096 2640.04 531.974 2640.04 510.129C2640.04 475.375 2653.94 448.813 2681.75 430.443C2710.05 411.576 2747.28 402.143 2793.46 402.143C2817.78 402.143 2840.62 404.626 2861.97 409.591C2883.82 414.555 2904.92 421.506 2925.27 430.443L2899.21 490.766C2881.83 483.319 2863.96 477.113 2845.59 472.148C2827.22 466.686 2808.6 463.956 2789.73 463.956C2741.08 463.956 2716.75 478.106 2716.75 506.405C2716.75 515.839 2719.48 524.031 2724.94 530.982C2730.9 537.932 2740.83 544.883 2754.73 551.834C2769.13 558.785 2788.99 567.225 2814.31 577.155C2838.64 586.588 2859.49 596.518 2876.87 606.944C2894.74 616.874 2908.39 629.038 2917.83 643.436C2927.26 657.834 2931.98 675.956 2931.98 697.801ZM3475.91 402.143C3521.09 402.143 3555.1 413.811 3577.94 437.146C3600.77 460.48 3612.19 497.965 3612.19 549.6V811H3533.25V560.026C3533.25 497.965 3508.18 466.935 3458.03 466.935C3422.29 466.935 3396.72 478.106 3381.33 500.448C3365.94 522.293 3358.24 553.82 3358.24 595.028V811H3280.04V560.026C3280.04 497.965 3254.72 466.935 3204.08 466.935C3166.35 466.935 3140.28 479.099 3125.88 503.427C3111.98 527.754 3105.03 562.757 3105.03 608.433V811H3026.09V409.591H3088.65L3099.82 463.211H3104.29C3116.7 442.359 3133.33 426.968 3154.18 417.038C3175.53 407.108 3198.12 402.143 3221.95 402.143C3283.52 402.143 3324.23 423.74 3344.09 466.935H3350.05C3362.96 445.089 3380.83 428.953 3403.67 418.527C3426.51 407.605 3450.59 402.143 3475.91 402.143ZM3888.65 402.143C3938.8 402.143 3976.28 413.314 4001.11 435.656C4026.43 457.501 4039.09 492.007 4039.09 539.174V811H3983.23L3967.59 755.145H3964.61C3947.24 776.991 3928.87 793.126 3909.5 803.553C3890.64 813.482 3864.32 818.447 3830.56 818.447C3794.32 818.447 3764.28 808.766 3740.45 789.403C3716.62 769.543 3704.7 738.761 3704.7 697.056C3704.7 655.848 3720.09 624.817 3750.88 603.965C3782.15 582.616 3829.57 570.949 3893.12 568.963L3961.63 566.729V544.387C3961.63 515.094 3954.93 494.49 3941.53 482.574C3928.12 470.162 3909.26 463.956 3884.93 463.956C3864.57 463.956 3844.96 466.935 3826.09 472.893C3807.23 478.85 3789.11 486.049 3771.73 494.49L3746.41 437.146C3765.27 427.216 3786.87 419.024 3811.2 412.569C3836.02 405.619 3861.84 402.143 3888.65 402.143ZM3960.89 618.115L3907.27 619.604C3861.59 621.59 3829.82 629.286 3811.94 642.691C3794.57 656.096 3785.88 674.466 3785.88 697.801C3785.88 718.653 3792.08 733.796 3804.5 743.23C3816.91 752.663 3833.04 757.379 3852.9 757.379C3883.69 757.379 3909.26 748.691 3929.61 731.314C3950.46 713.937 3960.89 687.871 3960.89 653.117V618.115Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 5.5 KiB

14
faces/.face.icon Normal file
View File

@@ -0,0 +1,14 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22">
<defs id="defs3051">
<style type="text/css" id="current-color-scheme">
.ColorScheme-Text {
color:#f2f2f2;
}
</style>
</defs>
<path
style="fill:currentColor;fill-opacity:1;stroke:none"
d="M 11 3 A 3.9999902 4.0000296 0 0 0 7 7 A 3.9999902 4.0000296 0 0 0 11 11 A 3.9999902 4.0000296 0 0 0 15 7 A 3.9999902 4.0000296 0 0 0 11 3 z M 11 4 A 3 3.0000296 0 0 1 14 7 A 3 3.0000296 0 0 1 11 10 A 3 3.0000296 0 0 1 8 7 A 3 3.0000296 0 0 1 11 4 z M 11 12 A 7.9999504 8.0000296 0 0 0 3.0722656 19 L 4.0800781 19 A 6.9999604 7.0000296 0 0 1 11 13 A 6.9999604 7.0000296 0 0 1 17.921875 19 L 18.929688 19 A 7.9999504 8.0000296 0 0 0 11 12 z "
class="ColorScheme-Text"
/>
</svg>

After

Width:  |  Height:  |  Size: 782 B

BIN
icons/power.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

107
metadata.desktop Normal file
View File

@@ -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

BIN
preview.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 528 KiB

9
theme.conf Normal file
View File

@@ -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

9
theme.conf.cmake.orig Normal file
View File

@@ -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