| 1 |
[workspace] |
| 2 |
resolver = "2" |
| 3 |
members = [ |
| 4 |
"crates/shop", |
| 5 |
"crates/shop-font", |
| 6 |
"crates/kitty-graphics", |
| 7 |
"crates/shop-wayland", |
| 8 |
"crates/shop-render", |
| 9 |
"crates/shop-pty", |
| 10 |
"crates/shop-grid", |
| 11 |
"crates/shop-vt", |
| 12 |
"crates/shop-bench", |
| 13 |
"crates/shop-xkb", |
| 14 |
] |
| 15 |
|
| 16 |
[workspace.dependencies] |
| 17 |
tempfile = "3" |
| 18 |
smithay-client-toolkit = { version = "0.21", features = ["system"] } |
| 19 |
wayland-client = { version = "0.31", features = ["system"] } |
| 20 |
# Keysym names only. shop-xkb takes this rather than SCTK so the key-encoding |
| 21 |
# logic stays testable without a compositor; SCTK re-exports the same type, so |
| 22 |
# the binary passes its keysyms straight through. |
| 23 |
xkeysym = "0.2" |
| 24 |
calloop = "0.14" |
| 25 |
calloop-wayland-source = "0.4" |
| 26 |
# Two backends, both reachable: vulkan is the one shop is built for, gles is the |
| 27 |
# fallback that keeps a machine with no Vulkan driver in a working terminal. |
| 28 |
# `Backends::GL` finds nothing without this feature, so the pair moves together. |
| 29 |
# No metal — shop is Wayland-only, so that backend can never be selected. |
| 30 |
wgpu = { version = "30", default-features = false, features = ["wgsl", "vulkan", "gles"] } |
| 31 |
raw-window-handle = "0.6" |
| 32 |
pollster = "1" |
| 33 |
anyhow = "1" |
| 34 |
tracing = "0.1" |
| 35 |
tracing-subscriber = { version = "0.3", features = ["env-filter"] } |
| 36 |
swash = "0.2" |
| 37 |
guillotiere = "0.7" |
| 38 |
bytemuck = { version = "1", features = ["derive"] } |
| 39 |
nix = { version = "0.31", features = ["term", "process", "fs", "ioctl", "signal"] } |
| 40 |
base64 = "0.23" |
| 41 |
image = { version = "0.25", default-features = false, features = ["png"] } |
| 42 |
# The family's theme loading. shop resolves its sixteen ANSI slots, its default |
| 43 |
# text and page colours from a theme file rather than carrying a hex table, and |
| 44 |
# `ansi_intent` is the mapping the bare Linux console and Alloy's generated |
| 45 |
# configs use, so all three agree on what red means. |
| 46 |
makeover = "3.0" |
| 47 |
# For shop's own config file, and already in the tree underneath makeover. |
| 48 |
toml = "1.1" |
| 49 |
# How many columns a character occupies. This is a protocol agreement with the |
| 50 |
# application, not a rendering detail: a program laying out a table computes its |
| 51 |
# cursor moves from the same table, so the grid has to read it from the same |
| 52 |
# data rather than assume one column per char. |
| 53 |
unicode-width = "0.2" |
| 54 |
# Which font the SYSTEM says has a character the bundled font lacks. Consulted |
| 55 |
# only on a miss, so ordinary output never reaches it. The C library is Keith |
| 56 |
# Packard's permissive licence and ships on every Linux desktop, which is |
| 57 |
# everywhere shop runs. |
| 58 |
fontconfig = "0.11" |
| 59 |
|
| 60 |
[workspace.package] |
| 61 |
edition = "2024" |
| 62 |
rust-version = "1.85" |
| 63 |
authors = ["Max Johnson <me@maxj.phd>"] |
| 64 |
repository = "https://makenot.work/git/max/shop" |
| 65 |
license = "MIT" |
| 66 |
|
| 67 |
[workspace.lints.rust] |
| 68 |
unsafe_code = "warn" |
| 69 |
unused = "warn" |
| 70 |
unreachable_pub = "warn" |
| 71 |
|
| 72 |
[workspace.lints.clippy] |
| 73 |
pedantic = { level = "warn", priority = -1 } |
| 74 |
# Allow-list tuned from a measured breakdown across server/multithreaded/pter |
| 75 |
# (2026-07-22). These are the high-churn / low-signal pedantic lints; everything |
| 76 |
# else in `pedantic` stays a warning. Keep this block identical across repos. |
| 77 |
module_name_repetitions = "allow" |
| 78 |
# Doc lints. No docs-completeness push is underway. |
| 79 |
missing_errors_doc = "allow" |
| 80 |
missing_panics_doc = "allow" |
| 81 |
doc_markdown = "allow" |
| 82 |
# Numeric casts. Endemic and mostly intentional in size and byte math. |
| 83 |
cast_possible_truncation = "allow" |
| 84 |
cast_sign_loss = "allow" |
| 85 |
cast_precision_loss = "allow" |
| 86 |
cast_possible_wrap = "allow" |
| 87 |
cast_lossless = "allow" |
| 88 |
# Subjective structure and style nags. High churn, low signal. |
| 89 |
must_use_candidate = "allow" |
| 90 |
too_many_lines = "allow" |
| 91 |
struct_excessive_bools = "allow" |
| 92 |
similar_names = "allow" |
| 93 |
items_after_statements = "allow" |
| 94 |
single_match_else = "allow" |
| 95 |
# Frequent false-positives in TUI and router-heavy code. |
| 96 |
match_same_arms = "allow" |
| 97 |
unnecessary_wraps = "allow" |
| 98 |
type_complexity = "allow" |
| 99 |
|
| 100 |
[profile.release] |
| 101 |
lto = "thin" |
| 102 |
codegen-units = 1 |
| 103 |
strip = "symbols" |
| 104 |
|
| 105 |
# Same optimizations as release but keep symbols + line-tables so samply / |
| 106 |
# perf can attribute samples to function names and source lines. Use with |
| 107 |
# `cargo build --profile profiling`. |
| 108 |
[profile.profiling] |
| 109 |
inherits = "release" |
| 110 |
strip = "none" |
| 111 |
debug = "line-tables-only" |
| 112 |
|
| 113 |
[profile.dev] |
| 114 |
opt-level = 1 |
| 115 |
|