mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-04-04 04:42:05 -04:00
- Merge duplicate niri input/output KDL nodes instead of appending. Allows more overrides - Guard AppArmor install/uninstall behind IsAppArmorEnabled() check
130 lines
4.0 KiB
QML
130 lines
4.0 KiB
QML
pragma Singleton
|
|
pragma ComponentBehavior: Bound
|
|
|
|
import QtQuick
|
|
import Quickshell
|
|
import Quickshell.Io
|
|
import "GreetdEnv.js" as GreetdEnv
|
|
|
|
Singleton {
|
|
id: root
|
|
|
|
readonly property string greetCfgDir: Quickshell.env("DMS_GREET_CFG_DIR") || "/var/cache/dms-greeter"
|
|
readonly property string sessionConfigPath: greetCfgDir + "/session.json"
|
|
readonly property string memoryFile: greetCfgDir + "/.local/state/memory.json"
|
|
readonly property bool rememberLastSession: GreetdEnv.readBoolOverride(Quickshell.env, ["DMS_GREET_REMEMBER_LAST_SESSION", "DMS_SAVE_SESSION"], true)
|
|
readonly property bool rememberLastUser: GreetdEnv.readBoolOverride(Quickshell.env, ["DMS_GREET_REMEMBER_LAST_USER", "DMS_SAVE_USERNAME"], true)
|
|
|
|
property string lastSessionId: ""
|
|
property string lastSuccessfulUser: ""
|
|
property bool memoryReady: false
|
|
property bool isLightMode: false
|
|
property bool nightModeEnabled: false
|
|
|
|
Component.onCompleted: {
|
|
Quickshell.execDetached(["mkdir", "-p", greetCfgDir]);
|
|
loadMemory();
|
|
loadSessionConfig();
|
|
}
|
|
|
|
function loadMemory() {
|
|
parseMemory(memoryFileView.text());
|
|
}
|
|
|
|
function loadSessionConfig() {
|
|
parseSessionConfig(sessionConfigFileView.text());
|
|
}
|
|
|
|
function parseSessionConfig(content) {
|
|
try {
|
|
if (content && content.trim()) {
|
|
const config = JSON.parse(content);
|
|
isLightMode = config.isLightMode !== undefined ? config.isLightMode : false;
|
|
nightModeEnabled = config.nightModeEnabled !== undefined ? config.nightModeEnabled : false;
|
|
}
|
|
} catch (e) {
|
|
console.warn("Failed to parse greeter session config:", e);
|
|
}
|
|
}
|
|
|
|
function parseMemory(content) {
|
|
try {
|
|
if (!content || !content.trim())
|
|
return;
|
|
const memory = JSON.parse(content);
|
|
lastSessionId = rememberLastSession ? (memory.lastSessionId || "") : "";
|
|
lastSuccessfulUser = rememberLastUser ? (memory.lastSuccessfulUser || "") : "";
|
|
if (!rememberLastSession || !rememberLastUser)
|
|
saveMemory();
|
|
} catch (e) {
|
|
console.warn("Failed to parse greetd memory:", e);
|
|
}
|
|
}
|
|
|
|
function saveMemory() {
|
|
let memory = {};
|
|
if (rememberLastSession && lastSessionId)
|
|
memory.lastSessionId = lastSessionId;
|
|
if (rememberLastUser && lastSuccessfulUser)
|
|
memory.lastSuccessfulUser = lastSuccessfulUser;
|
|
memoryFileView.setText(JSON.stringify(memory, null, 2));
|
|
}
|
|
|
|
function setLastSessionId(id) {
|
|
if (!rememberLastSession) {
|
|
if (lastSessionId !== "") {
|
|
lastSessionId = "";
|
|
saveMemory();
|
|
}
|
|
return;
|
|
}
|
|
lastSessionId = id || "";
|
|
saveMemory();
|
|
}
|
|
|
|
function setLastSuccessfulUser(username) {
|
|
if (!rememberLastUser) {
|
|
if (lastSuccessfulUser !== "") {
|
|
lastSuccessfulUser = "";
|
|
saveMemory();
|
|
}
|
|
return;
|
|
}
|
|
lastSuccessfulUser = username || "";
|
|
saveMemory();
|
|
}
|
|
|
|
FileView {
|
|
id: memoryFileView
|
|
path: root.memoryFile
|
|
blockLoading: false
|
|
blockWrites: false
|
|
atomicWrites: true
|
|
watchChanges: false
|
|
printErrors: false
|
|
onLoaded: {
|
|
parseMemory(memoryFileView.text());
|
|
root.memoryReady = true;
|
|
}
|
|
onLoadFailed: {
|
|
root.memoryReady = true;
|
|
}
|
|
}
|
|
|
|
FileView {
|
|
id: sessionConfigFileView
|
|
path: root.sessionConfigPath
|
|
blockLoading: false
|
|
blockWrites: true
|
|
atomicWrites: false
|
|
watchChanges: false
|
|
printErrors: true
|
|
onLoaded: {
|
|
parseSessionConfig(sessionConfigFileView.text());
|
|
}
|
|
onLoadFailed: error => {
|
|
console.warn("Could not load greeter session config from", root.sessionConfigPath, "error:", error);
|
|
}
|
|
}
|
|
}
|