feat: merge nebula_gpui into the root workspace (crossfont 0.9.0 unblocks links)

- crossfont 0.8.1 -> 0.9.0: upstream bumped yeslogic-fontconfig-sys to ^6.0,
  aligning with gpui's zed-font-kit so a single 6.0.1 owns links=fontconfig.
- wayland CSD switches to the ab_glyph flavor so sctk-adwaita 0.10 stops
  pulling crossfont ^0.8 (and yeslogic ^5) back into the graph. Linux-only
  decoration text; Windows/macOS unaffected.
- Drop the workspace exclude and nebula_gpui's member-level lockfile; one
  lockfile now holds gpui 0.2.2 + crossfont 0.9.0. Both bins compile.
- ARCHITECTURE.md: the "unresolvable conflict" section now records the fix.
This commit is contained in:
kuddev committed 2026-08-12 23:52:53 +08:00
1 parent 3240727d8d
commit b5ff2de9b7
6 files changed
+5064 -8134

No files matched your search

Generated
+5041 -197
View File
File diff suppressed because it is too large. Load diff
+1 -1
View File
@@ -6,8 +6,8 @@ members = [
"nebula_config_derive",
"nebula-completions",
"nebula_hook",
"nebula_gpui",
]
exclude = ["nebula_gpui"]
resolver = "2"
[workspace.package]
+5 -2
View File
@@ -44,7 +44,7 @@ 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 = "0.8.1"
crossfont = "0.9.0"
glutin = { version = "0.32.2", default-features = false, features = ["egl", "wgl"] }
html-escape = "0.2.14"
home = "0.5.5"
@@ -182,7 +182,10 @@ wayland = [
"glutin/wayland",
"winit/wayland",
"winit/wayland-dlopen",
"winit/wayland-csd-adwaita-crossfont",
# 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"]
+13 -13
View File
@@ -60,22 +60,22 @@ removal condition, and the maintenance owner is explicit.
## Workspace Boundary
`nebula_gpui` is excluded from the root Cargo workspace because of a proven,
unresolvable native-link conflict (verified 2026-08-12 by attempting the
merge and letting Cargo resolve):
`nebula_gpui` is a member of the root Cargo workspace (merged 2026-08-12).
The former blocker — two packages holding `links = "fontconfig"` — was
resolved by aligning both sides on `yeslogic-fontconfig-sys ^6.0`:
- `gpui 0.2.2` → `zed-font-kit 0.14.1-zed` → `yeslogic-fontconfig-sys ^6.0`
- `nebula` (main app) → `crossfont 0.8.1` → `yeslogic-fontconfig-sys ^5.0`
- `nebula` → `crossfont 0.9.0` (upstream bumped to `^6.0` in 0.9.0)
- The winit Wayland decoration feature switched from the crossfont flavor to
`wayland-csd-adwaita` (ab_glyph), so `sctk-adwaita 0.10` no longer drags
`crossfont ^0.8` (and with it `yeslogic ^5`) back into the graph. This is
Linux-only decoration text; Windows/macOS builds are unaffected.
Both packages set `links = "fontconfig"`, Cargo allows exactly one version of
a `links` key per dependency graph, and `^5`/`^6` have no intersection, so a
merged workspace fails at resolve time on every platform (the lockfile is
platform-independent). No patch can fix this without forking a font stack.
The merge becomes possible exactly when `crossfont` leaves the dependency
graph — that is, when the legacy OpenGL renderer is retired. Until then the
two workspaces stay separate, and pure Rust core crates such as
`nebula_terminal` are shared across the boundary via `path` dependencies.
One lockfile now holds `gpui 0.2.2`, `crossfont 0.9.0`, and a single
`yeslogic-fontconfig-sys 6.0.1`, and both binaries compile from the merged
workspace. `crossfont` still leaves the graph entirely when the legacy
OpenGL renderer is retired; the decoration switch was the first consumer
removed on that path.
## Terminal Vertical Slice
-7918
View File
File diff suppressed because it is too large. Load diff
+4 -3
View File
@@ -19,9 +19,10 @@ gpui-component-assets = "=0.5.1"
# 边界直接 path 引用而不会重新引入 fontconfig links 冲突。
nebula_terminal = { path = "../nebula_terminal" }
futures = "0.3"
[workspace]
resolver = "2"
# 读取用户 nebula.toml 的字体/配色子集;版本与主仓保持一致。
serde = { version = "1", features = ["derive"] }
toml = "0.9"
dirs = "6.0.0"
[lints.clippy]
dbg_macro = "deny"