# Copyright 1999-2026 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 # Autogenerated by pycargoebuild 0.16.0 EAPI=8 CRATES=" accesskit@0.24.1 accesskit_atspi_common@0.19.1 accesskit_consumer@0.38.0 accesskit_macos@0.26.3 accesskit_unix@0.22.1 accesskit_windows@0.34.0 addr2line@0.25.1 addr2line@0.26.1 adler2@2.0.1 adler32@1.2.0 aes@0.8.4 agent-client-protocol-derive@5.1.0 agent-client-protocol-schema@1.16.0 agent-client-protocol@5.1.0 ahash@0.8.12 aho-corasick@1.1.3 aliasable@0.1.3 aligned-vec@0.6.4 aligned@0.4.3 alloca@0.4.0 allocator-api2@0.2.21 alsa-sys@0.4.0 alsa@0.11.0 ambient-authority@0.0.2 ammonia@4.1.8 android_system_properties@0.1.5 anes@0.1.6 annotate-snippets@0.12.12 anstream@0.6.21 anstyle-parse@0.2.7 anstyle-query@1.1.4 anstyle-wincon@3.0.10 anstyle@1.0.13 any_vec@0.14.0 anyhow@1.0.104 approx@0.5.1 ar_archive_writer@0.5.1 arbitrary@1.4.2 arc-swap@1.9.0 arg_enum_proc_macro@0.3.4 arraydeque@0.5.1 arrayref@0.3.9 arrayvec@0.7.6 as-raw-xcb-connection@1.0.1 as-slice@0.2.1 ascii@1.1.0 ash@0.38.0+1.3.281 ashpd@0.13.5 async-attributes@1.1.2 async-broadcast@0.7.2 async-channel@1.9.0 async-channel@2.5.0 async-compat@0.2.5 async-compression@0.4.32 async-dispatcher@0.1.2 async-executor@1.13.3 async-fs@2.2.0 async-global-executor@2.4.1 async-io@2.6.0 async-lock@3.4.2 async-net@2.0.0 async-recursion@1.1.1 async-signal@0.2.13 async-std@1.13.2 async-stream-impl@0.3.6 async-stream@0.3.6 async-trait@0.1.89 async-tungstenite@0.33.0 async_zip@0.0.18 asynchronous-codec@0.7.0 atoi@2.0.0 atomic-waker@1.1.2 atomic@0.5.3 atspi-common@0.13.0 atspi-proxies@0.13.0 atspi@0.29.0 auditable-serde@0.8.0 autocfg@1.5.0 av-scenechange@0.14.1 av1-grain@0.2.4 avif-serialize@0.8.6 aws-config@1.8.14 aws-credential-types@1.2.12 aws-lc-rs@1.18.1 aws-lc-sys@0.45.0 aws-runtime@1.7.0 aws-sdk-bedrockruntime@1.125.0 aws-sdk-kinesis@1.100.0 aws-sdk-s3@1.123.0 aws-sdk-sso@1.94.0 aws-sdk-ssooidc@1.96.0 aws-sdk-sts@1.98.0 aws-sigv4@1.4.0 aws-smithy-async@1.2.14 aws-smithy-checksums@0.64.4 aws-smithy-eventstream@0.60.20 aws-smithy-http-client@1.1.10 aws-smithy-http@0.63.4 aws-smithy-json@0.62.7 aws-smithy-observability@0.2.5 aws-smithy-query@0.60.15 aws-smithy-runtime-api-macros@1.0.0 aws-smithy-runtime-api@1.12.3 aws-smithy-runtime@1.10.1 aws-smithy-schema@0.1.0 aws-smithy-types@1.4.9 aws-smithy-xml@0.60.15 aws-types@1.3.12 axum-core@0.3.4 axum@0.6.20 backtrace@0.3.76 base16ct@0.1.1 base64-simd@0.8.0 base64@0.21.7 base64@0.22.1 base64ct@1.8.0 beef@0.5.2 betlang@0.1.1 bigdecimal@0.4.8 bincode@1.3.3 bindgen@0.72.1 bit-set@0.11.1 bit-set@0.8.0 bit-vec@0.10.1 bit-vec@0.8.0 bit_field@0.10.3 bitflags@1.3.2 bitflags@2.13.1 bitstream-io@4.9.0 block-buffer@0.10.4 block-padding@0.3.3 block2@0.5.1 block2@0.6.2 blocking@1.6.2 bmrng@0.5.2 bon-macros@3.8.2 bon@3.8.2 borrow-or-share@0.2.4 borsh-derive@1.8.1 borsh@1.8.1 brush-parser@0.3.0 bs58@0.5.1 bstr@1.12.1 built@0.8.0 bumpalo@3.20.3 by_address@1.2.1 bytecount@0.6.9 bytemuck@1.24.0 bytemuck_derive@1.10.2 byteorder-lite@0.1.0 byteorder@1.5.0 bytes-utils@0.1.4 bytes@0.4.12 bytes@1.11.1 bzip2@0.6.1 c-enum@0.2.3 cached@0.56.0 cached_proc_macro@0.25.0 cached_proc_macro_types@0.1.1 calloop-wayland-source@0.4.1 camino@1.2.6 cap-primitives@4.0.3 cargo-platform@0.3.2 cargo_metadata@0.23.1 cargo_toml@0.21.0 cast@0.3.0 cbc@0.1.2 cbindgen@0.28.0 cc@1.4.3 cesu8@1.1.0 cexpr@0.6.0 cfg-expr@0.20.9 cfg-if@1.0.4 cfg_aliases@0.2.2 chacha20@0.10.1 chardetng@0.1.17 chrono@0.4.42 chunked_transfer@1.5.0 ciborium-io@0.2.2 ciborium-ll@0.2.2 ciborium@0.2.2 cipher@0.4.4 clang-sys@1.8.1 clap@4.5.49 clap_builder@4.5.49 clap_complete@4.5.59 clap_complete_nushell@4.6.0 clap_derive@4.5.49 clap_lex@0.7.6 cmake@0.1.56 cobs@0.3.0 codespan-reporting@0.13.0 color_quant@1.1.0 colorchoice@1.0.4 combine@4.6.7 command-fds@0.3.2 compression-codecs@0.4.31 compression-core@0.4.29 concurrent-queue@2.5.0 console@0.16.3 console_error_panic_hook@0.1.7 const-oid@0.9.6 const-random-macro@0.1.16 const-random@0.1.18 const_format@0.2.35 const_format_proc_macros@0.2.34 convert_case@0.10.0 convert_case@0.11.0 core-foundation-sys@0.8.7 core-foundation@0.10.0 core-foundation@0.9.4 core-graphics-types@0.2.0 core-graphics@0.24.0 core-services@1.0.0 core-text@21.0.0 core2@0.4.0 core_detect@1.0.0 core_maths@0.1.1 coreaudio-rs@0.12.1 coreaudio-rs@0.14.2 coreaudio-sys@0.2.18 cosmic-text@0.19.0 cpp_demangle@0.5.1 cpufeatures@0.2.17 cpufeatures@0.3.0 cranelift-assembler-x64-meta@0.135.7 cranelift-assembler-x64@0.135.7 cranelift-bforest@0.135.7 cranelift-bitset@0.135.7 cranelift-codegen-meta@0.135.7 cranelift-codegen-shared@0.135.7 cranelift-codegen@0.135.7 cranelift-control@0.135.7 cranelift-entity@0.135.7 cranelift-frontend@0.135.7 cranelift-isle@0.135.7 cranelift-native@0.135.7 cranelift-srcgen@0.135.7 crash-handler@0.8.0 crc-catalog@2.4.0 crc-fast@1.9.0 crc32fast@1.5.0 crc@3.3.0 criterion-plot@0.8.2 criterion@0.8.2 crossbeam-channel@0.5.15 crossbeam-deque@0.8.6 crossbeam-epoch@0.9.20 crossbeam-queue@0.3.12 crossbeam-utils@0.8.21 crunchy@0.2.4 crypto-bigint@0.4.9 crypto-bigint@0.5.5 crypto-common@0.1.6 cssparser-macros@0.6.1 cssparser@0.36.0 cssparser@0.37.0 ctor@1.0.12 ctrlc@3.5.0 cursor-icon@1.2.0 cxx-build@1.0.187 cxx@1.0.187 cxxbridge-cmd@1.0.187 cxxbridge-flags@1.0.187 cxxbridge-macro@1.0.187 darling@0.20.11 darling@0.21.3 darling@0.23.0 darling_core@0.20.11 darling_core@0.21.3 darling_core@0.23.0 darling_macro@0.20.11 darling_macro@0.21.3 darling_macro@0.23.0 dary_heap@0.3.9 dashmap@6.1.0 dasp_sample@0.11.0 data-encoding@2.9.0 data-url@0.3.2 dbus@0.9.9 debug-ignore@1.0.5 debugid@0.8.0 deflate64@0.1.10 der@0.6.1 der@0.7.10 deranged@0.5.4 derive_more-impl@2.1.1 derive_more@2.1.1 derive_setters@0.1.9 dialoguer@0.12.0 diff@0.1.13 diffy@0.4.2 digest@0.10.7 dioxus-cli-config@0.7.10 dioxus-core-types@0.7.10 dioxus-core@0.7.10 dioxus-devtools-types@0.7.10 dirs-sys@0.5.0 dirs@6.0.0 dispatch2@0.3.1 dispatch@0.2.0 displaydoc@0.2.5 dlib@0.5.3 document-features@0.2.12 documented-macros@0.10.0 documented@0.10.0 dotenvy@0.15.7 downcast-rs@1.2.1 doxygen-rs@0.4.2 dtoa-short@0.3.5 dtoa@1.0.10 dugong-graphlib@0.8.0-alpha.5 dugong@0.8.0-alpha.5 dunce@1.0.5 dwrote@0.11.5 dyn-clone@1.0.20 ec4rs@1.2.0 ecdsa@0.14.8 either@1.15.0 elasticlunr-rs@3.0.2 elliptic-curve@0.12.3 email_address@0.2.9 embed-resource@3.0.6 embedded-io@0.4.0 embedded-io@0.6.1 emojis@0.9.0 encode_unicode@1.0.0 encoding_rs@0.8.35 endi@1.1.0 enumflags2@0.7.12 enumflags2_derive@0.7.12 enumn@0.1.14 env_filter@0.1.4 env_logger@0.10.2 env_logger@0.11.8 envy@0.4.2 equator-macro@0.4.2 equator@0.4.2 equivalent@1.0.2 erased-serde@0.4.9 errno-dragonfly@0.1.2 errno@0.2.8 errno@0.3.14 error-graph@0.1.1 etagere@0.2.15 etcetera@0.8.0 euclid@0.22.14 event-listener-strategy@0.5.4 event-listener@2.5.3 event-listener@5.4.2 exec@0.3.1 exr@1.74.0 extended@0.1.0 failspot@0.2.0 fancy-regex@0.19.0 fast-srgb8@1.0.0 fastrand@1.9.0 fastrand@2.3.0 fax@0.2.6 fax_derive@0.2.0 fdeflate@0.3.7 fearless_simd@0.4.1 ff@0.12.1 filedescriptor@0.8.3 filetime@0.2.29 find-msvc-tools@0.1.11 fixedbitset@0.5.7 flate2@1.1.8 float-cmp@0.9.0 float-ord@0.3.2 float_next_after@1.0.0 fluent-uri@0.4.1 flume@0.11.1 flume@0.12.0 fnv@1.0.7 foldhash@0.1.5 foldhash@0.2.0 font-types@0.10.0 font-types@0.11.0 fontconfig-parser@0.5.8 fontdb@0.23.0 foreign-types-macros@0.2.3 foreign-types-shared@0.1.1 foreign-types-shared@0.3.1 foreign-types@0.3.2 foreign-types@0.5.0 fork@0.4.0 form_urlencoded@1.2.2 fraction@0.16.0 freetype-sys@0.20.1 fs-set-times@0.20.3 fs2@0.4.3 fs_extra@1.3.0 fuchsia-cprng@0.1.1 futures-channel@0.3.34 futures-concurrency@7.7.1 futures-core@0.3.34 futures-executor@0.3.34 futures-intrusive@0.5.0 futures-io@0.3.34 futures-lite@1.13.0 futures-lite@2.6.1 futures-macro@0.3.34 futures-sink@0.3.34 futures-task@0.3.34 futures-util@0.3.34 futures@0.1.31 futures@0.3.34 gaoya@0.2.0 generational-box@0.7.10 generator@0.8.9 generic-array@0.14.7 gethostname@1.1.0 getrandom@0.2.16 getrandom@0.3.4 getrandom@0.4.1 gif@0.14.2 gimli@0.32.3 gimli@0.33.0 gio-sys@0.21.5 gl_generator@0.14.0 glib-macros@0.21.5 glib-sys@0.21.5 glib@0.21.5 glob@0.3.3 globset@0.4.17 gloo-timers@0.3.0 glow@0.18.0 glutin_wgl_sys@0.6.1 gobject-sys@0.21.5 goblin@0.9.3 gpu-allocator@0.28.0 granit-parser@1.0.0 group@0.12.1 guppy-workspace-hack@0.1.0 guppy@0.18.0 h2@0.3.27 h2@0.4.19 half@2.7.1 handlebars@4.5.0 handlebars@5.1.2 harfrust@0.5.0 hash32@0.3.1 hashbrown@0.12.3 hashbrown@0.14.5 hashbrown@0.15.5 hashbrown@0.16.1 hashbrown@0.17.1 hashlink@0.10.0 hashlink@0.8.4 hdrhistogram@7.5.4 headers-core@0.2.0 headers@0.3.9 heapless@0.9.2 heck@0.4.1 heck@0.5.0 heed-traits@0.20.0 heed-types@0.21.0 heed@0.21.0 hermit-abi@0.5.2 hex@0.4.3 hkdf@0.12.4 hmac@0.12.1 home@0.5.11 hound@3.5.1 html5ever@0.39.0 htmlize@1.1.0 http-body-util@0.1.3 http-body@0.4.6 http-body@1.0.1 http-range-header@0.3.1 http@0.2.12 http@1.3.1 httparse@1.10.1 httpdate@1.0.3 human_bytes@0.4.3 humantime@2.3.0 hyper-rustls@0.27.9 hyper-timeout@0.5.2 hyper-tls@0.5.0 hyper-util@0.1.17 hyper@0.14.32 hyper@1.11.1 iana-time-zone-haiku@0.1.2 iana-time-zone@0.1.64 icu_collator@2.3.0 icu_collator_data@2.3.0 icu_collections@2.3.0 icu_locale_core@2.3.0 icu_locale_fallback@2.3.0 icu_locale_fallback_data@2.3.0 icu_normalizer@2.3.0 icu_normalizer_data@2.3.0 icu_properties@2.3.0 icu_properties_data@2.3.0 icu_provider@2.3.0 icu_segmenter@2.3.0 icu_segmenter_data@2.3.0 id-arena@2.3.0 ident_case@1.0.1 idna@1.1.0 idna_adapter@1.2.1 ignore@0.4.24 image-webp@0.2.4 image@0.25.10 imagesize@0.14.0 imara-diff@0.2.0 imgref@1.12.0 include-flate-codegen@0.3.4 include-flate-compress@0.3.4 include-flate@0.3.4 indenter@0.3.4 indexmap@1.9.3 indexmap@2.14.0 indoc@2.0.6 inherent@1.0.13 inotify-sys@0.1.5 inotify@0.11.0 inout@0.1.4 instant@0.1.13 interpolate_name@0.2.4 inventory@0.3.21 io-extras@0.19.0 io-lifetimes@2.0.4 io-lifetimes@3.0.1 iovec@0.1.4 ipc-channel@0.19.0 ipnet@2.11.0 is-docker@0.2.0 is-terminal@0.4.16 is-wsl@0.4.0 is_executable@1.0.5 is_terminal_polyfill@1.70.1 itertools@0.10.5 itertools@0.13.0 itertools@0.14.0 itertools@0.15.0 itoa@1.0.18 jiff-static@0.2.15 jiff-tzdb-platform@0.1.3 jiff-tzdb@0.1.8 jiff@0.2.15 jni-macros@0.22.4 jni-sys-macros@0.4.1 jni-sys@0.3.0 jni-sys@0.4.1 jni@0.21.1 jni@0.22.4 jobserver@0.1.34 js-sys@0.3.106 json5@1.3.1 jsonschema-regex@0.51.0 jsonschema-value@0.51.0 jsonschema@0.51.0 jsonwebtoken@10.3.0 jupyter-protocol@1.4.0 jupyter-websocket-client@1.1.0 khronos_api@3.1.0 kqueue-sys@1.1.2 kqueue@1.2.0 kurbo@0.13.1 kv-log-macro@1.0.7 lalrpop-util@0.23.1 lazy_static@1.5.0 leb128@0.2.5 leb128fmt@0.1.0 lebe@0.5.3 libbz2-rs-sys@0.2.2 libc@0.2.186 libdbus-sys@0.2.6 libflate@2.3.1 libflate_lz77@2.3.0 libfuzzer-sys@0.4.10 libloading@0.8.9 libm@0.2.16 libmimalloc-sys@0.1.44 libredox@0.1.10 libsqlite3-sys@0.30.1 linebender_resource_handle@0.1.1 link-cplusplus@1.0.12 link-section@0.19.2 linkify@0.10.0 linktime-proc-macro@0.2.2 linux-raw-sys@0.12.1 litemap@0.8.0 litrs@1.0.0 lmdb-master-sys@0.2.5 lock_api@0.4.14 log@0.4.29 logos-codegen@0.15.1 logos-codegen@0.16.1 logos-derive@0.15.1 logos-derive@0.16.1 logos@0.15.1 logos@0.16.1 lol_html@3.0.1 longest-increasing-subsequence@0.1.0 loom@0.7.2 loop9@0.1.5 lru-slab@0.1.2 lru@0.16.4 lyon@1.0.16 lyon_algorithms@1.0.16 lyon_extra@1.0.3 lyon_geom@1.0.17 lyon_path@1.0.16 lyon_tessellation@1.0.16 mac-notification-sys@0.6.15 mach2@0.6.0 macro_rules_attribute-proc_macro@0.2.3 macro_rules_attribute@0.2.3 manatee@0.8.0-alpha.5 maplit@1.0.2 markup5ever@0.39.0 markup5ever_rcdom@0.39.0+unofficial matchers@0.2.0 matchit@0.7.3 maybe-owned@0.3.4 maybe-rayon@0.1.1 md-5@0.10.6 mdbook@0.4.40 memchr@2.8.3 memfd@0.6.5 memmap2@0.9.11 memoffset@0.9.1 merge@0.1.0 merge_derive@0.1.0 merman-core@0.8.0-alpha.5 merman-render@0.8.0-alpha.5 merman@0.8.0-alpha.5 micromap@0.3.0 miette-derive@7.6.0 miette@7.6.0 mimalloc@0.1.48 mime@0.3.17 mime_guess@2.0.5 minidump-common@0.26.1 minidump-writer@0.13.0 minidumper@0.11.0 minimal-lexical@0.2.1 miniz_oxide@0.8.9 mio@1.2.0 miow@0.6.1 moka@0.12.11 moxcms@0.8.1 msvc_spectre_libs@0.1.3 multimap@0.8.3 nanoid@0.4.0 native-tls@0.2.18 nbformat@1.2.0 ndk-context@0.1.1 ndk-sys@0.6.0+11769913 ndk@0.9.0 nested@0.1.1 new_debug_unreachable@1.0.6 nix@0.30.1 nix@0.31.3 no_std_io2@0.9.4 nom@7.1.3 nom@8.0.0 noop_proc_macro@0.3.0 normpath@1.5.0 notify-rust@4.18.0 ntapi@0.4.1 nu-ansi-term@0.50.3 nucleo-matcher@0.3.1 num-bigint-dig@0.8.6 num-bigint-dig@0.9.1 num-bigint@0.4.8 num-cmp@0.1.0 num-complex@0.4.6 num-conv@0.2.0 num-derive@0.4.2 num-integer@0.1.46 num-iter@0.1.45 num-rational@0.4.2 num-traits@0.2.19 num@0.4.3 num_cpus@1.17.0 num_enum@0.7.4 num_enum_derive@0.7.4 num_threads@0.1.7 objc-sys@0.3.5 objc2-app-kit@0.2.2 objc2-app-kit@0.3.2 objc2-audio-toolbox@0.3.2 objc2-avf-audio@0.3.2 objc2-core-audio-types@0.3.2 objc2-core-audio@0.3.2 objc2-core-data@0.2.2 objc2-core-foundation@0.3.2 objc2-core-graphics@0.3.2 objc2-core-image@0.2.2 objc2-core-media@0.3.2 objc2-core-services@0.3.2 objc2-core-text@0.3.2 objc2-core-video@0.3.2 objc2-encode@4.1.0 objc2-foundation@0.2.2 objc2-foundation@0.3.2 objc2-io-kit@0.3.2 objc2-io-surface@0.3.2 objc2-metal@0.2.2 objc2-metal@0.3.2 objc2-quartz-core@0.2.2 objc2-quartz-core@0.3.2 objc2-screen-capture-kit@0.3.2 objc2-security@0.3.2 objc2-ui-kit@0.3.2 objc2-uniform-type-identifiers@0.3.2 objc2-user-notifications@0.3.2 objc2@0.5.2 objc2@0.6.3 object@0.37.3 object@0.39.1 octocrab@0.49.7 once_cell@1.21.4 once_cell_polyfill@1.70.1 oorandom@11.1.5 open@5.3.2 opener@0.7.2 openssl-macros@0.1.1 openssl-probe@0.2.1 openssl-sys@0.9.117 openssl@0.10.81 optfield@0.4.0 option-ext@0.2.0 ordered-float@4.6.0 ordered-float@5.5.0 ordered-stream@0.2.0 ouroboros@0.18.5 ouroboros_macro@0.18.5 outref@0.5.2 p256@0.11.1 page_size@0.6.0 palette@0.7.6 palette_derive@0.7.6 parking@2.2.1 parking_lot@0.12.5 parking_lot_core@0.9.12 parse_int@0.9.0 partial-json-fixer@0.5.3 paste@1.0.15 pastey@0.1.1 pastey@0.2.3 pathdiff@0.2.3 pathfinder_geometry@0.5.1 pathfinder_simd@0.5.6 pbjson-build@0.9.0 pbjson-types@0.9.0 pbjson@0.9.0 pbkdf2@0.12.2 pciid-parser@0.8.0 peg-macros@0.8.5 peg-runtime@0.8.5 peg@0.8.5 pem-rfc7468@0.7.0 pem@3.0.6 percent-encoding@2.3.2 perf-event-data@0.1.8 perf-event-open-sys2@5.0.6 perf-event2@0.7.4 pest@2.8.3 pest_derive@2.8.3 pest_generator@2.8.3 pest_meta@2.8.3 petgraph@0.8.3 pgvector@0.4.1 phf@0.11.3 phf@0.13.1 phf_codegen@0.13.1 phf_generator@0.11.3 phf_generator@0.13.1 phf_macros@0.11.3 phf_macros@0.13.1 phf_shared@0.11.3 phf_shared@0.13.1 pico-args@0.5.0 pin-project-internal@1.1.10 pin-project-lite@0.2.16 pin-project@1.1.10 pin-utils@0.1.0 piper@0.2.4 pkcs1@0.7.5 pkcs8@0.10.2 pkcs8@0.9.0 pkg-config@0.3.32 plain@0.2.3 plist@1.10.0 plotters-backend@0.3.7 plotters-svg@0.3.7 plotters@0.3.7 png@0.17.16 png@0.18.0 polling@3.11.0 pollster@0.2.5 pollster@0.4.0 polycool@0.4.0 pori@0.0.0 portable-atomic-util@0.2.4 portable-atomic@1.11.1 postage@0.5.0 postcard@1.1.3 potential_utf@0.1.3 powerfmt@0.2.0 ppv-lite86@0.2.21 precomputed-hash@0.1.1 presser@0.3.1 pretty_assertions@1.4.1 prettyplease@0.2.37 proc-macro-crate@3.4.0 proc-macro-error-attr3@3.1.1 proc-macro-error-attr@1.0.4 proc-macro-error3@3.1.1 proc-macro-error@1.0.4 proc-macro2-diagnostics@0.10.1 proc-macro2@1.0.107 process-backend@0.1.0 process-reader@0.1.0 procfs-core@0.18.0 profiling-procmacros@1.0.17 profiling@1.0.17 prometheus@0.14.0 proptest-derive@0.8.0 proptest-macro@0.6.0 proptest@1.12.0 prost-build@0.14.4 prost-derive@0.14.4 prost-reflect@0.16.5 prost-types@0.14.4 prost@0.14.4 protobuf-support@3.7.2 protobuf@3.7.2 protox-parse@0.9.0 protox@0.9.1 proxyvars@0.2.0 psm@0.1.30 pulldown-cmark-escape@0.10.1 pulldown-cmark@0.10.3 pulldown-cmark@0.13.4 pulley-interpreter@48.0.7 pulley-macros@48.0.7 pxfm@0.1.25 qoi@0.4.1 quick-error@1.2.3 quick-error@2.0.1 quick-xml@0.30.0 quick-xml@0.37.5 quick-xml@0.39.3 quick-xml@0.41.0 quinn-proto@0.11.18 quinn-udp@0.5.14 quinn@0.11.9 quote@1.0.47 r-efi@5.3.0 rand@0.10.2 rand@0.3.23 rand@0.4.6 rand@0.8.6 rand@0.9.4 rand_chacha@0.3.1 rand_chacha@0.9.0 rand_core@0.10.1 rand_core@0.3.1 rand_core@0.4.2 rand_core@0.6.4 rand_core@0.9.3 rand_pcg@0.10.2 rand_pcg@0.3.1 rand_xorshift@0.5.0 random_choice@0.3.2 range-alloc@0.1.4 range-map@0.2.0 rangemap@1.7.1 rav1e@0.8.1 ravif@0.13.0 raw-window-handle@0.6.2 raw-window-metal@1.1.0 rayon-core@1.13.0 rayon@1.11.0 rdrand@0.4.0 read-fonts@0.35.0 read-fonts@0.37.0 redox_syscall@0.5.18 redox_syscall@0.7.5 redox_users@0.5.2 ref-cast-impl@1.0.25 ref-cast@1.0.25 referencing@0.51.0 regalloc2@0.15.2 regex-automata@0.4.18 regex-lite@0.1.8 regex-syntax@0.8.11 regex@1.12.3 renderdoc-sys@1.1.0 reqwest@0.11.27 reqwest@0.12.24 resvg@0.46.0 rfc6979@0.3.1 rgb@0.8.52 ring@0.17.14 rle-decode-fast@1.0.3 rmp@0.8.14 rmpv@1.3.0 roughr-merman@0.12.3 roxmltree@0.20.0 roxmltree@0.21.1 rpassword@7.5.2 rsa@0.9.10 rtoolbox@0.0.3 rtrb@0.3.5 runtimelib@1.4.0 rust-embed-impl@8.11.0 rust-embed-utils@8.11.0 rust-embed@8.11.0 rust_decimal@1.39.0 rustc-demangle@0.1.26 rustc-hash@1.1.0 rustc-hash@2.1.1 rustc_version@0.4.1 rustix-linux-procfs@0.1.1 rustix-openpty@0.2.0 rustix@1.1.4 rustls-native-certs@0.8.3 rustls-pemfile@1.0.4 rustls-pemfile@2.2.0 rustls-pki-types@1.12.0 rustls-platform-verifier-android@0.1.1 rustls-platform-verifier@0.7.0 rustls-webpki@0.103.16 rustls@0.23.46 rustversion@1.0.22 rusty-fork@0.3.1 rustybuzz@0.20.1 ryu-js@1.0.2 ryu@1.0.23 saa@5.4.9 same-file@1.0.6 scc@3.5.6 schannel@0.1.28 schemars@0.9.0 schemars@1.0.4 schemars_derive@1.0.4 scoped-tls@1.0.1 scopeguard@1.2.0 scroll@0.12.0 scroll_derive@0.12.1 sdd@4.6.2 sea-bae@0.2.2 sea-orm-macros@1.1.10 sea-orm@1.1.10 sea-query-binder@0.7.0 sea-query@0.32.7 seahash@4.1.0 sec1@0.3.0 seccompiler@0.5.0 secrecy@0.10.3 security-framework-sys@2.15.0 security-framework@3.5.1 selectors@0.37.0 self_cell@1.2.2 semver@1.0.28 send_wrapper@0.6.0 serde@1.0.229 serde_bytes@0.11.19 serde_core@1.0.229 serde_derive@1.0.229 serde_derive_internals@0.29.1 serde_fmt@1.0.3 serde_json@1.0.151 serde_json_lenient@0.2.4 serde_path_to_error@0.1.20 serde_repr@0.1.20 serde_spanned@0.6.9 serde_spanned@1.0.3 serde_urlencoded@0.7.1 serde_with@3.22.0 serde_with_macros@3.22.0 serde_yaml@0.9.34+deprecated serde_yaml_ng@0.10.0 servo_arc@0.4.3 sha-1@0.10.1 sha1@0.10.6 sha1_smol@1.0.1 sha2@0.10.9 sharded-slab@0.1.7 shell-words@1.1.0 shellexpand@3.1.1 shingles@0.1.1 shlex@1.3.0 shlex@2.0.1 signal-hook-registry@1.4.6 signal-hook@0.4.4 signature@1.6.4 signature@2.2.0 simd-adler32@0.3.7 simd_cesu8@1.2.0 simd_helpers@0.1.0 simdutf8@0.1.5 similar@2.7.0 simple_asn1@0.6.3 simplecss@0.2.2 simplelog@0.12.2 siphasher@0.3.11 siphasher@1.0.1 skrifa@0.37.0 skrifa@0.40.0 slab@0.4.11 slotmap@1.0.7 smallvec@1.16.1 smart-default@0.7.1 smol@2.0.2 smol_str@0.3.6 snafu-derive@0.8.9 snafu@0.8.9 socket2@0.5.10 socket2@0.6.5 spdx@0.10.9 spin@0.10.0 spin@0.9.8 spirv@0.4.0+sdk-1.4.341.0 spki@0.6.0 spki@0.7.3 sqlformat@0.2.6 sqlx-core@0.8.6 sqlx-macros-core@0.8.6 sqlx-macros@0.8.6 sqlx-mysql@0.8.6 sqlx-postgres@0.8.6 sqlx-sqlite@0.8.6 sqlx@0.8.6 stable_deref_trait@1.2.1 stacker@0.1.25 stacksafe-macro@1.0.3 stacksafe@1.0.3 static_assertions@1.1.0 streaming-iterator@0.1.9 strict-num@0.1.1 string_cache@0.9.0 string_cache_codegen@0.6.1 stringprep@0.1.5 strsim@0.11.1 strum@0.26.3 strum@0.28.0 strum_macros@0.27.2 strum_macros@0.28.0 subsecond-types@0.7.10 subsecond@0.7.10 subtle@2.6.1 sval@2.15.0 sval_buffer@2.15.0 sval_dynamic@2.15.0 sval_fmt@2.15.0 sval_json@2.15.0 sval_nested@2.15.0 sval_ref@2.15.0 sval_serde@2.15.0 svg_fmt@0.4.5 svgtypes@0.16.1 swash@0.2.6 symphonia-codec-pcm@0.5.5 symphonia-core@0.5.5 symphonia-format-riff@0.5.5 symphonia-metadata@0.5.5 symphonia@0.5.5 syn@1.0.109 syn@2.0.117 syn@3.0.3 sync_wrapper@0.1.2 sync_wrapper@1.0.2 synchronoise@1.0.1 synstructure@0.13.2 sys-locale@0.3.2 sysinfo@0.31.4 sysinfo@0.39.6 system-configuration-sys@0.5.0 system-configuration-sys@0.6.0 system-configuration@0.5.1 system-configuration@0.8.0 system-deps@7.0.7 taffy@0.15.0 tagptr@0.2.0 target-lexicon@0.13.5 target-spec@3.7.0 tauri-winrt-notification@0.7.3 tempfile@3.27.0 tendril@0.5.1 termcolor@1.4.1 terminal_size@0.4.3 thiserror-impl@1.0.69 thiserror-impl@2.0.17 thiserror@1.0.69 thiserror@2.0.17 thread_local@1.1.9 tiff@0.11.3 time-core@0.1.8 time-macros@0.2.27 time@0.3.47 tiny-keccak@2.0.2 tiny-skia-path@0.11.4 tiny-skia@0.11.4 tiny_http@0.12.0 tinystr@0.8.4 tinytemplate@1.2.1 tinyvec@1.10.0 tinyvec_macros@0.1.1 tokio-io@0.1.13 tokio-macros@2.7.0 tokio-native-tls@0.3.1 tokio-rustls@0.26.4 tokio-socks@0.5.2 tokio-stream@0.1.17 tokio-tungstenite@0.20.1 tokio-tungstenite@0.28.0 tokio-util@0.7.18 tokio@1.52.1 toml@0.5.11 toml@0.8.23 toml@0.9.8 toml_datetime@0.6.11 toml_datetime@0.7.3 toml_edit@0.22.27 toml_edit@0.23.7 toml_parser@1.0.4 toml_write@0.1.2 toml_writer@1.0.4 topological-sort@0.2.2 tower-http@0.4.4 tower-http@0.6.11 tower-layer@0.3.3 tower-service@0.3.3 tower@0.4.13 tower@0.5.2 tracing-attributes@0.1.31 tracing-core@0.1.36 tracing-log@0.2.0 tracing-serde@0.2.0 tracing-subscriber@0.3.22 tracing-tracy@0.11.4 tracing@0.1.44 tracy-client-sys@0.27.0 tracy-client@0.18.3 tree-sitter-bash@0.25.1 tree-sitter-c@0.24.1 tree-sitter-css@0.23.2 tree-sitter-diff@0.1.0 tree-sitter-elixir@0.3.4 tree-sitter-embedded-template@0.23.2 tree-sitter-html@0.23.2 tree-sitter-jsdoc@0.23.2 tree-sitter-json@0.24.8 tree-sitter-python@0.25.0 tree-sitter-regex@0.24.3 tree-sitter-ruby@0.23.1 tree-sitter-rust@0.24.2 triomphe@0.1.15 try-lock@0.2.5 ttf-parser@0.25.1 tungstenite@0.20.1 tungstenite@0.28.0 typed-path@0.13.0 typeid@1.0.3 typenum@1.19.0 ucd-trie@0.1.7 uds@0.4.2 uds_windows@1.1.0 unarray@0.1.4 unicase@2.8.1 unicode-bidi-mirroring@0.4.0 unicode-bidi@0.3.18 unicode-ccc@0.4.0 unicode-general-category@1.1.0 unicode-ident@1.0.24 unicode-linebreak@0.1.5 unicode-normalization@0.1.25 unicode-properties@0.1.3 unicode-script@0.5.8 unicode-segmentation@1.13.3 unicode-vo@0.1.0 unicode-width@0.1.14 unicode-width@0.2.2 unicode-xid@0.2.6 unicode_categories@0.1.1 unindent@0.2.4 unsafe-libyaml@0.2.11 untrusted@0.7.1 untrusted@0.9.0 url@2.5.7 urlencoding@2.1.3 usvg@0.46.0 utf-8@0.7.6 utf16_iter@1.0.5 utf8-chars@3.0.6 utf8_iter@1.0.4 utf8parse@0.2.2 uuid-simd@0.8.0 uuid@1.18.1 v_frame@0.3.9 valuable@0.1.1 value-bag-serde1@1.12.0 value-bag-sval2@1.12.0 value-bag@1.12.0 vcpkg@0.2.15 version-compare@0.2.0 version_check@0.9.5 vscode_theme@0.2.0 vsimd@0.8.0 vswhom-sys@0.1.3 vswhom@0.1.0 vte@0.15.0 wait-timeout@0.2.1 waker-fn@1.2.0 walkdir@2.5.0 want@0.3.1 wasi@0.11.1+wasi-snapshot-preview1 wasip2@1.0.1+wasi-0.2.4 wasip3@0.4.0+wasi-0.3.0-rc-2026-01-06 wasite@0.1.0 wasm-bindgen-futures@0.4.79 wasm-bindgen-macro-support@0.2.129 wasm-bindgen-macro@0.2.129 wasm-bindgen-shared@0.2.129 wasm-bindgen@0.2.129 wasm-encoder@0.201.0 wasm-encoder@0.227.1 wasm-encoder@0.244.0 wasm-encoder@0.254.2 wasm-metadata@0.201.0 wasm-metadata@0.227.1 wasm-metadata@0.244.0 wasm-metadata@0.254.2 wasm-streams@0.4.2 wasmparser@0.201.0 wasmparser@0.227.1 wasmparser@0.244.0 wasmparser@0.254.2 wasmprinter@0.254.2 wasmtime-c-api-impl@48.0.7 wasmtime-environ@48.0.7 wasmtime-internal-c-api-macros@48.0.7 wasmtime-internal-component-macro@48.0.7 wasmtime-internal-component-util@48.0.7 wasmtime-internal-core@48.0.7 wasmtime-internal-cranelift@48.0.7 wasmtime-internal-fiber@48.0.7 wasmtime-internal-jit-debug@48.0.7 wasmtime-internal-jit-icache-coherence@48.0.7 wasmtime-internal-unwinder@48.0.7 wasmtime-internal-versioned-export-macros@48.0.7 wasmtime-internal-wit-bindgen@48.0.7 wasmtime-wasi-io@48.0.7 wasmtime-wasi@48.0.7 wasmtime@48.0.7 wax@0.7.0 wayland-backend@0.3.15 wayland-client@0.31.11 wayland-cursor@0.31.11 wayland-protocols-plasma@0.3.9 wayland-protocols-wlr@0.3.9 wayland-protocols@0.32.9 wayland-scanner@0.31.7 wayland-sys@0.31.11 web-sys@0.3.106 web-time@1.1.0 web_atoms@0.2.6 webpki-root-certs@1.0.10 webpki-roots@0.26.11 webpki-roots@1.0.10 weezl@0.1.10 which@8.0.5 whisper-rs-sys@0.15.0 whisper-rs@0.16.0 whoami@1.6.1 winapi-i686-pc-windows-gnu@0.4.0 winapi-util@0.1.11 winapi-x86_64-pc-windows-gnu@0.4.0 winapi@0.3.9 windows-bindgen@0.61.1 windows-collections@0.2.0 windows-collections@0.3.2 windows-core@0.56.0 windows-core@0.57.0 windows-core@0.58.0 windows-core@0.61.2 windows-core@0.62.2 windows-future@0.2.1 windows-future@0.3.2 windows-implement@0.56.0 windows-implement@0.57.0 windows-implement@0.58.0 windows-implement@0.60.2 windows-interface@0.56.0 windows-interface@0.57.0 windows-interface@0.58.0 windows-interface@0.59.3 windows-link@0.1.3 windows-link@0.2.1 windows-numerics@0.2.0 windows-numerics@0.3.1 windows-registry@0.4.0 windows-registry@0.6.1 windows-result@0.1.2 windows-result@0.2.0 windows-result@0.3.4 windows-result@0.4.1 windows-strings@0.1.0 windows-strings@0.3.1 windows-strings@0.4.2 windows-strings@0.5.1 windows-sys@0.45.0 windows-sys@0.48.0 windows-sys@0.52.0 windows-sys@0.59.0 windows-sys@0.60.2 windows-sys@0.61.2 windows-targets@0.42.2 windows-targets@0.48.5 windows-targets@0.52.6 windows-targets@0.53.5 windows-threading@0.1.0 windows-threading@0.2.1 windows-version@0.1.7 windows@0.56.0 windows@0.57.0 windows@0.58.0 windows@0.61.3 windows@0.62.2 windows_aarch64_gnullvm@0.42.2 windows_aarch64_gnullvm@0.48.5 windows_aarch64_gnullvm@0.52.6 windows_aarch64_gnullvm@0.53.1 windows_aarch64_msvc@0.42.2 windows_aarch64_msvc@0.48.5 windows_aarch64_msvc@0.52.6 windows_aarch64_msvc@0.53.1 windows_i686_gnu@0.42.2 windows_i686_gnu@0.48.5 windows_i686_gnu@0.52.6 windows_i686_gnu@0.53.1 windows_i686_gnullvm@0.52.6 windows_i686_gnullvm@0.53.1 windows_i686_msvc@0.42.2 windows_i686_msvc@0.48.5 windows_i686_msvc@0.52.6 windows_i686_msvc@0.53.1 windows_x86_64_gnu@0.42.2 windows_x86_64_gnu@0.48.5 windows_x86_64_gnu@0.52.6 windows_x86_64_gnu@0.53.1 windows_x86_64_gnullvm@0.42.2 windows_x86_64_gnullvm@0.48.5 windows_x86_64_gnullvm@0.52.6 windows_x86_64_gnullvm@0.53.1 windows_x86_64_msvc@0.42.2 windows_x86_64_msvc@0.48.5 windows_x86_64_msvc@0.52.6 windows_x86_64_msvc@0.53.1 winnow@0.7.13 winnow@1.0.2 winreg@0.50.0 winreg@0.55.0 winresource@0.1.23 winx@0.36.4 wio@0.2.2 wit-bindgen-core@0.22.0 wit-bindgen-core@0.41.0 wit-bindgen-core@0.51.0 wit-bindgen-rt@0.22.0 wit-bindgen-rt@0.41.0 wit-bindgen-rust-macro@0.22.0 wit-bindgen-rust-macro@0.41.0 wit-bindgen-rust-macro@0.51.0 wit-bindgen-rust@0.22.0 wit-bindgen-rust@0.41.0 wit-bindgen-rust@0.51.0 wit-bindgen@0.22.0 wit-bindgen@0.41.0 wit-bindgen@0.46.0 wit-bindgen@0.51.0 wit-component@0.201.0 wit-component@0.227.1 wit-component@0.244.0 wit-component@0.254.2 wit-parser@0.201.0 wit-parser@0.227.1 wit-parser@0.244.0 wit-parser@0.254.2 write16@1.0.0 writeable@0.6.4 x11@2.21.0 x11rb-protocol@0.13.2 x11rb@0.13.2 xattr@1.6.1 xcb@1.6.0 xcursor@0.3.10 xkbcommon@0.8.0 xkeysym@0.2.1 xml-rs@0.8.28 xml5ever@0.39.0 xmlparser@0.13.6 xmlwriter@0.1.0 xxhash-rust@0.8.16 y4m@0.8.0 yaml-rust2@0.8.1 yansi@1.0.1 yawc@0.4.2 yazi@0.2.1 yeslogic-fontconfig-sys@6.0.0 yoke-derive@0.8.2 yoke@0.8.3 zbus-lockstep-macros@0.5.2 zbus-lockstep@0.5.2 zbus@5.13.2 zbus_macros@5.13.2 zbus_names@4.3.2 zbus_xml@5.1.1 zed_extension_api@0.1.0 zed_extension_api@0.7.0 zeno@0.3.3 zerocopy-derive@0.8.27 zerocopy@0.8.27 zerofrom-derive@0.1.6 zerofrom@0.1.6 zeroize@1.8.2 zeroize_derive@1.4.2 zeromq@0.5.0 zerotrie@0.2.5 zerovec-derive@0.11.5 zerovec@0.11.8 zip@9.1.3 zlib-rs@0.5.5 zmij@1.0.23 zstd-safe@7.3.0 zstd-sys@2.0.16+zstd.1.5.7 zstd@0.13.3 zune-core@0.5.1 zune-inflate@0.2.54 zune-jpeg@0.5.15 zvariant@5.11.0 zvariant_derive@5.11.0 zvariant_utils@3.3.1 " declare -A GIT_CRATES=( [alacritty_terminal]='https://github.com/zed-industries/alacritty;4c129667ce56611becdc82de6e28218c80e2e88f;alacritty-%commit%/alacritty_terminal' [async-pipe]='https://github.com/zed-industries/async-pipe-rs;82d00a04211cf4e1236029aa03e6b6ce2a74c553;async-pipe-rs-%commit%' [async-process]='https://github.com/zed-industries/async-process;0b6d6713570af61806e1e5cb40e0f757cb93fd9d;async-process-%commit%' [async-tar]='https://github.com/zed-industries/async-tar;bd3ad6f89df9a9da7a8535958756d6bf465936a0;async-tar-%commit%' [async-task]='https://github.com/zed-industries/async-task;015845a19fc31752c02367567d3b8900a406f9da;async-task-%commit%' [calloop]='https://github.com/zed-industries/calloop;3759371fee14c40066d64777e2a36b6ffcc22590;calloop-%commit%' [cpal]='https://github.com/RustAudio/cpal;e1612d5d98152f8dc2a62e1b51ef7cbf4f7f26b7;cpal-%commit%' [crash-context]='https://github.com/rust-minidump/minidump-writer;911b04e09b79b736cc15cbe712e83e2d3f348bb9;minidump-writer-%commit%/crates/crash-context' [dap-types]='https://github.com/zed-industries/dap-types;1b461b310481d01e02b2603c16d7144b926339f8;dap-types-%commit%/dap-types' [gh-workflow-macros]='https://github.com/zed-industries/gh-workflow;37f3c0575d379c218a9c455ee67585184e40d43f;gh-workflow-%commit%/crates/gh-workflow-macros' [gh-workflow]='https://github.com/zed-industries/gh-workflow;37f3c0575d379c218a9c455ee67585184e40d43f;gh-workflow-%commit%/crates/gh-workflow' [khronos-egl]='https://github.com/zed-industries/khronos-egl;42214b36347b108fd9630ca6254b96dde59e04fe;khronos-egl-%commit%' [libwebrtc]='https://github.com/zed-industries/livekit-rust-sdks;fbda05eb278b4a7c5be8fc9b2a92e9b62e732236;livekit-rust-sdks-%commit%/libwebrtc' [livekit-api]='https://github.com/zed-industries/livekit-rust-sdks;fbda05eb278b4a7c5be8fc9b2a92e9b62e732236;livekit-rust-sdks-%commit%/livekit-api' [livekit-protocol]='https://github.com/zed-industries/livekit-rust-sdks;fbda05eb278b4a7c5be8fc9b2a92e9b62e732236;livekit-rust-sdks-%commit%/livekit-protocol' [livekit-runtime]='https://github.com/zed-industries/livekit-rust-sdks;fbda05eb278b4a7c5be8fc9b2a92e9b62e732236;livekit-rust-sdks-%commit%/livekit-runtime' [livekit]='https://github.com/zed-industries/livekit-rust-sdks;fbda05eb278b4a7c5be8fc9b2a92e9b62e732236;livekit-rust-sdks-%commit%/livekit' [lsp-types]='https://github.com/zed-industries/lsp-types;82d7fc66ebdfabcfeb26ba16bbed9f3d26211fc3;lsp-types-%commit%' [naga-types]='https://github.com/gfx-rs/wgpu;cddb2f5d80dc0009b2ef6767635140cacf90a007;wgpu-%commit%/naga-types' [naga]='https://github.com/gfx-rs/wgpu;cddb2f5d80dc0009b2ef6767635140cacf90a007;wgpu-%commit%/naga' [notify-types]='https://github.com/zed-industries/notify;d842f16b2716bd60f09caf3ae3a894237ab38f54;notify-%commit%/notify-types' [notify]='https://github.com/zed-industries/notify;d842f16b2716bd60f09caf3ae3a894237ab38f54;notify-%commit%/notify' [nvim-rs]='https://github.com/KillTheMule/nvim-rs;764dd270c642f77f10f3e19d05cc178a6cbe69f3;nvim-rs-%commit%' [oo7]='https://github.com/zed-industries/oo7;731c1215edb6905876c6137ab300428c7b8d7c13;oo7-%commit%/client' [pet-conda]='https://github.com/zed-industries/python-environment-tools;5aad7164bfc2a58977b103c8ef8fdd7302ed2e9f;python-environment-tools-%commit%/crates/pet-conda' [pet-core]='https://github.com/zed-industries/python-environment-tools;5aad7164bfc2a58977b103c8ef8fdd7302ed2e9f;python-environment-tools-%commit%/crates/pet-core' [pet-env-var-path]='https://github.com/zed-industries/python-environment-tools;5aad7164bfc2a58977b103c8ef8fdd7302ed2e9f;python-environment-tools-%commit%/crates/pet-env-var-path' [pet-fs]='https://github.com/zed-industries/python-environment-tools;5aad7164bfc2a58977b103c8ef8fdd7302ed2e9f;python-environment-tools-%commit%/crates/pet-fs' [pet-global-virtualenvs]='https://github.com/zed-industries/python-environment-tools;5aad7164bfc2a58977b103c8ef8fdd7302ed2e9f;python-environment-tools-%commit%/crates/pet-global-virtualenvs' [pet-hatch]='https://github.com/zed-industries/python-environment-tools;5aad7164bfc2a58977b103c8ef8fdd7302ed2e9f;python-environment-tools-%commit%/crates/pet-hatch' [pet-homebrew]='https://github.com/zed-industries/python-environment-tools;5aad7164bfc2a58977b103c8ef8fdd7302ed2e9f;python-environment-tools-%commit%/crates/pet-homebrew' [pet-jsonrpc]='https://github.com/zed-industries/python-environment-tools;5aad7164bfc2a58977b103c8ef8fdd7302ed2e9f;python-environment-tools-%commit%/crates/pet-jsonrpc' [pet-linux-global-python]='https://github.com/zed-industries/python-environment-tools;5aad7164bfc2a58977b103c8ef8fdd7302ed2e9f;python-environment-tools-%commit%/crates/pet-linux-global-python' [pet-mac-commandlinetools]='https://github.com/zed-industries/python-environment-tools;5aad7164bfc2a58977b103c8ef8fdd7302ed2e9f;python-environment-tools-%commit%/crates/pet-mac-commandlinetools' [pet-mac-python-org]='https://github.com/zed-industries/python-environment-tools;5aad7164bfc2a58977b103c8ef8fdd7302ed2e9f;python-environment-tools-%commit%/crates/pet-mac-python-org' [pet-mac-xcode]='https://github.com/zed-industries/python-environment-tools;5aad7164bfc2a58977b103c8ef8fdd7302ed2e9f;python-environment-tools-%commit%/crates/pet-mac-xcode' [pet-pipenv]='https://github.com/zed-industries/python-environment-tools;5aad7164bfc2a58977b103c8ef8fdd7302ed2e9f;python-environment-tools-%commit%/crates/pet-pipenv' [pet-pixi]='https://github.com/zed-industries/python-environment-tools;5aad7164bfc2a58977b103c8ef8fdd7302ed2e9f;python-environment-tools-%commit%/crates/pet-pixi' [pet-poetry]='https://github.com/zed-industries/python-environment-tools;5aad7164bfc2a58977b103c8ef8fdd7302ed2e9f;python-environment-tools-%commit%/crates/pet-poetry' [pet-pyenv]='https://github.com/zed-industries/python-environment-tools;5aad7164bfc2a58977b103c8ef8fdd7302ed2e9f;python-environment-tools-%commit%/crates/pet-pyenv' [pet-python-utils]='https://github.com/zed-industries/python-environment-tools;5aad7164bfc2a58977b103c8ef8fdd7302ed2e9f;python-environment-tools-%commit%/crates/pet-python-utils' [pet-reporter]='https://github.com/zed-industries/python-environment-tools;5aad7164bfc2a58977b103c8ef8fdd7302ed2e9f;python-environment-tools-%commit%/crates/pet-reporter' [pet-telemetry]='https://github.com/zed-industries/python-environment-tools;5aad7164bfc2a58977b103c8ef8fdd7302ed2e9f;python-environment-tools-%commit%/crates/pet-telemetry' [pet-uv]='https://github.com/zed-industries/python-environment-tools;5aad7164bfc2a58977b103c8ef8fdd7302ed2e9f;python-environment-tools-%commit%/crates/pet-uv' [pet-venv]='https://github.com/zed-industries/python-environment-tools;5aad7164bfc2a58977b103c8ef8fdd7302ed2e9f;python-environment-tools-%commit%/crates/pet-venv' [pet-virtualenv]='https://github.com/zed-industries/python-environment-tools;5aad7164bfc2a58977b103c8ef8fdd7302ed2e9f;python-environment-tools-%commit%/crates/pet-virtualenv' [pet-virtualenvwrapper]='https://github.com/zed-industries/python-environment-tools;5aad7164bfc2a58977b103c8ef8fdd7302ed2e9f;python-environment-tools-%commit%/crates/pet-virtualenvwrapper' [pet-windows-registry]='https://github.com/zed-industries/python-environment-tools;5aad7164bfc2a58977b103c8ef8fdd7302ed2e9f;python-environment-tools-%commit%/crates/pet-windows-registry' [pet-windows-store]='https://github.com/zed-industries/python-environment-tools;5aad7164bfc2a58977b103c8ef8fdd7302ed2e9f;python-environment-tools-%commit%/crates/pet-windows-store' [pet-winpython]='https://github.com/zed-industries/python-environment-tools;5aad7164bfc2a58977b103c8ef8fdd7302ed2e9f;python-environment-tools-%commit%/crates/pet-winpython' [pet]='https://github.com/zed-industries/python-environment-tools;5aad7164bfc2a58977b103c8ef8fdd7302ed2e9f;python-environment-tools-%commit%/crates/pet' [rodio]='https://github.com/RustAudio/rodio;3ee9745862279ce1d18db593155016e7ce024aeb;rodio-%commit%' [trash]='https://github.com/zed-industries/trash-rs;41c6c800d884a89351f3b8856d12894cccee261d;trash-rs-%commit%' [tree-sitter-cpp]='https://github.com/tree-sitter/tree-sitter-cpp;5cb9b693cfd7bfacab1d9ff4acac1a4150700609;tree-sitter-cpp-%commit%' [tree-sitter-gitcommit]='https://github.com/zed-industries/tree-sitter-git-commit;88309716a69dd13ab83443721ba6e0b491d37ee9;tree-sitter-git-commit-%commit%' [tree-sitter-go]='https://github.com/zed-industries/tree-sitter-go;6862a49e3c5a7567a6c576420e9a8f944e198a85;tree-sitter-go-%commit%' [tree-sitter-gomod]='https://github.com/camdencheek/tree-sitter-go-mod;2e886870578eeba1927a2dc4bd2e2b3f598c5f9a;tree-sitter-go-mod-%commit%' [tree-sitter-gowork]='https://github.com/zed-industries/tree-sitter-go-work;acb0617bf7f4fda02c6217676cc64acb89536dc7;tree-sitter-go-work-%commit%' [tree-sitter-heex]='https://github.com/zed-industries/tree-sitter-heex;1dd45142fbb05562e35b2040c6129c9bca346592;tree-sitter-heex-%commit%' [tree-sitter-language]='https://github.com/tree-sitter/tree-sitter;803c6ebaac27d69e1808b45058482e868d073ceb;tree-sitter-%commit%/crates/language' [tree-sitter-md]='https://github.com/zed-industries/tree-sitter-markdown;b596e737286780d7bfa9fcddceaeeb754574b352;tree-sitter-markdown-%commit%' [tree-sitter-typescript]='https://github.com/zed-industries/tree-sitter-typescript;e2c53597d6a5d9cf7bbe8dccde576fe1e46c5899;tree-sitter-typescript-%commit%' [tree-sitter-yaml]='https://github.com/zed-industries/tree-sitter-yaml;baff0b51c64ef6a1fb1f8390f3ad6015b83ec13a;tree-sitter-yaml-%commit%' [tree-sitter]='https://github.com/tree-sitter/tree-sitter;803c6ebaac27d69e1808b45058482e868d073ceb;tree-sitter-%commit%/lib' [wasm_thread]='https://github.com/zed-industries/wasm_thread;0cf96c7708dfb97ccf3da50347e25edcf75d6937;wasm_thread-%commit%' [webrtc-sys-build]='https://github.com/zed-industries/livekit-rust-sdks;fbda05eb278b4a7c5be8fc9b2a92e9b62e732236;livekit-rust-sdks-%commit%/webrtc-sys/build' [webrtc-sys]='https://github.com/zed-industries/livekit-rust-sdks;fbda05eb278b4a7c5be8fc9b2a92e9b62e732236;livekit-rust-sdks-%commit%/webrtc-sys' [wgpu-core-deps-apple]='https://github.com/gfx-rs/wgpu;cddb2f5d80dc0009b2ef6767635140cacf90a007;wgpu-%commit%/wgpu-core/platform-deps/apple' [wgpu-core-deps-emscripten]='https://github.com/gfx-rs/wgpu;cddb2f5d80dc0009b2ef6767635140cacf90a007;wgpu-%commit%/wgpu-core/platform-deps/emscripten' [wgpu-core-deps-linux-android-bsd]='https://github.com/gfx-rs/wgpu;cddb2f5d80dc0009b2ef6767635140cacf90a007;wgpu-%commit%/wgpu-core/platform-deps/linux-android-bsd' [wgpu-core-deps-wasm]='https://github.com/gfx-rs/wgpu;cddb2f5d80dc0009b2ef6767635140cacf90a007;wgpu-%commit%/wgpu-core/platform-deps/wasm' [wgpu-core-deps-windows]='https://github.com/gfx-rs/wgpu;cddb2f5d80dc0009b2ef6767635140cacf90a007;wgpu-%commit%/wgpu-core/platform-deps/windows' [wgpu-core]='https://github.com/gfx-rs/wgpu;cddb2f5d80dc0009b2ef6767635140cacf90a007;wgpu-%commit%/wgpu-core' [wgpu-hal]='https://github.com/gfx-rs/wgpu;cddb2f5d80dc0009b2ef6767635140cacf90a007;wgpu-%commit%/wgpu-hal' [wgpu-naga-bridge]='https://github.com/gfx-rs/wgpu;cddb2f5d80dc0009b2ef6767635140cacf90a007;wgpu-%commit%/wgpu-naga-bridge' [wgpu-sync]='https://github.com/gfx-rs/wgpu;cddb2f5d80dc0009b2ef6767635140cacf90a007;wgpu-%commit%/wgpu-sync' [wgpu-types]='https://github.com/gfx-rs/wgpu;cddb2f5d80dc0009b2ef6767635140cacf90a007;wgpu-%commit%/wgpu-types' [wgpu]='https://github.com/gfx-rs/wgpu;cddb2f5d80dc0009b2ef6767635140cacf90a007;wgpu-%commit%/wgpu' [windows-capture]='https://github.com/zed-industries/windows-capture;f0d6c1b6691db75461b732f6d5ff56eed002eeb9;windows-capture-%commit%' [wprcontrol]='https://github.com/zed-industries/wprcontrol;cd811f7d744f65291e13131b1d907fda63ed91a1;wprcontrol-%commit%' [xim-ctext]='https://github.com/zed-industries/xim-rs;16f35a2c881b815a2b6cdfd6687988e84f8447d8;xim-rs-%commit%/xim-ctext' [xim-parser]='https://github.com/zed-industries/xim-rs;16f35a2c881b815a2b6cdfd6687988e84f8447d8;xim-rs-%commit%/xim-parser' [zed-font-kit]='https://github.com/zed-industries/font-kit;94b0f28166665e8fd2f53ff6d268a14955c82269;font-kit-%commit%' [zed-reqwest]='https://github.com/zed-industries/reqwest;33bc764aa15ff7b200bf7c93bd96e24878d53e14;reqwest-%commit%' [zed-scap]='https://github.com/zed-industries/scap;b5c86ec58dd4b6b7732bf6ac8be03d6b1f190a82;scap-%commit%' [zed-xim]='https://github.com/zed-industries/xim-rs;16f35a2c881b815a2b6cdfd6687988e84f8447d8;xim-rs-%commit%' ) # Zeo versions itself: ${PV} is Zeo's own version and says nothing about the Zed # it is built from. Gentoo's version grammar (PMS 3.2) cannot carry two upstream # versions, so the Zed source is named by EGIT_COMMIT alone -- and the distfile # after it, which is what lets the overlay autoupdate bump this ebuild (it # rewrites the date and EGIT_COMMIT; a second version variable it could not # keep current would leave a new tarball under an old, already-manifested name). EGIT_COMMIT="f0d896f2c18a543335eb155f729d36b624695591" # LLVM 23 only, so it is the default slot: llvm-r2 would always prefer slot 22 # (its newest stable) whenever 22 is listed. RUST_NEEDS_LLVM ties the Rust slot # to it, so this builds with Rust 1.99, one release past upstream's 1.98.1 pin # in rust-toolchain.toml -- the series' suites pass there (zed-patches test.sh). LLVM_COMPAT=( 23 ) RUST_MIN_VER="1.99.0" RUST_NEEDS_LLVM=1 WEBRTC_COMMIT="0001d84-4" # BENTOO-DIVERGENCE: INHERIT - llvm-r2, because series 1.20 needs a pinned LLVM # slot to build; 1.14 in ::gentoo does not. # BENTOO-DIVERGENCE: PATCHES - overlay-only, all of them wiring the # claude-agent-acp integrations; ::gentoo carries none. inherit cargo check-reqs desktop flag-o-matic llvm-r2 toolchain-funcs xdg # BENTOO-DIVERGENCE: metadata.xml - a block describing sixteen flags, # where ::gentoo's file has none. Every one of them is a flag this overlay adds # (see the IUSE tag). ::gentoo has nothing to describe because it exposes none # of them, and no ::gentoo package corresponds to this one at all. # BENTOO-DIVERGENCE: KEYWORDS - no ~arm64, where ::gentoo has it. Measured # 2026-09-07 by keywording it and running pkgcheck: dev-util/claude-agent-acp-plus # and dev-util/claude-agent-acp-tui are both DEFAULT-ON here and both ship a # prebuilt x64 binary (claude-agent-sdk-linux-x64/claude, node-pty's pty.node), # so an arm64 user would get an uninstallable package out of the box. # Arch-guarding the IUSE is not the answer - that poisons md5-cache. Reopen this # when those two gain an arm64 build; nothing else here is amd64-bound. DESCRIPTION="Zeo - the Zed editor, rebranded, with the bentoo patch series" HOMEPAGE="https://github.com/zeo-workspace/zeo https://zed.dev" SRC_URI=" https://github.com/zed-industries/zed/archive/${EGIT_COMMIT}.tar.gz -> zed-${EGIT_COMMIT}.tar.gz amd64? ( https://github.com/zed-industries/livekit-rust-sdks/releases/download/webrtc-${WEBRTC_COMMIT}/webrtc-linux-x64-release.zip -> webrtc-${WEBRTC_COMMIT}-linux-x64-release.zip ) arm64? ( https://github.com/zed-industries/livekit-rust-sdks/releases/download/webrtc-${WEBRTC_COMMIT}/webrtc-linux-arm64-release.zip -> webrtc-${WEBRTC_COMMIT}-linux-arm64-release.zip ) ${CARGO_CRATE_URIS}" # The upstream tarball unpacks to zed-; ${PN} is "zeo" here, so the # directory must be named explicitly rather than derived from it. S="${WORKDIR}/zed-${EGIT_COMMIT}" # BENTOO-DIVERGENCE: LICENSE - the vendored crate set differs six series on, so # the LICENSE+= block below names licences 1.14 never pulled in, among them # CDLA-Permissive-2.0. LICENSE="GPL-3+" # license for fuchsia-cprng-0.1.1, which is not set correctly in crate LICENSE+=" BSD" # Dependent crate licenses LICENSE+=" Apache-2.0 Apache-2.0-with-LLVM-exceptions BSD-2 BSD Boost-1.0 CC0-1.0 CDLA-Permissive-2.0 ISC LGPL-3 MIT MIT-0 MPL-2.0 UoI-NCSA Unicode-3.0 Unlicense ZLIB BZIP2 " # whisper-rs and whisper-rs-sys (0067) are Unlicense, and whisper.cpp, which # whisper-rs-sys bundles, is MIT. They reach the binary only with USE=voice, so # the licence is conditional here. pycargoebuild puts Unlicense in the block # above, because CRATES lists every crate whatever the USE flags; after a # regeneration, move it back here. LICENSE+=" voice? ( Unlicense )" SLOT="0" # The arm64 half of SRC_URI and of src_compile's LK_CUSTOM_WEBRTC is kept even # though KEYWORDS carries no ~arm64: it is what a future re-keyword needs, and # the only thing standing in the way is the two Claude agents named above. KEYWORDS="~amd64" # BENTOO-DIVERGENCE: IUSE - claude-agent-acp-plus, claude-agent-acp-tui and # claude-code-ide gate integrations with overlay-only packages; X is exposed # separately from wayland here. # # pulseaudio was dropped on 2026-09-09 rather than carried: it changed no part # of the build. Zed's audio path is cpal, which on Linux is ALSA -- the lockfile # carries alsa/alsa-sys and no libpulse crate at all -- so the flag only added # media-libs/libpulse to the depset. A PulseAudio sink is reached through # media-plugins/alsa-plugins[pulseaudio], which is a runtime choice, not a # property of this binary. # # devtools-bridge was added on 2026-10-10 (Zeo 0.4.0, story 033): patch 0052, the # socket the zeo-devtools Vite plugin talks to. On by default; it needs the # claude-agent-acp-plus group (0040's router, 0045's new thread), not # claude-code-ide. # # devtools-panel was added on 2026-10-15 (story 055): patch 0063, the Zeo half of # the zeo-devtools panel page -- devtools threads of the project, the # `devtools: start` / `devtools: open in browser` actions, and a badge and # filter in the thread list. On by default; it extends 0058's session code, so # it needs browser-extension. # # epic was added on 2026-10-18 (story 042): patch 0066, a read-only "Epic # Stories" dock panel listing the project's .epic/ stories with their status and # tasks.md progress, followed live. On by default; it is generated on top of the # claude-agent-acp-plus group (its wiring sits beside 0035's), so it needs that # flag, and nothing else. # # voice was added on 2026-10-19 (story 044): patch 0067, dictation into the # agent composer -- a microphone button and ctrl-alt-v, transcribed on this # machine by whisper.cpp (whisper-rs), the text left unsent. On by default; it # is generated on top of the claude-agent-acp-plus group (its composer hunks sit # beside 0043-0045's), so it needs that flag, and nothing else: it applied with # no fuzz in all eleven combinations of the other optional groups that were # checked. It also pulls in # app-accessibility/whisper-models[base], so the default model is on disk and # Zeo never has to download it. # # ai-jail was added on 2026-10-03, carried over from app-editors/zed when that # package stopped being part of this chain: it pulls in sys-apps/ai-jail, a # sandbox for AI coding agents. Since story 043 it also applies patch 0057, the # Agent Sandbox: a per-project switch in Settings -> AI -> Agent Sandbox # (ai-jail) that starts the Claude adapters through ai-jail with a generated # command, a jail icon in the agent panel and an ai-memory section. It stays # off by default: the jail needs a one-time login in its own config directory, # and the portable build leaves the group out (series `# @default: off`). # # inspector is the GPUI UI inspector. # # test is not a Zed feature: src_test has existed here without it, which left # RESTRICT unable to say the suite is optional. # # collab, extensions-cli and remote-server are deliberately NOT offered here. # Each installs a binary under a name app-editors/zed uses -- collab, # zed-extension, zed-remote-server -- and renaming Zed's server infrastructure is # not what a rebrand of the editor is for. IUSE="+X ai-jail +browser-extension +claude-agent-acp-plus +claude-agent-acp-tui +claude-code-ide +devtools-bridge +devtools-panel +epic inspector +mimalloc neovim screen-capture test tracy +voice +wayland" # BENTOO-DIVERGENCE: REQUIRED_USE - the || ( X wayland ) clause, which follows # from the X and wayland flags this overlay adds (see the IUSE tag). ::gentoo # exposes neither, so it has nothing to constrain. ai-jail? requires the agent # it wraps, and the group 0057 is generated on top of (devtools-bridge's 0052). # devtools-bridge? requires the group 0052 is generated on top of. # browser-extension? requires devtools-bridge: the browser reaches Zeo through # 0052's bridge socket, and 0058 is generated on top of it. # devtools-panel? requires browser-extension: 0063 extends 0058's session code # and is generated on top of it. # epic? requires claude-agent-acp-plus: 0066 is generated on top of that group. # voice? requires claude-agent-acp-plus: 0067 is generated on top of that group, # and of no other (eleven combinations of the optional groups checked). # test? requires the adapter flags the test-only patches (0050, 0051) are # generated on top of. REQUIRED_USE=" || ( X wayland ) ai-jail? ( claude-agent-acp-plus devtools-bridge ) browser-extension? ( devtools-bridge ) devtools-panel? ( browser-extension ) devtools-bridge? ( claude-agent-acp-plus ) epic? ( claude-agent-acp-plus ) test? ( claude-agent-acp-plus claude-code-ide ) voice? ( claude-agent-acp-plus ) " RESTRICT="!test? ( test )" CHECKREQS_DISK_BUILD="18G" CHECKREQS_MEMORY="8G" # sys-apps/xdg-desktop-portal in DEPEND below: ashpd is used from BOTH gpui # backends (x11/client.rs and wayland/client.rs), so the portal is needed # whichever of the two USE flags is on -- unconditional, as ::gentoo has it. # Without it file dialogs and screen capture fail at runtime, not at build. # # The note is out here because a "#" inside DEPEND="..." is not a comment: it is # content, and portage parses it as a package atom. Putting it inside made the # whole depset unparseable while still passing bash -n. # BENTOO-DIVERGENCE: DEPEND - sys-apps/dbus, which series 1.20 links against # and 1.14 in ::gentoo does not. DEPEND=" dev-libs/glib:2 || ( media-fonts/dejavu media-fonts/cantarell media-fonts/noto media-fonts/ubuntu-font-family ) media-libs/alsa-lib media-libs/fontconfig media-libs/freetype media-libs/vulkan-loader[X?] sys-apps/xdg-desktop-portal virtual/zlib:= screen-capture? ( wayland? ( media-video/pipewire sys-apps/dbus ) ) wayland? ( dev-libs/wayland x11-libs/libxkbcommon[wayland] ) X? ( x11-libs/libX11 x11-libs/libxcb:= x11-libs/libxkbcommon[X] ) " # BENTOO-DIVERGENCE: RDEPEND - dbus as above, plus dev-util/claude-agent-acp-plus # and -tui, which exist only in this overlay, the ai-jail sandbox in either # of its two packagings, and app-accessibility/whisper-models for voice: the # speech model 0067 reads from /usr/share/whisper-models before it would # download one. # claude-agent-acp-plus >= 0.24.0: the first release that sends the # _claude/tasks snapshot 0034, 0037 and 0038 read; 0.23.6 sends only a count, # which leaves the tasks card empty. # claude-agent-acp-plus >= 0.26.0: the first release with _claude/tasks # version 2 (tail, hasOutput, _claude/tasks/output), which 0056 reads. # Exactly one editor of the family is installed at a time, by decision # (2026-10-01) rather than by a file collision with zed or zed-bin: zeo owns # /usr/bin/zeo, /usr/libexec/zeo-editor and dev.zeo.Zeo.*, which neither # installs. zeo-bin installs those same paths, so that one is a real collision. RDEPEND=" ${DEPEND} !app-editors/zed !app-editors/zed-bin !app-editors/zeo-bin ai-jail? ( || ( sys-apps/ai-jail sys-apps/ai-jail-bin ) ) browser-extension? ( www-plugins/zeo-browser ) claude-agent-acp-plus? ( >=dev-util/claude-agent-acp-plus-0.26.0 ) claude-agent-acp-tui? ( dev-util/claude-agent-acp-tui ) claude-code-ide? ( dev-util/claude-code ) neovim? ( app-editors/neovim ) voice? ( app-accessibility/whisper-models[base] ) " BDEPEND=" app-arch/unzip dev-build/cmake dev-util/vulkan-headers sys-devel/gettext wayland? ( dev-libs/wayland-protocols dev-util/wayland-scanner ) $(llvm_gen_dep ' llvm-core/clang:${LLVM_SLOT}= llvm-core/llvm:${LLVM_SLOT}= ') " QA_FLAGS_IGNORED=" usr/bin/zeo usr/libexec/zeo-editor " pkg_setup() { if tc-is-lto; then if tc-is-gcc; then export CARGO_PROFILE_RELEASE_LTO="true" elif tc-is-clang; then export CARGO_PROFILE_RELEASE_LTO="thin" fi else export CARGO_PROFILE_RELEASE_LTO="false" fi strip-unsupported-flags # flags from upstream export RUSTFLAGS="${RUSTFLAGS} -C symbol-mangling-version=v0 --cfg tokio_unstable -C link-args=-Wl,--disable-new-dtags,-rpath,\$ORIGIN/../lib" llvm-r2_pkg_setup rust_pkg_setup } src_prepare() { # 0018 carries no USE flag on purpose. It adds the drop_folder_behavior # setting, whose default is the behaviour Zed already had, so applying it # unconditionally changes nothing for anyone who does not set it -- and a # flag would only hide a setting behind a rebuild. PATCHES+=( "${FILESDIR}/0018-drop-folder-opens-project.patch" ) # 0024 is unconditional for the same reason as 0018: it adds a parameter to # an existing URL scheme (zed://agent?session=) and changes no default. # Nothing about it needs an adapter -- the session id it takes is the agent # session id, which AgentPanel::open_thread already resolved, so gating it on # claude-agent-acp-plus would withhold it from every other agent for no # reason. Numbered 0024 because 0019-0023 were already the rebrand's. PATCHES+=( "${FILESDIR}/0024-agent-deep-link-session.patch" ) # 0019-0023 are what make this package Zeo rather than Zed, so they carry no # USE flag: without them this ebuild would build app-editors/zed under a # different name and install it over the top of it. PATCHES+=( "${FILESDIR}/0019-paths-use-Zeo-state-directories.patch" "${FILESDIR}/0020-zed-name-the-application-binary-zeo.patch" "${FILESDIR}/0021-release_channel-add-the-Zeo-channel.patch" "${FILESDIR}/0022-zed-register-zeo-and-keep-accepting-zed.patch" # 0023 fixes what 0020 broke: the CLI finds the application through a # fixed list of path literals, and renaming the [[bin]] target left that # list pointing at a binary that no longer exists. Nothing connects the # literals to the Cargo target, so it compiles clean and fails at run # time. It also decides src_install below: the list is Zeo-only, so the # application MUST land at libexec/zeo-editor. "${FILESDIR}/0023-cli-point-the-launcher-at-the-Zeo-application-binary.patch" # 0025 renames the product in the strings a user actually reads. It is # 21 literals out of 404 containing "Zed" in the tree: most of the rest # name Zed Industries -- the vendor, the plans, the team, the hosted # models -- or are font-family lookup keys, a User-Agent, or theme names # referenced from user settings, and renaming any of those breaks # something. The window title is not here because it never needed a # patch: it resolves through display_name(), which 0021 already made # return "Zeo". Numbered 0025 because app-editors/zed took 0024. "${FILESDIR}/0025-zed-say-Zeo-in-the-strings-a-user-actually-reads.patch" # 0032 renames the app id and binaries the CLI's Flatpak escape looks for # (dev.zed.Zed, zed, zed-editor); without it the dev.zeo.Zeo Flatpak runs # confined. Inert outside a Flatpak. "${FILESDIR}/0032-cli-let-the-Flatpak-escape-recognise-Zeo-s-app-id-an.patch" # 0047 makes the About window name Zeo's version -- RELEASE_VERSION, which # src_compile below exports as ${PV} -- and keeps Zed's AppVersion on a # row of its own, since extensions check compatibility against it. "${FILESDIR}/0047-zed-the-About-window-names-Zeo-s-version.patch" # 0033 ships Claude Agent (Plus) and Claude Agent TUI as default agents: # npx entries in the ACP registry list, enabled in default.json, always # @latest from npm. Needs no adapter at build time, so it is not gated # by the claude-agent-acp-* flags. "${FILESDIR}/0033-agent-ship-Claude-Agent-Plus-and-Claude-Agent-TUI-as-default.patch" # 0046 makes those two default agents run the adapter installed under # /usr/bin when it exists and is executable -- which the # claude-agent-acp-* flags below guarantee -- and fall back to 0033's # npm package otherwise. Decided at launch, so it is ungrouped too. "${FILESDIR}/0046-agent-default-agents-prefer-the-system-adapter.patch" "${FILESDIR}/0048-agent-thread-organization-storage.patch" "${FILESDIR}/0049-agent-sidebar-pinned-section.patch" # 0065 (story 036) drags projects, threads and pinned threads in the # agent sidebar to reorder them, plus "Sort by Recent". It consumes # 0048's store and 0049's Pinned section, so it sits right after them; # no flag gates it. 0028-0030 and 0063 are regenerated on top of it. "${FILESDIR}/0065-agent-sidebar-drag-reorder.patch" # 0068 (story 037) tags threads from their context menu, draws the tags # as chips on thread rows and filters the sidebar and History by #tag. # It consumes 0048's store, 0049's Pinned section and 0065's drag guard, # so it sits right after 0065; no flag gates it. It also owns the # multi-badge thread row 0063 builds on. "${FILESDIR}/0068-agent-thread-tags-and-filter.patch" # 0069 (story 038) adds a Lists view beside the thread list and History, # "Move to List" in the thread context menu and list management. It # consumes 0048's store and 0049's row builder and edits the regions # 0068 edits, so it sits right after 0068; no flag gates it. 0028-0030 # and 0063 are regenerated on top of it. "${FILESDIR}/0069-sidebar-thread-lists-view.patch" # 0061 starts every agent with ZEO_THREAD=1, so zeo-systray's hook can # tell Zeo's sessions from any other Claude Code process and offer the # tray link (0024) only for those. Ungrouped like 0024. "${FILESDIR}/0061-agent-mark-agent-servers-with-zeo-thread.patch" ) if use claude-agent-acp-plus; then PATCHES+=( "${FILESDIR}/0001-force-enable-claude-agent-acp-plus.patch" # 0003/0004 (per-option _meta description + preview) dropped: upstream # 950ec79 now surfaces option descriptions natively via the ACP # EnumOption.description field, superseding the _claude/askUserQuestionOption # _meta machinery (and renamed MultiSelectItems::Untitled -> String). "${FILESDIR}/0005-elicitation-multiline-fields.patch" "${FILESDIR}/0006-elicitation-option-previews.patch" "${FILESDIR}/0007-manual-mode-badge.patch" "${FILESDIR}/0008-clickable-attachments.patch" # 0009 (adopt the agent's config-option response when applying # per-agent defaults) dropped: upstream 78a0da201 (#65233) routes the # defaults path through ConfigOptions::set_config_option, which # installs the agent's returned option list and wakes the watch. # 0010: a thread menu choice (permission mode, model, thinking effort, # an ACP agent's config options) applies to that thread only; Shift # also makes it the default for new threads. It applies to the packaged # source on its own, so it rides this flag by choice rather than by # dependency -- it also covers the native agent's own menus. "${FILESDIR}/0010-shift-to-set-as-default.patch" # 0011: an "Account" section in the context tooltip -- the account # quota windows (5-hour, weekly, per-model) that the adapter already # forwards under _meta["_claude/rateLimit"] and Zed discarded. Rides # this flag by dependency: no other agent sends that key. "${FILESDIR}/0011-account-usage-panel.patch" # 0012: a "Worktrees" entry in the agent panel menu, dispatching the # existing zero-arg zed_actions::git::Worktree so the picker chooses # between creating a worktree and switching to one. Zed ships # worktrees end to end and the panel already reaches them -- but only # under request.use_new_worktree, an input of the create_thread AGENT # TOOL, so the model could open one and the user could not. It applies # to the packaged source on its own, so like 0010 it rides this flag # by choice rather than by dependency. "${FILESDIR}/0012-agent-panel-worktree-entry.patch" # 0013: the per-model quota row. The adapter forwards every # rate_limits.model_scoped[] entry under one wire kind, and from_wire # had no arm for it, so the row 0011's Account section was built to # show never arrived. Adds a dynamic variant carrying the display name # the server sends -- it adds a name, it does not open the enum. # Rides this flag by DEPENDENCY, like 0011: no other agent sends the key. "${FILESDIR}/0013-model-scoped-quota-window.patch" # 0014: a copy button on the user's own message, yielding the string # the edit path already serialises rather than a second serialisation. # It sits on the shared container before the editable/non-editable # branch, so subagent messages -- always non-editable -- get it too. # Pure Zed, so it rides this flag by CHOICE, like 0010 and 0012. "${FILESDIR}/0014-copy-the-user-s-own-message.patch" # 0015: the thread archive scoped to its project. Three reads were # global, not one -- the list, the ArchivedOnly fall-back guard, and # the archived-only toggle's disabled state. Deliberately not via the # store's entries_for_path, which drops archived threads: correct for # the sidebar, fatal for an archive view. Pure Zed, by CHOICE. "${FILESDIR}/0015-scoped-thread-history.patch" # 0016: a rendered-markdown preview of the composer draft, through the # same MarkdownElement that draws every agent response, reached by the # ToggleMessagePreview action. The only one of these five that is new # UI rather than an affordance over existing machinery. Pure Zed, by # CHOICE. "${FILESDIR}/0016-composer-markdown-preview.patch" # 0017: native rendering for a compaction the adapter reports. NOT # because the ACP notification is unreachable -- that was this comment's # claim until 2026-09-22 and it was false; acp_thread.rs matches # acp::SessionUpdate::CompactionUpdate and the linked crate is 2.2.0 / # schema 1.9.1. It is because _meta.contextCompaction is the channel the # adapter actually sends, so this reads that versioned key and dispatches # into the existing push_context_compaction; an unknown version falls # through to the generic tool row. Rides this flag by DEPENDENCY: only # this adapter emits that key. "${FILESDIR}/0017-native-compaction-entry.patch" # 0026: the two end-of-turn navigation controls -- scroll to the user # message, scroll to the top -- float over the conversation instead of # riding inside the last list item, where they scrolled out of view # together with the turn that owned them. The copy button stays inline # on purpose: it copies one specific response, and a control floating # over the whole thread cannot say which. Pure Zed, by CHOICE, the way # 0010, 0012 and 0014 are. "${FILESDIR}/0026-float-thread-navigation-controls.patch" # 0027: a question the agent asks is pinned above the composer # instead of scrolling away with the conversation, and a # multi-question one is stepped through a page at a time. Zed # already renders CONNECTION-scoped elicitations in that slot with # this same card; only the SESSION-scoped half -- how # AskUserQuestion arrives -- never reached it. Behind the new # agent.elicitation_placement setting, offered as two entries in # the panel's options menu; unlike 0018 it defaults to the NEW # behaviour, upstream's inline rendering being one click away. # Pagination is gated on the adapter's un-namespaced # _askUserQuestionCustomAnswer marker, so an ordinary MCP form is # never split. Rides this flag by CHOICE, like 0010/0012/0014/0026. "${FILESDIR}/0027-pinned-elicitation-card.patch" # 0028: a folder dropped on the threads sidebar opens as a project of # its own, through the same MultiWorkspace::open_project the sidebar's # "Add Project" popover uses, so its saved session is restored. One # project per folder; files are ignored, and a folder that is already a # project in any window is skipped rather than re-activated. The sidebar # accepted no drop before, so there is no old behaviour to keep behind # a setting. Rides this flag by CHOICE, like 0010/0012/0014/0026. "${FILESDIR}/0028-sidebar-drop-folder-adds-project.patch" # 0029: a thread whose turn ended while a background shell or async # subagent keeps running gets its own sidebar status -- the running # spinner, tinted and slower -- instead of the agent's plain icon. The # count arrives as _meta["_claude/backgroundTasks"] on a # session_info_update, sent by claude-agent-acp-plus >= 0.21.0; older # adapters send nothing and the patch is inert. Rides this flag BY # DEPENDENCY, like 0011/0013: no other agent sends that key. "${FILESDIR}/0029-background-task-status.patch" # 0030: a thread whose agent asked a question and is waiting for the # answer gets its own sidebar status -- a Chat icon, "Waiting for Your # Answer" -- instead of the running spinner. Permissions keep their # warning triangle and outrank it. Generic ACP, so it rides this flag # by CHOICE, like 0027. "${FILESDIR}/0030-question-status.patch" # 0031: the turn stats gain the session's side -- the turn's duration # always shown, a running total of agent time since the thread was # opened, and a tool-call count whose tooltip breaks it down by tool, # by MCP server and by the programs the terminal calls ran. Same row, # same show_turn_stats setting. Generic ACP, so it rides this flag by # CHOICE, like 0026. "${FILESDIR}/0031-session-stats.patch" # 0036: a reopened ACP thread comes back in the config it was left in # -- mode, model, effort and every other option -- instead of being # reset to the entry's default_config_options on load. The last state # is recorded per (agent, session) in the key-value store upstream # ships, with no migration; a new or forked thread still starts from # the defaults. Generic ACP, so it rides this flag by CHOICE, like 0010. "${FILESDIR}/0036-thread-config-survives-reopen.patch" # 0034: the agent's task feed -- AcpThread holds the adapter's # _meta["_claude/tasks"] snapshot (every live task, replaced, never # merged), announces each ending once, keeps a thread with running # tasks out of idle eviction, and carries _claude/tasks/stop and # /background, gated on the agent advertising the capability. Sent by # claude-agent-acp-plus >= 0.24.0; older adapters send nothing and the # patch is inert. Rides this flag BY DEPENDENCY, like 0011/0013/0029. "${FILESDIR}/0034-agent-task-feed.patch" # 0037: the tasks card -- a floating card over the agent panel listing # the live tasks of every conversation the panel holds, grouped by # thread, with Stop (confirmed), Send to Background, Open at the tool # call that started it, and Watch. Behind agent.tasks_card.{enabled, # position}, on and top_right by default. Rides this flag BY DEPENDENCY, # like 0034: fed only by claude-agent-acp-plus >= 0.24.0, empty before. "${FILESDIR}/0037-tasks-card.patch" # 0038: a watched or failed task that ends out of view is sent to # zeo-systray (>= 0.3.0, optional at runtime) as one non-blocking # datagram on $XDG_RUNTIME_DIR/zeo-systray.sock; no daemon, no-op. "${FILESDIR}/0038-tasks-card-tray.patch" # 0035: the Agent Tasks panel -- a dock panel listing every task the # agent ran, kept across restarts in its own sqlez domain # (AgentTaskHistoryDb), with filters, Stop and archive; toggled by # ctrl-alt-shift-a, no settings of its own. Rides this flag BY # DEPENDENCY, after 0038: fed only by 0037's card. "${FILESDIR}/0035-agent-tasks-panel.patch" # 0039: task labels on one line, at most 60 characters, in 0037's card # and 0035's panel, plus the panel's Rename (kept in 0035's history, # migration 2). Rides this flag BY DEPENDENCY, after 0035. "${FILESDIR}/0039-agent-task-labels.patch" # 0040: one router opens an agent session in the window holding its # project's folders (else a new window), for the tray link (0024) # and the Agent Tasks panel alike. Rides this flag BY DEPENDENCY, # after 0035 and 0039, whose open_task it changes. "${FILESDIR}/0040-agent-route-sessions-to-their-project-window.patch" # 0041: every running row of 0037's card shows its last tool and tool # count; 0035's history keeps the tool call that started each task (a # migration step appended after 0039's) and "Open at Task" opens it # through 0040's router scrolled to that call (story 023). After 0040. "${FILESDIR}/0041-agent-tasks-progress-and-open-at-task.patch" # 0042: an archived record of 0035's panel can be deleted, one row or # all of them, after a confirmation; the thread is never touched and # no migration is added (story 025). After 0041. "${FILESDIR}/0042-agent-tasks-panel-delete-archived.patch" # 0053: the panel polished -- left-aligned rows, an X that closes it, # a scrollbar, a text filter and multi-select with Archive Selected and # Delete Selected. After 0042, whose panel and delete path it changes, # so BY DEPENDENCY (story 034). "${FILESDIR}/0053-agent-tasks-panel-polish.patch" # 0056: _claude/tasks version 2 -- a card row expands to show what the # task runs and its last output lines; Open Log saves a shell task's # output (Zeo's data dir, 0700/0600, 1 MiB cap) and opens it read-only, # from the card and from 0035's panel; the log is deleted with its # record (migration step 4). Needs claude-agent-acp-plus >= 0.26.0; # older adapters advertise version 1 and the additions stay hidden. # After 0053, BY DEPENDENCY (story 041). "${FILESDIR}/0056-agent-task-output-and-logs.patch" # 0043: while the agent waits on an answer to its question, Enter and # the send chords do nothing in the composer; the Send button still # sends (story 017). Reads 0027's card and 0030's pending state. "${FILESDIR}/0043-question-card-swallows-enter.patch" # 0044: Up on the composer's first line recalls the messages sent in # this thread, Down walks back to the draft; elsewhere they move the # caret as before (story 018). Pure Zed, BY CHOICE. "${FILESDIR}/0044-composer-sent-message-history.patch" # 0045: a code block in an agent's message holding one slash command # gets a button that opens a new thread with that command in its # composer, unsent (story 020). Pure Zed, BY CHOICE. "${FILESDIR}/0045-slash-command-opens-new-thread.patch" # 0054: a Run button beside 0045's opens a new thread and sends the # clicked block's command; only that first message skips the # slash-command check (story 035). Pure Zed, BY CHOICE. "${FILESDIR}/0054-slash-command-run-button.patch" # 0055: Decline on a question card asks first only when something was # typed or picked, and leaves a "Skipped" line (story 035). Pure Zed, # BY CHOICE. "${FILESDIR}/0055-question-decline-asks-first.patch" # 0059: boolean config options (Fast mode, Ultracode) are # session-scoped: no Shift-click default, and a reopened thread does # not restore them from 0036's record. Pure Zed, BY CHOICE. "${FILESDIR}/0059-agent-boolean-config-options-are-session-scoped.patch" # 0060: hovering the context ring asks the adapter for the account # quota now (_claude/usage/refresh) and the tooltip follows the # answer live. Gated on the adapter advertising _claude/usage; an # older adapter is never sent the request. Pure Zed, BY CHOICE. "${FILESDIR}/0060-agent-refresh-account-quota-on-ring-hover.patch" # 0062: git worktree add is refused when the repository's own config # names a program the checkout would run (includeIf, a filter driver, # a Git LFS agent or extension) or cannot be read; the error names the # key and nothing is created. Pure Zed, BY CHOICE (PARITY item 105). "${FILESDIR}/0062-git-refuse-worktree-when-repo-config-can-run-programs.patch" # 0070 (story 039): select text in an agent reply, right-click, and # open a "Clean sub-thread" or a "Sub-thread with context" (the # session forked through ACP session/fork, still unstable_), linked # to the parent in 0048's store with a header and a sidebar marker # through 0068's badge. Last of this group: it calls 0045's prefilled # thread and extends 0036's config recorder; 0052, 0057, 0058, 0063 # and 0067 are generated on top of it. "${FILESDIR}/0070-agent-ui-sub-thread-from-selection.patch" # 0071: Send to Parent in a sub-thread's footer, and sub-threads as # items of 0035's panel and 0037's card (task history steps 5 and # 6). After 0070, whose parent links it reads; 0052, 0057, 0058, # 0063 and 0067 are regenerated on top of it. "${FILESDIR}/0071-agent-send-to-parent-and-sub-thread-items.patch" # 0072: Zed's own subagent surfaces cover ACP (RFD) subagents -- a # Waiting card status, the awaiting-permission bar, one card for a # child never written to, and the sidebar reading a thread's # subagents (story 064). Last of this group: its sidebar half reads # 0030 and sits beside 0070; 0002, 0052, 0057, 0058, 0063, 0066 and # 0067 are regenerated on top of it. "${FILESDIR}/0072-agent-ui-native-subagent-surfaces.patch" # 0073: the adapter's Plan updates option becomes a "ToDo" toggle # in the agent menu and leaves the composer row; thread-local, as # 0010 rules. After 0072; 0052, 0057 and 0063 are regenerated on # top of it (offsets only). "${FILESDIR}/0073-agent-ui-todo-toggle-in-agent-menu.patch" # 0074-0083 (Zeo 0.9.0, Wave 2 of the Zeo next proposal): one patch # per item, each stacked on the patch it changes -- the "5-hour # limit" label (0011), CopyButton on the user message (0014), the # task _meta read on v2 too (0029/0034), Pinned remembers being # collapsed (0049), pause auto-scroll (0026), a foreground task ends # with its turn (0034), the tasks card's scrollbar, dismiss and # Clear finished (0037), the plan's scrollbar, the question card # minimizes (0027), tasks_card.start_minimized (0037). 0052, 0057, # 0058, 0063 and 0067 are regenerated on top of them. "${FILESDIR}/0074-agent-ui-five-hour-limit-label.patch" "${FILESDIR}/0075-agent-ui-user-message-copy-button.patch" "${FILESDIR}/0076-acp-thread-task-meta-on-v2.patch" "${FILESDIR}/0077-sidebar-pinned-remembers-collapsed.patch" "${FILESDIR}/0078-agent-ui-pause-auto-scroll.patch" "${FILESDIR}/0079-acp-thread-foreground-task-ends-with-turn.patch" "${FILESDIR}/0080-agent-ui-tasks-card-dismiss-and-clear.patch" "${FILESDIR}/0081-agent-ui-plan-scrollbar.patch" "${FILESDIR}/0082-agent-ui-question-card-minimize.patch" "${FILESDIR}/0083-agent-ui-tasks-card-start-minimized.patch" # 0086 (Zeo 0.9.1): the composer's config options keep the agent's # order, left to right; Zed 483b746b reversed the row, which drew # Claude Agent's Mode last. Upstream code only. "${FILESDIR}/0086-agent-ui-config-options-keep-agent-order.patch" ) fi # terminal-ide story 001: Claude Code IDE integration (upstream PR #58300 + API-drift fixes). if use claude-code-ide; then PATCHES+=( "${FILESDIR}/0002-claude-code-ide-integration.patch" ) fi # 0052 (story 033): the devtools bridge -- an element clicked in a Vite dev # page becomes chips in the project's agent composer. Its own group, after # every adapter group and before test; 0050/0051 apply on top of it unchanged. if use devtools-bridge; then PATCHES+=( "${FILESDIR}/0052-devtools-bridge.patch" ) fi # 0057 (story 043): the Agent Sandbox -- Claude adapters of a project whose # switch is on start through ai-jail with a command Zeo generates, or not at # all. Its own group, after devtools-bridge and before test; 0050/0051 apply on # top of it unchanged. if use ai-jail; then PATCHES+=( "${FILESDIR}/0057-agent-sandbox-settings.patch" ) fi # 0058 (story 045): the browser sidebar -- zeo-browser reads and drives the # same agent thread through zeo-browser-host and a v2 session protocol on # 0052's bridge socket, after an Allow in Zeo. Its own group, after ai-jail and # before test; it applies with or without 0057, and 0050/0051 on top of it. # 0084 (Zeo 0.9.0): the browser's cancel is answered once the cancellation # resolved, not before it. Right after 0058, whose handler it changes; 0063 # is regenerated on top of it. if use browser-extension; then PATCHES+=( "${FILESDIR}/0058-browser-extension.patch" "${FILESDIR}/0084-browser-cancel-answers-after-the-outcome.patch" ) fi # 0063 (story 055): the devtools panel -- the zeo-devtools panel page drives # devtools threads of its own project through 0058's v2 sessions, plus the # `devtools: start` / `open in browser` actions and the thread-list badge. # Its own group, after browser-extension and before test; it applies with or # without 0057, and 0050/0051 on top of it. # It also widens 0065's drag guards to its "Devtools threads only" view, so # the two ship together. if use devtools-panel; then PATCHES+=( "${FILESDIR}/0063-devtools-panel.patch" ) fi # 0066 (story 042): the Epic Stories panel -- a read-only dock panel of the # project's .epic/ stories, their status and tasks.md progress, followed # live; it writes nothing and runs nothing. Its own group, after # devtools-panel and before test; it applies with claude-code-ide and # devtools-bridge each on or off, and 0050/0051 on top of it. if use epic; then PATCHES+=( "${FILESDIR}/0066-epic-panel.patch" ) fi # 0067 (story 044): voice input -- a microphone button and ctrl-alt-v in the # agent composer, transcribed on this machine by whisper.cpp (crates # voice_input, whisper-rs, whisper-rs-sys), the text left unsent. Its own # group, after epic and before test; it applies with the optional groups # above on or off (eleven combinations checked), and 0050/0051 apply on top # of it. # 0085 (Zeo 0.9.0): the microphone ends the composer's left-hand group, next # to Add Context, instead of sitting beside Send. if use voice; then PATCHES+=( "${FILESDIR}/0067-voice-input.patch" "${FILESDIR}/0085-agent-ui-voice-button-beside-add-context.patch" ) fi # 0050 and 0051 change tests only -- nothing in them reaches the binary -- so # they apply only when the suite is built. They are generated on top of every # group above, which is what the test? clause in REQUIRED_USE enforces. if use test; then PATCHES+=( "${FILESDIR}/0050-project-revive-three-upstream-git-tests.patch" "${FILESDIR}/0051-agent-e2e-suites-run-against-Claude-Agent-Plus.patch" ) fi # The Zeo mark cannot ride in the series: GNU patch refuses a git binary # hunk outright ("git binary diffs are not supported"), and eapply is # `patch -p1`. So the art is installed here, before eapply, and its source of # truth is brand/rendered/ in the zeo repository, reproducible from # brand/build-icon.py and checksummed there. cp "${FILESDIR}/app-icon-zeo.png" crates/zed/resources/ || die cp "${FILESDIR}/app-icon-zeo@2x.png" crates/zed/resources/ || die default export APP_CLI="zeo" # Patch 0021 gives ReleaseChannel::Zeo the app_id "dev.zeo.Zeo", and the # RELEASE_CHANNEL file below selects that channel, so this is the runtime # Wayland app_id / X11 WM_CLASS. The .desktop filename, the Icon name and # StartupWMClass must all equal it, or the compositor has nothing to match # the window against and draws a generic icon. export APP_ID="dev.zeo.Zeo" export APP_ICON="${APP_ID}" export APP_NAME="Zeo" export APP_ARGS="%U" export DO_STARTUP_NOTIFY="true" envsubst < "crates/zed/resources/zed.desktop.in" > ${APP_ID}.desktop || die # StartupWMClass goes in the [Desktop Entry] section (before the Actions= # line) for X11 compatibility and as the Wayland compositor fall-back. sed -i "/^Actions=/i StartupWMClass=${APP_ID}" "${APP_ID}.desktop" || die # Upstream's template declares x-scheme-handler/zed, and envsubst does not # touch it -- so an unedited Zeo entry advertises itself as a handler for # ZED's URLs and declares none of its own. Measured on a real install: the # system mimeinfo.cache listed dev.zeo.Zeo.desktop beside Zed's under # x-scheme-handler/zed, and zeo:// resolved to nothing at all. Patch 0022 # registers zeo:// at run time, but the desktop file is what the desktop # environment reads to route a link, and it is the half that decides which # editor opens someone else's zed:// link. sed -i "s|x-scheme-handler/zed|x-scheme-handler/zeo|" "${APP_ID}.desktop" || die # Keywords is what an application launcher searches. Keep "zed" so people # looking for the editor Zeo is built from still find it, and add "zeo". sed -i "s|^Keywords=zed;|Keywords=zeo;zed;|" "${APP_ID}.desktop" || die # The file drives the runtime ReleaseChannel enum through include_str!. # src_compile exports the identically named ENVIRONMENT VARIABLE, which is a # different input read by build.rs; both are needed and they are not # interchangeable. echo "zeo" > crates/zed/RELEASE_CHANNEL || die # Cargo offline fetch workaround local ASYNC_PROCESS_COMMIT="0b6d6713570af61806e1e5cb40e0f757cb93fd9d" local ASYNC_PROCESS_GIT="async-process = { git = \"https://github.com/zed-industries/async-process.git\"" ASYNC_PROCESS_GIT+=", rev = \"${ASYNC_PROCESS_COMMIT}\"" local ASYNC_PROCESS_PATH="async-process = \\{ path = \"${WORKDIR}/async-process-${ASYNC_PROCESS_COMMIT}\"" local ASYNC_TASK_COMMIT="015845a19fc31752c02367567d3b8900a406f9da" local ASYNC_TASK_GIT="async-task = { git = \"https://github.com/zed-industries/async-task.git\"" ASYNC_TASK_GIT+=", rev = \"${ASYNC_TASK_COMMIT}\"" local ASYNC_TASK_PATH="async-task = \\{ path = \"${WORKDIR}/async-task-${ASYNC_TASK_COMMIT}\"" local CALLOOP_COMMIT="3759371fee14c40066d64777e2a36b6ffcc22590" local CALLOOP_GIT="calloop = { git = \"https://github.com/zed-industries/calloop\"" CALLOOP_GIT+=", rev = \"${CALLOOP_COMMIT}\"" local CALLOOP_PATH="calloop = \\{ path = \"${WORKDIR}/calloop-${CALLOOP_COMMIT}\"" local CPAL_COMMIT="e1612d5d98152f8dc2a62e1b51ef7cbf4f7f26b7" local CPAL_GIT="cpal = { git = \"https://github.com/RustAudio/cpal\"" CPAL_GIT+=", rev = \"${CPAL_COMMIT}\"" local CPAL_PATH="cpal = \\{ path = \"${WORKDIR}/cpal-${CPAL_COMMIT}\"" local KHRONOS_EGL_COMMIT="42214b36347b108fd9630ca6254b96dde59e04fe" local KHRONOS_EGL_GIT="khronos-egl = { git = \"https://github.com/zed-industries/khronos-egl\"" KHRONOS_EGL_GIT+=", rev = \"${KHRONOS_EGL_COMMIT}\"" local KHRONOS_EGL_PATH="khronos-egl = \\{ path = \"${WORKDIR}/khronos-egl-${KHRONOS_EGL_COMMIT}\"" local LIVEKIT_COMMIT="fbda05eb278b4a7c5be8fc9b2a92e9b62e732236" local LIVEKIT_GIT="livekit = { git = \"https://github.com/zed-industries/livekit-rust-sdks\"" LIVEKIT_GIT+=", rev = \"${LIVEKIT_COMMIT}\"" local LIVEKIT_PATH="livekit = \\{ path = \"${WORKDIR}/livekit-rust-sdks-${LIVEKIT_COMMIT}/livekit\"" local LIBWEBRTC_GIT="libwebrtc = { git = \"https://github.com/zed-industries/livekit-rust-sdks\"" LIBWEBRTC_GIT+=", rev = \"${LIVEKIT_COMMIT}\"" local LIBWEBRTC_PATH="libwebrtc = \\{ path = \"${WORKDIR}/livekit-rust-sdks-${LIVEKIT_COMMIT}/libwebrtc\"" local WIN_CAP_COMMIT="f0d6c1b6691db75461b732f6d5ff56eed002eeb9" local WIN_CAP_GIT="windows-capture = { git = \"https://github.com/zed-industries/windows-capture.git\"" WIN_CAP_GIT+=", rev = \"${WIN_CAP_COMMIT}\"" local WIN_CAP_PATH="windows-capture = \\{ path = \"${WORKDIR}/windows-capture-${WIN_CAP_COMMIT}\"" local WEBRTC_SYS_GIT="webrtc-sys = { git = \"https://github.com/zed-industries/livekit-rust-sdks\"" WEBRTC_SYS_GIT+=", rev = \"${LIVEKIT_COMMIT}\"" local WEBRTC_SYS_PATH="webrtc-sys = \\{ path = \"${WORKDIR}/livekit-rust-sdks-${LIVEKIT_COMMIT}/webrtc-sys\"" local NOTIFY_COMMIT="d842f16b2716bd60f09caf3ae3a894237ab38f54" local NOTIFY_GIT="notify = { git = \"https://github.com/zed-industries/notify\"" NOTIFY_GIT+=", rev = \"${NOTIFY_COMMIT}\"" local NOTIFY_PATH="notify = \\{ path = \"${WORKDIR}/notify-${NOTIFY_COMMIT}/notify\"" local TREE_SITTER_COMMIT="803c6ebaac27d69e1808b45058482e868d073ceb" local TREE_SITTER_GIT="tree-sitter = { git = \"https://github.com/tree-sitter/tree-sitter\"" TREE_SITTER_GIT+=", rev = \"${TREE_SITTER_COMMIT}\"" local TREE_SITTER_PATH="tree-sitter = \\{ path = \"${WORKDIR}/tree-sitter-${TREE_SITTER_COMMIT}/lib\"" local TS_LANGUAGE_GIT="tree-sitter-language = { git = \"https://github.com/tree-sitter/tree-sitter\"" TS_LANGUAGE_GIT+=", rev = \"${TREE_SITTER_COMMIT}\"" local TS_LANGUAGE_PATH="tree-sitter-language = \\{ path = \"${WORKDIR}" TS_LANGUAGE_PATH+="/tree-sitter-${TREE_SITTER_COMMIT}/crates/language\"" local NOTIFY_TYPES_GIT="notify-types = { git = \"https://github.com/zed-industries/notify\"" NOTIFY_TYPES_GIT+=", rev = \"${NOTIFY_COMMIT}\"" local NOTIFY_TYPES_PATH="notify-types = \\{ path = \"${WORKDIR}/notify-${NOTIFY_COMMIT}/notify-types\"" local CRASH_CONTEXT_COMMIT="911b04e09b79b736cc15cbe712e83e2d3f348bb9" local CRASH_CONTEXT_GIT="crash-context = { git = \"https://github.com/rust-minidump/minidump-writer\"" CRASH_CONTEXT_GIT+=", rev = \"${CRASH_CONTEXT_COMMIT}\"" local CRASH_CONTEXT_PATH="crash-context = \\{ path = \"${WORKDIR}/minidump-writer-${CRASH_CONTEXT_COMMIT}" CRASH_CONTEXT_PATH+="/crates/crash-context\"" sed -e "s#${ASYNC_PROCESS_GIT}#${ASYNC_PROCESS_PATH}#" \ -e "s#${ASYNC_TASK_GIT}#${ASYNC_TASK_PATH}#" \ -e "s#${CALLOOP_GIT}#${CALLOOP_PATH}#" \ -e "s#${CPAL_GIT}#${CPAL_PATH}#" \ -e "s#${KHRONOS_EGL_GIT}#${KHRONOS_EGL_PATH}#" \ -e "s#${LIVEKIT_GIT}#${LIVEKIT_PATH}#" \ -e "s#${LIBWEBRTC_GIT}#${LIBWEBRTC_PATH}#" \ -e "s#${WEBRTC_SYS_GIT}#${WEBRTC_SYS_PATH}#" \ -e "s#${WIN_CAP_GIT}#${WIN_CAP_PATH}#" \ -e "s#${NOTIFY_TYPES_GIT}#${NOTIFY_TYPES_PATH}#" \ -e "s#${NOTIFY_GIT}#${NOTIFY_PATH}#" \ -e "s#${TS_LANGUAGE_GIT}#${TS_LANGUAGE_PATH}#" \ -e "s#${TREE_SITTER_GIT}#${TREE_SITTER_PATH}#" \ -e "s#${CRASH_CONTEXT_GIT}#${CRASH_CONTEXT_PATH}#" \ -i "${S}/Cargo.toml" || die "Cargo fetch workaround failed" # Toggle gpui display backend features based on USE flags if ! use wayland; then sed -e '/\"gpui\/wayland\"/d' \ -e '/^\s*\"wayland\",$/d' \ -e 's/, "wayland"//' \ -e 's/"wayland", //' \ -i "${S}/crates/zed/Cargo.toml" || die "Failed to disable wayland feature" fi if ! use X; then sed -e '/\"gpui\/x11\"/d' \ -e '/^\s*\"x11\",$/d' \ -e 's/, "x11"//' \ -e 's/"x11", //' \ -i "${S}/crates/zed/Cargo.toml" || die "Failed to disable x11 feature" fi # Toggle screen-capture feature on gpui_platform # The first expression deletes the whole LINE: since ef50ad95 the # gpui_platform features array is multi-line, so removing only the text # would leave an orphan comma ("extra comma in array") that makes the TOML # invalid. The other three keep covering the inline form, in case upstream # collapses the array again. if ! use screen-capture; then sed -e '/^[[:space:]]*"screen-capture",\?[[:space:]]*$/d' \ -e 's/"screen-capture", //' \ -e 's/, "screen-capture"//' \ -e 's/"screen-capture"//' \ -i "${S}/crates/zed/Cargo.toml" || die "Failed to disable screen-capture feature" fi # Enable neovim integration in vim crate if use neovim; then sed -e 's/vim\.workspace = true/vim = { workspace = true, features = ["neovim"] }/' \ -i "${S}/crates/zed/Cargo.toml" || die "Failed to enable neovim feature" fi } src_compile() { export RELEASE_VERSION="${PV}" export ZED_UPDATE_EXPLANATION='Zeo updates are handled by portage' # crates/zed/build.rs reads RELEASE_CHANNEL as an ENVIRONMENT VARIABLE, via # option_env!, to pick the icon it embeds -- a different input from the # crates/zed/RELEASE_CHANNEL file src_prepare writes, which drives the # runtime ReleaseChannel enum. Its match is on a string with a `_ => "-dev"` # arm, so leaving this unset compiles clean and embeds Zed's development # icon. app-editors/zed has exactly that gap today; it is masked on Wayland # because the compositor resolves the INSTALLED icon by app_id instead. export RELEASE_CHANNEL="zeo" # whisper-rs-sys's build.rs hands every GGML_*, WHISPER_* and CMAKE_* # variable to whisper.cpp's CMake. GGML_NATIVE defaults to ON, which is # -march=native: the build machine's CPU, the AVX-512 trap that once broke # zeo-bin. With it OFF, ggml switches its own x86 set on instead (SSE4.2, # AVX, AVX2, BMI2, FMA, F16C); turning those off too leaves the instruction # set to CFLAGS' -march. GGML_CCACHE=OFF keeps ggml from wrapping the # compiler in ccache or sccache behind Portage's back (FEATURES=ccache # decides that), as sci-ml/whisper-cpp and sci-ml/llama-cpp do here. # WHISPER_DONT_GENERATE_BINDINGS uses the crate's bundled bindings instead # of running bindgen. Without USE=voice nothing reads them: whisper-rs-sys # is not in the lockfile. # Exported here, they stay in the saved environment for src_test too. # Accepted: whisper.cpp builds at -O3 (Release), not CFLAGS' -O level. if use voice; then export GGML_NATIVE=OFF GGML_SSE42=OFF GGML_AVX=OFF GGML_AVX2=OFF \ GGML_FMA=OFF GGML_F16C=OFF GGML_BMI2=OFF GGML_AVX512=OFF \ GGML_CCACHE=OFF WHISPER_DONT_GENERATE_BINDINGS=1 fi if use arm64; then export LK_CUSTOM_WEBRTC="${WORKDIR}/linux-arm64-release" elif use amd64; then export LK_CUSTOM_WEBRTC="${WORKDIR}/linux-x64-release" fi local features=() # gpui/inspector, not zed/inspector: upstream reverted "Implement # `inspector` flag" (#62920) on 2026-09-15, so the zed crate has carried no # such feature since. The switch is back where it was before that PR, in # gpui, and gpui is a direct dependency of zed, so dep/feature resolves. use inspector && features+=( gpui/inspector ) use mimalloc && features+=( zed/mimalloc ) use tracy && features+=( zed/tracy ) local packages=( --package zed --package cli ) # The native-messaging host the browser starts (0058): a workspace member of # its own, so it is only built when the browser channel is. use browser-extension && packages+=( --package zeo_browser_host ) # "${features[*]}" alone would be an empty --features argument when no flag # is on; the count is what decides whether the option appears at all. local feature_args=() (( ${#features[@]} )) && feature_args=( --features "${features[*]}" ) cargo_src_compile "${packages[@]}" "${feature_args[@]}" } src_install() { newbin "$(cargo_target_dir)"/cli "${APP_CLI}" exeinto "/usr/libexec" # zeo-editor, not zed-editor: patch 0023 leaves the launcher looking only for # ../libexec/zeo-editor, and this is also what keeps the file off # app-editors/zed's path so the two can be installed together. newexe "$(cargo_target_dir)"/zeo zeo-editor # The Zeo mark, installed under the APP_ID name because that is how a Wayland # compositor resolves a window's icon: it matches the app_id against the # installed icon file name, not against anything inside the binary. newicon -s 512 crates/zed/resources/app-icon-zeo.png "${APP_ID}.png" newicon -s 1024 crates/zed/resources/app-icon-zeo@2x.png "${APP_ID}.png" domenu "${S}/${APP_ID}.desktop" if use browser-extension; then # The host is started by the browser, never by a user: libexec, next to # zeo-editor. Its manifests name this path and only the committed # extension IDs (0058, crates/zeo_browser_host/manifests). exeinto "/usr/libexec" doexe "$(cargo_target_dir)"/zeo-browser-host local manifests="${S}/crates/zeo_browser_host/manifests" insinto /etc/opt/chrome/native-messaging-hosts newins "${manifests}"/dev.zeo.browser_host.chrome.json dev.zeo.browser_host.json insinto /etc/chromium/native-messaging-hosts newins "${manifests}"/dev.zeo.browser_host.chrome.json dev.zeo.browser_host.json insinto "/usr/$(get_libdir)/mozilla/native-messaging-hosts" newins "${manifests}"/dev.zeo.browser_host.firefox.json dev.zeo.browser_host.json fi } src_test () { # Patch 0019 moves APP_NAME to "Zeo", so the suite writes under zeo/ - these # are the directories the tests expect to exist, not zed/ ones. mkdir -p "${HOME}/.config/zeo" || die mkdir -p "${HOME}/.local/share/zeo/logs/" || die SHELL=/usr/bin/sh RUST_BACKTRACE=full cargo_src_test -vv \ -- --skip zed::tests::test_window_edit_state_restoring_enabled } pkg_postinst() { xdg_pkg_postinst if use claude-agent-acp-plus; then elog "" elog "Claude Agent (Plus) is available in Zeo's agent panel by default and runs" elog "the adapter installed as /usr/bin/claude-agent-acp-plus. No settings.json" elog "entry is needed." fi if use claude-agent-acp-tui; then elog "" elog "Claude Agent TUI is available in Zeo's agent panel by default and runs" elog "the bridge installed as /usr/bin/claude-agent-acp-tui. No settings.json" elog "entry is needed." fi if use ai-jail; then elog "" elog "Zeo can start the Claude adapters inside ai-jail: writable project," elog "read-only .git and .zed, network limited to the allowed hosts, and none" elog "of your ~/.claude visible. The jail keeps its own Claude state in a" elog "separate directory, so log in once, outside the sandbox:" elog "" elog " install -d -m 700 ~/.claude-jailed" elog " CLAUDE_CONFIG_DIR=~/.claude-jailed claude # then: /login" elog "" elog "Then turn it on per project in Settings -> AI -> Agent Sandbox (ai-jail)," elog "or with the palette command 'agent sandbox: toggle'. The lock icon in the" elog "agent panel shows whether the thread you are looking at is jailed." elog "A hand-written \"ai-jail\" entry in agent_servers keeps working, shown as" elog "jailed by its own command." fi if use browser-extension; then elog "" elog "The browser sidebar (zeo-browser) talks to this Zeo through" elog "/usr/libexec/zeo-browser-host, installed with its Chrome, Chromium and" elog "Firefox host manifests. Firefox loads the add-on, installed by" elog "www-plugins/zeo-browser, from the system scope;" elog "on Chrome or Chromium build and load it yourself:" elog "" elog " cd zeo-browser && npm ci && npm run build" elog " chrome://extensions -> Developer mode -> Load unpacked -> dist/chrome" elog "" elog "The first connection asks in Zeo: Allow or Deny. Palette command" elog "'devtools bridge: revoke browser access' forgets every browser allowed." fi if use claude-code-ide; then elog "" elog "Claude Code IDE integration uses an unofficial, reverse-engineered" elog "protocol that may break without notice." elog "It activates automatically in Zeo-spawned terminals via environment" elog "variables; no settings.json configuration is needed." elog "The 'claude' CLI it talks to comes from dev-util/claude-code," elog "which this USE flag pulls in." elog "Verify the connection by running /ide inside 'claude'." fi }