import Quickshell import Quickshell.Wayland import Quickshell.Io import Quickshell.Services.Pam import Quickshell.Services.Mpris import Custom as Custom import qs.Services import QtQml Scope { id: lockscreen property string currentText: "" PamContext { id: pam property list messages: [] config: "quickshell" onCompleted: result => { if (result === PamResult.Success) { lock.locked = false; } } onPamMessage: { messages = Array.from(messages).concat([{ "text": pam.message, "error": pam.messageIsError }]) } onActiveChanged: { messages = []; } } IpcHandler { target: "Lockscreen" function setLocked(locked: bool): void { lock.locked = locked; } function getLocked(): bool { return lock.locked; } } WlSessionLock { id: lock onLockStateChanged: { if (!locked && pam.active) pam.abort(); if (locked) { Custom.KeePassXC.lockAllDatabases(); Array.from(Mpris.players.values).forEach(player => { if (player.canPause && player.isPlaying) player.pause(); }); // Custom.Systemd.stopUserUnit("gpg-agent.service", "replace"); GpgAgent.reloadAgent(); } } WlSessionLockSurface { id: lockSurface color: "black" LockSurface { id: surfaceContent onResponse: responseText => pam.respond(responseText) onAuthRunningChanged: { if (authRunning) pam.start(); } Connections { target: pam function onMessagesChanged() { surfaceContent.messages = pam.messages; } function onResponseRequiredChanged() { surfaceContent.responseRequired = pam.responseRequired; } function onActiveChanged() { surfaceContent.authRunning = pam.active; } } onCurrentTextChanged: lockscreen.currentText = currentText Connections { target: lockscreen function onCurrentTextChanged() { surfaceContent.currentText = lockscreen.currentText; } } Connections { target: lockSurface function onScreenChanged() { surfaceContent.screen = lockSurface.screen; } } } } } }