Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

update ghostty #2

Closed
wants to merge 181 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
181 commits
Select commit Hold shift + click to select a range
10f4f28
module version of ghostty
gabydd Dec 30, 2024
48faa62
allow for non root options
gabydd Dec 30, 2024
47da20a
enable out of tree use of opengl renderer
gabydd Dec 31, 2024
89a78c0
make buildpkg pub
gabydd Jan 13, 2025
4a4db7a
Fix backslash comment in ghostty.h
askielboe Jan 13, 2025
167b127
gtk: hide titlebar if fullscreened
jcollie Jan 13, 2025
c363983
terminal: keep track of colon vs semicolon state in CSI params
mitchellh Jan 13, 2025
6c14aea
Preserve full URL when pasting from clipboard
liby Jan 13, 2025
4e42b0c
fix(window): ensure last_tab action on linux navigates to last tab
pkarakal Jan 12, 2025
a720f1d
apprt/gtk: add toggle_maximize keybind and window-maximize config option
aw1875 Jan 11, 2025
fa1a888
chore: rename config value to maximize and move startup logic to prop…
aw1875 Jan 11, 2025
46684f2
gtk: add config entry to hide titlebar when the window is maximized
jcollie Jan 13, 2025
5605db3
fix(PageList): when cloning, explicitly set cols
qwerasd205 Jan 10, 2025
dae5d2e
Metal: blend in Display P3 color space, add option for linear blending
qwerasd205 Jan 10, 2025
ba125f0
config: remove experimental linear and merge into text-blending
mitchellh Jan 13, 2025
306333a
fix: Ensure file paths derived from pasteboard operations are properl…
AlexJuca Jan 13, 2025
ad5d595
gtk(wayland): implement server-side decorations
pluiedev Jan 6, 2025
a8f3b57
fix: building on systems with older adwaita
prplz Jan 14, 2025
2cb8bcf
config: fix window-decoration enum parsing to allow client, none
mitchellh Jan 14, 2025
61d6b0c
fix(macos): prevent transparency leakage/flash in new/resized surfaces
qwerasd205 Jan 15, 2025
f4cc769
fix(Metal): handle non-extended padding color transparency
qwerasd205 Jan 15, 2025
868713d
gtk(wayland): respect compositor SSD preferences
pluiedev Jan 15, 2025
61ebcf6
bash: less intrusive automatic shell integration
jparise Jan 14, 2025
f74919e
bash: remove sed dependency for history processing
jparise Jan 16, 2025
d3688a9
bash: improve prior_trap processing
jparise Jan 16, 2025
f0d4d9f
macos: respect the "auto" window decoration setting
mitchellh Jan 16, 2025
e267fe5
fix(Metal): fix incorrect premultiplication of colors
qwerasd205 Jan 17, 2025
6908796
bash: revert automatic shell integration changes
jparise Jan 20, 2025
40445f9
deps: Update iTerm2 color schemes
mitchellh Jan 19, 2025
09849a2
termio: revise macOS-specific .hushlogin note
jparise Jan 18, 2025
55403ee
chore: update stb_image.h
eltociear Jan 18, 2025
c2ff818
gtk: don't toggle headerbar on (un)maximize while using SSDs
pluiedev Jan 17, 2025
17ce61b
gtk: always set the title on the underlying window when using adwaita
jcollie Jan 17, 2025
e32dbb2
Fix typo in binding comments
bfbachmann Jan 19, 2025
6127b17
fix(wuffs): don't premul alpha when loading images
qwerasd205 Jan 17, 2025
e239bbd
fix(flatpak): construct null-terminated array for arguments
alaviss Jan 18, 2025
eec14e8
Fix `shell-integration-features` being ignored when `shell-integratio…
liby Jan 14, 2025
8b44175
Add tests for setup shell integration features
liby Jan 14, 2025
2715e09
Update the documentation to better explain that `shell-integration-fe…
liby Jan 14, 2025
45f2873
Ensure `setup_features` runs even when shell detection fails
liby Jan 15, 2025
ad9af56
Manually call orderOut on terminal close alert
xalbd Jan 16, 2025
1892ccb
Set alert to nil when modal interacted with
xalbd Jan 17, 2025
6c8ffdf
add and use flag for selecting empty lines in the selectLine function
otomist Jan 14, 2025
3b73f83
use whitespace instead of new flag for selecting full line
otomist Jan 15, 2025
b4376bf
render consecutive shaders to the fbo
juliapaci Jan 13, 2025
7ca897d
fix: quick terminal hidden by macos menu bar
dmehala Jan 19, 2025
e4daabf
added exec permission back to dolphin action
andrejdaskalov Jan 20, 2025
d5f9dd5
fix(gtk): confirm tab close on close_tab action
keidax Jan 16, 2025
e1b03e8
unigen: Remove libc dependency, use ArenaAllocator
squeek502 Jan 21, 2025
c4239ad
fix(renderer): clip terminal contents to expected grid size (#4523)
qwerasd205 Jan 20, 2025
c172888
apprt/gtk: fundamentally rework input method handling
mitchellh Jan 21, 2025
9cbf23a
Switch default key bindings to include on and offscreen contents
MadLittleMods Jan 22, 2025
103247a
apprt/gtk: ibus activation should not encode keys
mitchellh Jan 23, 2025
f456e32
apprt/gtk: when text is committed, end the preedit state
mitchellh Jan 23, 2025
d0f0c9d
use main buffer and copy data to fbo texture (opengl) (#5294)
juliapaci Jan 23, 2025
df69b44
macOS: prevent native window drag by top region when titlebar hidden
qwerasd205 Oct 28, 2024
8ce7d8c
cli: allow renaming config fields to maintain backwards compatibility
mitchellh Jan 23, 2025
cd1c440
fix: gtk titlebar being restored if it shouldn't be
aw1875 Jan 15, 2025
19aaf93
fix: also respect gtk-titlebar value in fullscreened callback
aw1875 Jan 15, 2025
9bf3355
apprt/gtk: we should only show the headerbar again if csd
mitchellh Jan 23, 2025
05a3438
gtk: request initial color scheme asynchronously
pluiedev Jan 14, 2025
d7c22c5
config: rename adw-toasts to app-notifications
mitchellh Jan 23, 2025
9c0080a
nix: vms for testing ghostty
jcollie Jan 5, 2025
2fd12f2
nix: fix dark mode setting
jcollie Jan 5, 2025
9eeec43
nix: disable geary
jcollie Jan 5, 2025
0df2c2c
nix vm: more slimming
jcollie Jan 5, 2025
c8e7761
nix vm: maybe get vms working on darwin
jcollie Jan 5, 2025
caae942
nix vm: add documentation, add Gnome/X11 VM
jcollie Jan 6, 2025
79db475
fix typo
jcollie Jan 6, 2025
3285e47
nix vm: add plasma and cinnamon vms
jcollie Jan 7, 2025
2d7552b
nix vm: simplify vm definition
jcollie Jan 7, 2025
ae2d636
nix vm: try and make vm creation more re-usable
jcollie Jan 8, 2025
bc6b0e9
nix vm: more reusability
jcollie Jan 8, 2025
fe8a6bb
nix vm: +fish +zsh -zig
jcollie Jan 8, 2025
9736663
nix: document how to create custom vms
jcollie Jan 15, 2025
eb60ff1
nix: add x11 xfce vm
jcollie Jan 16, 2025
38a159e
documentation: consistent format for actions help
anund Jan 3, 2025
30b1664
docs: generate mdx file for cli actions
anund Jan 8, 2025
529f781
build: options to enable/disable terminfo & termcap install
jcollie Jan 23, 2025
1faaf40
Fix sudo fish shell integration
m154k1 Jan 21, 2025
ab9133c
bash: handle additional command arguments
jparise Jan 23, 2025
cb29a07
Prevent hyperlink hover state when mouse is outside viewport
liby Jan 21, 2025
ba04079
fix(Metal): always render explicit background colors fully opaque
qwerasd205 Jan 24, 2025
b66788f
Revert "build: options to enable/disable terminfo & termcap install"
mitchellh Jan 24, 2025
08e188f
Prevent fd leaks to the running shell or command
mitchellh Jan 24, 2025
708bb8c
termio/exec: if pty fd HUP, end read thread
mitchellh Jan 24, 2025
54121cf
Update libxev to fix zombie processes on macOS
mitchellh Jan 24, 2025
6cfcf04
build: options to enable/disable terminfo & termcap install (take 2)
jcollie Jan 24, 2025
b0faa61
only the cp step needs to depend on the mkdir step
jcollie Jan 24, 2025
9ca2d07
fix missing check of emit_termcap build option
jcollie Jan 24, 2025
81cffa2
Ignore SIGPIPE
mitchellh Jan 24, 2025
709cd0e
macos: autohide dock if quick terminal would conflict with it
mitchellh Jan 24, 2025
bc40d9e
Add chorded/sequenced keybinds to +list-keybinds output
dpatterbee Jan 24, 2025
5e7d274
Docs: improve doc structure for action bindings with args and examples
erf Jan 24, 2025
475e676
Docs: remove type from action arguments
erf Jan 24, 2025
aa5736e
macos: hide dock globally if the dock conflicts
mitchellh Jan 25, 2025
820e606
fix(renderer/Metal): properly load cursor color
qwerasd205 Jan 27, 2025
b7b8c49
renderer/Metal: improve linear blending correction
qwerasd205 Jan 28, 2025
aa24c92
cleanup: rename `text-blending` to `alpha-blending`
qwerasd205 Jan 28, 2025
a47b7f2
Fix older adwaita tab bars at top of window
danudey Jan 28, 2025
10d2e9e
Fix cmd+triple click not selecting full output
dpatterbee Jan 25, 2025
cd61123
Change ifs to exhaustive switches
dpatterbee Jan 26, 2025
e4cde5b
Remove if check that was left in after change to exhaustive switch
lmarlow Jan 29, 2025
633edd9
apprt/gtk: set key modifier flag if physical modifier key is pressed
mitchellh Jan 29, 2025
df62248
macOS: add link to release notes on appcast
AlternateRT Jan 17, 2025
469e0e6
input: performable bindings aren't part of the reverse mapping
mitchellh Jan 29, 2025
dab4bf1
dist: remove cdata tags from appcast, we escape it all
mitchellh Jan 29, 2025
274803c
ci: separate publish and release workflows
mitchellh Jan 30, 2025
27558a5
next version will be 1.1.0
mitchellh Jan 30, 2025
317622b
nix: use --system build flag instead of relying on $ZIG_GLOBAL_CACHE_DIR
jcollie Jan 30, 2025
7c1dc86
nix: fix Ghostty homepage in package
jcollie Jan 30, 2025
fff8f0a
gtk(x11): update blur region upon syncAppearance
pluiedev Jan 30, 2025
d9bb91e
ci: update publish job
mitchellh Jan 30, 2025
10f8c99
update version for development
mitchellh Jan 30, 2025
cc5ba08
Fix a typo in the docs for `adjust-strikethrough-position` and `adjus…
00-kat Feb 3, 2025
1483524
fix errno handle
rhodes-b Feb 2, 2025
fde8ee1
comment on why to not use posix.errno
rhodes-b Feb 2, 2025
351db13
deps: Update iTerm2 color schemes
mitchellh Feb 2, 2025
105a06c
linux: fix installation path of nautilus-python extension
jcollie Jan 31, 2025
00137d7
gtk(wayland): respect window-decoration=none on GNOME
pluiedev Jan 31, 2025
ec54a93
apprt/gtk: handle input methods that end preedit before commit
mitchellh Feb 3, 2025
07d700a
gtk(x11): support server-side decorations
pluiedev Feb 2, 2025
f2090fc
config: mention X11 support in window-decoration docs
pluiedev Feb 3, 2025
5d8e2af
core: add explicit errors to src/pty.zig
jcollie Feb 2, 2025
e43aebb
core: fix up pty Zig error sets
jcollie Feb 3, 2025
eadd143
core: add explicit errors to src/os/env.zig
jcollie Feb 2, 2025
299d2a5
core: handle src/os/env.zig errors on windows
jcollie Feb 2, 2025
5d985e0
core: fix puralization of src/os/env.zig Errors->Error
jcollie Feb 3, 2025
0c99ddb
macOS: binding checks should never trigger preedit callbacks
mitchellh Feb 3, 2025
2e2df88
linux: ensure that group dir fd is closed
jcollie Feb 2, 2025
2ed5da9
Toggling visibility is now ignored when in fullscreen mode.
shaps80 Jan 31, 2025
45d58fb
gtk: remove CSD styling when CSDs aren't used
pluiedev Feb 5, 2025
95edf57
Add a final newline to "No crash reports!"
00-kat Feb 5, 2025
28512c0
Fix cursor character not visible when cursor color matches background
liby Feb 4, 2025
595f7aa
macos: update Sparkle to 2.6.4 to workaround security issue
mitchellh Feb 5, 2025
505129f
Introduce subsystem maintainers via CODEOWNERS
mitchellh Feb 5, 2025
9fd7748
Metal: use "Managed" resource storage mode on discrete GPUs
qwerasd205 Feb 7, 2025
effe4dc
GTK: disable color management
eifr Feb 5, 2025
fb6686e
move color-mgmt to config
eifr Feb 5, 2025
cbc9aba
expand comment + rename
eifr Feb 5, 2025
c353290
remove config
eifr Feb 6, 2025
0a7691a
add comments
eifr Feb 6, 2025
a3d8772
update gtk version
eifr Feb 7, 2025
c1a783a
fix(Metal): don't throw away glyphs when the fg and bg colors match
qwerasd205 Feb 9, 2025
3352083
gtk: introduce Zig bindings for GTK/GObject
pluiedev Jan 31, 2025
987158f
core: protect against crashes and hangs when themes are not files
jcollie Feb 8, 2025
e9651fb
fix(terminal): handle errors in Screen.adjustCapacity
qwerasd205 Feb 10, 2025
f681844
fix(terminal): properly invalidate over-sized OSCs
qwerasd205 Feb 10, 2025
9a8c245
test(terminal/osc): fix command longer than buffer test
qwerasd205 Feb 10, 2025
863c72f
test(terminal/screen): OOM handling in adjustCapacity
qwerasd205 Feb 10, 2025
0073837
fix(terminal): properly lookup hyperlinks when cloning rows across pages
qwerasd205 Feb 10, 2025
586080d
test(terminal/screen): cursorSetHyperlink OOM handling edge case
qwerasd205 Feb 10, 2025
ac5d49a
nix: use zig2nix to manage nix cache/deps
jcollie Jan 30, 2025
d4e7bdf
macos: toggle_visibility fullscreen check requires active app
mitchellh Feb 11, 2025
68ab8f4
macos: ensure previously key window regains key on toggle_visibility
mitchellh Feb 11, 2025
c79bd57
fix(terminal): avoid Screen.reset causing use of undefined
qwerasd205 Feb 11, 2025
db36da7
Add keyboard navigation for Terminal IO window
liby Dec 29, 2024
38dd0d0
Remember last focused window position for next startup
liby Feb 2, 2025
23fe54d
Add default documentation for undocumented keybind actions
liby Jan 12, 2025
3c2b967
Ensure last action's documentation is properly generated
liby Jan 12, 2025
5ec0be5
Improve `list-actions` command documentation formatting
liby Jan 12, 2025
8baf6e7
Extract keybind actions help generation into a dedicated module
liby Jan 13, 2025
6da66fa
Fix confirm-close-surface not working for hidden quick terminal
liby Feb 9, 2025
789d653
Revert "Fixed documentation generation in `list-actions --docs` comma…
mitchellh Feb 11, 2025
c368ac8
gtk(x11): set `WINDOWID` env var for subprocesses
pluiedev Feb 9, 2025
7384193
macos: add a variety of artist-drawn alternate icons
mitchellh Feb 11, 2025
fe29174
Refactor keybinding actions reference generation
liby Feb 11, 2025
55d7606
core: performAction now returns a bool
jcollie Feb 8, 2025
7287347
gtk: make goto_split a performable action
jcollie Feb 8, 2025
5251a9a
gtk: make previous_tab, next_tab, last_tab, and goto_tab performable
jcollie Feb 8, 2025
a2f9d2b
apprt/embedded: make performAction return the performable state
mitchellh Feb 12, 2025
9cf8b3e
apprt/gtk: some stylistic changes
mitchellh Feb 12, 2025
e22c1d1
apprt/glfw: return false for unimplemented actions
mitchellh Feb 12, 2025
1446ec3
gtk: Point right-click context menu exactly at cursor to improve beha…
AnthonyZhOon Feb 12, 2025
fb4b1dd
Revert "gtk: Point right-click context menu exactly at cursor to impr…
AnthonyZhOon Feb 12, 2025
f6469b7
gtk: fix context menu computed location
AnthonyZhOon Feb 12, 2025
d30d4bc
macOS: fix iOS build breakage from #5644
jcollie Feb 12, 2025
2d8d061
macOS: use Nix to get Zig deps
jcollie Feb 12, 2025
dca7229
termio: free envmap when able, fix memory leak
mitchellh Feb 12, 2025
9c46035
gtk: use the standard path for including Adwaita header file
jcollie Feb 12, 2025
55a5e6e
terminal: reflow the saved cursor if we have one
mitchellh Feb 12, 2025
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
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
build.zig.zon.nix linguist-generated=true
vendor/** linguist-vendored
website/** linguist-documentation
pkg/breakpad/vendor/** linguist-vendored
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/nix.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,5 +50,5 @@ jobs:
name: ghostty
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
useDaemon: false # sometimes fails on short jobs
- name: Check Zig cache hash
run: nix develop -c ./nix/build-support/check-zig-cache-hash.sh
- name: Check Zig cache
run: nix develop -c ./nix/build-support/check-zig-cache.sh
74 changes: 74 additions & 0 deletions .github/workflows/publish-tag.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
on:
workflow_dispatch:
inputs:
version:
description: "Version to deploy (format: vX.Y.Z)"
required: true

name: Publish Tagged Release

# We must only run one release workflow at a time to prevent corrupting
# our release artifacts.
concurrency:
group: ${{ github.workflow }}
cancel-in-progress: false

jobs:
setup:
runs-on: namespace-profile-ghostty-sm
outputs:
version: ${{ steps.extract_version.outputs.version }}
steps:
- name: Validate Version Input
run: |
if [[ ! "${{ github.event.inputs.version }}" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "Error: Version must follow the format vX.Y.Z (e.g., v1.0.0)."
exit 1
fi

echo "Version is valid: ${{ github.event.inputs.version }}"

- name: Exract the Version
id: extract_version
run: |
VERSION=${{ github.event.inputs.version }}
VERSION=${VERSION#v}
echo "version=$VERSION" >> $GITHUB_OUTPUT

upload:
needs: [setup]
runs-on: namespace-profile-ghostty-sm
env:
GHOSTTY_VERSION: ${{ needs.setup.outputs.version }}
steps:
- name: Validate Release Files
run: |
BASE="https://release.files.ghostty.org/${GHOSTTY_VERSION}"
curl -I -s -o /dev/null -w "%{http_code}" "${BASE}/ghostty-${GHOSTTY_VERSION}.tar.gz" | grep -q "^200$" || exit 1
curl -I -s -o /dev/null -w "%{http_code}" "${BASE}/ghostty-${GHOSTTY_VERSION}.tar.gz.minisig" | grep -q "^200$" || exit 1
curl -I -s -o /dev/null -w "%{http_code}" "${BASE}/ghostty-source.tar.gz" | grep -q "^200$" || exit 1
curl -I -s -o /dev/null -w "%{http_code}" "${BASE}/ghostty-source.tar.gz.minisig" | grep -q "^200$" || exit 1
curl -I -s -o /dev/null -w "%{http_code}" "${BASE}/ghostty-macos-universal.zip" | grep -q "^200$" || exit 1
curl -I -s -o /dev/null -w "%{http_code}" "${BASE}/ghostty-macos-universal-dsym.zip" | grep -q "^200$" || exit 1
curl -I -s -o /dev/null -w "%{http_code}" "${BASE}/Ghostty.dmg" | grep -q "^200$" || exit 1
curl -I -s -o /dev/null -w "%{http_code}" "${BASE}/appcast-staged.xml" | grep -q "^200$" || exit 1

- name: Download Staged Appcast
run: |
curl -L https://release.files.ghostty.org/${GHOSTTY_VERSION}/appcast-staged.xml > appcast-staged.xml
mv appcast-staged.xml appcast.xml

- name: Upload Appcast
run: |
rm -rf blob
mkdir blob
mv appcast.xml blob/appcast.xml
- name: Upload Appcast to R2
uses: ryand56/r2-upload-action@latest
with:
r2-account-id: ${{ secrets.CF_R2_RELEASE_ACCOUNT_ID }}
r2-access-key-id: ${{ secrets.CF_R2_RELEASE_AWS_KEY }}
r2-secret-access-key: ${{ secrets.CF_R2_RELEASE_SECRET_KEY }}
r2-bucket: ghostty-release
source-dir: blob
destination-dir: ./
17 changes: 2 additions & 15 deletions .github/workflows/release-tag.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ on:
upload:
description: "Upload final artifacts to R2"
default: false

push:
tags:
- "v[0-9]+.[0-9]+.[0-9]+"
Expand Down Expand Up @@ -367,6 +368,7 @@ jobs:
mv ghostty-macos-universal.zip blob/${GHOSTTY_VERSION}/ghostty-macos-universal.zip
mv ghostty-macos-universal-dsym.zip blob/${GHOSTTY_VERSION}/ghostty-macos-universal-dsym.zip
mv Ghostty.dmg blob/${GHOSTTY_VERSION}/Ghostty.dmg
mv appcast.xml blob/${GHOSTTY_VERSION}/appcast-staged.xml
- name: Upload to R2
uses: ryand56/r2-upload-action@latest
with:
Expand All @@ -376,18 +378,3 @@ jobs:
r2-bucket: ghostty-release
source-dir: blob
destination-dir: ./

- name: Prep Appcast
run: |
rm -rf blob
mkdir blob
mv appcast.xml blob/appcast.xml
- name: Upload Appcast to R2
uses: ryand56/r2-upload-action@latest
with:
r2-account-id: ${{ secrets.CF_R2_RELEASE_ACCOUNT_ID }}
r2-access-key-id: ${{ secrets.CF_R2_RELEASE_AWS_KEY }}
r2-secret-access-key: ${{ secrets.CF_R2_RELEASE_SECRET_KEY }}
r2-bucket: ghostty-release
source-dir: blob
destination-dir: ./
58 changes: 35 additions & 23 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -202,10 +202,14 @@ jobs:
- name: XCode Select
run: sudo xcode-select -s /Applications/Xcode_16.0.app

- name: get the Zig deps
id: deps
run: nix build -L .#deps && echo "deps=$(readlink ./result)" >> $GITHUB_OUTPUT

# GhosttyKit is the framework that is built from Zig for our native
# Mac app to access.
- name: Build GhosttyKit
run: nix develop -c zig build
run: nix develop -c zig build --system ${{ steps.deps.outputs.deps }}

# The native app is built with native XCode tooling. This also does
# codesigning. IMPORTANT: this must NOT run in a Nix environment.
Expand Down Expand Up @@ -238,35 +242,39 @@ jobs:
- name: XCode Select
run: sudo xcode-select -s /Applications/Xcode_16.0.app

- name: get the Zig deps
id: deps
run: nix build -L .#deps && echo "deps=$(readlink ./result)" >> $GITHUB_OUTPUT

- name: Test All
run: |
# OpenGL
nix develop -c zig build test -Dapp-runtime=glfw -Drenderer=opengl -Dfont-backend=freetype
nix develop -c zig build test -Dapp-runtime=glfw -Drenderer=opengl -Dfont-backend=coretext
nix develop -c zig build test -Dapp-runtime=glfw -Drenderer=opengl -Dfont-backend=coretext_freetype
nix develop -c zig build test -Dapp-runtime=glfw -Drenderer=opengl -Dfont-backend=coretext_harfbuzz
nix develop -c zig build test -Dapp-runtime=glfw -Drenderer=opengl -Dfont-backend=coretext_noshape
nix develop -c zig build test --system ${{ steps.deps.outputs.deps }} -Dapp-runtime=glfw -Drenderer=opengl -Dfont-backend=freetype
nix develop -c zig build test --system ${{ steps.deps.outputs.deps }} -Dapp-runtime=glfw -Drenderer=opengl -Dfont-backend=coretext
nix develop -c zig build test --system ${{ steps.deps.outputs.deps }} -Dapp-runtime=glfw -Drenderer=opengl -Dfont-backend=coretext_freetype
nix develop -c zig build test --system ${{ steps.deps.outputs.deps }} -Dapp-runtime=glfw -Drenderer=opengl -Dfont-backend=coretext_harfbuzz
nix develop -c zig build test --system ${{ steps.deps.outputs.deps }} -Dapp-runtime=glfw -Drenderer=opengl -Dfont-backend=coretext_noshape

# Metal
nix develop -c zig build test -Dapp-runtime=glfw -Drenderer=metal -Dfont-backend=freetype
nix develop -c zig build test -Dapp-runtime=glfw -Drenderer=metal -Dfont-backend=coretext
nix develop -c zig build test -Dapp-runtime=glfw -Drenderer=metal -Dfont-backend=coretext_freetype
nix develop -c zig build test -Dapp-runtime=glfw -Drenderer=metal -Dfont-backend=coretext_harfbuzz
nix develop -c zig build test -Dapp-runtime=glfw -Drenderer=metal -Dfont-backend=coretext_noshape
nix develop -c zig build test --system ${{ steps.deps.outputs.deps }} -Dapp-runtime=glfw -Drenderer=metal -Dfont-backend=freetype
nix develop -c zig build test --system ${{ steps.deps.outputs.deps }} -Dapp-runtime=glfw -Drenderer=metal -Dfont-backend=coretext
nix develop -c zig build test --system ${{ steps.deps.outputs.deps }} -Dapp-runtime=glfw -Drenderer=metal -Dfont-backend=coretext_freetype
nix develop -c zig build test --system ${{ steps.deps.outputs.deps }} -Dapp-runtime=glfw -Drenderer=metal -Dfont-backend=coretext_harfbuzz
nix develop -c zig build test --system ${{ steps.deps.outputs.deps }} -Dapp-runtime=glfw -Drenderer=metal -Dfont-backend=coretext_noshape

- name: Build All
run: |
nix develop -c zig build -Dapp-runtime=glfw -Drenderer=opengl -Dfont-backend=freetype
nix develop -c zig build -Dapp-runtime=glfw -Drenderer=opengl -Dfont-backend=coretext
nix develop -c zig build -Dapp-runtime=glfw -Drenderer=opengl -Dfont-backend=coretext_freetype
nix develop -c zig build -Dapp-runtime=glfw -Drenderer=opengl -Dfont-backend=coretext_harfbuzz
nix develop -c zig build -Dapp-runtime=glfw -Drenderer=opengl -Dfont-backend=coretext_noshape

nix develop -c zig build -Dapp-runtime=glfw -Drenderer=metal -Dfont-backend=freetype
nix develop -c zig build -Dapp-runtime=glfw -Drenderer=metal -Dfont-backend=coretext
nix develop -c zig build -Dapp-runtime=glfw -Drenderer=metal -Dfont-backend=coretext_freetype
nix develop -c zig build -Dapp-runtime=glfw -Drenderer=metal -Dfont-backend=coretext_harfbuzz
nix develop -c zig build -Dapp-runtime=glfw -Drenderer=metal -Dfont-backend=coretext_noshape
nix develop -c zig build --system ${{ steps.deps.outputs.deps }} -Dapp-runtime=glfw -Drenderer=opengl -Dfont-backend=freetype
nix develop -c zig build --system ${{ steps.deps.outputs.deps }} -Dapp-runtime=glfw -Drenderer=opengl -Dfont-backend=coretext
nix develop -c zig build --system ${{ steps.deps.outputs.deps }} -Dapp-runtime=glfw -Drenderer=opengl -Dfont-backend=coretext_freetype
nix develop -c zig build --system ${{ steps.deps.outputs.deps }} -Dapp-runtime=glfw -Drenderer=opengl -Dfont-backend=coretext_harfbuzz
nix develop -c zig build --system ${{ steps.deps.outputs.deps }} -Dapp-runtime=glfw -Drenderer=opengl -Dfont-backend=coretext_noshape

nix develop -c zig build --system ${{ steps.deps.outputs.deps }} -Dapp-runtime=glfw -Drenderer=metal -Dfont-backend=freetype
nix develop -c zig build --system ${{ steps.deps.outputs.deps }} -Dapp-runtime=glfw -Drenderer=metal -Dfont-backend=coretext
nix develop -c zig build --system ${{ steps.deps.outputs.deps }} -Dapp-runtime=glfw -Drenderer=metal -Dfont-backend=coretext_freetype
nix develop -c zig build --system ${{ steps.deps.outputs.deps }} -Dapp-runtime=glfw -Drenderer=metal -Dfont-backend=coretext_harfbuzz
nix develop -c zig build --system ${{ steps.deps.outputs.deps }} -Dapp-runtime=glfw -Drenderer=metal -Dfont-backend=coretext_noshape

build-windows:
runs-on: windows-2022
Expand Down Expand Up @@ -471,8 +479,12 @@ jobs:
- name: XCode Select
run: sudo xcode-select -s /Applications/Xcode_16.0.app

- name: get the Zig deps
id: deps
run: nix build -L .#deps && echo "deps=$(readlink ./result)" >> $GITHUB_OUTPUT

- name: test
run: nix develop -c zig build test
run: nix develop -c zig build test --system ${{ steps.deps.outputs.deps }}

prettier:
if: github.repository == 'ghostty-org/ghostty'
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/update-colorschemes.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,14 +48,14 @@ jobs:
run: |
# Only proceed if build.zig.zon has changed
if ! git diff --exit-code build.zig.zon; then
nix develop -c ./nix/build-support/check-zig-cache-hash.sh --update
nix develop -c ./nix/build-support/check-zig-cache-hash.sh
nix develop -c ./nix/build-support/check-zig-cache.sh --update
nix develop -c ./nix/build-support/check-zig-cache.sh
fi

# Verify the build still works. We choose an arbitrary build type
# as a canary instead of testing all build types.
- name: Test Build
run: nix develop -c zig build -Dapp-runtime=gtk -Dgtk-adwaita=true
run: nix build .#ghostty

- name: Create pull request
uses: peter-evans/create-pull-request@v7
Expand All @@ -66,7 +66,7 @@ jobs:
commit-message: "deps: Update iTerm2 color schemes"
add-paths: |
build.zig.zon
nix/zigCacheHash.nix
build.zig.zon.nix
body: |
Upstream revision: https://github.com/mbadolato/iTerm2-Color-Schemes/tree/${{ steps.zig_fetch.outputs.upstream_rev }}
labels: dependencies
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,5 @@ test/cases/**/*.actual.png
glad.zip
/Box_test.ppm
/Box_test_diff.ppm
/ghostty.qcow2
/build.zig.zon2json-lock
149 changes: 149 additions & 0 deletions CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
# This file documents the subsystem maintainers of the Ghostty project
# along with the responsibilities of a maintainer and how one can become
# a maintainer.
#
# Ghostty follows a subsystem maintainer model where distinguished
# contributors (with mutual agreement) are designated as maintainers of a
# specific subset of the project. A subsystem maintainer has more privileges
# and authority over a specific part of the project than a regular
# contributor and deference is given to them when making decisions about
# their subsystem.
#
# Ultimately Ghostty has a BDFL (Benevolent Dictator For Life) model
# currently with @mitchellh as the BDFL. The BDFL has the final say in all
# decisions and may override a maintainer's decision if necessary. I like to
# say its a BDFLFN (Benevolent Dictator For Life "For Now") model because
# long term I'd like to see the project be more community driven. But for
# now, early in its life, we're going with this model.
#
# ## Privileges
#
# - Authority to approve or reject pull requests in their subsystem.
# - Authority to moderate issues and discussions in their subsystem.
# - Authority to make roadmap and design decisions about their subsystem
# with input only from other subsystem maintainers.
#
# In all scenarios, the BDFL doesn't need to be consulted for decisions
# but may revert or override decisions if necessary. The expectation is
# that maintainers will be trusted to make the right decisions for their
# subsystem and this will be rare.
#
# ## Responsibilities
#
# Subsystem maintainership is a voluntary role and maintainers are not
# expected to dedicate any amount of time to the project. However, if a
# maintainer is inactive for a long period of time, they may be removed from
# the maintainers list to avoid bitrot or outdated information.
#
# Maintainers are expected to be exemplary members of the community and
# should be respectful, helpful, and professional in all interactions.
# This is both in regards to the community at large as well as other
# subsystem maintainers as well as @mitchellh.
#
# As technical leaders, maintainers are expected to be mindful about
# breaking changes, performance, user impact, and other technical
# considerations in their subsystem. They should be considerate of large
# changes and should be able to justify their decisions.
#
# Notably, maintainers have NO OBLIGATION to review pull requests or issues
# in their subsystem. They have full discretion to review or not review
# anything they want. This isn't a job! It is a role of trust and authority
# and the expectation is that maintainers will use their best judgement.
#
# ## Becoming a Maintainer
#
# Maintainer candidates are noticed and proposed by the community. Anyone
# may propose themselves or someone else as a maintainer. The BDFL along
# with existing maintainers will discuss and decide.
#
# Generally, we want to see consistent high quality contributions to a
# specific subsystem before considering someone as a maintainer. There isn't
# an exact number of contributions or time period required but generally
# we're looking for an order of a dozen or more contributions over a period of
# months, at least.
#
# # Subsystem List
#
# The subsystems don't fully cover the entirety of the Ghostty project but
# are created organically as experts in certain areas emerge. If you feel
# you are an expert in a certain area and would like to be a maintainer,
# please reach out to @mitchellh on Discord.
#
# (Alphabetical order)
#
# - @ghostty-org/font - All things font related including discovery,
# rasterization, shaping, coloring, etc.
#
# - @ghostty-org/gtk - Anything GTK-related in the project, primarily
# the GTK apprt. Also includes X11/Wayland integrations and general
# Linux support.
#
# - @ghostty-org/macos - The Ghostty macOS app and any macOS-specific
# features, configurations, etc.
#
# - @ghostty-org/renderer - Ghostty rendering subsystem, including the
# rendering abstractions as well as specific renderers like OpenGL
# and Metal.
#
# - @ghostty-org/shell - Ghostty shell integration, including shell
# completions, shell detection, and any other shell interactions.
#
# - @ghostty-org/terminal - The terminal emulator subsystem, including
# subprocess management and pty handling, escape sequence parsing,
# key encoding, etc.
#
# ## Outside of Ghostty
#
# Other "subsystems" exist outside of Ghostty and will not be represented
# in this CODEOWNERS file:
#
# - @ghostty-org/discord-bot - Maintainers of the Ghostty Discord bot.
#
# - @ghostty-org/website - Maintainers of the Ghostty website.

# Font
/src/font/ @ghostty-org/font
/pkg/fontconfig/ @ghostty-org/font
/pkg/freetype/ @ghostty-org/font
/pkg/harfbuzz/ @ghostty-org/font

# GTK
/src/apprt/gtk/ @ghostty-org/gtk
/src/os/cgroup.zig @ghostty-org/gtk
/src/os/flatpak.zig @ghostty-org/gtk
/dist/linux/ @ghostty-org/gtk

# macOS
#
# This includes libghostty because the macOS apprt is built on top of
# libghostty and often requires or is impacted by changes to libghostty.
# macOS subsystem maintainers are expected to only work on libghostty
# insofar as it impacts the macOS apprt.
/include/ghostty.h @ghostty-org/macos
/src/apprt/embedded.zig @ghostty-org/macos
/src/os/cf_release_thread.zig @ghostty-org/macos
/src/os/macos.zig @ghostty-org/macos
/macos/ @ghostty-org/macos
/dist/macos/ @ghostty-org/macos
/pkg/apple-sdk/ @ghostty-org/macos
/pkg/macos/ @ghostty-org/macos

# Renderer
/src/renderer.zig @ghostty-org/renderer
/src/renderer/ @ghostty-org/renderer
/pkg/glslang/ @ghostty-org/renderer
/pkg/opengl/ @ghostty-org/renderer
/pkg/spirv-cross/ @ghostty-org/renderer
/pkg/wuffs/ @ghostty-org/renderer

# Shell
/src/shell-integration/ @ghostty-org/shell
/src/termio/shell-integration.zig @ghostty-org/shell

# Terminal
/src/simd/ @ghostty-org/terminal
/src/terminal/ @ghostty-org/terminal
/src/terminfo/ @ghostty-org/terminal
/src/unicode/ @ghostty-org/terminal
/src/Surface.zig @ghostty-org/terminal
/src/surface_mouse.zig @ghostty-org/terminal
Loading
Loading