scootlaunch overview
A keyboard-first application launcher for scoot and any compositor
with wlr-layer-shell-v1. What ships today is the desktop entry
index, ranked search, the headless agent interface, the overlay panel
with its entry and virtualized list, launching, and the dmenu and run
modes.
scootlaunch --list --json # every visible entry, as JSONscootlaunch --query "fire" --json # ranked as the UI would rank itscootlaunch # open the panelprintf 'a\nb\n' | scootlaunch --dmenu # pick a line, print itscootlaunch --run # the panel over $PATH executablesscootlaunch --windows # the panel over open windowsOne binary, holding nothing when closed. It reads the
same desktop files every launcher reads ($XDG_DATA_HOME then each
$XDG_DATA_DIRS entry’s applications/, subdirectories walked,
first file per id wins, Hidden=true masking across data dirs),
expands each Exec to an argv per the Desktop Entry Specification,
and caches the result under $XDG_CACHE_HOME/scootlaunch/index-v1.
What it does today
Section titled “What it does today”- Lists indexed entries, with
NoDisplayandOnlyShowIn/NotShowIn/TryExec-hidden entries reachable through--allwith their reason (--list --all --json). - Ranks entries for a query (
--query TEXT): a case-folded fuzzy match over the name, generic name, keywords and Exec basename, plus a frecency bonus from$XDG_STATE_HOME/scootlaunch/history. The bonus never outranks a much better text match. An empty query orders by frecency, then name. - Prints the agent JSON schema:
id,name,generic_name,comment,keywords,icon,exec(the expanded argv),terminal,dbus_activatable,actions,pathandhidden.--query --jsonprints the same schema in ranked order. - Expands
Execstrictly per the spec, or with--lenientthe way GLib reads the real files that break the quoting rule. - Opens the panel (bare
scootlaunch): the overlay exclusive-keyboard surface with the entry and the ranked, match-highlighted list. Details, keys and theming are in The panel. Picking launches the entry and exits 0 (a dmenu pick prints instead of launching; see the CLI reference).
Every flag is in the CLI reference. An app missing from the list is diagnosed there too.
Install
Section titled “Install”The launcher rides the install script
with --launch. Unified vX.
releases carry a scootlaunch-<version>-<arch> binary beside the rest.
curl -fsSL https://www.scoot.sh/install.sh | sh -s -- --launchThe panel needs two things beside the binary; the headless commands
(--list, --query, --run-id) need neither:
| Distro | Keyboard library | A font |
|---|---|---|
| Debian 12 / Ubuntu 24.04 and newer | sudo apt install libxkbcommon0 |
sudo apt install fonts-dejavu-core |
| Fedora 43 and newer | sudo dnf install libxkbcommon |
sudo dnf install dejavu-sans-fonts |
| openSUSE Tumbleweed | sudo zypper install libxkbcommon0 |
sudo zypper install dejavu-fonts |
| Arch | sudo pacman -S libxkbcommon |
sudo pacman -S ttf-dejavu |
Any font file works with --font PATH instead of the packaged one.
The install script’s missing-library report names both for your
distro. Distro packages (deb, rpm, Arch) are recipes in packaging/
so far, not published repositories.
Two modules, one switch. programs. manages the
launcher’s own file; the desktop profile already runs the launcher
behind the keymap’s binds. The look reaches the panel as a
runtime layer: a value you set still wins per key. Stylix reaches it
only as the stylix look. There is no Stylix switch and no unit,
since nothing runs when the panel is closed.
| Option | Type / default | Example | Reload |
|---|---|---|---|
programs. |
bool, false (true with the profile) |
true |
rebuild or switch |
programs. |
package or null, the flake’s build | inputs. |
rebuild or switch |
programs. |
list of strings or null, null (default features: SVG icons on) |
[ ] builds without SVG icons |
rebuild or switch |
programs. |
TOML table, { } |
{ width_em = 50; rows = 12; } |
next open (the file is read whole at every open) |
The file lands at scoot/launch. under $XDG_CONFIG_HOME
(home-manager) or /etc/scootlaunch/launch. (NixOS) and holds
only these settings, verbatim. The keys are the launcher’s own
(font, width_em, rows); anything else is refused by name —
--check says which. An empty file is the built-in defaults.
The profile runs scootlaunch behind Super+d (drun) and
Ctrl+Alt+Space (run), and the clipboard picker, the WiFi/Bluetooth
pickers and the screencast chooser through its --dmenu:
programs.scoot.desktop.launcher.daemon = "scootlaunch"; # the default; drop the lineWith it, scoot-launcher execs scootlaunch with no color flags,
and the clipboard picker, the WiFi/Bluetooth pickers and the
screencast chooser run it through --dmenu the same way. To manage
the file beside the switch, also import the module
(scoot., scoot.
on the system side): the profile runs the flake’s build
with no file. The keys, the panel and the look layer are in The
panel.
An explicit menuPackage beside a mismatched daemon is allowed but
loses theming one way: daemon scootlaunch with a fuzzel menu runs
that menu unthemed (no color flags travel with it), while daemon
fuzzel with a scootlaunch menu stays themed (it accepts the same
flags as overrides).
To go back, set daemon = "fuzzel" and switch again — see
Migrating from fuzzel.
Symptom: the menu ignores your
fuzzel.font settings.ini
scootlaunchnever readsfuzzel.: set the face inini programs., or switch the daemon back toscootlaunch. settings. font "fuzzel".
Symptom:
Super+dopens nothing after the switch.The bind renders only with the launcher slot on (it is, with the profile). A
daemontypo fails the evaluation naming the value — rebuild says which.
