2026-08-02 19:04:30 -04:00
|
|
|
|
# QuickSearch configuration reference.
|
|
|
|
|
|
#
|
|
|
|
|
|
# The live config is auto-created at ~/.config/quicksearch/config.toml
|
|
|
|
|
|
# (Windows: %APPDATA%\quicksearch\config.toml). A config.toml placed next
|
|
|
|
|
|
# to the quicksearch binary overrides it entirely (portable mode).
|
|
|
|
|
|
# Relative paths resolve against the directory containing the config
|
|
|
|
|
|
# file, so a portable folder can be moved wholesale.
|
|
|
|
|
|
#
|
|
|
|
|
|
# Every key is optional; missing keys take the defaults shown here.
|
|
|
|
|
|
|
|
|
|
|
|
[paths]
|
|
|
|
|
|
# One or more directory roots to index. Walked in order; duplicate and
|
|
|
|
|
|
# nested roots are de-duplicated automatically. `~` expands to home.
|
|
|
|
|
|
indexing_paths = ["~"]
|
|
|
|
|
|
# SQLite index location. Default: ~/.local/share/quicksearch/index.sqlite
|
|
|
|
|
|
# On Windows the default is %LOCALAPPDATA%\quicksearch\index.sqlite. Write
|
|
|
|
|
|
# Windows paths as TOML *literal* strings (single quotes) so the
|
|
|
|
|
|
# backslashes need no escaping, and keep the index out of a roaming
|
|
|
|
|
|
# profile — it is far too large to synchronise:
|
|
|
|
|
|
# database_path = 'C:\Users\you\AppData\Local\quicksearch\index.sqlite'
|
|
|
|
|
|
database_path = "~/.local/share/quicksearch/index.sqlite"
|
|
|
|
|
|
|
|
|
|
|
|
[indexing]
|
|
|
|
|
|
# Automatic mode: filesystem watchers apply changes as they happen and a
|
|
|
|
|
|
# full reindex runs every reindex_interval_minutes. The watcher catches
|
|
|
|
|
|
# changes as they happen, so this only needs to be often enough to cover
|
|
|
|
|
|
# whatever the watcher missed.
|
|
|
|
|
|
auto_index = true
|
|
|
|
|
|
reindex_interval_minutes = 1440
|
|
|
|
|
|
# Follow symbolic links during directory walks.
|
|
|
|
|
|
follow_symlinks = false
|
|
|
|
|
|
# Index hidden files and directories. That means dot-files everywhere, and
|
|
|
|
|
|
# additionally anything carrying the Hidden or System attribute on Windows
|
|
|
|
|
|
# (AppData, $RECYCLE.BIN, System Volume Information, pagefile.sys ...).
|
|
|
|
|
|
include_hidden = false
|
|
|
|
|
|
# Empty = extract text from every supported format. Non-empty = content
|
|
|
|
|
|
# indexing only for these extensions; other files are still listed for
|
|
|
|
|
|
# filename search. Entries are case-insensitive, leading dot optional.
|
|
|
|
|
|
content_extensions = []
|
|
|
|
|
|
# Excluded from the index entirely. A pattern without a separator matches
|
|
|
|
|
|
# any single path component (so ".git" prunes whole subtrees); patterns
|
|
|
|
|
|
# containing one match full paths. Glob syntax (*, ?, [..]). Matching is
|
|
|
|
|
|
# case-insensitive on Windows and macOS, case-sensitive elsewhere,
|
|
|
|
|
|
# following the filesystem.
|
|
|
|
|
|
#
|
|
|
|
|
|
# The Windows defaults add: "$RECYCLE.BIN", "System Volume Information",
|
|
|
|
|
|
# "pagefile.sys", "hiberfil.sys", "swapfile.sys", "Thumbs.db",
|
|
|
|
|
|
# "desktop.ini".
|
|
|
|
|
|
ignore_patterns = [".git", "node_modules", "*.tmp", ".venv", "venv"]
|
|
|
|
|
|
|
|
|
|
|
|
# Worth adding by hand if you index a whole Windows drive rather than just
|
|
|
|
|
|
# your profile. Neither is excluded by default, because the default root
|
|
|
|
|
|
# is your profile and a bare "Windows" pattern would also match a folder
|
|
|
|
|
|
# of your own with that name:
|
|
|
|
|
|
# 'C:\Windows' — system files, nothing you would search for
|
|
|
|
|
|
# 'C:\Windows\WinSxS' — a hardlink farm that floods the Duplicates tab
|
|
|
|
|
|
|
|
|
|
|
|
# Walker threads per root, keyed by the exact root string from
|
|
|
|
|
|
# indexing_paths. Absent or 0 = auto (4 on local storage, 16 on network
|
|
|
|
|
|
# mounts, detected per root). Applies at the start of the next run.
|
|
|
|
|
|
# root_workers = { "/media/share" = 24 }
|
|
|
|
|
|
|
|
|
|
|
|
[processing]
|
|
|
|
|
|
# Bytes read from the start of each file for its content hash, which is
|
|
|
|
|
|
# `sha256(size || first hash_length bytes)` and backs duplicate detection.
|
|
|
|
|
|
# Only the head is read: seeking to the end for a second block costs an
|
|
|
|
|
|
# extra round trip per file on network shares.
|
|
|
|
|
|
#
|
|
|
|
|
|
# Known limitation: files of identical size whose heads match will be
|
|
|
|
|
|
# reported as duplicates. In practice that means pre-allocated VM disk
|
|
|
|
|
|
# images: a fixed-size VHD stores its unique footer at the end of the
|
|
|
|
|
|
# file, and a freshly pre-allocated raw/qcow2/VMDK image is all zeros at
|
|
|
|
|
|
# the head until it is partitioned.
|
|
|
|
|
|
hash_length = 8192
|
|
|
|
|
|
# Maximum extracted text stored per file (bytes).
|
|
|
|
|
|
maximum_text_size = 262144
|
|
|
|
|
|
# Files larger than this skip text extraction entirely (bytes).
|
|
|
|
|
|
maximum_text_file_size = 2097152
|
|
|
|
|
|
# Files per batch during walks / inserts / extraction.
|
|
|
|
|
|
batch_size = 200
|
|
|
|
|
|
# Files per transaction for incremental FTS updates.
|
|
|
|
|
|
fts_update_batch_size = 1000
|
|
|
|
|
|
# FTS5 tokenizer: 'trigram' (substring matching, the default; gets
|
|
|
|
|
|
# remove_diacritics 1 appended), 'unicode61', 'porter', or a full FTS5
|
|
|
|
|
|
# option string. See https://www.sqlite.org/fts5.html#tokenizers
|
|
|
|
|
|
tokenize = "trigram"
|
|
|
|
|
|
# Store extracted text (zstd-compressed) alongside the FTS index. Off:
|
|
|
|
|
|
# the index shrinks to roughly stock-Baloo size, but search loses snippet
|
|
|
|
|
|
# previews, occurrence ranking, case verification, and fuzzy full-text.
|
|
|
|
|
|
store_text_for_snippets = true
|
|
|
|
|
|
|
2026-08-02 20:21:19 -04:00
|
|
|
|
[security]
|
|
|
|
|
|
# Encrypt the index with a password (SQLCipher). The password is asked
|
|
|
|
|
|
# for every time QuickSearch starts; turning this on or off deletes and
|
|
|
|
|
|
# rebuilds the index. Change it from the GUI (Options → Security), not by
|
|
|
|
|
|
# hand: enabling protection also generates the KDF salt below.
|
|
|
|
|
|
password_protected = false
|
|
|
|
|
|
# Store the derived key in the OS keychain (Secret Service / KWallet on
|
|
|
|
|
|
# Linux, Credential Manager on Windows) and skip the startup prompt.
|
|
|
|
|
|
use_keychain = false
|
|
|
|
|
|
# When a password is set, the app writes a `salt` value here (32 hex
|
|
|
|
|
|
# digits). It is not a secret, but it is unique to your index: do not
|
|
|
|
|
|
# create or edit it by hand, and keep it if you copy this file — the
|
|
|
|
|
|
# password only unlocks the index together with its salt.
|
|
|
|
|
|
|
2026-08-02 19:04:30 -04:00
|
|
|
|
[ui]
|
|
|
|
|
|
# Zoom factor for the whole GUI: fonts, spacing, and widgets scale
|
|
|
|
|
|
# together (0.5 – 2.5). Ctrl +/- and Ctrl 0 adjust it temporarily at
|
|
|
|
|
|
# runtime; this value is the persistent baseline.
|
|
|
|
|
|
scale = 1.1
|
|
|
|
|
|
|
|
|
|
|
|
[search]
|
|
|
|
|
|
# Start with the fuzzy passes enabled.
|
|
|
|
|
|
fuzzy_default = false
|
|
|
|
|
|
# Ceiling on the fuzzy stages' typo budget. The allowance grows with the
|
|
|
|
|
|
# search term, one edit per three characters, up to this value, so 2
|
|
|
|
|
|
# means "1 edit for 3-5 character terms, 2 for anything longer". 0 turns
|
|
|
|
|
|
# the fuzzy stages off. Above 3 is allowed but not recommended: matches
|
|
|
|
|
|
# become dominated by coincidence and every fuzzy pass slows down.
|
|
|
|
|
|
fuzzy_max_edits = 2
|
|
|
|
|
|
# Hard cap on results per search (the GUI's scroll list length).
|
|
|
|
|
|
display_limit = 1000
|
|
|
|
|
|
# Results per streamed batch (latency/overhead knob, not a page size).
|
|
|
|
|
|
results_per_page = 100
|
|
|
|
|
|
# How long the GUI waits after the last keystroke before searching (ms).
|
|
|
|
|
|
debounce_ms = 150
|