summaryrefslogtreecommitdiff
path: root/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/Modules/Greetd/GreetdSettings.qml
blob: e1f670cab150fe7b3c48bb770da7d7457aaed404 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
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("");
        }
    }
}