fzf for Omarchy
A Quickshell overlay for Omarchy that fuzzy-finds files in your XDG user directories and opens them.
The overlay reads
${XDG_CONFIG_HOME:-$HOME/.config}/user-dirs.dirs and shows one search field
per configured directory (Downloads, Documents, Music, Pictures, …). Entries
that point at your home directory itself are skipped, since searching there
would dwarf every other directory.
As soon as you type into a field, the other fields disappear and matching
files from that directory appear below, ranked by fzf. The field stays
visible so you can keep refining the search. Selecting an entry opens the
file with xdg-open. The most recently focused directory is restored the
next time the overlay opens; search queries are not saved.
Screenshots
Choose an XDG user directory to search:

Review fuzzy-ranked file results without leaving the keyboard:

Requirements
Install
omarchy plugin add https://github.com/sgruendel/omarchy-fzf.git --enable
Remove
omarchy plugin remove sgruendel.fzf --yes
rm -f -- "${XDG_STATE_HOME:-$HOME/.local/state}/sgruendel.fzf/state.json"
rmdir -- "${XDG_STATE_HOME:-$HOME/.local/state}/sgruendel.fzf" 2>/dev/null || true
Usage
Summon the overlay through the shell:
omarchy-shell shell toggle sgruendel.fzf
To bind it to a key, add a line like this to ~/.config/hypr/bindings.lua:
o.bind("XF86Search", nil, "omarchy-shell shell toggle sgruendel.fzf")
Controls
- Type in a field: fuzzy-search that directory
Tab/Shift+Tab: move between directory fieldsUp/DownorCtrl+K/Ctrl+J: move the result selectionPageUp/PageDownorCtrl+U/Ctrl+D: move by ten resultsEnter: open the selected file withxdg-openEscape: clear the current search, or close the overlay when empty- Click a result to open it; click outside the card to close the overlay
State
The last focused directory path is stored in
${XDG_STATE_HOME:-$HOME/.local/state}/sgruendel.fzf/state.json.
The state file is limited to 8 KiB and written atomically with mode 0600
inside a mode 0700 plugin directory. No search query or result history is
persisted.
How it works
Each keystroke is debounced (150 ms) and runs
fd --type f --hidden --exclude .git | fzf --scheme=path --filter=<query>
inside the directory, so results use fzf's path-oriented ranking. Hidden
files are included except .git; fd also respects your .gitignore. Input
files and search output are byte-limited before entering QML collectors; the
UI additionally caps directory entries, path lengths, and result count.
Development
The plugin uses the standard third-party overlay lifecycle: Omarchy injects the
scoped shell and public manifest facades, calls open(payloadJson) when the
overlay is summoned, and calls close() when it is hidden. The overlay is
loaded on demand and reports its state through opened.
Run the parser and search-pipeline tests with:
node --test