121 lines
3.6 KiB
Markdown
121 lines
3.6 KiB
Markdown
# 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`.
|