# omni-launcher A Wayland application launcher overlay built on [Quickshell](https://quickshell.org). Beyond app search it supports inline calculator, unit/currency conversion, unicode lookup and Giphy search — each picked by a single-character prefix. ## Features - `query` — fuzzy app search across `.desktop` entries - `= expr` — calculator + unit conversion (length, mass, volume, time, temperature, area, energy, data, …) - `= 100 usd to eur` — live currency conversion via [Frankfurter](https://frankfurter.dev) - `. name` — unicode search by character name (e.g. `. heart`) - `! query` — animated GIF search via Giphy (requires API key) - Theme follows `xdg-desktop-portal` appearance (dark/light + accent) and Qt's platform palette/font. - Optional Hyprland integration: close on workspace switch and focus-grab dismissal. ## Install From the AUR: ```sh yay -S omni-launcher ``` Or build from a clone: ```sh makepkg -si ``` ## Usage omni-launcher can run in two modes: **standalone** (its own quickshell process) or **embedded** (imported as a QML module inside an existing quickshell config, saving a process). ### Standalone mode Start the daemon once per session (e.g. in `~/.config/hypr/hyprland.conf`): ``` exec-once = omni-launcher ``` Bind a key to toggle the overlay: ``` bind = SUPER, SPACE, exec, omni-launcher-toggle ``` `omni-launcher-toggle` calls the running instance over Quickshell IPC. The launcher closes on `Esc`, click-outside, or workspace switch (Hyprland). ### Embedded mode Instead of running a separate quickshell process, you can import `OmniLauncher` directly inside your existing quickshell config. The module ships its own `Theme`, `Config`, and `LauncherService` singletons (module-scoped — they won't collide with your config's own singletons). 1. Install `omni-launcher` from the AUR (this places the module on the Qt6 import path at `/usr/lib/qt6/qml/OmniLauncher/`). 2. In your `shell.qml`, import the module and instantiate `Launcher {}`: ```qml import Quickshell import Quickshell.Io import OmniLauncher ShellRoot { IpcHandler { target: "launcher" function toggle(): void { LauncherService.toggle(); } function open(): void { LauncherService.open(); } function close(): void { LauncherService.close(); } } Launcher {} } ``` 3. Bind a key to toggle it via your host config's IPC socket: ``` bind = SUPER, SPACE, exec, quickshell ipc call launcher toggle ``` Do **not** run `omni-launcher` (the daemon) in embedded mode — the host quickshell process already owns the launcher. ## Configuration `~/.config/omni-launcher/config.json` — any missing key falls back to a built-in default, so the file can be omitted entirely: ```json { "fontFamily": "JetBrainsMono Nerd Font Propo", "fontSize": 16, "giphyApiKey": "", "panelWidth": 720, "panelHeight": 520, "padding": 5, "spacing": 5, "radius": 10, "colors": { "background": "#101010", "foreground": "#e6e6e6", "idle": "#a0a0a0", "accent": "#5e9eff", "overlayStrong": "#2b5f96", "overlayWeak": "#202020", "border": "#3a3a3a" } } ``` Changes take effect on restart (`omni-launcher`). ### Theming The launcher reads `org.freedesktop.appearance` from `xdg-desktop-portal` for color-scheme and accent, and falls back to Qt's `SystemPalette` (qt6ct / KDE / qgnomeplatform) for everything else. Values under `colors` are optional overrides for users or theme managers that want a fixed palette. ## Dependencies - `quickshell`, `wl-clipboard`, `curl`, `python`, `glib2` - Optional: `hyprland` for workspace-switch dismissal and focus grab ## License GPL-3.0-or-later. See `LICENSE`.