import style from "./styles/style.scss" import { SHELL } from "./settings.json"; import { GLib, monitorFile, exec } from "astal"; import { App, Gtk } from "astal/gtk4" 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(); 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) ); return windows; }; 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); } ); App.start({ css: style, async main() { App.add_icons(`${GLib.get_user_data_dir()}/icons/Astal`); monitorCSS(); 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); }; }); } }, })