Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
09b514f
feat(desktop): add terminal surface crate with libghostty-vt spike
roodboi Nov 15, 2026
526c70e
fix(desktop): own terminal sessions through teardown and bound all I/O
roodboi Nov 15, 2026
e54ba74
build(desktop): provision libghostty-vt inputs and never download in …
roodboi Nov 15, 2026
470a616
Merge remote-tracking branch 'origin/next' into feat/desktop-term-sur…
roodboi Nov 15, 2026
a48ad64
fix(desktop): keep the 10,000-line scrollback bound on wide terminals
roodboi Nov 15, 2026
8257836
docs(desktop): record why the terminal draws its own cells and what i…
roodboi Nov 15, 2026
973fd2c
feat(desktop): add terminal sessions, tabs and Ghostty look; fail clo…
roodboi Nov 15, 2026
f6e8ace
docs(desktop): document terminal sessions, CLI requests and fail-clos…
roodboi Nov 15, 2026
343aa29
fix(desktop): bound the Ghostty config reader and move shortcuts to a…
roodboi Nov 15, 2026
410b059
docs(desktop): list terminal actions and bindings; describe bounded c…
roodboi Nov 15, 2026
cbc9a80
Merge remote-tracking branch 'origin/next' into feat/desktop-term-sur…
roodboi Nov 15, 2026
b33c542
fix(desktop): draw prompt symbols, powerline and box glyphs in the te…
roodboi Nov 15, 2026
610cb21
docs(desktop): record the terminal glyph approach, font licences and …
roodboi Nov 15, 2026
933705d
fix(desktop): keep self-drawn terminal glyphs inside their cells
roodboi Nov 15, 2026
a5d5868
docs(desktop): record glyph placement and clipping; Font Logos is und…
roodboi Nov 15, 2026
330f84a
fix(desktop): keep the terminal's find count in step with its highlights
roodboi Nov 15, 2026
e518f0b
perf(desktop): run the terminal's search once per change, not twice p…
roodboi Nov 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 51 additions & 0 deletions .github/workflows/desktop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -105,3 +105,54 @@ jobs:
run: cargo clippy --locked --all-targets -- -D warnings
- name: Build app
run: cargo build --locked -p hack-desktop

# The terminal surface's libghostty-vt feature (HACK-2252). The provision
# step is the only one that fetches libghostty-vt, Zig or the symbols font, and it verifies
# each file against a sha256 committed in the script. The build, lint and
# tests then run in a network namespace with no interfaces but a down
# loopback, so they cannot download anything.
term-ghostty:
name: Desktop terminal surface (Linux, libghostty-vt, offline build)
runs-on: ubuntu-24.04
timeout-minutes: 45
defaults:
run:
working-directory: apps/desktop
steps:
- uses: actions/checkout@v4
- name: Install GPUI build dependencies
run: |
sudo apt-get update
sudo apt-get install -y --no-install-recommends \
clang libfontconfig-dev libwayland-dev libxkbcommon-x11-dev \
libx11-xcb-dev libssl-dev libzstd-dev libvulkan-dev pkg-config xz-utils \
mesa-vulkan-drivers
- uses: dtolnay/rust-toolchain@1.98.1
with:
components: clippy
- uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
apps/desktop/target
key: desktop-term-ghostty-${{ runner.os }}-${{ hashFiles('apps/desktop/Cargo.lock') }}
restore-keys: desktop-term-ghostty-${{ runner.os }}-
- uses: actions/cache@v4
with:
path: ${{ runner.temp }}/ghostty-inputs
key: desktop-ghostty-inputs-${{ runner.os }}-${{ hashFiles('apps/desktop/term/scripts/provision-ghostty.sh') }}
- name: Provision pinned Zig and libghostty-vt inputs (checksummed)
run: bash term/scripts/provision-ghostty.sh --dir "$RUNNER_TEMP/ghostty-inputs" --emit github >> "$GITHUB_ENV"
- name: Install pinned per-test process runner
run: |
bash ../../scripts/install-cargo-nextest.sh "$RUNNER_TEMP/desktop-nextest"
echo "$RUNNER_TEMP/desktop-nextest" >> "$GITHUB_PATH"
- name: Fetch locked crates
run: cargo fetch --locked
# The render test draws glyphs offscreen and inspects the pixels. Mesa's
# software Vulkan driver (installed above) is its renderer here.
- name: Build, lint and test the ghostty feature with networking disabled
env:
HACK_TERM_REQUIRE_RENDERER: "1"
run: bash term/scripts/no-network.sh bash term/scripts/check-ghostty.sh
9 changes: 9 additions & 0 deletions apps/desktop/.cargo/config.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# hack-desktop-term's `ghostty` feature builds libghostty-vt through the
# ghostty-vt-sys build script. That script downloads its release archives
# when GHOSTTY_RELEASE_DIR is unset. This workspace builds only from
# provisioned, checksummed inputs (term/scripts/provision-ghostty.sh), so the
# script's download base is set to a URL that cannot be fetched: without
# GHOSTTY_RELEASE_DIR the build fails instead of using the network.
# GHOSTTY_RELEASE_DIR, when set, takes precedence and this value is unused.
[env]
GHOSTTY_RELEASE_URL = "downloads-disabled://run-term/scripts/provision-ghostty.sh-and-export-GHOSTTY_RELEASE_DIR"
Loading
Loading