Skip to content

feat: add AUR source package (limux) alongside limux-bin#50

Open
antonbarchukov wants to merge 81 commits into
am-will:mainfrom
antonbarchukov:fix/libghostty-cpu-target
Open

feat: add AUR source package (limux) alongside limux-bin#50
antonbarchukov wants to merge 81 commits into
am-will:mainfrom
antonbarchukov:fix/libghostty-cpu-target

Conversation

@antonbarchukov
Copy link
Copy Markdown
Contributor

  • Add PKGBUILD-source.template that builds from source on user's machine
  • Add validation jobs that gate AUR publishing:
    • validate-src: full zig+cargo build in Arch container
    • validate-bin: tarball content verification
  • Both AUR packages conflict with each other to prevent dual-install

Closes #42 #47 (#5)

Hold on merging this please, untested, I'm on macOS away from PC, can't fully test until later tonight.

am-will and others added 30 commits March 24, 2026 16:16
am-will and others added 29 commits April 1, 2026 00:25
Remove GTK SearchBar key capture from terminal and browser panes, and route terminal IME preedit/commit state through Ghostty so dead-key composition no longer opens find or loses input.

Co-authored-by: Codex <noreply@openai.com>
fix: handle localhost URLs in browser pane

Co-authored-by: Codex <noreply@openai.com>
…-open-browser-here

Add browser action to terminal context menu
Co-authored-by: Codex <noreply@openai.com>
  Introduce a modal settings window with General and Keybindings pages
  instead of restoring settings as a pane tab.

  Add app settings persistence for:
  - GTK color scheme
  - Ghostty color scheme
  - hover-to-focus terminal behavior

  Apply appearance changes live through libadwaita, keep Ghostty surfaces
  in sync with the selected scheme, and watch system theme changes through
  the portal/GSettings when the user chooses the system option.

  Refresh the pane, sidebar, and keybind editor styling to use theme-aware
  colors so the UI follows the selected appearance consistently.

  Also handle Ghostty config reload actions through the FFI bindings and
  make terminal hover-focus read from the current app config at runtime.
… to None

  instead of forcing light mode, so Ghostty’s “System” setting can fall back to
  the resolved GTK/libadwaita theme instead of getting pinned to light.

  In rust/limux-host-linux/src/app_config.rs:160, settings saves now refuse to
  overwrite malformed existing JSON, preserve unrelated top-level keys, and write
  atomically through a temp file + rename rather than writing in place.
… longer

  does a blocking portal read on the UI thread. Limux now boots using local
  GSettings state first, then creates the portal proxy asynchronously and reads
  org.freedesktop.appearance with a bounded timeout in rust/limux-host-linux/src/
  window.rs:1588. Portal change signals also stop doing synchronous re-reads.

  The settings persistence path in rust/limux-host-linux/src/app_config.rs:161
  now returns real save errors instead of only printing them, and malformed
  settings.json is recovered by backing it up and rewriting a fresh valid config
  in rust/limux-host-linux/src/app_config.rs:190. I also changed the settings
  callback flow in rust/limux-host-linux/src/settings_editor.rs:50, rust/limux-
  host-linux/src/pane.rs:157, and rust/limux-host-linux/src/window.rs:2845 so a
  failed save shows an alert and rolls the live config/theme back.
…s dark in rust/limux-host-linux/src/

  app_config.rs. Specifically, when settings.json does not exist yet, Limux now creates:

  "appearance": {
    "color_scheme": "dark",
    "ghostty_color_scheme": "dark"
  }
Co-authored-by: Codex <noreply@openai.com>
Replaces surgical widget reparenting with Ghostty-style atomic tree
rebuild. The old code detached and reattached GLArea widgets on the
same tick, which breaks GTK4's GL context lifecycle.

New architecture:
- SplitNode data model is the source of truth for split layout
- SplitTreeContainer manages async rebuild: tear down old widget tree,
  then rebuild from the data model on the next idle tick
- The one-tick separation between unrealize and realize prevents the
  GLArea breakage that caused the freeze
- Scrollback is fully preserved across split/close operations

