mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-04-03 20:32:07 -04:00
200 lines
11 KiB
QML
200 lines
11 KiB
QML
pragma Singleton
|
|
pragma ComponentBehavior: Bound
|
|
|
|
import QtQuick
|
|
import Quickshell
|
|
import Quickshell.Io
|
|
import qs.Common
|
|
import "GreetdEnv.js" as GreetdEnv
|
|
|
|
Singleton {
|
|
id: root
|
|
|
|
readonly property string configPath: {
|
|
const greetCfgDir = Quickshell.env("DMS_GREET_CFG_DIR") || "/var/cache/dms-greeter";
|
|
return greetCfgDir + "/settings.json";
|
|
}
|
|
|
|
readonly property string _greeterCacheDir: {
|
|
const i = root.configPath.lastIndexOf("/");
|
|
return i >= 0 ? root.configPath.substring(0, i) : "";
|
|
}
|
|
readonly property string greeterWallpaperOverridePath: root._greeterCacheDir ? (root._greeterCacheDir + "/greeter_wallpaper_override.jpg") : ""
|
|
|
|
property string currentThemeName: "purple"
|
|
property bool settingsLoaded: false
|
|
property string customThemeFile: ""
|
|
property var registryThemeVariants: ({})
|
|
property string matugenScheme: "scheme-tonal-spot"
|
|
property bool use24HourClock: true
|
|
property bool showSeconds: false
|
|
property bool padHours12Hour: false
|
|
property bool greeterUse24HourClock: true
|
|
property bool greeterShowSeconds: false
|
|
property bool greeterPadHours12Hour: false
|
|
property string greeterLockDateFormat: ""
|
|
property string greeterFontFamily: ""
|
|
property string greeterWallpaperFillMode: ""
|
|
property bool useFahrenheit: false
|
|
property bool nightModeEnabled: false
|
|
property string weatherLocation: "New York, NY"
|
|
property string weatherCoordinates: "40.7128,-74.0060"
|
|
property bool useAutoLocation: false
|
|
property bool weatherEnabled: true
|
|
property string iconTheme: "System Default"
|
|
property bool useOSLogo: false
|
|
property string osLogoColorOverride: ""
|
|
property real osLogoBrightness: 0.5
|
|
property real osLogoContrast: 1
|
|
property string fontFamily: "Inter Variable"
|
|
property string monoFontFamily: "Fira Code"
|
|
property int fontWeight: Font.Normal
|
|
property real fontScale: 1.0
|
|
property real cornerRadius: 12
|
|
property string widgetBackgroundColor: "sch"
|
|
property string lockDateFormat: ""
|
|
property bool lockScreenShowPowerActions: true
|
|
property bool lockScreenShowProfileImage: true
|
|
property bool rememberLastSession: true
|
|
property bool rememberLastUser: true
|
|
property bool greeterEnableFprint: false
|
|
property bool greeterEnableU2f: false
|
|
property string greeterWallpaperPath: ""
|
|
property bool powerActionConfirm: true
|
|
property real powerActionHoldDuration: 0.5
|
|
property var powerMenuActions: ["reboot", "logout", "poweroff", "lock", "suspend", "restart"]
|
|
property string powerMenuDefaultAction: "logout"
|
|
property bool powerMenuGridLayout: false
|
|
property var screenPreferences: ({})
|
|
property int animationSpeed: 2
|
|
property string wallpaperFillMode: "Fill"
|
|
|
|
function parseSettings(content) {
|
|
try {
|
|
let settings = {};
|
|
if (content && content.trim()) {
|
|
settings = JSON.parse(content);
|
|
}
|
|
|
|
const envRememberLastSession = GreetdEnv.readBoolOverride(Quickshell.env, ["DMS_GREET_REMEMBER_LAST_SESSION", "DMS_SAVE_SESSION"], undefined);
|
|
const envRememberLastUser = GreetdEnv.readBoolOverride(Quickshell.env, ["DMS_GREET_REMEMBER_LAST_USER", "DMS_SAVE_USERNAME"], undefined);
|
|
|
|
currentThemeName = settings.currentThemeName !== undefined ? settings.currentThemeName : "purple";
|
|
customThemeFile = settings.customThemeFile !== undefined ? settings.customThemeFile : "";
|
|
registryThemeVariants = settings.registryThemeVariants !== undefined ?
|
|
settings.registryThemeVariants : ({});
|
|
matugenScheme = settings.matugenScheme !== undefined ? settings.matugenScheme : "scheme-tonal-spot";
|
|
use24HourClock = settings.use24HourClock !== undefined ? settings.use24HourClock : true;
|
|
showSeconds = settings.showSeconds !== undefined ? settings.showSeconds : false;
|
|
padHours12Hour = settings.padHours12Hour !== undefined ? settings.padHours12Hour : false;
|
|
greeterUse24HourClock = settings.greeterUse24HourClock !== undefined ? settings.greeterUse24HourClock : use24HourClock;
|
|
greeterShowSeconds = settings.greeterShowSeconds !== undefined ? settings.greeterShowSeconds : showSeconds;
|
|
greeterPadHours12Hour = settings.greeterPadHours12Hour !== undefined ? settings.greeterPadHours12Hour : padHours12Hour;
|
|
greeterLockDateFormat = settings.greeterLockDateFormat !== undefined ? settings.greeterLockDateFormat : "";
|
|
greeterFontFamily = settings.greeterFontFamily !== undefined ? settings.greeterFontFamily : "";
|
|
greeterWallpaperFillMode = settings.greeterWallpaperFillMode !== undefined ? settings.greeterWallpaperFillMode : "";
|
|
useFahrenheit = settings.useFahrenheit !== undefined ? settings.useFahrenheit : false;
|
|
nightModeEnabled = settings.nightModeEnabled !== undefined ? settings.nightModeEnabled : false;
|
|
weatherLocation = settings.weatherLocation !== undefined ? settings.weatherLocation : "New York, NY";
|
|
weatherCoordinates = settings.weatherCoordinates !== undefined ? settings.weatherCoordinates : "40.7128,-74.0060";
|
|
useAutoLocation = settings.useAutoLocation !== undefined ? settings.useAutoLocation : false;
|
|
weatherEnabled = settings.weatherEnabled !== undefined ? settings.weatherEnabled : true;
|
|
iconTheme = settings.iconTheme !== undefined ? settings.iconTheme : "System Default";
|
|
useOSLogo = settings.useOSLogo !== undefined ? settings.useOSLogo : false;
|
|
osLogoColorOverride = settings.osLogoColorOverride !== undefined ? settings.osLogoColorOverride : "";
|
|
osLogoBrightness = settings.osLogoBrightness !== undefined ? settings.osLogoBrightness : 0.5;
|
|
osLogoContrast = settings.osLogoContrast !== undefined ? settings.osLogoContrast : 1;
|
|
fontFamily = settings.fontFamily !== undefined ? settings.fontFamily : Theme.defaultFontFamily;
|
|
monoFontFamily = settings.monoFontFamily !== undefined ? settings.monoFontFamily : Theme.defaultMonoFontFamily;
|
|
fontWeight = settings.fontWeight !== undefined ? settings.fontWeight : Font.Normal;
|
|
fontScale = settings.fontScale !== undefined ? settings.fontScale : 1.0;
|
|
cornerRadius = settings.cornerRadius !== undefined ? settings.cornerRadius : 12;
|
|
widgetBackgroundColor = settings.widgetBackgroundColor !== undefined ? settings.widgetBackgroundColor : "sch";
|
|
lockDateFormat = settings.lockDateFormat !== undefined ? settings.lockDateFormat : "";
|
|
lockScreenShowPowerActions = settings.lockScreenShowPowerActions !== undefined ? settings.lockScreenShowPowerActions : true;
|
|
lockScreenShowProfileImage = settings.lockScreenShowProfileImage !== undefined ? settings.lockScreenShowProfileImage : true;
|
|
if (envRememberLastSession !== undefined) {
|
|
rememberLastSession = envRememberLastSession;
|
|
} else {
|
|
rememberLastSession = settings.greeterRememberLastSession !== undefined ? settings.greeterRememberLastSession : settings.rememberLastSession !== undefined ? settings.rememberLastSession : true;
|
|
}
|
|
if (envRememberLastUser !== undefined) {
|
|
rememberLastUser = envRememberLastUser;
|
|
} else {
|
|
rememberLastUser = settings.greeterRememberLastUser !== undefined ? settings.greeterRememberLastUser : settings.rememberLastUser !== undefined ? settings.rememberLastUser : true;
|
|
}
|
|
greeterEnableFprint = settings.greeterEnableFprint !== undefined ? settings.greeterEnableFprint : false;
|
|
greeterEnableU2f = settings.greeterEnableU2f !== undefined ? settings.greeterEnableU2f : false;
|
|
greeterWallpaperPath = settings.greeterWallpaperPath !== undefined ? settings.greeterWallpaperPath : "";
|
|
powerActionConfirm = settings.powerActionConfirm !== undefined ? settings.powerActionConfirm : true;
|
|
powerActionHoldDuration = settings.powerActionHoldDuration !== undefined ? settings.powerActionHoldDuration : 0.5;
|
|
powerMenuActions = settings.powerMenuActions !== undefined ? settings.powerMenuActions : ["reboot", "logout", "poweroff", "lock", "suspend", "restart"];
|
|
powerMenuDefaultAction = settings.powerMenuDefaultAction !== undefined ? settings.powerMenuDefaultAction : "logout";
|
|
powerMenuGridLayout = settings.powerMenuGridLayout !== undefined ? settings.powerMenuGridLayout : false;
|
|
screenPreferences = settings.screenPreferences !== undefined ? settings.screenPreferences : ({});
|
|
animationSpeed = settings.animationSpeed !== undefined ? settings.animationSpeed : 2;
|
|
wallpaperFillMode = settings.wallpaperFillMode !== undefined ? settings.wallpaperFillMode : "Fill";
|
|
|
|
if (typeof Theme !== "undefined") {
|
|
if (currentThemeName === "custom" && customThemeFile) {
|
|
Theme.loadCustomThemeFromFile(customThemeFile);
|
|
}
|
|
Theme.applyGreeterTheme(currentThemeName);
|
|
}
|
|
} catch (e) {
|
|
console.warn("Failed to parse greetd settings:", e);
|
|
} finally {
|
|
settingsLoaded = true;
|
|
}
|
|
}
|
|
|
|
function getEffectiveTimeFormat() {
|
|
const use24 = greeterUse24HourClock;
|
|
const secs = greeterShowSeconds;
|
|
const pad = greeterPadHours12Hour;
|
|
if (use24)
|
|
return secs ? "hh:mm:ss" : "hh:mm";
|
|
if (pad)
|
|
return secs ? "hh:mm:ss AP" : "hh:mm AP";
|
|
return secs ? "h:mm:ss AP" : "h:mm AP";
|
|
}
|
|
|
|
function getEffectiveLockDateFormat() {
|
|
const fmt = (greeterLockDateFormat !== undefined && greeterLockDateFormat !== "") ? greeterLockDateFormat : lockDateFormat;
|
|
return fmt && fmt.length > 0 ? fmt : Locale.LongFormat;
|
|
}
|
|
|
|
function getEffectiveWallpaperFillMode() {
|
|
return (greeterWallpaperFillMode && greeterWallpaperFillMode !== "") ? greeterWallpaperFillMode : wallpaperFillMode;
|
|
}
|
|
|
|
function getEffectiveFontFamily() {
|
|
return (greeterFontFamily && greeterFontFamily !== "") ? greeterFontFamily : fontFamily;
|
|
}
|
|
|
|
function getFilteredScreens(componentId) {
|
|
const prefs = screenPreferences && screenPreferences[componentId] || ["all"];
|
|
if (prefs.includes("all")) {
|
|
return Quickshell.screens;
|
|
}
|
|
return Quickshell.screens.filter(screen => prefs.includes(screen.name));
|
|
}
|
|
|
|
FileView {
|
|
id: settingsFile
|
|
path: root.configPath
|
|
blockLoading: false
|
|
blockWrites: true
|
|
atomicWrites: false
|
|
watchChanges: false
|
|
printErrors: true
|
|
onLoaded: {
|
|
parseSettings(settingsFile.text());
|
|
}
|
|
onLoadFailed: error => {
|
|
console.warn("Failed to load greetd settings:", error);
|
|
root.parseSettings("");
|
|
}
|
|
}
|
|
}
|