Share the locale registry and generate typed static catalogs with tested fallback and allocation contracts. Add searchable sections, a backed-up defaults reset, compact navigation and expandable appearance help. Include the existing formatter corrections required by the repository hook, and remove the obsolete settings-pane line-budget exception after its construction, localization and navigation responsibilities move out. Update both English and Chinese unreleased notes.
290 lines
11 KiB
TOML
290 lines
11 KiB
TOML
[package]
|
||
name = "nebula"
|
||
version = "1.5.0"
|
||
license = "GPL-3.0-or-later"
|
||
description = "Pebrel — a GPU-accelerated terminal emulator"
|
||
readme = "README.md"
|
||
homepage = "https://github.com/Kuddev/nebula"
|
||
repository = "https://github.com/Kuddev/nebula"
|
||
edition.workspace = true
|
||
rust-version.workspace = true
|
||
|
||
[[bin]]
|
||
name = "nebula"
|
||
path = "src/main.rs"
|
||
|
||
[dependencies.nebula_terminal]
|
||
path = "../nebula_terminal"
|
||
version = "1.5.0"
|
||
|
||
[dependencies.nebula_config_derive]
|
||
path = "../nebula_config_derive"
|
||
version = "1.5.0"
|
||
|
||
[dependencies.nebula_config]
|
||
path = "../nebula_config"
|
||
version = "1.5.0"
|
||
|
||
# 可选: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.5.0"
|
||
|
||
[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"
|
||
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.
|
||
ureq = { version = "3", features = ["json"] }
|
||
zeroize = "1"
|
||
winit = { version = "0.30.9", default-features = false, features = ["rwh_06", "serde"] }
|
||
global-hotkey = "0.8.0"
|
||
getrandom = "0.3.3"
|
||
pollster = { version = "0.4", optional = true }
|
||
wgpu = { version = "25.0.2", optional = true }
|
||
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.5.0" }
|
||
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",
|
||
"NSResponder",
|
||
"NSView",
|
||
"NSWindow",
|
||
] }
|
||
|
||
[target.'cfg(windows)'.dependencies]
|
||
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",
|
||
# 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 = []
|
||
wgpu-foundation = ["dep:pollster", "dep:wgpu"]
|
||
# 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"]
|