Removes ~215 lines of surgical reparenting code from window.rs,
replaced by data model mutations that delegate to the container.
Replaces the light background app icon with a dark variant (#1E1E2E background) while preserving and slightly brightening the blue gradient chevron. All sizes regenerated from 512px source.
Co-authored-by: Codex <noreply@openai.com>
Replace pane reparenting with atomic split tree rebuild
Co-authored-by: Codex <noreply@openai.com>
Add a size check to package.sh that catches unoptimized libghostty
builds before they get shipped. A Debug build is ~89MB vs ~30MB for
ReleaseFast, and causes ~7x slower terminal IO throughput.
Instead of trusting whatever zig-out/ contains, package.sh now runs
the zig build itself with -Doptimize=ReleaseFast. This prevents
accidentally shipping a Debug build, which causes ~7x slower IO.
Keep the coalesced idle wakeup path from main, retain explicit GLArea renders, and redraw on remap so hidden terminals refresh when shown again.

Co-authored-by: Codex <noreply@openai.com>
Fail fast when Zig or the Ghostty submodule is missing, and document the new package.sh build flow in the README.\n\nCo-authored-by: Codex <noreply@openai.com>
Fix: reject Debug builds of libghostty in packaging
* Fix 10+ second freeze on pane split/close

Replaces surgical widget reparenting with Ghostty-style atomic tree
rebuild. The old code detached and reattached GLArea widgets on the
same tick, which breaks GTK4's GL context lifecycle.

New architecture:
- SplitNode data model is the source of truth for split layout
- SplitTreeContainer manages async rebuild: tear down old widget tree,
  then rebuild from the data model on the next idle tick
- The one-tick separation between unrealize and realize prevents the
  GLArea breakage that caused the freeze
- Scrollback is fully preserved across split/close operations

Removes ~215 lines of surgical reparenting code from window.rs,
replaced by data model mutations that delegate to the container.

* Wire control socket to GTK UI

Connects the existing limux-control Unix socket server to the GTK
window, enabling programmatic workspace management from external
tools (limux-cli, scripts, editor integrations).

New control_bridge module starts a socket listener in a background
thread and dispatches commands to the GTK main loop via polling.
Supported commands: workspace.create, workspace.list,
workspace.rename, workspace.activate, workspace.close,
surface.send_text.

Also adds TerminalHandle::send_text() for injecting text into
terminal surfaces, and pane::first_terminal_handle() for resolving
the active terminal in a workspace.

* Update app icon to dark mode variant

Replaces the light background app icon with a dark variant (#1E1E2E background) while preserving and slightly brightening the blue gradient chevron. All sizes regenerated from 512px source.

* Fix wrapped workspace root pane resolution

Co-authored-by: Codex <noreply@openai.com>

* host: coalesce ghostty wakeup idles

Co-authored-by: Codex <noreply@openai.com>

* Reject Debug builds of libghostty in packaging script

Add a size check to package.sh that catches unoptimized libghostty
builds before they get shipped. A Debug build is ~89MB vs ~30MB for
ReleaseFast, and causes ~7x slower terminal IO throughput.

* Build libghostty with ReleaseFast automatically in package.sh

Instead of trusting whatever zig-out/ contains, package.sh now runs
the zig build itself with -Doptimize=ReleaseFast. This prevents
accidentally shipping a Debug build, which causes ~7x slower IO.

* host: reconcile render throttling with main

Keep the coalesced idle wakeup path from main, retain explicit GLArea renders, and redraw on remap so hidden terminals refresh when shown again.

Co-authored-by: Codex <noreply@openai.com>

* Clarify packaging prerequisites

Fail fast when Zig or the Ghostty submodule is missing, and document the new package.sh build flow in the README.\n\nCo-authored-by: Codex <noreply@openai.com>

* host: wire control socket into GTK UI

Align the GTK host bridge with the current control protocol, remove the CLI fallback that would double-run workspace commands, and dispatch control commands onto the GLib main context directly.

Co-authored-by: Codex <noreply@openai.com>

* host: drop unused control helper

Remove the stale pane helper pulled in from the original PR branch so the host bridge stays warning-free under stricter checks.

Co-authored-by: Codex <noreply@openai.com>

---------

Co-authored-by: am.will <42459108+am-will@users.noreply.github.com>
Co-authored-by: Codex <noreply@openai.com>
Co-authored-by: Codex <noreply@openai.com>
Bump workspace version to 0.1.11 for the rebuilt release artifacts.

Co-authored-by: Codex <noreply@openai.com>
Co-authored-by: Codex <noreply@openai.com>
Co-authored-by: Codex <noreply@openai.com>
- Add PKGBUILD-source.template that builds from source on user's machine
- Add validation jobs that gate AUR publishing:
  - validate-src: full zig+cargo build in Arch container
  - validate-bin: tarball content verification
- Both AUR packages conflict with each other to prevent dual-install

Closes am-will#5
- Fix webkit2gtk-6.0 -> webkitgtk-6.0 (wrong Arch package name)
- Add ghostty as makedepend and use /usr/share/ghostty for resources
  instead of ghostty/zig-out/share which doesn't exist with -Dapp-runtime=none
- Deduplicate version extraction into a shared resolve-version job
- Pass SHA256 via job outputs instead of downloading tarball twice
- Guard publish jobs with repository check to skip cleanly on forks
- Replace manual retry loop with curl --retry
The source-built binary was missing gladLoaderLoadGLContext symbols
that libghostty.so needs at runtime. Cargo's --gc-sections discards
them since nothing in Rust references them directly.

Fix: build glad as a shared library from Ghostty's vendored source,
install it alongside libghostty.so, and patch the binary with patchelf
to load it.

Also adds missing debug package conflicts between limux and limux-bin.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

BUG: v0.1.12 Linux x86_64 release crashes immediately with SIGILL

6 participants