Files
pebrel/nebula_app/Cargo.toml
T
JoyLin 3ad289e3e2 fix(windows): preserve Acrylic blur at edges and on deactivation (#250)
Use a supported installed Acrylic controller with owned window and runtime lifetimes. Retain the existing Accent fallback and pixel-opacity behavior.

Addresses the Acrylic portion of #236; the Aero issue remains open.
2026-09-26 18:20:16 +08:00

305 lines
12 KiB
TOML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
[package]
name = "nebula"
version = "1.9.1"
license = "GPL-3.0-or-later"
description = "Pebrel — a GPU-accelerated terminal emulator"
readme = "README.md"
homepage = "https://github.com/Kuddev/pebrel"
repository = "https://github.com/Kuddev/pebrel"
edition.workspace = true
rust-version.workspace = true
[[bin]]
name = "pebrel"
path = "src/main.rs"
[dependencies.nebula_terminal]
path = "../nebula_terminal"
version = "1.9.1"
[dependencies.nebula_config_derive]
path = "../nebula_config_derive"
version = "1.9.1"
[dependencies.nebula_config]
path = "../nebula_config"
version = "1.9.1"
# 可选:GPUI UI 层(feature = "gpui-shell",模块 src/gpui_shell/)。
# GPUI/component 的版本和 Git 来源由根 Cargo.toml 统一精确固定。
[dependencies.gpui]
version = "=0.2.2"
optional = true
[dependencies.gpui_platform]
workspace = true
optional = true
[target.'cfg(target_os = "linux")'.dependencies.gpui_platform]
workspace = true
optional = true
features = ["wayland", "x11"]
[dependencies.gpui-component]
version = "=0.5.2"
optional = true
# 代码查看 tab 的 tree-sitter 语法高亮语言包(不开只有 JSON)。
features = ["tree-sitter-languages"]
[dependencies.gpui-component-assets]
version = "=0.5.1"
optional = true
# 运行时用户设置(nebula_settings.txt + 主题终端色表)的共享权威实现。
# 非可选:ai_hook 的 `ai_hooks` 持久开关(setup-ai --remove)在所有壳形态
# 下都要读写这份设置。
[dependencies.nebula-settings]
path = "../nebula_settings"
# 分屏规则的共享权威实现(布局树/拖拽比例/方向导航);GPUI 壳消费。
[dependencies.nebula-split]
path = "../nebula_split"
optional = true
[dependencies.futures]
version = "0.3"
optional = true
[dependencies.nebula-completions]
path = "../nebula-completions"
version = "1.9.1"
[dependencies]
ahash = { version = "0.8.6", features = ["no-rng"] }
ab_glyph_rasterizer = "=0.1.10"
base64 = "0.22.0"
# WebDAV 同步的内容加密(spec 003)。用户裁定(2026-07-28):同步集含
# SSH 地址簿与命令历史,属高危隐私必须加密;Argon2 只在同步动作的后台
# 线程跑(~0.1s/19MiB 瞬时,终端热路径零涉及)——可以上,但克制:参数
# 取最低推荐档,不做多档配置。版本跟工作区 lock 已有的 0.6.0-rc 线
# (用户裁定:稍新的版本,特性更全;也避免依赖树里 argon2 双版本并存)。
argon2 = "0.6.0-rc.8"
aes-gcm = "0.11"
bitflags = "2.2.1"
chrono = "0.4.45"
# Shared SMILES parsing and 2D SVG depiction; see ADR-0004.
chematic-smiles = "=1.0.9"
chematic-depict = { version = "=1.0.9", default-features = false }
clap = { version = "4.2.7", features = ["derive", "env"] }
copypasta = { version = "0.10.1", default-features = false }
crossfont = { version = "0.9.0", optional = true }
glutin = { version = "0.32.2", optional = true, default-features = false, features = ["egl", "wgl"] }
# 远程备份的 S3 SigV4 签名(backup_remote)。0.13 配 sha2 0.11 的 digest
# 世代;lock 里已有该版本,零新增下载。
hmac = "0.13"
html-escape = "0.2.14"
home = "0.5.5"
libc = "0.2"
log = { version = "0.4", features = ["std", "serde"] }
mlua.workspace = true
notify = "8.0.0"
parking_lot = "0.12.0"
polling = "3.11.0"
# Markdown viewer: CommonMark + GFM (tables / task lists / strikethrough)
# event parser; `display::markdown_view` renders the folded block AST.
pulldown-cmark = { version = "0.13", default-features = false }
markdown = "=1.0.0"
pulldown-latex = "=0.7.1"
# rsa 不能省:云厂商控制台下载的 .pem(PKCS#1)与 OpenSSH 容器里的 RSA
# 私钥都靠它解析;缺失时 load_secret_key 直接 UnsupportedKeyType。
russh = { version = "0.62.2", default-features = false, features = ["ring", "rsa"] }
russh-sftp = "2.3.0"
# preserve_order: we rewrite the user's claude settings.json (ai_hook
# self-heal) and must not alphabetize their keys in the process.
serde_json = { version = "1", features = ["preserve_order"] }
serde = { version = "1", features = ["derive"] }
serde_path_to_error.workspace = true
serde_yaml = "0.9.25"
sha2 = "0.11"
signal-hook = { version = "0.4.3", default-features = false }
tempfile = "3.12.0"
toml.workspace = true
toml_edit.workspace = true
ttf-parser = { version = "=0.25.1", default-features = false, features = ["opentype-layout", "std"] }
tokio = { version = "1", features = ["fs", "io-util", "net", "process", "rt-multi-thread", "sync", "time"] }
unicode-width = "0.2.0"
# Assistant fix requests: blocking HTTP on a background OS thread (spec 001).
# ureq over reqwest: no tokio coupling for one short JSON POST, small tree.
# 更新下载要能跟随用户代理:socks-proxy 让 ureq 支持 socks5:// 代理地址;
# Windows 系统代理(注册表)由 update_proxy 模块用 winreg 解析后显式传入。
# 刻意不启用 ureq 自带的 win-system-proxy:它对所有 ureq agent 生效,且把
# 注册表 socks= 条目错拼成 http:// 代理。
ureq = { version = "3", features = ["json", "socks-proxy"] }
zeroize = "1"
winit = { version = "0.30.9", default-features = false, features = ["rwh_06", "serde"] }
global-hotkey = "0.8.0"
getrandom = "0.3.3"
regex = "1.13.1"
# `image` 被 GPUI 壳的壁纸、文档 tab、行内图片、数学视图无条件使用,必须是
# 无条件依赖;此前按 `cfg(not(target_os = "macos"))` 排除会让 macOS 目标在
# 编译期找不到 crate(2026-09-02 交叉 check 首个暴露的问题)。
image = { version = "0.25.8", default-features = false, features = ["bmp", "gif", "jpeg", "png", "webp"] }
rusqlite = { version = "0.40.2", features = ["bundled"] }
sha1 = "0.11.0"
[build-dependencies]
nebula-settings = { path = "../nebula_settings", version = "1.9.1" }
gl_generator = { version = "0.14.0", optional = true }
serde = "1"
serde_json = "1"
[dev-dependencies]
clap_complete = "4.2.3"
rand = "0.10"
rsa = "0.10.0-rc.18"
[target.'cfg(not(windows))'.dependencies]
xdg = "3.0.0"
[target.'cfg(any(target_os = "linux", target_os = "macos"))'.dependencies]
rfd = "0.17.2"
notify-rust = "=4.18.0"
[target.'cfg(all(unix, not(target_os = "macos")))'.dependencies]
# GPUI 壳只把 winit 当类型库(EventLoopProxy / WindowId / ModifiersState),
# 不启动它的事件循环;但 winit 在 Linux 上没有任何后端 feature 就拒绝编译
# (platform_impl/mod.rs "platform not supported")。dlopen 变体不引入链接期
# 依赖,运行时缺库也只是旧壳不可用。
winit = { version = "0.30.9", default-features = false, features = ["x11", "wayland", "wayland-dlopen"] }
[target.'cfg(not(target_os = "macos"))'.dependencies]
png = { version = "0.17.5", default-features = false, optional = true }
[target.'cfg(target_os = "macos")'.dependencies]
security-framework = "=3.7.0"
objc2 = "0.6.1"
objc2-foundation = { version = "0.3.1", default-features = false, features = [
"std",
"NSString",
"NSLocale",
"NSBundle",
"NSUserDefaults",
] }
objc2-app-kit = { version = "0.3.1", default-features = false, features = [
"std",
"NSColorSpace",
"NSButton",
"NSControl",
"NSResponder",
"NSToolbar",
"NSView",
"NSWindow",
] }
[target.'cfg(windows)'.dependencies]
windows-core = "=0.61.2"
windows = { version = "=0.61.3", features = ["Data_Xml_Dom", "UI_Notifications", "Data_Pdf", "Storage", "Storage_Streams", "Foundation", "System", "UI_Composition", "UI_Composition_Desktop", "Win32_System_WinRT_Composition", "Win32_System_WinRT", "Win32_Graphics_Gdi", "Win32_System_Com", "Win32_System_Com_StructuredStorage", "Win32_System_DataExchange", "Win32_System_Memory", "Win32_System_Ole", "Win32_System_SystemServices", "Win32_UI_Shell", "Win32_UI_Shell_PropertiesSystem", "Win32_System_Variant", "Win32_Storage_FileSystem", "Win32_UI_Input_KeyboardAndMouse"] }
dirs = "6.0.0"
dwrote = "0.11.5"
# Registry reads for installed-shell detection (WSL distros under Lxss, Git /
# PowerShell App Paths) — the new-tab profile dropdown. RegKey wrapper over the
# windows-sys registry APIs we already depend on.
winreg = "0.55"
# Native WinRT toast (right-corner / Action Center). Zero user setup: it fires
# under Nebula's own AppUserModelID, which we register silently on first run
# (see `notify::win`), so the banner shows "Nebula" instead of "PowerShell".
tauri-winrt-notification = "0.7.3"
windows-sys = { version = "0.59", features = [
"Win32_UI_WindowsAndMessaging",
"Win32_Globalization",
"Win32_UI_Controls_Dialogs",
# System double-click time for the terminal's multi-click detection.
"Win32_UI_Input_KeyboardAndMouse",
# WinEvent hook (SetWinEventHook) for native move/size stage tracking:
# WM_ENTER/EXITSIZEMOVE are sent messages that never reach a msg hook.
"Win32_UI_Accessibility",
"Win32_UI_HiDpi",
# COM + Shell: build the Start-menu shortcut that carries our AUMID so the
# toast is attributed to Nebula (IShellLink + IPersistFile + IPropertyStore).
"Win32_System_Com",
"Win32_System_Com_StructuredStorage",
"Win32_System_Ole",
"Win32_UI_Shell",
"Win32_UI_Shell_Common",
"Win32_UI_Shell_PropertiesSystem",
"Win32_System_Variant",
"Win32_System_Threading",
# pane.exec 隔离进程树;关闭 Job 时回收仍持有 stdout/stderr pipe 的后代。
"Win32_System_JobObjects",
"Win32_System_LibraryLoader",
"Win32_System_SystemInformation",
# A single process snapshot includes creation times even for protected
# processes, so reused parent PIDs cannot attach unrelated processes to a pane.
"Wdk_System_SystemInformation",
"Wdk_System_Threading",
# RtlGetVersion:系统 backdrop 只从 Windows 11 build 22621 起可用,
# 不能依赖会受兼容清单影响的旧版本查询 API。
"Wdk_System_SystemServices",
"Win32_System_Registry",
"Win32_System_Console",
# Named pipe server for nebula-hook (AI-CLI turn events). IO/Security
# gate ConnectNamedPipe/ReadFile/CreateNamedPipeW's OVERLAPPED/DACL params.
"Win32_System_Pipes",
"Win32_Storage_FileSystem",
# 剪贴板截图粘贴(clipboard::clipboard_image_png):OpenClipboard/
# GetClipboardData(CF_DIB) 与 GlobalLock/GlobalSize。
"Win32_System_DataExchange",
"Win32_System_Memory",
"Win32_System_IO",
"Win32_Security",
"Win32_Security_Credentials",
"Win32_Graphics_Gdi",
"Win32_System_Diagnostics_ToolHelp",
"Win32_System_Diagnostics_Debug",
"Win32_Foundation",
"Win32_Graphics_Dwm",
]}
[target.'cfg(windows)'.build-dependencies]
embed-resource = "3.0.2"
[features]
# 正式产品只有 GPUI 壳。旧 winit/glutin/crossfont 壳只在显式请求
# `legacy-shell` 时进入依赖图,不能再被 workspace 默认构建误打进发布包。
default = ["gpui-shell"]
legacy-shell = [
"dep:crossfont",
"dep:glutin",
"dep:gl_generator",
"wayland",
"x11",
]
x11 = [
"copypasta/x11",
"winit/x11",
"glutin/x11",
"glutin/glx",
"png",
]
wayland = [
"copypasta/wayland",
"glutin/wayland",
"winit/wayland",
"winit/wayland-dlopen",
# ab_glyph 口味而非 crossfont 口味:摘掉 sctk-adwaita 对 crossfont ^0.8
# 的依赖(0.11+ 才升 ^0.9),避免图谱里出现双版本 crossfont → 双版本
# yeslogic-fontconfig-sys(links 冲突随之回归)。仅影响 Linux Wayland 窗饰文字。
"winit/wayland-csd-adwaita",
]
nightly = []
# GPUI UI 层(产品代码在 src/gpui_shell/),也是默认与正式发布 UI。
# `--gpui` 作为兼容参数保留;旧壳只存在于显式 `legacy-shell` 构建。
gpui-shell = [
"dep:gpui",
"dep:gpui_platform",
"dep:gpui-component",
"dep:gpui-component-assets",
"dep:nebula-split",
"dep:futures",
]
# 真实 GPUI hitbox / 鼠标路由测试显式启用;不能放进 dev-dependencies,
# 否则不带 gpui-shell 的默认 `cargo test -p nebula` 也会编译整棵 GPUI。
gpui-test-support = ["gpui-shell", "gpui/test-support", "gpui-component/test-support"]
# Explicit local updater acceptance harness; compile-rejected in release builds.
update-test-source = ["gpui-shell"]