diff --git a/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/Components/Clock.qml b/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/Components/Clock.qml new file mode 100644 index 00000000..f076d28b --- /dev/null +++ b/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/Components/Clock.qml @@ -0,0 +1,14 @@ +import QtQuick 2.15 +import SddmComponents 2.0 + +Clock { + id: time + color: config.text + timeFont.family: config.Font + dateFont.family: config.Font + anchors { + margins: 10 + top: parent.top + right: parent.right + } +} diff --git a/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/Components/LoginPanel.qml b/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/Components/LoginPanel.qml new file mode 100644 index 00000000..e0dec79b --- /dev/null +++ b/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/Components/LoginPanel.qml @@ -0,0 +1,147 @@ +import QtQuick 2.15 +import QtQuick.Window 2.15 +import QtQuick.Controls 2.15 + +Item { + property var user: userField.text + property var password: passwordField.text + property var session: sessionPanel.session + property var inputHeight: Screen.height * 0.032 + property var inputWidth: Screen.width * 0.16 + Rectangle { + id: loginBackground + anchors { + verticalCenter: parent.verticalCenter + horizontalCenter: parent.horizontalCenter + } + height: inputHeight * 5.3 + width: inputWidth * 1.2 + radius: 5 + visible: config.LoginBackground == "true" ? true : false + color: config.mantle + } + Column { + spacing: 8 + anchors { + bottom: parent.bottom + left: parent.left + } + PowerButton { + id: powerButton + } + RebootButton { + id: rebootButton + } + SleepButton { + id: sleepButton + } + z: 5 + } + Column { + spacing: 8 + anchors { + bottom: parent.bottom + right: parent.right + } + SessionPanel { + id: sessionPanel + } + z: 5 + } + Column { + spacing: 8 + z: 5 + width: inputWidth + anchors { + verticalCenter: parent.verticalCenter + horizontalCenter: parent.horizontalCenter + } + UserField { + id: userField + height: inputHeight + width: parent.width + } + PasswordField { + id: passwordField + height: inputHeight + width: parent.width + onAccepted: loginButton.clicked() + } + Button { + id: loginButton + height: inputHeight + width: parent.width + enabled: user != "" && password != "" ? true : false + hoverEnabled: true + contentItem: Text { + id: buttonText + renderType: Text.NativeRendering + font { + family: config.Font + pointSize: config.FontSize + bold: true + } + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + color: config.crust + text: "Login" + } + background: Rectangle { + id: buttonBackground + color: config.sapphire + radius: 3 + } + states: [ + State { + name: "pressed" + when: loginButton.down + PropertyChanges { + target: buttonBackground + color: config.teal + } + PropertyChanges { + target: buttonText + } + }, + State { + name: "hovered" + when: loginButton.hovered + PropertyChanges { + target: buttonBackground + color: config.teal + } + PropertyChanges { + target: buttonText + } + }, + State { + name: "enabled" + when: loginButton.enabled + PropertyChanges { + target: buttonBackground + } + PropertyChanges { + target: buttonText + } + } + ] + transitions: Transition { + PropertyAnimation { + properties: "color" + duration: 300 + } + } + onClicked: { + sddm.login(user, password, session) + } + } + } + Connections { + target: sddm + + function onLoginFailed() { + passwordField.text = "" + passwordField.focus = true + } + } +} diff --git a/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/Components/PasswordField.qml b/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/Components/PasswordField.qml new file mode 100644 index 00000000..dd0f384b --- /dev/null +++ b/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/Components/PasswordField.qml @@ -0,0 +1,48 @@ +import QtQuick 2.15 +import QtQuick.Controls 2.15 + +TextField { + id: passwordField + focus: true + selectByMouse: true + placeholderText: "Password" + echoMode: TextInput.Password + passwordCharacter: "•" + passwordMaskDelay: config.PasswordShowLastLetter + selectionColor: config.overlay0 + renderType: Text.NativeRendering + font.family: config.Font + font.pointSize: config.FontSize + font.bold: true + color: config.text + horizontalAlignment: TextInput.AlignHCenter + background: Rectangle { + id: passFieldBackground + radius: 3 + color: config.surface0 + } + states: [ + State { + name: "focused" + when: passwordField.activeFocus + PropertyChanges { + target: passFieldBackground + color: config.surface1 + } + }, + State { + name: "hovered" + when: passwordField.hovered + PropertyChanges { + target: passFieldBackground + color: config.surface1 + } + } + ] + transitions: Transition { + PropertyAnimation { + properties: "color" + duration: 300 + } + } +} diff --git a/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/Components/PowerButton.qml b/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/Components/PowerButton.qml new file mode 100644 index 00000000..dc742692 --- /dev/null +++ b/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/Components/PowerButton.qml @@ -0,0 +1,41 @@ +import QtQuick 2.15 +import QtQuick.Controls 2.15 + +Item { + implicitHeight: powerButton.height + implicitWidth: powerButton.width + Button { + id: powerButton + height: inputHeight + width: inputHeight + hoverEnabled: true + icon { + source: Qt.resolvedUrl("../icons/power.svg") + height: height + width: width + color: config.crust + } + background: Rectangle { + id: powerButtonBackground + radius: 3 + color: config.red + } + states: [ + State { + name: "hovered" + when: powerButton.hovered + PropertyChanges { + target: powerButtonBackground + color: config.rosewater + } + } + ] + transitions: Transition { + PropertyAnimation { + properties: "color" + duration: 300 + } + } + onClicked: sddm.powerOff() + } +} diff --git a/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/Components/RebootButton.qml b/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/Components/RebootButton.qml new file mode 100644 index 00000000..a2c9b9ff --- /dev/null +++ b/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/Components/RebootButton.qml @@ -0,0 +1,41 @@ +import QtQuick 2.15 +import QtQuick.Controls 2.15 + +Item { + implicitHeight: rebootButton.height + implicitWidth: rebootButton.width + Button { + id: rebootButton + height: inputHeight + width: inputHeight + hoverEnabled: true + icon { + source: Qt.resolvedUrl("../icons/reboot.svg") + height: height + width: width + color: config.crust + } + background: Rectangle { + id: rebootButtonBackground + radius: 3 + color: config.red + } + states: [ + State { + name: "hovered" + when: rebootButton.hovered + PropertyChanges { + target: rebootButtonBackground + color: config.rosewater + } + } + ] + transitions: Transition { + PropertyAnimation { + properties: "color" + duration: 300 + } + } + onClicked: sddm.reboot() + } +} diff --git a/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/Components/SessionPanel.qml b/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/Components/SessionPanel.qml new file mode 100644 index 00000000..0edfcb30 --- /dev/null +++ b/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/Components/SessionPanel.qml @@ -0,0 +1,156 @@ +import QtQuick 2.15 +import QtQuick.Controls 2.15 +import QtQml.Models 2.15 + +Item { + property var session: sessionList.currentIndex + implicitHeight: sessionButton.height + implicitWidth: sessionButton.width + DelegateModel { + id: sessionWrapper + model: sessionModel + delegate: ItemDelegate { + id: sessionEntry + height: inputHeight + width: parent.width + highlighted: sessionList.currentIndex == index + contentItem: Text { + renderType: Text.NativeRendering + font.family: config.Font + font.pointSize: config.FontSize + font.bold: true + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + color: config.text + text: name + } + background: Rectangle { + id: sessionEntryBackground + color: config.surface1 + radius: 3 + } + states: [ + State { + name: "hovered" + when: sessionEntry.hovered + PropertyChanges { + target: sessionEntryBackground + color: config.surface2 + } + } + ] + transitions: Transition { + PropertyAnimation { + property: "color" + duration: 300 + } + } + MouseArea { + anchors.fill: parent + onClicked: { + sessionList.currentIndex = index + sessionPopup.close() + } + } + } + } + Button { + id: sessionButton + height: inputHeight + width: inputHeight + hoverEnabled: true + icon { + source: Qt.resolvedUrl("../icons/settings.svg") + height: height + width: width + color: config.text + } + background: Rectangle { + id: sessionButtonBackground + color: config.surface0 + radius: 3 + } + states: [ + State { + name: "pressed" + when: sessionButton.down + PropertyChanges { + target: sessionButtonBackground + color: config.surface1 + } + }, + State { + name: "hovered" + when: sessionButton.hovered + PropertyChanges { + target: sessionButtonBackground + color: config.surface2 + } + }, + State { + name: "selection" + when: sessionPopup.visible + PropertyChanges { + target: sessionButtonBackground + color: config.surface2 + } + } + ] + transitions: Transition { + PropertyAnimation { + properties: "color" + duration: 150 + } + } + onClicked: { + sessionPopup.visible ? sessionPopup.close() : sessionPopup.open() + sessionButton.state = "pressed" + } + } + Popup { + id: sessionPopup + width: inputWidth + padding * 2 + x: (sessionButton.width + sessionList.spacing) * -7.6 + y: -(contentHeight + padding * 2) + sessionButton.height + padding: inputHeight / 10 + background: Rectangle { + radius: 5.4 + color: config.surface0 + } + contentItem: ListView { + id: sessionList + implicitHeight: contentHeight + spacing: 8 + model: sessionWrapper + currentIndex: sessionModel.lastIndex + clip: true + } + enter: Transition { + ParallelAnimation { + NumberAnimation { + property: "opacity" + from: 0 + to: 1 + duration: 400 + easing.type: Easing.OutExpo + } + NumberAnimation { + property: "x" + from: sessionPopup.x + (inputWidth * 0.1) + to: sessionPopup.x + duration: 500 + easing.type: Easing.OutExpo + } + } + } + exit: Transition { + NumberAnimation { + property: "opacity" + from: 1 + to: 0 + duration: 300 + easing.type: Easing.OutExpo + } + } + } +} diff --git a/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/Components/SleepButton.qml b/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/Components/SleepButton.qml new file mode 100644 index 00000000..f4a4b7a0 --- /dev/null +++ b/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/Components/SleepButton.qml @@ -0,0 +1,41 @@ +import QtQuick 2.15 +import QtQuick.Controls 2.15 + +Item { + implicitHeight: sleepButton.height + implicitWidth: sleepButton.width + Button { + id: sleepButton + height: inputHeight + width: inputHeight + hoverEnabled: true + icon { + source: Qt.resolvedUrl("../icons/sleep.svg") + height: height + width: width + color: config.crust + } + background: Rectangle { + id: sleepButtonBg + color: config.red + radius: 3 + } + states: [ + State { + name: "hovered" + when: sleepButton.hovered + PropertyChanges { + target: sleepButtonBg + color: config.rosewater + } + } + ] + transitions: Transition { + PropertyAnimation { + properties: "color" + duration: 300 + } + } + onClicked: sddm.suspend() + } +} diff --git a/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/Components/UserField.qml b/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/Components/UserField.qml new file mode 100644 index 00000000..9f8ca61a --- /dev/null +++ b/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/Components/UserField.qml @@ -0,0 +1,50 @@ +import QtQuick 2.15 +import QtQuick.Controls 2.15 + +TextField { + id: userField + height: inputHeight + width: inputWidth + selectByMouse: true + echoMode: TextInput.Normal + selectionColor: config.overlay0 + renderType: Text.NativeRendering + font { + family: config.Font + pointSize: config.FontSize + bold: true + } + color: config.text + horizontalAlignment: Text.AlignHCenter + placeholderText: "Username" + text: userModel.lastUser + background: Rectangle { + id: userFieldBackground + color: config.surface0 + radius: 3 + } + states: [ + State { + name: "focused" + when: userField.activeFocus + PropertyChanges { + target: userFieldBackground + color: config.surface1 + } + }, + State { + name: "hovered" + when: userField.hovered + PropertyChanges { + target: userFieldBackground + color: config.surface1 + } + } + ] + transitions: Transition { + PropertyAnimation { + properties: "color" + duration: 300 + } + } +} diff --git a/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/Main.qml b/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/Main.qml new file mode 100644 index 00000000..422054bf --- /dev/null +++ b/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/Main.qml @@ -0,0 +1,48 @@ +import QtQuick 2.15 +import QtQuick.Window 2.15 +import QtQuick.Controls 2.15 +import "Components" + +Item { + id: root + height: Screen.height + width: Screen.width + Rectangle { + id: background + anchors.fill: parent + height: parent.height + width: parent.width + z: 0 + color: config.base + } + Image { + id: backgroundImage + anchors.fill: parent + height: parent.height + width: parent.width + fillMode: Image.PreserveAspectCrop + visible: config.CustomBackground == "true" ? true : false + z: 1 + source: config.Background + asynchronous: false + cache: true + mipmap: true + clip: true + } + Item { + id: mainPanel + z: 3 + anchors { + fill: parent + margins: 50 + } + Clock { + id: time + visible: config.ClockEnabled == "true" ? true : false + } + LoginPanel { + id: loginPanel + anchors.fill: parent + } + } +} diff --git a/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/assets/angle-down.png b/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/assets/angle-down.png new file mode 100644 index 00000000..f621bfc9 Binary files /dev/null and b/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/assets/angle-down.png differ diff --git a/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/backgrounds/.gitkeep b/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/backgrounds/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/icons/power.svg b/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/icons/power.svg new file mode 100644 index 00000000..83cd4cdf --- /dev/null +++ b/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/icons/power.svg @@ -0,0 +1,14 @@ + + + + + + + \ No newline at end of file diff --git a/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/icons/reboot.svg b/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/icons/reboot.svg new file mode 100644 index 00000000..5506bbb0 --- /dev/null +++ b/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/icons/reboot.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/icons/settings.svg b/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/icons/settings.svg new file mode 100644 index 00000000..9a64fbdf --- /dev/null +++ b/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/icons/settings.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/icons/sleep.svg b/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/icons/sleep.svg new file mode 100644 index 00000000..85d315cf --- /dev/null +++ b/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/icons/sleep.svg @@ -0,0 +1,5 @@ + + +moon + + \ No newline at end of file diff --git a/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/metadata.desktop b/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/metadata.desktop new file mode 100644 index 00000000..d6693d51 --- /dev/null +++ b/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/metadata.desktop @@ -0,0 +1,14 @@ +[SddmGreeterTheme] +Name=Catppuccin macchiato +Description=Soothing pastel theme for SDDM +Type=sddm-theme +Version=2.1 +Website=https://github.com/catppuccin/sddm +Screenshot=preview.png +MainScript=Main.qml +ConfigFile=theme.conf +TranslationsDirectory=translations +Theme-Id=Catppuccin +Theme-API=2.0 +License=MIT +QtVersion=6 diff --git a/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/preview.png b/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/preview.png new file mode 100644 index 00000000..bc262d2e Binary files /dev/null and b/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/preview.png differ diff --git a/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/theme.conf b/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/theme.conf new file mode 100644 index 00000000..e9036030 --- /dev/null +++ b/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/theme.conf @@ -0,0 +1,39 @@ +[General] +Font="Noto Sans" +FontSize=9 +ClockEnabled="true" +CustomBackground="false" +LoginBackground="false" +Background="backgrounds/wall.jpg" + +# Uncomment this option to show the last letter of the password +# for the number of milliseconds specified +# PasswordShowLastLetter=1000 + +# DON'T CHANGE THESE +rosewater = "#f4dbd6" +flamingo = "#f0c6c6" +pink = "#f5bde6" +mauve = "#c6a0f6" +red = "#ed8796" +maroon = "#ee99a0" +peach = "#f5a97f" +yellow = "#eed49f" +green = "#a6da95" +teal = "#8bd5ca" +sky = "#91d7e3" +sapphire = "#7dc4e4" +blue = "#8aadf4" +lavender = "#b7bdf8" +text = "#cad3f5" +subtext1 = "#b8c0e0" +subtext0 = "#a5adcb" +overlay2 = "#939ab7" +overlay1 = "#8087a2" +overlay0 = "#6e738d" +surface2 = "#5b6078" +surface1 = "#494d64" +surface0 = "#363a4f" +base = "#24273a" +mantle = "#1e2030" +crust = "#181926" diff --git a/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/theme.conf.user b/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/theme.conf.user new file mode 100644 index 00000000..68c66429 --- /dev/null +++ b/roles/config/files/usr/share/sddm/themes/catppuccin-macchiato/theme.conf.user @@ -0,0 +1,2 @@ +[General] +type=image diff --git a/roles/config/tasks/main.yml b/roles/config/tasks/main.yml index 35c421c0..965bee71 100644 --- a/roles/config/tasks/main.yml +++ b/roles/config/tasks/main.yml @@ -58,6 +58,7 @@ dest: "/" loop: - "etc" + - "usr" become: true tags: config