2026-09-25 14:58:51 -04:00
|
|
|
.\" packaging/build-deb.sh rewrites the version in the .TH line below from
|
|
|
|
|
.\" [workspace.package] version; the literal here only shows when this file is
|
|
|
|
|
.\" read uninstalled.
|
2026-08-05 18:05:04 -04:00
|
|
|
.TH QUICKSEARCH 1 "2026-08-05" "quicksearch 1.0.2" "User Commands"
|
2026-08-02 19:04:30 -04:00
|
|
|
.SH NAME
|
|
|
|
|
quicksearch, quicksearch\-cli \- fast full\-text search across your files
|
|
|
|
|
.SH SYNOPSIS
|
|
|
|
|
.B quicksearch
|
|
|
|
|
.br
|
2026-09-04 21:39:54 -04:00
|
|
|
.B quicksearch \-\-toggle
|
|
|
|
|
.br
|
2026-08-02 19:04:30 -04:00
|
|
|
.B quicksearch
|
|
|
|
|
.RI [ FLAGS ]
|
2026-10-11 20:32:00 -04:00
|
|
|
.RB [ \-\- ]
|
2026-08-02 19:04:30 -04:00
|
|
|
.IR "query terms" ...
|
|
|
|
|
.br
|
|
|
|
|
.B quicksearch\-cli
|
|
|
|
|
.RI [ FLAGS ]
|
2026-10-11 20:32:00 -04:00
|
|
|
.RB [ \-\- ]
|
2026-08-02 19:04:30 -04:00
|
|
|
.IR "query terms" ...
|
|
|
|
|
.SH DESCRIPTION
|
|
|
|
|
.B quicksearch
|
2026-09-25 14:58:51 -04:00
|
|
|
maintains a SQLite/FTS5 index of the folders in its configuration and searches
|
|
|
|
|
it by file name and content.
|
2026-08-02 19:04:30 -04:00
|
|
|
.PP
|
2026-10-11 20:32:00 -04:00
|
|
|
With no arguments it opens the desktop application, which owns the indexer: it
|
2026-09-25 14:58:51 -04:00
|
|
|
walks the configured folders, watches them for changes and reindexes
|
|
|
|
|
periodically.
|
2026-08-02 19:04:30 -04:00
|
|
|
.PP
|
2026-09-25 14:58:51 -04:00
|
|
|
With one or more query terms it runs the application's ranked search, prints
|
|
|
|
|
the results and exits. Terminal mode never starts the indexer, the file watcher
|
|
|
|
|
or any background thread, so a one\-shot query leaves nothing running and does
|
|
|
|
|
not compete with a running application for inotify watches. It needs an
|
|
|
|
|
existing index; run the application once to build one.
|
2026-08-02 19:04:30 -04:00
|
|
|
.PP
|
|
|
|
|
.B quicksearch\-cli
|
2026-09-25 14:58:51 -04:00
|
|
|
is terminal search only: it takes the same flags and query syntax, never opens
|
|
|
|
|
a window, and exits 2 with usage when given no query. On Linux it is equivalent
|
|
|
|
|
to giving
|
2026-08-02 19:04:30 -04:00
|
|
|
.B quicksearch
|
2026-09-25 14:58:51 -04:00
|
|
|
a query; on Windows it is required, because one executable cannot be both a
|
|
|
|
|
GUI and a console program.
|
2026-08-02 19:04:30 -04:00
|
|
|
.SH OPTIONS
|
|
|
|
|
.TP
|
2026-09-04 21:39:54 -04:00
|
|
|
.B \-\-toggle
|
|
|
|
|
Bring a running QuickSearch to the front with the search box focused, or start
|
2026-09-25 14:58:51 -04:00
|
|
|
it if none is running. Bind a key to this in your desktop's keyboard settings.
|
2026-09-04 21:39:54 -04:00
|
|
|
.IP
|
2026-09-25 14:58:51 -04:00
|
|
|
While running, QuickSearch also holds a shortcut of its own
|
2026-09-04 21:39:54 -04:00
|
|
|
.RI ( Ctrl+Shift+F
|
2026-09-25 14:58:51 -04:00
|
|
|
by default, changeable on the Settings tab), but that cannot start it when it
|
|
|
|
|
is closed; this option can.
|
2026-09-04 21:39:54 -04:00
|
|
|
.IP
|
2026-09-25 14:58:51 -04:00
|
|
|
The request reaches the running instance through a socket in
|
2026-09-04 21:39:54 -04:00
|
|
|
.IR $XDG_RUNTIME_DIR ,
|
2026-09-25 14:58:51 -04:00
|
|
|
named after the configuration file; if nothing answers, this process becomes
|
|
|
|
|
the application. On Wayland the window comes forward only if the launcher
|
|
|
|
|
supplied an activation token (bindings made with the Settings tab's set\-up
|
|
|
|
|
button do); otherwise it is highlighted in the task bar.
|
2026-09-04 21:39:54 -04:00
|
|
|
.TP
|
2026-08-02 19:04:30 -04:00
|
|
|
.B \-\-fuzzy
|
2026-09-25 14:58:51 -04:00
|
|
|
Also run the fuzzy file name and full\-text passes, which tolerate
|
|
|
|
|
misspellings at some cost in speed. The edit budget comes from
|
2026-08-02 19:04:30 -04:00
|
|
|
.I [search].fuzzy_max_edits
|
|
|
|
|
in the configuration.
|
|
|
|
|
.TP
|
|
|
|
|
.BI \-\-limit " N"
|
|
|
|
|
Return at most
|
|
|
|
|
.I N
|
2026-10-11 20:32:00 -04:00
|
|
|
results, where
|
|
|
|
|
.I N
|
|
|
|
|
is a positive integer. Defaults to
|
2026-08-02 19:04:30 -04:00
|
|
|
.I [search].display_limit
|
|
|
|
|
in the configuration.
|
|
|
|
|
.B \-\-limit=N
|
2026-09-25 14:58:51 -04:00
|
|
|
also works.
|
2026-08-02 19:04:30 -04:00
|
|
|
.TP
|
|
|
|
|
.B \-\-long
|
|
|
|
|
Print rank, size, modification time and a matching snippet for each hit instead
|
2026-09-25 14:58:51 -04:00
|
|
|
of bare paths, with the match in bold when stdout is a terminal.
|
2026-08-02 19:04:30 -04:00
|
|
|
.TP
|
2026-10-11 20:32:00 -04:00
|
|
|
.B \-\-
|
|
|
|
|
End the options: every later argument is a query term, even one that starts
|
|
|
|
|
with
|
|
|
|
|
.BR \- .
|
|
|
|
|
.TP
|
2026-08-02 19:04:30 -04:00
|
|
|
.BR \-h ", " \-\-help
|
|
|
|
|
Print usage and exit.
|
2026-08-05 18:05:04 -04:00
|
|
|
.TP
|
|
|
|
|
.BR \-V ", " \-\-version
|
|
|
|
|
Print the version and the commit it was built from, then exit. Quote this in
|
|
|
|
|
bug reports.
|
2026-08-02 19:04:30 -04:00
|
|
|
.PP
|
2026-10-11 20:32:00 -04:00
|
|
|
Options come before the query terms. From the first term on, every argument is
|
|
|
|
|
part of the query, so a
|
|
|
|
|
.B \-h
|
|
|
|
|
after a term is searched for. An unrecognised option, a
|
|
|
|
|
.B \-\-limit
|
|
|
|
|
that is not a positive integer, or options with no query terms are a usage
|
|
|
|
|
error.
|
2026-08-02 19:04:30 -04:00
|
|
|
.SH QUERY SYNTAX
|
2026-08-05 18:05:04 -04:00
|
|
|
Plain words form a single phrase, matched against names, contents and paths.
|
2026-09-25 14:58:51 -04:00
|
|
|
Filters combine with it:
|
2026-08-05 18:05:04 -04:00
|
|
|
.TP
|
|
|
|
|
.B \(dq\fIexact phrase\fB\(dq
|
|
|
|
|
Quoting keeps spaces, stars and filter\-like words literal.
|
|
|
|
|
.B \(dq\(dq
|
|
|
|
|
escapes a quote.
|
|
|
|
|
.TP
|
|
|
|
|
.BI bud * port
|
|
|
|
|
.B *
|
|
|
|
|
matches any run of characters, staying within one line of content.
|
|
|
|
|
.B %
|
|
|
|
|
and
|
|
|
|
|
.B _
|
|
|
|
|
are always literal.
|
|
|
|
|
.TP
|
|
|
|
|
.B regex:\fIpattern\fR
|
|
|
|
|
Match a regular expression against names, contents and paths, for example
|
2026-10-11 20:32:00 -04:00
|
|
|
.BR regex:(foo|bar)\ed+ .
|
2026-08-05 18:05:04 -04:00
|
|
|
Case\-insensitive by default;
|
2026-10-11 20:32:00 -04:00
|
|
|
.BI (?\-i: pattern )
|
|
|
|
|
overrides. Quote patterns containing spaces or a leading
|
|
|
|
|
.BR \(dq .
|
2026-08-02 19:04:30 -04:00
|
|
|
.TP
|
|
|
|
|
.B type:\fIName\fR
|
2026-08-05 18:05:04 -04:00
|
|
|
Match a file class: one of
|
|
|
|
|
.IR Audio ", " Image ", " Video ", " Document ", " Text ", " Archive ", "
|
|
|
|
|
.IR Spreadsheet ", " Presentation ", " Folder .
|
2026-08-02 19:04:30 -04:00
|
|
|
.TP
|
|
|
|
|
.B modified:\fIexpr\fR
|
|
|
|
|
Compare against the modification date, for example
|
|
|
|
|
.IR modified:>=2024-01-01 .
|
2026-08-05 18:05:04 -04:00
|
|
|
Also
|
|
|
|
|
.BR < ", " <= ", " > " and " = ;
|
|
|
|
|
dates are
|
|
|
|
|
.IR yyyy-mm-dd .
|
2026-10-11 20:32:00 -04:00
|
|
|
Every operator compares whole days in the local time zone:
|
|
|
|
|
.I >2024-01-01
|
|
|
|
|
starts on January 2, and
|
|
|
|
|
.I <=2024-01-01
|
|
|
|
|
includes all of January 1.
|
2026-08-05 18:05:04 -04:00
|
|
|
.B mtime:
|
|
|
|
|
is an alias.
|
2026-08-02 19:04:30 -04:00
|
|
|
.TP
|
|
|
|
|
.B path:\fI/dir\fR
|
2026-08-05 18:05:04 -04:00
|
|
|
Restrict results to a directory and its subdirectories.
|
|
|
|
|
.B folder:
|
|
|
|
|
and
|
|
|
|
|
.B includefolder:
|
|
|
|
|
are aliases.
|
|
|
|
|
.B *
|
|
|
|
|
is literal here.
|
2026-08-02 19:04:30 -04:00
|
|
|
.TP
|
|
|
|
|
.B mime:\fItype\fR
|
2026-08-05 18:05:04 -04:00
|
|
|
Match a MIME type exactly, for example
|
2026-08-02 19:04:30 -04:00
|
|
|
.IR mime:application/pdf .
|
|
|
|
|
.TP
|
|
|
|
|
.B name:\fIfragment\fR
|
2026-09-25 14:58:51 -04:00
|
|
|
Match a fragment of the file name. A filter, so it does not affect ranking.
|
2026-08-05 18:05:04 -04:00
|
|
|
.B filename:
|
|
|
|
|
is an alias; an unquoted
|
|
|
|
|
.B *
|
|
|
|
|
globs.
|
|
|
|
|
.PP
|
|
|
|
|
Unrecognised
|
|
|
|
|
.I key:value
|
|
|
|
|
text stays part of the search phrase.
|
|
|
|
|
.BR AND ", " OR
|
|
|
|
|
and parentheses are treated as plain words.
|
2026-08-02 20:21:19 -04:00
|
|
|
.SH PASSWORD PROTECTION
|
2026-09-25 14:58:51 -04:00
|
|
|
The index can be encrypted with a password (Settings tab, Security). A
|
|
|
|
|
protected index must be unlocked every time either binary starts. The
|
|
|
|
|
application shows an unlock screen; terminal mode takes the key from, in
|
|
|
|
|
order: the OS keychain (when \(lqRemember on this device\(rq is on), the
|
2026-08-02 20:21:19 -04:00
|
|
|
.B QUICKSEARCH_PASSWORD
|
2026-09-25 14:58:51 -04:00
|
|
|
environment variable, then a hidden prompt with three attempts. Without a
|
|
|
|
|
terminal and with neither source available it exits 2 with an explanation. A
|
|
|
|
|
wrong password never modifies the index.
|
2026-08-02 20:21:19 -04:00
|
|
|
.PP
|
2026-09-25 14:58:51 -04:00
|
|
|
Enabling, disabling or changing the password deletes and rebuilds the index.
|
|
|
|
|
The password itself is never stored; only a derived key is, in the OS
|
|
|
|
|
keychain, and only on request.
|
2026-08-02 20:21:19 -04:00
|
|
|
.SH ENVIRONMENT
|
|
|
|
|
.TP
|
|
|
|
|
.B QUICKSEARCH_PASSWORD
|
2026-10-11 20:32:00 -04:00
|
|
|
Password for a protected index, for scripted terminal search. Set but empty,
|
|
|
|
|
it counts as unset. Other processes of the same user can read environment
|
|
|
|
|
variables; prefer the keychain where possible.
|
2026-08-02 19:04:30 -04:00
|
|
|
.SH FILES
|
|
|
|
|
.TP
|
|
|
|
|
.I ~/.config/quicksearch/config.toml
|
2026-09-25 14:58:51 -04:00
|
|
|
Configuration, created with defaults on first run.
|
2026-08-02 19:04:30 -04:00
|
|
|
.I /usr/share/doc/quicksearch/config_example.toml
|
2026-09-25 14:58:51 -04:00
|
|
|
documents every key.
|
2026-08-02 19:04:30 -04:00
|
|
|
.TP
|
|
|
|
|
.I ~/.local/share/quicksearch/index.sqlite
|
2026-09-25 14:58:51 -04:00
|
|
|
The index;
|
2026-08-02 19:04:30 -04:00
|
|
|
.I [paths].database_path
|
2026-09-25 14:58:51 -04:00
|
|
|
in the configuration sets its location.
|
2026-08-02 19:04:30 -04:00
|
|
|
.TP
|
2026-09-04 21:39:54 -04:00
|
|
|
.IR $XDG_RUNTIME_DIR /quicksearch\- <key> .sock
|
|
|
|
|
The socket
|
|
|
|
|
.B \-\-toggle
|
|
|
|
|
connects to, where
|
|
|
|
|
.I <key>
|
2026-09-25 14:58:51 -04:00
|
|
|
is a hash of the configuration file's path (not the index's, which can change
|
|
|
|
|
while running). Present only while the application runs; a leftover one is
|
2026-10-11 20:32:00 -04:00
|
|
|
inert and is replaced at the next start. Falls back to
|
|
|
|
|
.RI quicksearch\- <uid>
|
2026-09-25 14:58:51 -04:00
|
|
|
under the temporary directory when
|
2026-09-04 21:39:54 -04:00
|
|
|
.I XDG_RUNTIME_DIR
|
2026-10-11 20:32:00 -04:00
|
|
|
is unset. That directory must be the user's own with mode 0700; one that is
|
|
|
|
|
not is refused, and
|
|
|
|
|
.B \-\-toggle
|
|
|
|
|
then cannot reach the running instance.
|
2026-09-04 21:39:54 -04:00
|
|
|
.TP
|
2026-08-02 19:04:30 -04:00
|
|
|
.I ./config.toml
|
2026-09-25 14:58:51 -04:00
|
|
|
A configuration file next to the
|
2026-08-02 19:04:30 -04:00
|
|
|
.B quicksearch
|
2026-10-11 20:32:00 -04:00
|
|
|
executable, or the AppImage, selects portable mode and overrides the
|
|
|
|
|
per\-user configuration entirely, unless it has a top\-level table that is
|
|
|
|
|
not one of QuickSearch's own: another program's
|
|
|
|
|
.I config.toml
|
|
|
|
|
there is ignored, with a warning in the log. One that fails to parse still
|
|
|
|
|
counts, and the program reports the error. The packaged build installs no
|
|
|
|
|
such file.
|
2026-08-02 19:04:30 -04:00
|
|
|
.PP
|
|
|
|
|
.I XDG_CONFIG_HOME
|
|
|
|
|
and
|
|
|
|
|
.I XDG_DATA_HOME
|
|
|
|
|
are honoured when set to absolute paths.
|
|
|
|
|
.SH EXIT STATUS
|
|
|
|
|
.TP
|
|
|
|
|
.B 0
|
2026-10-11 20:32:00 -04:00
|
|
|
The search completed (also when the reader of a pipe stops early, as
|
|
|
|
|
.B head
|
|
|
|
|
does), or
|
2026-08-02 19:04:30 -04:00
|
|
|
.B \-\-help
|
2026-10-11 20:32:00 -04:00
|
|
|
or
|
|
|
|
|
.B \-\-version
|
2026-08-02 19:04:30 -04:00
|
|
|
was requested.
|
|
|
|
|
.TP
|
|
|
|
|
.B 1
|
|
|
|
|
The application failed to start.
|
|
|
|
|
.TP
|
|
|
|
|
.B 2
|
2026-10-11 20:32:00 -04:00
|
|
|
A usage error, the configuration could not be read, the index could not be
|
|
|
|
|
opened or unlocked, the query was rejected, the results could not be written,
|
|
|
|
|
or
|
2026-08-02 19:04:30 -04:00
|
|
|
.B quicksearch\-cli
|
|
|
|
|
was given no query.
|
|
|
|
|
.SH EXAMPLES
|
|
|
|
|
.TP
|
|
|
|
|
Search for a phrase:
|
|
|
|
|
.B quicksearch quarterly revenue report
|
|
|
|
|
.TP
|
|
|
|
|
Recent PDFs under a directory, with details:
|
|
|
|
|
.B quicksearch \-\-long type:Document mime:application/pdf path:/home/me/docs modified:>=2026-01-01
|
|
|
|
|
.TP
|
|
|
|
|
Tolerate misspellings and cap the output:
|
|
|
|
|
.B quicksearch \-\-fuzzy \-\-limit 10 recieve
|
|
|
|
|
.SH SEE ALSO
|
2026-09-25 14:58:51 -04:00
|
|
|
.IR /usr/share/doc/quicksearch/README.md ,
|
|
|
|
|
.I /usr/share/doc/quicksearch/config_example.toml
|
2026-08-02 19:04:30 -04:00
|
|
|
.SH AUTHOR
|
|
|
|
|
Jeremy <jeremy@karsttech.com>
|