Initial ThinkPad Hyprland dotfiles

This commit is contained in:
Pascal
2026-04-28 03:59:07 +02:00
commit 6eb922c417
56 changed files with 6587 additions and 0 deletions

View File

@@ -0,0 +1,279 @@
import QtQuick 2.0
import SddmComponents 2.0
Rectangle {
id: root
width: 1920
height: 1080
color: config.backgroundColor || "#18141f"
property int sessionIndex: session.index
property color accent: config.accent || "#f38ba8"
property color accent2: config.accent2 || "#cba6f7"
property color backgroundColor: config.backgroundColor || "#18141f"
property color panelColor: config.panelColor || "#313244"
property color foreground: config.foreground || "#f5e0dc"
property color muted: config.muted || "#cdd6f4"
property color selectedText: config.selectedText || "#11111b"
property string themeName: config.themeName || "Rose Night"
TextConstants { id: textConstants }
Connections {
target: sddm
function onLoginSucceeded() {
message.text = textConstants.loginSucceeded
message.color = accent2
}
function onLoginFailed() {
password.text = ""
message.text = textConstants.loginFailed
message.color = "#f38ba8"
}
function onInformationMessage(text) {
message.text = text
message.color = "#f38ba8"
}
}
Background {
anchors.fill: parent
source: config.background || ""
fillMode: Image.PreserveAspectCrop
onStatusChanged: {
if (status === Image.Error) {
source = ""
}
}
}
Rectangle {
anchors.fill: parent
color: "#000000"
opacity: 0.42
}
Rectangle {
anchors.fill: parent
gradient: Gradient {
GradientStop { position: 0.0; color: Qt.rgba(0, 0, 0, 0.10) }
GradientStop { position: 0.58; color: Qt.rgba(0, 0, 0, 0.38) }
GradientStop { position: 1.0; color: Qt.rgba(0, 0, 0, 0.62) }
}
}
Timer {
interval: 1000
running: true
repeat: true
triggeredOnStart: true
onTriggered: {
clock.text = Qt.formatDateTime(new Date(), "HH:mm")
date.text = Qt.formatDateTime(new Date(), "dddd, dd. MMMM yyyy")
}
}
Column {
anchors.left: parent.left
anchors.leftMargin: Math.max(42, parent.width * 0.055)
anchors.top: parent.top
anchors.topMargin: Math.max(40, parent.height * 0.055)
spacing: 2
Text {
id: clock
color: foreground
font.pixelSize: Math.max(64, root.height * 0.105)
font.weight: Font.Light
}
Text {
id: date
color: muted
opacity: 0.88
font.pixelSize: Math.max(16, root.height * 0.023)
}
}
Rectangle {
id: panel
width: Math.min(430, root.width - 48)
height: 430
anchors.right: parent.right
anchors.rightMargin: Math.max(28, parent.width * 0.075)
anchors.verticalCenter: parent.verticalCenter
radius: 18
color: panelColor
opacity: 0.90
border.color: accent
border.width: 1
Rectangle {
anchors.left: parent.left
anchors.right: parent.right
anchors.top: parent.top
height: 4
radius: 2
gradient: Gradient {
GradientStop { position: 0.0; color: accent }
GradientStop { position: 1.0; color: accent2 }
}
}
Column {
anchors.fill: parent
anchors.margins: 34
spacing: 14
Text {
text: sddm.hostName
color: foreground
font.pixelSize: 26
font.bold: true
elide: Text.ElideRight
width: parent.width
}
Text {
text: themeName
color: accent
font.pixelSize: 14
width: parent.width
opacity: 0.92
}
Item { width: 1; height: 10 }
Text {
text: "Benutzer"
color: muted
font.pixelSize: 12
opacity: 0.78
}
TextBox {
id: username
width: parent.width
height: 42
text: userModel.lastUser
color: backgroundColor
borderColor: Qt.rgba(accent.r, accent.g, accent.b, 0.40)
focusColor: accent
hoverColor: accent2
textColor: foreground
radius: 10
font.pixelSize: 16
KeyNavigation.tab: password
}
Text {
text: "Passwort"
color: muted
font.pixelSize: 12
opacity: 0.78
}
PasswordBox {
id: password
width: parent.width
height: 42
color: backgroundColor
borderColor: Qt.rgba(accent.r, accent.g, accent.b, 0.40)
focusColor: accent
hoverColor: accent2
textColor: foreground
radius: 10
font.pixelSize: 16
KeyNavigation.backtab: username
KeyNavigation.tab: loginButton
Keys.onPressed: function(event) {
if (event.key === Qt.Key_Return || event.key === Qt.Key_Enter) {
sddm.login(username.text, password.text, sessionIndex)
event.accepted = true
}
}
}
ComboBox {
id: session
width: parent.width
height: 36
model: sessionModel
index: sessionModel.lastIndex
color: backgroundColor
borderColor: Qt.rgba(accent.r, accent.g, accent.b, 0.40)
focusColor: accent
hoverColor: accent2
menuColor: panelColor
textColor: foreground
arrowColor: accent
arrowIcon: "angle-down.png"
KeyNavigation.backtab: password
KeyNavigation.tab: loginButton
}
Button {
id: loginButton
width: parent.width
height: 44
text: "Anmelden"
color: accent
activeColor: accent2
pressedColor: accent2
disabledColor: muted
borderColor: accent2
textColor: selectedText
font.pixelSize: 15
onClicked: sddm.login(username.text, password.text, sessionIndex)
KeyNavigation.backtab: session
KeyNavigation.tab: shutdownButton
}
Text {
id: message
width: parent.width
color: muted
text: ""
font.pixelSize: 13
wrapMode: Text.WordWrap
horizontalAlignment: Text.AlignHCenter
}
}
}
Row {
anchors.right: parent.right
anchors.rightMargin: Math.max(28, parent.width * 0.075)
anchors.bottom: parent.bottom
anchors.bottomMargin: Math.max(26, parent.height * 0.045)
spacing: 10
Button {
id: shutdownButton
text: "Ausschalten"
color: Qt.rgba(0, 0, 0, 0.42)
activeColor: accent
pressedColor: accent2
borderColor: Qt.rgba(foreground.r, foreground.g, foreground.b, 0.35)
textColor: foreground
onClicked: sddm.powerOff()
KeyNavigation.tab: rebootButton
}
Button {
id: rebootButton
text: "Neustart"
color: Qt.rgba(0, 0, 0, 0.42)
activeColor: accent
pressedColor: accent2
borderColor: Qt.rgba(foreground.r, foreground.g, foreground.b, 0.35)
textColor: foreground
onClicked: sddm.reboot()
KeyNavigation.backtab: shutdownButton
}
}
}

View File

@@ -0,0 +1,13 @@
[SddmGreeterTheme]
Name=Pascal Hypr
Description=Theme-aware SDDM login screen for Pascal's Hyprland setup
Author=Pascal + Codex
Copyright=2026
License=MIT
Type=sddm-theme
Version=1.0
MainScript=Main.qml
ConfigFile=theme.conf
Theme-Id=pascal-hypr
Theme-API=2.0

View File

@@ -0,0 +1,11 @@
[General]
background=/var/lib/pascal-sddm-theme/wallpaper.jpg
themeName=Rose Night
accent=#f38ba8
accent2=#cba6f7
backgroundColor=#18141f
panelColor=#313244
foreground=#f5e0dc
muted=#cdd6f4
selectedText=#11111b