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);
|
|
|
|
};
|
|
|
|
});
|
|
|
|
}
|
|
|
|
},
|
|
|
|
})
|