diff --git a/bin/omarchy-plymouth-set b/bin/omarchy-plymouth-set index ff9ca27d..c92ca53c 100755 --- a/bin/omarchy-plymouth-set +++ b/bin/omarchy-plymouth-set @@ -68,10 +68,16 @@ sddm_dir="/usr/share/sddm/themes/omarchy" sddm_template="$HOME/.local/share/omarchy/default/sddm/omarchy/Main.qml" sed \ - -e "s/#000000/#$bg_hex/g" \ + -e "s/#1a1b26/#$bg_hex/g" \ -e "s/#ffffff/#$text_hex/g" \ - -e 's|source: "logo.svg"|source: "logo.png"|' \ "$sddm_template" | sudo tee "$sddm_dir/Main.qml" >/dev/null sudo cp "$logo_path" "$sddm_dir/logo.png" +for asset in bullet.png entry.png lock.png; do + sudo cp "$staging_dir/$asset" "$sddm_dir/$asset" +done +for asset in entry lock; do + magick "$staging_dir/$asset.png" -channel RGB +level-colors "#f7768e","#f7768e" "$staging_dir/$asset-failed.png" + sudo cp "$staging_dir/$asset-failed.png" "$sddm_dir/$asset-failed.png" +done sudo rm -f "$sddm_dir/logo.svg" diff --git a/default/sddm/omarchy/Main.qml b/default/sddm/omarchy/Main.qml index d074913e..a65411e2 100644 --- a/default/sddm/omarchy/Main.qml +++ b/default/sddm/omarchy/Main.qml @@ -2,98 +2,115 @@ import QtQuick 2.0 import SddmComponents 2.0 Rectangle { - id: root - width: 640 - height: 480 - color: "#000000" + id: root + width: 640 + height: 480 + color: "#1a1b26" - property string currentUser: userModel.lastUser - property int sessionIndex: { - for (var i = 0; i < sessionModel.rowCount(); i++) { - var name = (sessionModel.data(sessionModel.index(i, 0), Qt.DisplayRole) || "").toString() - if (name.indexOf("uwsm") !== -1) - return i - } - return sessionModel.lastIndex + property string currentUser: userModel.lastUser + property bool loginFailed: false + property int sessionIndex: { + for (var i = 0; i < sessionModel.rowCount(); i++) { + var name = (sessionModel.data(sessionModel.index(i, 0), Qt.DisplayRole) || "").toString() + if (name.indexOf("uwsm") !== -1) + return i + } + return sessionModel.lastIndex + } + + Connections { + target: sddm + function onLoginFailed() { + root.loginFailed = true + password.text = "" + password.focus = true + } + function onLoginSucceeded() { + root.loginFailed = false + } + } + + Column { + anchors.centerIn: parent + spacing: 40 + + Image { + id: logo + source: "logo.png" + width: Math.min(sourceSize.width, root.width * 0.8) + height: sourceSize.width > 0 ? Math.round(width * sourceSize.height / sourceSize.width) : 0 + fillMode: Image.PreserveAspectFit + anchors.horizontalCenter: parent.horizontalCenter } - Connections { - target: sddm - function onLoginFailed() { - errorMessage.text = "Login failed" - password.text = "" - password.focus = true - } - function onLoginSucceeded() { - errorMessage.text = "" - } - } + Row { + anchors.horizontalCenter: parent.horizontalCenter + spacing: 15 - Column { - anchors.centerIn: parent - spacing: root.height * 0.04 - width: parent.width + Image { + source: root.loginFailed ? "lock-failed.png" : "lock.png" + width: 34 + height: 38 + fillMode: Image.PreserveAspectFit + anchors.verticalCenter: parent.verticalCenter + } + + Item { + width: entry.width + height: entry.height Image { - source: "logo.svg" - width: root.width * 0.35 - height: Math.round(width * sourceSize.height / sourceSize.width) - fillMode: Image.PreserveAspectFit - anchors.horizontalCenter: parent.horizontalCenter + id: entry + source: root.loginFailed ? "entry-failed.png" : "entry.png" + anchors.centerIn: parent } Row { - anchors.horizontalCenter: parent.horizontalCenter - spacing: root.width * 0.007 + anchors.left: parent.left + anchors.leftMargin: 20 + anchors.verticalCenter: parent.verticalCenter + spacing: 5 - Text { - text: "\uf023" - color: "#ffffff" - font.family: "JetBrainsMono Nerd Font" - font.pixelSize: root.height * 0.025 - anchors.verticalCenter: parent.verticalCenter - } - - Rectangle { - width: root.width * 0.17 - height: root.height * 0.04 - color: "#000000" - border.color: "#ffffff" - border.width: 1 - clip: true - - TextInput { - id: password - anchors.fill: parent - anchors.margins: root.height * 0.008 - verticalAlignment: TextInput.AlignVCenter - echoMode: TextInput.Password - font.family: "JetBrainsMono Nerd Font" - font.pixelSize: root.height * 0.02 - font.letterSpacing: root.height * 0.004 - passwordCharacter: "\u2022" - color: "#ffffff" - focus: true - - Keys.onPressed: { - if (event.key === Qt.Key_Return || event.key === Qt.Key_Enter) { - sddm.login(root.currentUser, password.text, root.sessionIndex) - event.accepted = true - } - } - } + Repeater { + model: Math.min(password.text.length, 21) + + Image { + source: "bullet.png" + width: 7 + height: 7 } + } } - Text { - id: errorMessage - text: "" - color: "#f7768e" - font.family: "JetBrainsMono Nerd Font" - font.pixelSize: root.height * 0.018 - anchors.horizontalCenter: parent.horizontalCenter + TextInput { + id: password + anchors.fill: parent + anchors.leftMargin: 20 + anchors.rightMargin: 20 + verticalAlignment: TextInput.AlignVCenter + echoMode: TextInput.Password + font.family: "JetBrainsMono Nerd Font" + font.pixelSize: 24 + font.letterSpacing: 5 + passwordCharacter: "\u2022" + color: "transparent" + selectionColor: "transparent" + selectedTextColor: "transparent" + focus: true + + onTextChanged: root.loginFailed = false + + Keys.onPressed: { + if (event.key === Qt.Key_Return || event.key === Qt.Key_Enter) { + sddm.login(root.currentUser, password.text, root.sessionIndex) + event.accepted = true + } + } } + } } - Component.onCompleted: password.forceActiveFocus() + } + + Component.onCompleted: password.forceActiveFocus() } diff --git a/default/sddm/omarchy/bullet.png b/default/sddm/omarchy/bullet.png new file mode 100644 index 00000000..62249b3b Binary files /dev/null and b/default/sddm/omarchy/bullet.png differ diff --git a/default/sddm/omarchy/entry-failed.png b/default/sddm/omarchy/entry-failed.png new file mode 100644 index 00000000..a42f9188 Binary files /dev/null and b/default/sddm/omarchy/entry-failed.png differ diff --git a/default/sddm/omarchy/entry.png b/default/sddm/omarchy/entry.png new file mode 100644 index 00000000..5c789179 Binary files /dev/null and b/default/sddm/omarchy/entry.png differ diff --git a/default/sddm/omarchy/lock-failed.png b/default/sddm/omarchy/lock-failed.png new file mode 100644 index 00000000..a88afece Binary files /dev/null and b/default/sddm/omarchy/lock-failed.png differ diff --git a/default/sddm/omarchy/lock.png b/default/sddm/omarchy/lock.png new file mode 100644 index 00000000..3046de1b Binary files /dev/null and b/default/sddm/omarchy/lock.png differ diff --git a/default/sddm/omarchy/logo.png b/default/sddm/omarchy/logo.png new file mode 100644 index 00000000..f185b266 Binary files /dev/null and b/default/sddm/omarchy/logo.png differ diff --git a/default/sddm/omarchy/logo.svg b/default/sddm/omarchy/logo.svg deleted file mode 100644 index 0853b047..00000000 --- a/default/sddm/omarchy/logo.svg +++ /dev/null @@ -1 +0,0 @@ -