ags/app.ts

64 lines
1.8 KiB
TypeScript
Raw Normal View History

2025-02-06 12:05:55 +01:00
import style from "./styles/style.scss"
2025-02-13 21:58:31 +01:00
import { SHELL } from "./settings.json";
2025-02-06 12:05:55 +01:00
2025-02-13 21:58:31 +01:00
import { GLib, monitorFile, exec } from "astal";
import { App, Gtk } from "astal/gtk4"
2025-02-06 12:05:55 +01:00
import Hyprland from "gi://AstalHyprland";
import QuickSettings from "widget/quick_settings/quick_settings";
import BluetoothWindow from "./widget/quick_settings/bluetooth";
import Launcher from "widget/launcher/launcher";
import Bar from "widget/bar/bar";
const hypr = Hyprland.get_default();
const windows = new Map<number, Gtk.Window[]>();
const setupBars = async (monitor_id: number) => {
const components = [Bar, Launcher, QuickSettings, BluetoothWindow];
const windows = await Promise.all(
components.map(item => Promise.resolve(item(monitor_id)) as Promise<Gtk.Window>)
);
return windows;
};
2025-02-13 21:58:31 +01:00
const STYLES = `${GLib.get_user_config_dir()}/ags/styles`;
const monitorCSS = () => monitorFile(
STYLES + '/colors/index.scss',
() => {
exec(`sass ${STYLES}/style.scss /tmp/ags-style.css`);
App.apply_css('/tmp/ags-style.css', true);
}
);
2025-02-06 12:05:55 +01:00
App.start({
css: style,
async main() {
App.add_icons(`${GLib.get_user_data_dir()}/icons/Astal`);
2025-02-13 21:58:31 +01:00
monitorCSS();
2025-02-06 12:05:55 +01:00
const monitors = App.get_monitors();
for (const monitor of monitors) {
const index = monitors.indexOf(monitor);
windows.set(index, await setupBars(index));
hypr.connect("monitor-added", async (_, monitor: Hyprland.Monitor) => {
if (!windows.has(monitor.id)) windows.set(monitor.id, await setupBars(monitor.id))
});
hypr.connect("monitor-removed", (_, monitor_id: number) => {
const monitorWindows = windows.get(monitor_id)
if (monitorWindows) {
for (const monitorWindow of monitorWindows) {
monitorWindow.destroy();
};
windows.delete(monitor_id);
};
});
}
},
})