2025-04-25 16:58:19 +02:00

42 lines
1.1 KiB
TypeScript

import { Variable } from "astal";
import { App, Astal, Gdk, Gtk } from "astal/gtk4";
import AstalApps from "gi://AstalApps";
const MAX_ITEMS = 8;
function hide() {
App.get_window("launcher")!.hide();
}
const Launcher = () => {
const { CENTER } = Gtk.Align;
const apps = new AstalApps.Apps();
const width = Variable(1000);
const text = Variable("");
const visible = Variable(false);
const list = text((text) => apps.fuzzy_query(text).slice(0, MAX_ITEMS));
const onEnter = () => {
apps.fuzzy_query(text.get())?.[0].launch();
hide();
};
return <window
name="launcher"
visible={visible()}
anchor={Astal.WindowAnchor.TOP | Astal.WindowAnchor.BOTTOM}
exclusivity={Astal.Exclusivity.EXCLUSIVE}
keymode={Astal.Keymode.ON_DEMAND}
application={App}
onShow={(self) => {
width.set(self.get_current_monitor().geometry.width);
}}
onKeyPressed={(self, keyval) => {
if (keyval === Gdk.KEY_Escape) self.hide();
}}
child={
<box></box>
}
>
</window>
}