Initial commit
This commit is contained in:
67
ags/app.ts
Normal file
67
ags/app.ts
Normal file
@ -0,0 +1,67 @@
|
||||
import style from "./styles/style.scss"
|
||||
|
||||
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 BatteryInfo from "@/widget/bar/battery_info";
|
||||
import Bar from "widget/bar/bar";
|
||||
|
||||
const hypr = Hyprland.get_default();
|
||||
const windows = new Map<number, Gtk.Window[]>();
|
||||
const components = [
|
||||
Bar,
|
||||
Launcher,
|
||||
QuickSettings,
|
||||
BluetoothWindow,
|
||||
BatteryInfo
|
||||
];
|
||||
|
||||
const setupBars = async (monitor_id: number) => {
|
||||
const windows = await Promise.all(
|
||||
components.map(item => Promise.resolve(item(monitor_id)) as Promise<Gtk.Window>)
|
||||
);
|
||||
|
||||
return windows;
|
||||
};
|
||||
|
||||
const STYLES = `${GLib.get_user_config_dir()}/ags/styles`;
|
||||
const monitorCSS = () => monitorFile(
|
||||
STYLES + '/colors.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);
|
||||
};
|
||||
});
|
||||
}
|
||||
},
|
||||
})
|
Reference in New Issue
Block a user