[workspace] resolver = "2" members = [ "crates/shop", "crates/shop-font", "crates/kitty-graphics", "crates/shop-wayland", "crates/shop-render", "crates/shop-pty", "crates/shop-grid", "crates/shop-vt", "crates/shop-bench", "crates/shop-xkb", ] [workspace.dependencies] tempfile = "3" smithay-client-toolkit = { version = "0.21", features = ["system"] } wayland-client = { version = "0.31", features = ["system"] } # Keysym names only. shop-xkb takes this rather than SCTK so the key-encoding # logic stays testable without a compositor; SCTK re-exports the same type, so # the binary passes its keysyms straight through. xkeysym = "0.2" calloop = "0.14" calloop-wayland-source = "0.4" # Two backends, both reachable: vulkan is the one shop is built for, gles is the # fallback that keeps a machine with no Vulkan driver in a working terminal. # `Backends::GL` finds nothing without this feature, so the pair moves together. # No metal — shop is Wayland-only, so that backend can never be selected. wgpu = { version = "30", default-features = false, features = ["wgsl", "vulkan", "gles"] } raw-window-handle = "0.6" pollster = "1" anyhow = "1" tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["env-filter"] } swash = "0.2" guillotiere = "0.7" bytemuck = { version = "1", features = ["derive"] } nix = { version = "0.31", features = ["term", "process", "fs", "ioctl", "signal"] } base64 = "0.23" image = { version = "0.25", default-features = false, features = ["png"] } # The family's theme loading. shop resolves its sixteen ANSI slots, its default # text and page colours from a theme file rather than carrying a hex table, and # `ansi_intent` is the mapping the bare Linux console and Alloy's generated # configs use, so all three agree on what red means. makeover = "3.0" # For shop's own config file, and already in the tree underneath makeover. toml = "1.1" # How many columns a character occupies. This is a protocol agreement with the # application, not a rendering detail: a program laying out a table computes its # cursor moves from the same table, so the grid has to read it from the same # data rather than assume one column per char. unicode-width = "0.2" # Which font the SYSTEM says has a character the bundled font lacks. Consulted # only on a miss, so ordinary output never reaches it. The C library is Keith # Packard's permissive licence and ships on every Linux desktop, which is # everywhere shop runs. fontconfig = "0.11" [workspace.package] edition = "2024" rust-version = "1.85" authors = ["Max Johnson "] repository = "https://makenot.work/git/max/shop" license = "MIT" [workspace.lints.rust] unsafe_code = "warn" unused = "warn" unreachable_pub = "warn" [workspace.lints.clippy] pedantic = { level = "warn", priority = -1 } # Allow-list tuned from a measured breakdown across server/multithreaded/pter # (2026-07-22). These are the high-churn / low-signal pedantic lints; everything # else in `pedantic` stays a warning. Keep this block identical across repos. module_name_repetitions = "allow" # Doc lints. No docs-completeness push is underway. missing_errors_doc = "allow" missing_panics_doc = "allow" doc_markdown = "allow" # Numeric casts. Endemic and mostly intentional in size and byte math. cast_possible_truncation = "allow" cast_sign_loss = "allow" cast_precision_loss = "allow" cast_possible_wrap = "allow" cast_lossless = "allow" # Subjective structure and style nags. High churn, low signal. must_use_candidate = "allow" too_many_lines = "allow" struct_excessive_bools = "allow" similar_names = "allow" items_after_statements = "allow" single_match_else = "allow" # Frequent false-positives in TUI and router-heavy code. match_same_arms = "allow" unnecessary_wraps = "allow" type_complexity = "allow" [profile.release] lto = "thin" codegen-units = 1 strip = "symbols" # Same optimizations as release but keep symbols + line-tables so samply / # perf can attribute samples to function names and source lines. Use with # `cargo build --profile profiling`. [profile.profiling] inherits = "release" strip = "none" debug = "line-tables-only" [profile.dev] opt-level = 1