💥 fix: config being declared after its usage

`generalConfig` and `userData` are now stored under src/config.ts
This commit is contained in:
retrozinndev
2025-09-26 14:12:29 -03:00
parent c8364c99f2
commit 30e0f24a86
10 changed files with 85 additions and 79 deletions
+5 -70
View File
@@ -3,6 +3,7 @@
// fix can't convert non-null pointer to JS value (thanks Aylur!) // fix can't convert non-null pointer to JS value (thanks Aylur!)
import "ags/overrides"; import "ags/overrides";
import "./config";
import { import {
PluginApps, PluginApps,
PluginClipboard, PluginClipboard,
@@ -20,9 +21,8 @@ import { Notifications } from "./modules/notifications";
import { Wallpaper } from "./modules/wallpaper"; import { Wallpaper } from "./modules/wallpaper";
import { Stylesheet } from "./modules/stylesheet"; import { Stylesheet } from "./modules/stylesheet";
import { Clipboard } from "./modules/clipboard"; import { Clipboard } from "./modules/clipboard";
import { Config } from "./modules/config";
import { Gdk, Gtk } from "ags/gtk4"; import { Gdk, Gtk } from "ags/gtk4";
import { createRoot, getScope } from "ags"; import { createRoot, getScope, Scope } from "ags";
import { OSDModes, triggerOSD } from "./window/osd"; import { OSDModes, triggerOSD } from "./window/osd";
import { programArgs, programInvocationName } from "system"; import { programArgs, programInvocationName } from "system";
import { setConsoleLogDomain } from "console"; import { setConsoleLogDomain } from "console";
@@ -51,11 +51,12 @@ const defaultWindows: Array<string> = [ "bar" ];
GLib.unsetenv("LD_PRELOAD"); GLib.unsetenv("LD_PRELOAD");
@register({ GTypeName: "Shell" }) @register({ GTypeName: "Shell" })
export class Shell extends Adw.Application implements Gio.ActionMap { export class Shell extends Adw.Application {
private static instance: Shell; private static instance: Shell;
#scope!: ReturnType<typeof getScope>; #scope!: Scope;
#connections = new Map<GObject.Object, Array<number> | number>(); #connections = new Map<GObject.Object, Array<number> | number>();
#providers: Array<Gtk.CssProvider> = []; #providers: Array<Gtk.CssProvider> = [];
#gresource: Gio.Resource|null = null; #gresource: Gio.Resource|null = null;
@@ -333,73 +334,7 @@ you should use the socket in the XDG_RUNTIME_DIR/colorshell.sock for a faster re
quit(): void { quit(): void {
this.release(); this.release();
super.quit();
} }
} }
const generalConfigDefaults = {
notifications: {
timeout_low: 4000,
timeout_normal: 6000,
timeout_critical: 0,
/** notification popup horizontal position. can be "left" or "right"
* @default "right" */
position_h: "right",
/** vertical notification popup position. can be "top" or "bottom"
* @default "top" */
position_v: "top"
},
night_light: {
/** whether to save night light values to disk */
save_on_shutdown: true
},
workspaces: {
/** breaks `enable_helper`, makes all workspaces show their respective ID
* by default */
always_show_id: false,
/** this is the function that shows the Workspace's IDs
* around the current workspace if one breaks the crescent order.
* It basically helps keyboard navigation between workspaces.
* ---
* Example: 1(empty, current, shows ID), 2(empty, does not appear(makes
* the previous not to be in a crescent order)), 3(not empty, shows ID) */
enable_helper: true,
/** hide workspace indicator if there's only one active workspace */
hide_if_single: false
},
clock: {
/** use the same format as gnu's `date` command */
date_format: "%A %d, %H:%M"
},
misc: {
play_bell_on_volume_change: true
}
};
const userDataDefaults = {
control_center: {
default_backlight: undefined
},
bluetooth_default_adapter: undefined
};
export const userData = new Config<
keyof typeof userDataDefaults,
(typeof userDataDefaults)[keyof typeof userDataDefaults]
>(
`${GLib.get_user_data_dir()}/colorshell/data.json`,
userDataDefaults
);
export const generalConfig = new Config<keyof typeof generalConfigDefaults,
typeof generalConfigDefaults[keyof typeof generalConfigDefaults]>(
`${GLib.get_user_config_dir()}/colorshell/config.json`, generalConfigDefaults
);
Shell.getDefault().runAsync([ programInvocationName, ...programArgs ]); Shell.getDefault().runAsync([ programInvocationName, ...programArgs ]);
+70
View File
@@ -0,0 +1,70 @@
import { Config } from "./modules/config";
import GLib from "gi://GLib?version=2.0";
const generalConfigDefaults = {
notifications: {
timeout_low: 4000,
timeout_normal: 6000,
timeout_critical: 0,
/** notification popup horizontal position. can be "left" or "right"
* @default "right" */
position_h: "right",
/** vertical notification popup position. can be "top" or "bottom"
* @default "top" */
position_v: "top"
},
night_light: {
/** whether to save night light values to disk */
save_on_shutdown: true
},
workspaces: {
/** breaks `enable_helper`, makes all workspaces show their respective ID
* by default */
always_show_id: false,
/** this is the function that shows the Workspace's IDs
* around the current workspace if one breaks the crescent order.
* It basically helps keyboard navigation between workspaces.
* ---
* Example: 1(empty, current, shows ID), 2(empty, does not appear(makes
* the previous not to be in a crescent order)), 3(not empty, shows ID) */
enable_helper: true,
/** hide workspace indicator if there's only one active workspace */
hide_if_single: false
},
clock: {
/** use the same format as gnu's `date` command */
date_format: "%A %d, %H:%M"
},
misc: {
play_bell_on_volume_change: true
}
};
const userDataDefaults = {
control_center: {
/** last default backlight */
default_backlight: undefined
},
/** last default adapter */
bluetooth_default_adapter: undefined
};
export const userData = new Config<
keyof typeof userDataDefaults,
(typeof userDataDefaults)[keyof typeof userDataDefaults]
>(
`${GLib.get_user_data_dir()}/colorshell/data.json`,
userDataDefaults
);
export const generalConfig = new Config<keyof typeof generalConfigDefaults,
typeof generalConfigDefaults[keyof typeof generalConfigDefaults]>(
`${GLib.get_user_config_dir()}/colorshell/config.json`, generalConfigDefaults
);
+2 -1
View File
@@ -7,7 +7,8 @@ import { Runner } from "../runner/Runner";
import { showWorkspaceNumber } from "../window/bar/widgets/Workspaces"; import { showWorkspaceNumber } from "../window/bar/widgets/Workspaces";
import { playSystemBell } from "./utils"; import { playSystemBell } from "./utils";
import { player, setPlayer } from "./media"; import { player, setPlayer } from "./media";
import { generalConfig, Shell } from "../app"; import { Shell } from "../app";
import { generalConfig } from "../config";
import AstalIO from "gi://AstalIO"; import AstalIO from "gi://AstalIO";
import AstalMpris from "gi://AstalMpris"; import AstalMpris from "gi://AstalMpris";
+2 -2
View File
@@ -1,9 +1,9 @@
import { createRoot, getScope, Scope } from "ags"; import { createRoot, getScope, Scope } from "ags";
import GObject, { getter, gtype, property, register, setter } from "ags/gobject";
import { execAsync } from "ags/process"; import { execAsync } from "ags/process";
import { userData } from "../config";
import GObject, { getter, gtype, property, register, setter } from "ags/gobject";
import AstalBluetooth from "gi://AstalBluetooth"; import AstalBluetooth from "gi://AstalBluetooth";
import { userData } from "../app";
/** AstalBluetooth helper (implements the default adapter feature) */ /** AstalBluetooth helper (implements the default adapter feature) */
+1 -1
View File
@@ -1,5 +1,5 @@
import { execAsync } from "ags/process"; import { execAsync } from "ags/process";
import { generalConfig } from "../app"; import { generalConfig } from "../config";
import { onCleanup } from "ags"; import { onCleanup } from "ags";
import GObject, { getter, ParamSpec, property, register, signal } from "ags/gobject"; import GObject, { getter, ParamSpec, property, register, signal } from "ags/gobject";
+1 -1
View File
@@ -2,7 +2,7 @@ import { Gtk } from "ags/gtk4";
import { Windows } from "../../../windows"; import { Windows } from "../../../windows";
import { createBinding } from "ags"; import { createBinding } from "ags";
import { time } from "../../../modules/utils"; import { time } from "../../../modules/utils";
import { generalConfig } from "../../../app"; import { generalConfig } from "../../../config";
export const Clock = () => export const Clock = () =>
+1 -1
View File
@@ -1,7 +1,7 @@
import { Gtk } from "ags/gtk4"; import { Gtk } from "ags/gtk4";
import { getAppIcon, getSymbolicIcon } from "../../../modules/apps"; import { getAppIcon, getSymbolicIcon } from "../../../modules/apps";
import { Separator } from "../../../widget/Separator"; import { Separator } from "../../../widget/Separator";
import { generalConfig } from "../../../app"; import { generalConfig } from "../../../config";
import { createBinding, createComputed, createState, For, With } from "ags"; import { createBinding, createComputed, createState, For, With } from "ags";
import { variableToBoolean } from "../../../modules/utils"; import { variableToBoolean } from "../../../modules/utils";
@@ -4,7 +4,7 @@ import { Backlights } from "../../../../modules/backlight";
import { Page, PageButton } from "../Page"; import { Page, PageButton } from "../Page";
import { createBinding, For, With } from "ags"; import { createBinding, For, With } from "ags";
import { addSliderMarksFromMinMax } from "../../../../modules/utils"; import { addSliderMarksFromMinMax } from "../../../../modules/utils";
import { userData } from "../../../../app"; import { userData } from "../../../../config";
export const PageBacklight = new Page({ export const PageBacklight = new Page({
+1 -1
View File
@@ -2,7 +2,7 @@ import { Astal, Gtk } from "ags/gtk4";
import { createBinding, createComputed, For } from "ags"; import { createBinding, createComputed, For } from "ags";
import { Notifications } from "../../modules/notifications"; import { Notifications } from "../../modules/notifications";
import { NotificationWidget } from "../../widget/Notification"; import { NotificationWidget } from "../../widget/Notification";
import { generalConfig } from "../../app"; import { generalConfig } from "../../config";
import AstalNotifd from "gi://AstalNotifd"; import AstalNotifd from "gi://AstalNotifd";
import Adw from "gi://Adw?version=1"; import Adw from "gi://Adw?version=1";
+1 -1
View File
@@ -1,6 +1,6 @@
import { Astal, Gdk, Gtk } from "ags/gtk4"; import { Astal, Gdk, Gtk } from "ags/gtk4";
import { execAsync } from "ags/process"; import { execAsync } from "ags/process";
import { generalConfig } from "../../app"; import { generalConfig } from "../../config";
import { AskPopup } from "../../widget/AskPopup"; import { AskPopup } from "../../widget/AskPopup";
import { Notifications } from "../../modules/notifications"; import { Notifications } from "../../modules/notifications";
import { NightLight } from "../../modules/nightlight"; import { NightLight } from "../../modules/nightlight";