Upstream has shipped Linux .deb/.rpm artifacts since 0.6.19, and 0.6.20 fixed
the startup panic that made the GUI unusable there (a RefCell double-borrow
when the theme was applied from inside the XDG portal appearance callback,
AprilNEA/OpenLogi#337). 0.6.21 added a Linux client-side titlebar. The build
needs no patching, only the GPUI runtime dependencies and packaging.
Three binaries on Linux rather than two: openlogi-agent is the daemon the GUI
talks to over agent.sock for device control.
The udev rule, desktop entry and systemd user unit are installed from
packaging/linux/ in the source tree rather than authored here — they are the
same files upstream feeds to nfpm for the .deb. Only the unit is touched, to
rewrite its hardcoded /usr/bin ExecStart to the store path (upstream's
install.sh does the same for a custom PREFIX).
GPUI (Blade) dlopen()s its Vulkan/Wayland/GL backends, so they are invisible
to the linker and the GUI needs a wrapper to find them at runtime.
Darwin is untouched: same two binaries, same cargo-bundle installPhase.
Assisted-by: Claude Code (claude-opus-5)
Changelog: https://github.com/AprilNEA/OpenLogi/releases/tag/v0.6.25
Two packaging changes the version alone does not explain:
preBuild is gone. Upstream has shipped a prebuilt
crates/openlogi-gui/icon/AppIcon.icns since 0.6.19, and 0.6.x no longer
contains design/icon/openlogi.svg — so rendering the icon here would fail on
a missing file. cargo-bundle picks the committed .icns straight up, which
drops both resvg and libicns from nativeBuildInputs. The rest of the hook
scrubbed crates/openlogi-gui/assets, a directory the release tarball does not
contain: cargo-bundle resolves the crate's resources = ["assets/**/*"] with a
plain glob, and a glob matching nothing is not an error, so creating it empty
changed no bundle either.
crates/openlogi-gui/build.rs now embeds the upstream gpui-component themes
at build time. Those JSON files live at the gpui-component repo ROOT rather
than inside the crate, and cargo vendoring only takes crates, so build.rs
walks the vendored tree without finding themes/catppuccin.json and panics.
Fetching the exact rev Cargo.lock pins gpui-component 0.5.2 to and setting
the documented OPENLOGI_THEMES_DIR escape hatch is the smallest fix. It has
to go through `env` because __structuredAttrs keeps plain attrs out of the
build environment.
That rev duplicates Cargo.lock, which IFD rules forbid reading at eval time,
so postPatch asserts the two still agree: a stale pin then fails in
patchPhase rather than silently embedding themes from the wrong revision.
Assisted-by: Claude Code (claude-opus-5)
https://github.com/jdx/mise/releases/tag/v2026.8.3
Match the generated completion guard independently of the shell-specific
type -p/-P flag so usage continues to resolve through its Nix store path.
Assisted-by: OpenAI Codex (GPT-5)