[package]
name = "quicksearch-gui"
version.workspace = true
edition.workspace = true
license.workspace = true
authors.workspace = true
repository.workspace = true
description = "Fast full-text search across your files: desktop app and terminal search tool."

[[bin]]
name = "quicksearch"
path = "src/main.rs"

# Terminal search is its own binary because the two need opposite Windows
# subsystems: a GUI console app flashes a console on launch; a console tool
# built as a GUI app cannot write to the invoking shell. On Unix the
# distinction does not exist and `quicksearch` still does both.
[[bin]]
name = "quicksearch-cli"
path = "src/cli_main.rs"

[features]
# Scripted self-capture driver used by packaging/capture.sh to regenerate the
# website screenshots and screencasts. Adds no dependencies and is inert
# unless QS_CAPTURE_SCRIPT is set at runtime.
capture = []

[dependencies]
quicksearch-core = { path = "../quicksearch-core" }

# Index-password support: OS keychain for "remember on this device"
# (Secret Service on Linux, Credential Manager on Windows), hidden terminal
# prompt, and best-effort scrubbing of password buffers.
# `vendored` compiles libdbus statically, so neither the build machine nor
# the .deb needs a dbus development/runtime package.
keyring = { version = "3", features = ["sync-secret-service", "vendored", "windows-native"] }
rpassword = "7"
zeroize = "1"

eframe = { version = "0.32", default-features = false, features = [
    "glow",
    "persistence",
] }
# `default-features = false` for one feature, `default_fonts` (~1.4 MB of
# embedded TTFs; `src/fonts.rs` installs the faces actually painted). eframe's
# `default-features = false` above does NOT cover this: feature resolution
# unions the declarations, so naming egui plainly switches it back on.
egui = { version = "0.32", default-features = false }
# Only `Column`/`TableBuilder` are used; the lone default feature is an image
# loader that is never registered, so this compiles one crate less.
egui_extras = { version = "0.32", default-features = false }
rfd = "0.15"
open = "5"
chrono = { version = "0.4", default-features = false, features = ["clock"] }

# The system-wide search shortcut, where the display server lets an
# application claim keys for itself: `RegisterHotKey` on Windows, `XGrabKey`
# on X11. Wayland does not, and is handled by the portal below.
global-hotkey = "0.8"

# Display backends, which only exist on Linux/BSD. `default-features = false`
# has to be repeated: feature resolution unions the two stanzas, so a single
# permissive one would switch defaults back on for every target.
[target.'cfg(all(unix, not(target_os = "macos")))'.dependencies]
eframe = { version = "0.32", default-features = false, features = [
    "wayland",
    "x11",
] }

# The Wayland half of the search shortcut: `org.freedesktop.portal.GlobalShortcuts`,
# the only way a Wayland application can be told about a key it does not own.
# `rfd` already pulls all four in (it uses the file-chooser portal), so the
# versions here are the ones already resolved and nothing extra is compiled.
# `default-features = false` matters: ashpd defaults to Tokio, which would add
# a second async runtime and switch `zbus` over to it underneath `rfd`.
ashpd = { version = "0.11", default-features = false, features = ["async-std"] }
futures-channel = "0.3"
futures-util = "0.3"
pollster = "0.4"

# Raising the window from the shortcut on X11, which winit cannot do: it asks
# with a source indication of "application", and every mainstream window
# manager refuses that from a window that is not already focused. See
# `hotkey::raise`. Both are already in the tree (winit's own X11 backend, and
# eframe's window handle), so neither adds a crate.
x11rb = "0.13"
raw-window-handle = "0.6"

# Console attachment for the GUI binary (which has no stdio when launched from
# Explorer) and VT-mode enabling for the CLI binary. 0.59 matches what eframe
# and rfd already resolve, so no extra crate is compiled.
[target.'cfg(windows)'.dependencies]
windows-sys = { version = "0.59", features = [
    "Win32_Foundation",
    "Win32_System_Console",
] }
