Repository navigation
Expand file tree
/
Copy pathCargo.toml
More file actions
62 lines (60 loc) · 3.76 KB
/
Copy pathCargo.toml
File metadata and controls
62 lines (60 loc) · 3.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# deckhand - Steam Input-like controller mapper (workspace root).
# See PLAN.md for the full design; build order is steam-hid first.
[workspace]
resolver = "3"
members = ["crates/vocab-out", "crates/vocab-hid", "crates/steam-hid", "crates/virt-out", "crates/config", "crates/mapper", "crates/engine", "crates/ipc", "crates/deckhandd", "crates/deckhandctl", "crates/deckhand", "crates/forwarder-ui", "crates/hidhide"]
# The real UI (`deckhand`, iced) and the minimal `forwarder-ui` both pull heavy GUI deps and are
# opt-in (`cargo build -p deckhand` / `-p forwarder-ui`); keep them out of a plain workspace build.
default-members = ["crates/vocab-out", "crates/vocab-hid", "crates/steam-hid", "crates/virt-out", "crates/config", "crates/mapper", "crates/engine", "crates/ipc", "crates/deckhandd", "crates/deckhandctl", "crates/hidhide"]
[workspace.package]
edition = "2024"
license = "MIT OR Apache-2.0"
publish = false # internal crates for now; not for crates.io (see PLAN 0)
version = "0.1.0"
[workspace.dependencies]
# Well-maintained, widely-used only (PLAN 0). hidraw backend: no libusb, and it
# is the right Linux path for the hid-steam raw-access story (PLAN 1.6).
hidapi = { version = "2", default-features = false, features = ["linux-static-hidraw"] }
bitflags = "2"
thiserror = "2"
serde = { version = "1", features = ["derive"] }
# config on-disk format: RON - serde-native, enum-friendly, comments (PLAN 3).
ron = "0.12"
# virt-out Linux backend: uinput virtual devices (kb/mouse/gamepad). Widely-used,
# maintained; matches the user's working `uinput-simulation` reference (PLAN 2.1).
evdev = "0.13"
# Set the gamepad uinput fd non-blocking (fcntl) so FF polling doesn't block the loop.
libc = "0.2"
# Cross-platform Ctrl-C for the examples (and later the engine): the handler flips a
# flag so loops exit and run Drop - restoring lizard mode / unplugging the virtual pad.
# Windows Ctrl-C otherwise aborts the process without destructors (CLAUDE "Clean
# shutdown"). The engine will want its `termination` feature (SIGTERM/SIGHUP) for clean
# daemon stop.
ctrlc = "3"
# Engine concurrency (PLAN 4): sync, no async. `select!` over device-frame / control /
# tick channels in the central mapping loop; multi-producer for thread-per-device readers.
crossbeam-channel = "0.5"
# Lightweight logging facade for the engine + a `env_logger` backend in the test binary.
log = "0.4"
env_logger = "0.11"
# CLI parsing for the `deckhand-run` test binary (derive mode).
clap = { version = "4", features = ["derive"] }
# Control-plane wire codec (compact, serde-native) for the daemon/client (PLAN 4.4).
postcard = { version = "1", features = ["use-std"] }
# Cross-platform local sockets (Unix domain sockets / Windows named pipes) for the
# daemon control socket - one sync API, no async/tokio (PLAN 4.4).
interprocess = "2"
# systemd integration for `deckhandd --systemd` (Linux, user session): socket activation
# (`listen_fds()` -> adopt the LISTEN_FDS socket) + `sd-notify` readiness (`READY=1`). Pure
# Rust, zero transitive deps; small but proven (fits the dependency policy). Linux-only use.
sd-notify = "0.5"
# iced (Rust-native retained-mode GUI, Elm architecture) - the real UI toolkit. Pinned to git
# 0.15-dev, NOT 0.14: on Wayland, 0.14 corrupts the wl_data_device/clipboard when a window is closed
# and reopened (our hide-to-tray), crashing with a "data_offer" protocol error; fixed on main by the
# new wl-clipboard-rs backend (verified: 200 close/reopen cycles clean).
iced = { git = "https://github.com/iced-rs/iced", rev = "d188d6fa" }
# rfd = native file dialogs, shared for the path pickers.
rfd = "0.17"
# Decode the bundled tray/window PNG to RGBA (image-rs, small). The tray crates themselves are
# declared per-consumer: deckhand pins its own `tray-icon` (Linux = ksni, Windows = win32; no gtk).
png = "0.18"