app-editors/zeo
Zeo - the Zed editor, rebranded, built from Zed 1.21.0_pre20260912
-
zeo-0.1.0_p20260912~amd64+X +claude-agent-acp-plus +claude-agent-acp-tui +claude-code-ide inspector +mimalloc neovim screen-capture test tracy +wayland +llvm_slot_22 debug
View
Download
Browse License: GPL-3+ BSD 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 ZLIB BZIP2 Overlay: bentoo
ChangeLog
commit 4c1b1b19fba3d84ecf0ab7559b1025a9aaa14396
Author: lucascouts <lucascs@protonmail.com>
Date: Sun Sep 13 20:23:30 2026 -0300
app-editors/zeo: apply 0025, the user-visible product name
Twenty-one string literals that say "Zed" where they mean the application the
user is running. Chosen from an inventory of all 404 such literals in the tree,
which is versioned in the zeo repository - most of the other 383 must keep saying
Zed, and the patch header spells out each class and what breaks if it does not:
the vendor and its plans, the Zed team, font-family lookup keys, a User-Agent,
theme names referenced from user settings.
The window title, which a user reads more than any other string, is absent from
this patch because it never needed one. It resolves through display_name(), and
0021 already made that return "Zeo".
Numbered 0025 rather than 0024: app-editors/zed claimed 0024 for
0024-agent-deep-link-session.patch first, registering it in both `series` and its
own PATCHES. The two packages share one numbering space, and the number belongs
to whoever registers it.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
commit 449222cb7c41be7cf172b84f1159dd06111cc057
Author: lucascouts <lucascs@protonmail.com>
Date: Sun Sep 13 15:48:05 2026 -0300
app-editors/zeo: version it as Zeo, not as the Zed it is built from
0.1.0_p20260912 replaces 1.21.0_pre20260912. Zeo is at the start of its own life;
borrowing Zed's version number said otherwise, and would have kept saying it every
time the packaged Zed moved.
The first spelling tried was 0.1.0_p1.21.0_20260912, to carry both. Portage
rejects it, and PMS 3.2 says why:
ver ::= number ('.' number)* letter? suffix* revision?
suffix ::= '_' ('alpha'|'beta'|'pre'|'rc'|'p') [number]
A suffix number is a plain integer, and no dot may follow a suffix. Verified
against the parser rather than read off the page: ververify accepts 0.1.0_p1 and
rejects 0.1.0_p1.2, which isolates the dot as the thing that breaks.
There is no version syntax for "my version, built from their version", so the Zed
base becomes ZED_PV - a variable, exactly as EGIT_COMMIT already is - and it is
what SRC_URI names the distfile after. That is not only documentation: it means
app-editors/zed and app-editors/zeo now SHARE one 24 MB distfile instead of
fetching identical bytes under two names.
The old ebuild is deleted rather than left beside the new one. 1.21.0_pre20260912
sorts ABOVE 0.1.0_p20260912, so keeping both would have left portage preferring
the version this commit is trying to retire. Nobody has it installed - it was
added an hour ago and never emerged - so nothing downgrades.
Ordering was checked for the scheme as a whole: 0.1.0 < 0.1.0_p20260912 <
0.1.0_p20260913 < 0.1.0_p20261001 < 0.2.0.
RELEASE_VERSION="$" now carries a string that is not valid semver. Traced
before changing it: the only consumer is crates/cli, through
option_env!("RELEASE_VERSION").unwrap_or_default(), which displays it. The parse
that would panic on bad input - AppVersion::load's expect("invalid version in
Cargo.toml") - is fed CARGO_PKG_VERSION from crates/zed/Cargo.toml, which no
ebuild touches.
pkgcheck scan is clean apart from the llvm-r1 deprecation app-editors/zed
reports identically.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
commit 21a5a125a49be3b88f63fceb9f082e07ab310d62
Author: lucascouts <lucascs@protonmail.com>
Date: Sun Sep 13 15:26:47 2026 -0300
app-editors/zeo: new package - the Zed editor, rebranded
Zeo is app-editors/zed's source, built from the same upstream commit, with a
rebrand applied as patches 0019-0023 on top of that package's series. It is not
a fork and carries no vendored copy of Zed.
Coexists with app-editors/zed and needs NO blocker, because the identity is
separate all the way down: /usr/bin/zeo, /usr/libexec/zeo-editor,
dev.zeo.Zeo.{png,desktop}, and ~/.config/zeo via patch 0019. Proved before
packaging, on a real build: KWin listed the window as dev.zeo.Zeo beside seven
dev.zed.Zed-Nightly windows, and a run with isolated XDG dirs created config/zeo
and data/zeo and no zed/ anything.
Three of app-editors/zed's flags are deliberately absent - collab,
extensions-cli, remote-server. Each installs a binary under a name that package
already uses (collab, zed-extension, zed-remote-server), and renaming Zed's
server infrastructure is not what a rebrand of the editor is for. Dropping them
is exactly what buys the blocker-free coexistence above.
Two things this ebuild does that are easy to get wrong, both commented in place:
It exports RELEASE_CHANNEL as an ENVIRONMENT VARIABLE in src_compile, as well
as writing the identically named file in src_prepare. They are different
inputs: the file drives the runtime ReleaseChannel enum through include_str!,
the variable is read by crates/zed/build.rs via option_env! to choose the
EMBEDDED window icon. build.rs matches it as a string with a `_ => "-dev"` arm,
so leaving it unset compiles clean and ships Zed's development icon.
app-editors/zed has that gap today - masked on Wayland, because a compositor
resolves the installed icon by app_id and never looks inside the binary.
It copies the Zeo mark in from FILESDIR during src_prepare rather than applying
it as a patch. GNU patch refuses a git binary hunk outright, and eapply is
`patch -p1`, so art cannot travel in the series at all. Its source of truth is
brand/rendered/ in lucascouts/zeo, reproducible from brand/build-icon.py.
S is spelled out as zed-$ rather than derived from $: the
upstream tarball unpacks under Zed's name, and $ is zeo here.
pkgcheck scan is clean apart from DeprecatedEclass on llvm-r1, which
app-editors/zed reports identically and which is an overlay-wide migration.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Author: lucascouts <lucascs@protonmail.com>
Date: Sun Sep 13 20:23:30 2026 -0300
app-editors/zeo: apply 0025, the user-visible product name
Twenty-one string literals that say "Zed" where they mean the application the
user is running. Chosen from an inventory of all 404 such literals in the tree,
which is versioned in the zeo repository - most of the other 383 must keep saying
Zed, and the patch header spells out each class and what breaks if it does not:
the vendor and its plans, the Zed team, font-family lookup keys, a User-Agent,
theme names referenced from user settings.
The window title, which a user reads more than any other string, is absent from
this patch because it never needed one. It resolves through display_name(), and
0021 already made that return "Zeo".
Numbered 0025 rather than 0024: app-editors/zed claimed 0024 for
0024-agent-deep-link-session.patch first, registering it in both `series` and its
own PATCHES. The two packages share one numbering space, and the number belongs
to whoever registers it.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
commit 449222cb7c41be7cf172b84f1159dd06111cc057
Author: lucascouts <lucascs@protonmail.com>
Date: Sun Sep 13 15:48:05 2026 -0300
app-editors/zeo: version it as Zeo, not as the Zed it is built from
0.1.0_p20260912 replaces 1.21.0_pre20260912. Zeo is at the start of its own life;
borrowing Zed's version number said otherwise, and would have kept saying it every
time the packaged Zed moved.
The first spelling tried was 0.1.0_p1.21.0_20260912, to carry both. Portage
rejects it, and PMS 3.2 says why:
ver ::= number ('.' number)* letter? suffix* revision?
suffix ::= '_' ('alpha'|'beta'|'pre'|'rc'|'p') [number]
A suffix number is a plain integer, and no dot may follow a suffix. Verified
against the parser rather than read off the page: ververify accepts 0.1.0_p1 and
rejects 0.1.0_p1.2, which isolates the dot as the thing that breaks.
There is no version syntax for "my version, built from their version", so the Zed
base becomes ZED_PV - a variable, exactly as EGIT_COMMIT already is - and it is
what SRC_URI names the distfile after. That is not only documentation: it means
app-editors/zed and app-editors/zeo now SHARE one 24 MB distfile instead of
fetching identical bytes under two names.
The old ebuild is deleted rather than left beside the new one. 1.21.0_pre20260912
sorts ABOVE 0.1.0_p20260912, so keeping both would have left portage preferring
the version this commit is trying to retire. Nobody has it installed - it was
added an hour ago and never emerged - so nothing downgrades.
Ordering was checked for the scheme as a whole: 0.1.0 < 0.1.0_p20260912 <
0.1.0_p20260913 < 0.1.0_p20261001 < 0.2.0.
RELEASE_VERSION="$" now carries a string that is not valid semver. Traced
before changing it: the only consumer is crates/cli, through
option_env!("RELEASE_VERSION").unwrap_or_default(), which displays it. The parse
that would panic on bad input - AppVersion::load's expect("invalid version in
Cargo.toml") - is fed CARGO_PKG_VERSION from crates/zed/Cargo.toml, which no
ebuild touches.
pkgcheck scan is clean apart from the llvm-r1 deprecation app-editors/zed
reports identically.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
commit 21a5a125a49be3b88f63fceb9f082e07ab310d62
Author: lucascouts <lucascs@protonmail.com>
Date: Sun Sep 13 15:26:47 2026 -0300
app-editors/zeo: new package - the Zed editor, rebranded
Zeo is app-editors/zed's source, built from the same upstream commit, with a
rebrand applied as patches 0019-0023 on top of that package's series. It is not
a fork and carries no vendored copy of Zed.
Coexists with app-editors/zed and needs NO blocker, because the identity is
separate all the way down: /usr/bin/zeo, /usr/libexec/zeo-editor,
dev.zeo.Zeo.{png,desktop}, and ~/.config/zeo via patch 0019. Proved before
packaging, on a real build: KWin listed the window as dev.zeo.Zeo beside seven
dev.zed.Zed-Nightly windows, and a run with isolated XDG dirs created config/zeo
and data/zeo and no zed/ anything.
Three of app-editors/zed's flags are deliberately absent - collab,
extensions-cli, remote-server. Each installs a binary under a name that package
already uses (collab, zed-extension, zed-remote-server), and renaming Zed's
server infrastructure is not what a rebrand of the editor is for. Dropping them
is exactly what buys the blocker-free coexistence above.
Two things this ebuild does that are easy to get wrong, both commented in place:
It exports RELEASE_CHANNEL as an ENVIRONMENT VARIABLE in src_compile, as well
as writing the identically named file in src_prepare. They are different
inputs: the file drives the runtime ReleaseChannel enum through include_str!,
the variable is read by crates/zed/build.rs via option_env! to choose the
EMBEDDED window icon. build.rs matches it as a string with a `_ => "-dev"` arm,
so leaving it unset compiles clean and ships Zed's development icon.
app-editors/zed has that gap today - masked on Wayland, because a compositor
resolves the installed icon by app_id and never looks inside the binary.
It copies the Zeo mark in from FILESDIR during src_prepare rather than applying
it as a patch. GNU patch refuses a git binary hunk outright, and eapply is
`patch -p1`, so art cannot travel in the series at all. Its source of truth is
brand/rendered/ in lucascouts/zeo, reproducible from brand/build-icon.py.
S is spelled out as zed-$ rather than derived from $: the
upstream tarball unpacks under Zed's name, and $ is zeo here.
pkgcheck scan is clean apart from DeprecatedEclass on llvm-r1, which
app-editors/zed reports identically and which is an overlay-wide migration.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

