Compare commits
1 Commits
gtk-ng-bel
...
opengl-tes
Author | SHA1 | Date | |
---|---|---|---|
![]() |
4bcaf1f3b4 |
@@ -1,6 +1,6 @@
|
|||||||
root = true
|
root = true
|
||||||
|
|
||||||
[*.{sh,bash,elv}]
|
[*.{sh,bash}]
|
||||||
indent_size = 2
|
indent_size = 2
|
||||||
indent_style = space
|
indent_style = space
|
||||||
|
|
||||||
|
162
.github/DISCUSSION_TEMPLATE/issue-triage.yml
vendored
@@ -1,162 +0,0 @@
|
|||||||
labels: ["needs-confirmation"]
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |
|
|
||||||
> [!IMPORTANT]
|
|
||||||
> Please read through [the Discussion rules](https://github.com/ghostty-org/ghostty/discussions/6937), review [the FAQs](https://ghostty.org/docs/help#common-issues-and-solutions), and check for both existing [Discussions](https://github.com/ghostty-org/ghostty/discussions?discussions_q=) and [Issues](https://github.com/ghostty-org/ghostty/issues?q=sort%3Areactions-desc) prior to opening a new Discussion.
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: "# Issue Details"
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Issue Description
|
|
||||||
description: |
|
|
||||||
Provide a detailed description of the issue. Include relevant information, such as:
|
|
||||||
- The feature or configuration option you encounter the issue with.
|
|
||||||
- Screenshots, screen recordings, or other supporting media (as needed).
|
|
||||||
- If this is a regression of an existing issue that was closed or resolved, please include the previous item reference (Discussion, Issue, PR, commit) in your description.
|
|
||||||
|
|
||||||
> [!TIP]
|
|
||||||
> **Not sure what information to include?**
|
|
||||||
> Here are some recommendations:
|
|
||||||
> - **Input issues:** include your keyboard layout, a screenshot of logged keystrokes from the terminal inspector's "Keyboard" tab (Linux: <kbd>ctrl</kbd>+<kbd>shift</kbd>+<kbd>i</kbd>; MacOS: <kbd>cmd</kbd>+<kbd>alt</kbd>+<kbd>i</kbd>), input method, Linux input method engine (IBus, Fcitx 5, or none) and its version.
|
|
||||||
> - **Font issues:** include the problematic character(s), the output of `ghostty +show-face` for these character(s), and if they work in other applications.
|
|
||||||
> - **Terminal emulation issues (including image rendering issues):** attach an [asciinema](https://docs.asciinema.org/getting-started/) cast file, shell script, or text file for reproduction.
|
|
||||||
> - **Renderer issues:** (Linux) include your OpenGL version, graphics card, driver version.
|
|
||||||
> - **Crashes:** (macOS) include the [Sentry UUID](https://github.com/ghostty-org/ghostty?tab=readme-ov-file#crash-reports); (Linux) try to reproduce using a debug build and provide the stack trace.
|
|
||||||
placeholder: |
|
|
||||||
When using SSH to connect to my remote Linux machine from my local macOS device in Ghostty, I try to run `clear`, and the screen does not clear. Instead, I see the following error message printed to the terminal: `Error opening terminal: xterm-ghostty.`
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Expected Behavior
|
|
||||||
description: |
|
|
||||||
Describe how you expect Ghostty to behave in this situation. Include any relevant documentation links.
|
|
||||||
placeholder: |
|
|
||||||
The screen is cleared and the prompt is redrawn at the top of the window.
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Actual Behavior
|
|
||||||
description: |
|
|
||||||
Describe how Ghostty actually behaves in this situation. If it is not immediately obvious how the actual behavior differs from the expected behavior described above, please be sure to mention the deviation specifically.
|
|
||||||
placeholder: |
|
|
||||||
The screen is not cleared, and an error is printed: `Error opening terminal: xterm-ghostty`.
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Reproduction Steps
|
|
||||||
description: |
|
|
||||||
Provide a detailed set of step-by-step instructions for reproducing this issue.
|
|
||||||
placeholder: |
|
|
||||||
1. Open Ghostty.
|
|
||||||
2. Connect to a remote server via SSH.
|
|
||||||
3. Try to execute `clear`.
|
|
||||||
4. Observe `xterm-ghostty` error message above.
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Ghostty Logs
|
|
||||||
description: |
|
|
||||||
Provide any captured Ghostty logs or stacktraces during your issue reproduction in this field. On Linux, logs can be found by running `ghostty` from the command-line; on macOS, logs can be viewed with `sudo log stream --level debug --predicate 'subsystem=="com.mitchellh.ghostty"'` from another terminal emulator.
|
|
||||||
render: text
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Ghostty Version
|
|
||||||
description: Paste the output of `ghostty +version` here.
|
|
||||||
placeholder: |
|
|
||||||
Ghostty 1.1.3
|
|
||||||
|
|
||||||
Version
|
|
||||||
- version: 1.1.3
|
|
||||||
- channel: stable
|
|
||||||
Build Config
|
|
||||||
- Zig version: 0.13.0
|
|
||||||
- build mode : builtin.OptimizeMode.ReleaseFast
|
|
||||||
- app runtime: apprt.Runtime.none
|
|
||||||
- font engine: font.main.Backend.coretext
|
|
||||||
- renderer : renderer.Metal
|
|
||||||
- libxev : main.Backend.kqueue
|
|
||||||
render: text
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: input
|
|
||||||
attributes:
|
|
||||||
label: OS Version Information
|
|
||||||
description: |
|
|
||||||
Please tell us what operating system (name and version) you are using.
|
|
||||||
placeholder: Ubuntu 24.04.1 (Noble Numbat)
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: dropdown
|
|
||||||
attributes:
|
|
||||||
label: (Linux only) Display Server
|
|
||||||
description: |
|
|
||||||
If you run Linux, please tell us if you use X11 or Wayland. If you aren't sure, you can determine this by running `[ -z "$WAYLAND_DISPLAY" ] && echo X11 || echo Wayland`.
|
|
||||||
options:
|
|
||||||
- X11
|
|
||||||
- Wayland
|
|
||||||
- Other
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
- type: input
|
|
||||||
attributes:
|
|
||||||
label: (Linux only) Desktop Environment/Window Manager
|
|
||||||
description: |
|
|
||||||
If you run Linux, please tell us what Desktop Environment/Window Manager you are using (include the name and version).
|
|
||||||
placeholder: GNOME 47.4
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Minimal Ghostty Configuration
|
|
||||||
description: |
|
|
||||||
Please provide the **minimum** configuration needed to reproduce this issue. If you can still reproduce the issue with one of the lines removed, do not include that line. If and **only** if you are not able to determine this, paste the contents of your Ghostty configuration file here.
|
|
||||||
placeholder: |
|
|
||||||
font-family = CommitMono Nerd Font
|
|
||||||
font-family-bold = CommitMono Nerd Font
|
|
||||||
font-family-italic = CommitMono Nerd Font
|
|
||||||
font-family-bold-italic = CommitMono Nerd Font
|
|
||||||
font-feature = +cv07
|
|
||||||
font-size = 16
|
|
||||||
font-thicken = true
|
|
||||||
theme = catppuccin-mocha
|
|
||||||
render: ini
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
attributes:
|
|
||||||
label: Additional Relevant Configuration
|
|
||||||
description: |
|
|
||||||
If your issue involves other programs, tools, or applications in addition to Ghostty (e.g. Neovim, tmux, Zellij, etc.), please provide the minimum configuration and versions needed for all relevant programs to reproduce the issue here. If you use custom CSS or shaders for Ghostty, also include them here, if applicable to your issue.
|
|
||||||
placeholder: |
|
|
||||||
#### `tmux.conf` (tmux 3.5a)
|
|
||||||
```
|
|
||||||
set -g default-terminal "tmux-256color"
|
|
||||||
set-option -sa terminal-overrides ",xterm*:Tc"
|
|
||||||
set -g base-index 1
|
|
||||||
setw -g pane-base-index 1
|
|
||||||
```
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |
|
|
||||||
# User Acknowledgements
|
|
||||||
> [!TIP]
|
|
||||||
> Use these links to review the existing Ghostty [Discussions](https://github.com/ghostty-org/ghostty/discussions?discussions_q=) and [Issues](https://github.com/ghostty-org/ghostty/issues?q=sort%3Areactions-desc).
|
|
||||||
- type: checkboxes
|
|
||||||
attributes:
|
|
||||||
label: "I acknowledge that:"
|
|
||||||
options:
|
|
||||||
- label: I have reviewed the FAQ and confirm that my issue is NOT among them.
|
|
||||||
required: true
|
|
||||||
- label: I have searched the Ghostty repository (both open and closed Discussions and Issues) and confirm this is not a duplicate of an existing issue or discussion.
|
|
||||||
required: true
|
|
||||||
- label: I have checked the "Preview" tab on all text fields to ensure that everything looks right, and have wrapped all configuration and code in code blocks with a group of three backticks (` ``` `) on separate lines.
|
|
||||||
required: true
|
|
4
.github/pinact.yml
vendored
@@ -1,4 +0,0 @@
|
|||||||
version: 3
|
|
||||||
ignore_actions:
|
|
||||||
- name: "DeterminateSystems/nix-installer-action"
|
|
||||||
ref: "main"
|
|
14
.github/scripts/check-translations.sh
vendored
@@ -1,14 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
old_pot=$(mktemp)
|
|
||||||
cp po/com.mitchellh.ghostty.pot "$old_pot"
|
|
||||||
zig build update-translations
|
|
||||||
|
|
||||||
# Compare previous POT to current POT
|
|
||||||
msgcmp "$old_pot" po/com.mitchellh.ghostty.pot --use-untranslated
|
|
||||||
|
|
||||||
# Compare all other POs to current POT
|
|
||||||
for f in po/*.po; do
|
|
||||||
# Ignore untranslated entries
|
|
||||||
msgcmp --use-untranslated "$f" po/com.mitchellh.ghostty.pot;
|
|
||||||
done
|
|
2
.github/workflows/clean-artifacts.yml
vendored
@@ -10,7 +10,7 @@ jobs:
|
|||||||
timeout-minutes: 10
|
timeout-minutes: 10
|
||||||
steps:
|
steps:
|
||||||
- name: Remove old artifacts
|
- name: Remove old artifacts
|
||||||
uses: c-hive/gha-remove-artifacts@44fc7acaf1b3d0987da0e8d4707a989d80e9554b # v1.4.0
|
uses: c-hive/gha-remove-artifacts@v1
|
||||||
with:
|
with:
|
||||||
age: "1 week"
|
age: "1 week"
|
||||||
skip-tags: true
|
skip-tags: true
|
||||||
|
4
.github/workflows/milestone.yml
vendored
@@ -15,7 +15,7 @@ jobs:
|
|||||||
name: Milestone Update
|
name: Milestone Update
|
||||||
steps:
|
steps:
|
||||||
- name: Set Milestone for PR
|
- name: Set Milestone for PR
|
||||||
uses: hustcer/milestone-action@b57a7e52e9913b6b0cdefb10add762af0398659d # v2.9
|
uses: hustcer/milestone-action@v2
|
||||||
if: github.event.pull_request.merged == true
|
if: github.event.pull_request.merged == true
|
||||||
with:
|
with:
|
||||||
action: bind-pr # `bind-pr` is the default action
|
action: bind-pr # `bind-pr` is the default action
|
||||||
@@ -24,7 +24,7 @@ jobs:
|
|||||||
|
|
||||||
# Bind milestone to closed issue that has a merged PR fix
|
# Bind milestone to closed issue that has a merged PR fix
|
||||||
- name: Set Milestone for Issue
|
- name: Set Milestone for Issue
|
||||||
uses: hustcer/milestone-action@b57a7e52e9913b6b0cdefb10add762af0398659d # v2.9
|
uses: hustcer/milestone-action@v2
|
||||||
if: github.event.issue.state == 'closed'
|
if: github.event.issue.state == 'closed'
|
||||||
with:
|
with:
|
||||||
action: bind-issue
|
action: bind-issue
|
||||||
|
8
.github/workflows/nix.yml
vendored
@@ -34,18 +34,18 @@ jobs:
|
|||||||
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@v4
|
||||||
- name: Setup Cache
|
- name: Setup Cache
|
||||||
uses: namespacelabs/nscloud-cache-action@305bfa7ea980a858d511af4899414a84847c7991 # v1.2.16
|
uses: namespacelabs/nscloud-cache-action@v1.2.0
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
/nix
|
/nix
|
||||||
/zig
|
/zig
|
||||||
- name: Setup Nix
|
- name: Setup Nix
|
||||||
uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31.5.2
|
uses: cachix/install-nix-action@v30
|
||||||
with:
|
with:
|
||||||
nix_path: nixpkgs=channel:nixos-unstable
|
nix_path: nixpkgs=channel:nixos-unstable
|
||||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
- uses: cachix/cachix-action@v15
|
||||||
with:
|
with:
|
||||||
name: ghostty
|
name: ghostty
|
||||||
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
||||||
|
2
.github/workflows/publish-tag.yml
vendored
@@ -64,7 +64,7 @@ jobs:
|
|||||||
mkdir blob
|
mkdir blob
|
||||||
mv appcast.xml blob/appcast.xml
|
mv appcast.xml blob/appcast.xml
|
||||||
- name: Upload Appcast to R2
|
- name: Upload Appcast to R2
|
||||||
uses: ryand56/r2-upload-action@b801a390acbdeb034c5e684ff5e1361c06639e7c # v1
|
uses: ryand56/r2-upload-action@latest
|
||||||
with:
|
with:
|
||||||
r2-account-id: ${{ secrets.CF_R2_RELEASE_ACCOUNT_ID }}
|
r2-account-id: ${{ secrets.CF_R2_RELEASE_ACCOUNT_ID }}
|
||||||
r2-access-key-id: ${{ secrets.CF_R2_RELEASE_AWS_KEY }}
|
r2-access-key-id: ${{ secrets.CF_R2_RELEASE_AWS_KEY }}
|
||||||
|
52
.github/workflows/release-pr.yml
vendored
@@ -8,7 +8,7 @@ jobs:
|
|||||||
runs-on: namespace-profile-ghostty-sm
|
runs-on: namespace-profile-ghostty-sm
|
||||||
needs: [build-macos-debug]
|
needs: [build-macos-debug]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Install sentry-cli
|
- name: Install sentry-cli
|
||||||
run: |
|
run: |
|
||||||
@@ -29,7 +29,7 @@ jobs:
|
|||||||
runs-on: namespace-profile-ghostty-sm
|
runs-on: namespace-profile-ghostty-sm
|
||||||
needs: [build-macos]
|
needs: [build-macos]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Install sentry-cli
|
- name: Install sentry-cli
|
||||||
run: |
|
run: |
|
||||||
@@ -47,20 +47,20 @@ jobs:
|
|||||||
sentry-cli dif upload --project ghostty --wait dsym.zip
|
sentry-cli dif upload --project ghostty --wait dsym.zip
|
||||||
|
|
||||||
build-macos:
|
build-macos:
|
||||||
runs-on: namespace-profile-ghostty-macos-sequoia
|
runs-on: namespace-profile-ghostty-macos
|
||||||
timeout-minutes: 90
|
timeout-minutes: 90
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
# Important so that build number generation works
|
# Important so that build number generation works
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
# Install Nix and use that to run our tests so our environment matches exactly.
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
||||||
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31.5.2
|
- uses: cachix/install-nix-action@v30
|
||||||
with:
|
with:
|
||||||
nix_path: nixpkgs=channel:nixos-unstable
|
nix_path: nixpkgs=channel:nixos-unstable
|
||||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
- uses: cachix/cachix-action@v15
|
||||||
with:
|
with:
|
||||||
name: ghostty
|
name: ghostty
|
||||||
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
||||||
@@ -86,7 +86,7 @@ jobs:
|
|||||||
# GhosttyKit is the framework that is built from Zig for our native
|
# GhosttyKit is the framework that is built from Zig for our native
|
||||||
# Mac app to access. Build this in release mode.
|
# Mac app to access. Build this in release mode.
|
||||||
- name: Build GhosttyKit
|
- name: Build GhosttyKit
|
||||||
run: nix develop -c zig build -Doptimize=ReleaseSafe -Demit-macos-app=false
|
run: nix develop -c zig build -Doptimize=ReleaseSafe
|
||||||
|
|
||||||
# The native app is built with native XCode tooling. This also does
|
# The native app is built with native XCode tooling. This also does
|
||||||
# codesigning. IMPORTANT: this must NOT run in a Nix environment.
|
# codesigning. IMPORTANT: this must NOT run in a Nix environment.
|
||||||
@@ -94,7 +94,7 @@ jobs:
|
|||||||
- name: Build Ghostty.app
|
- name: Build Ghostty.app
|
||||||
run: |
|
run: |
|
||||||
cd macos
|
cd macos
|
||||||
sudo xcode-select -s /Applications/Xcode_26.0.app
|
sudo xcode-select -s /Applications/Xcode_16.0.app
|
||||||
xcodebuild -target Ghostty -configuration Release
|
xcodebuild -target Ghostty -configuration Release
|
||||||
|
|
||||||
# We inject the "build number" as simply the number of commits since HEAD.
|
# We inject the "build number" as simply the number of commits since HEAD.
|
||||||
@@ -147,16 +147,14 @@ jobs:
|
|||||||
|
|
||||||
- name: "Notarize app bundle"
|
- name: "Notarize app bundle"
|
||||||
env:
|
env:
|
||||||
APPLE_NOTARIZATION_ISSUER: ${{ secrets.APPLE_NOTARIZATION_ISSUER }}
|
PROD_MACOS_NOTARIZATION_APPLE_ID: ${{ secrets.PROD_MACOS_NOTARIZATION_APPLE_ID }}
|
||||||
APPLE_NOTARIZATION_KEY_ID: ${{ secrets.APPLE_NOTARIZATION_KEY_ID }}
|
PROD_MACOS_NOTARIZATION_TEAM_ID: ${{ secrets.PROD_MACOS_NOTARIZATION_TEAM_ID }}
|
||||||
APPLE_NOTARIZATION_KEY: ${{ secrets.APPLE_NOTARIZATION_KEY }}
|
PROD_MACOS_NOTARIZATION_PWD: ${{ secrets.PROD_MACOS_NOTARIZATION_PWD }}
|
||||||
run: |
|
run: |
|
||||||
# Store the notarization credentials so that we can prevent a UI password dialog
|
# Store the notarization credentials so that we can prevent a UI password dialog
|
||||||
# from blocking the CI
|
# from blocking the CI
|
||||||
echo "Create keychain profile"
|
echo "Create keychain profile"
|
||||||
echo "$APPLE_NOTARIZATION_KEY" > notarization_key.p8
|
xcrun notarytool store-credentials "notarytool-profile" --apple-id "$PROD_MACOS_NOTARIZATION_APPLE_ID" --team-id "$PROD_MACOS_NOTARIZATION_TEAM_ID" --password "$PROD_MACOS_NOTARIZATION_PWD"
|
||||||
xcrun notarytool store-credentials "notarytool-profile" --key notarization_key.p8 --key-id "$APPLE_NOTARIZATION_KEY_ID" --issuer "$APPLE_NOTARIZATION_ISSUER"
|
|
||||||
rm notarization_key.p8
|
|
||||||
|
|
||||||
# We can't notarize an app bundle directly, but we need to compress it as an archive.
|
# We can't notarize an app bundle directly, but we need to compress it as an archive.
|
||||||
# Therefore, we create a zip file containing our app bundle, so that we can send it to the
|
# Therefore, we create a zip file containing our app bundle, so that we can send it to the
|
||||||
@@ -191,7 +189,7 @@ jobs:
|
|||||||
cp ghostty-macos-universal.zip blob/${GHOSTTY_COMMIT_LONG}/ghostty-macos-universal.zip
|
cp ghostty-macos-universal.zip blob/${GHOSTTY_COMMIT_LONG}/ghostty-macos-universal.zip
|
||||||
cp ghostty-macos-universal-dsym.zip blob/${GHOSTTY_COMMIT_LONG}/ghostty-macos-universal-dsym.zip
|
cp ghostty-macos-universal-dsym.zip blob/${GHOSTTY_COMMIT_LONG}/ghostty-macos-universal-dsym.zip
|
||||||
- name: Upload to R2
|
- name: Upload to R2
|
||||||
uses: ryand56/r2-upload-action@b801a390acbdeb034c5e684ff5e1361c06639e7c # v1.4
|
uses: ryand56/r2-upload-action@latest
|
||||||
with:
|
with:
|
||||||
r2-account-id: ${{ secrets.CF_R2_PR_ACCOUNT_ID }}
|
r2-account-id: ${{ secrets.CF_R2_PR_ACCOUNT_ID }}
|
||||||
r2-access-key-id: ${{ secrets.CF_R2_PR_AWS_KEY }}
|
r2-access-key-id: ${{ secrets.CF_R2_PR_AWS_KEY }}
|
||||||
@@ -201,20 +199,20 @@ jobs:
|
|||||||
destination-dir: ./
|
destination-dir: ./
|
||||||
|
|
||||||
build-macos-debug:
|
build-macos-debug:
|
||||||
runs-on: namespace-profile-ghostty-macos-sequoia
|
runs-on: namespace-profile-ghostty-macos
|
||||||
timeout-minutes: 90
|
timeout-minutes: 90
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
# Important so that build number generation works
|
# Important so that build number generation works
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
# Install Nix and use that to run our tests so our environment matches exactly.
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
||||||
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31.5.2
|
- uses: cachix/install-nix-action@v30
|
||||||
with:
|
with:
|
||||||
nix_path: nixpkgs=channel:nixos-unstable
|
nix_path: nixpkgs=channel:nixos-unstable
|
||||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
- uses: cachix/cachix-action@v15
|
||||||
with:
|
with:
|
||||||
name: ghostty
|
name: ghostty
|
||||||
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
||||||
@@ -240,7 +238,7 @@ jobs:
|
|||||||
# GhosttyKit is the framework that is built from Zig for our native
|
# GhosttyKit is the framework that is built from Zig for our native
|
||||||
# Mac app to access. Build this in release mode.
|
# Mac app to access. Build this in release mode.
|
||||||
- name: Build GhosttyKit
|
- name: Build GhosttyKit
|
||||||
run: nix develop -c zig build -Doptimize=Debug -Demit-macos-app=false
|
run: nix develop -c zig build -Doptimize=Debug
|
||||||
|
|
||||||
# The native app is built with native XCode tooling. This also does
|
# The native app is built with native XCode tooling. This also does
|
||||||
# codesigning. IMPORTANT: this must NOT run in a Nix environment.
|
# codesigning. IMPORTANT: this must NOT run in a Nix environment.
|
||||||
@@ -248,7 +246,7 @@ jobs:
|
|||||||
- name: Build Ghostty.app
|
- name: Build Ghostty.app
|
||||||
run: |
|
run: |
|
||||||
cd macos
|
cd macos
|
||||||
sudo xcode-select -s /Applications/Xcode_26.0.app
|
sudo xcode-select -s /Applications/Xcode_16.0.app
|
||||||
xcodebuild -target Ghostty -configuration Release
|
xcodebuild -target Ghostty -configuration Release
|
||||||
|
|
||||||
# We inject the "build number" as simply the number of commits since HEAD.
|
# We inject the "build number" as simply the number of commits since HEAD.
|
||||||
@@ -301,16 +299,14 @@ jobs:
|
|||||||
|
|
||||||
- name: "Notarize app bundle"
|
- name: "Notarize app bundle"
|
||||||
env:
|
env:
|
||||||
APPLE_NOTARIZATION_ISSUER: ${{ secrets.APPLE_NOTARIZATION_ISSUER }}
|
PROD_MACOS_NOTARIZATION_APPLE_ID: ${{ secrets.PROD_MACOS_NOTARIZATION_APPLE_ID }}
|
||||||
APPLE_NOTARIZATION_KEY_ID: ${{ secrets.APPLE_NOTARIZATION_KEY_ID }}
|
PROD_MACOS_NOTARIZATION_TEAM_ID: ${{ secrets.PROD_MACOS_NOTARIZATION_TEAM_ID }}
|
||||||
APPLE_NOTARIZATION_KEY: ${{ secrets.APPLE_NOTARIZATION_KEY }}
|
PROD_MACOS_NOTARIZATION_PWD: ${{ secrets.PROD_MACOS_NOTARIZATION_PWD }}
|
||||||
run: |
|
run: |
|
||||||
# Store the notarization credentials so that we can prevent a UI password dialog
|
# Store the notarization credentials so that we can prevent a UI password dialog
|
||||||
# from blocking the CI
|
# from blocking the CI
|
||||||
echo "Create keychain profile"
|
echo "Create keychain profile"
|
||||||
echo "$APPLE_NOTARIZATION_KEY" > notarization_key.p8
|
xcrun notarytool store-credentials "notarytool-profile" --apple-id "$PROD_MACOS_NOTARIZATION_APPLE_ID" --team-id "$PROD_MACOS_NOTARIZATION_TEAM_ID" --password "$PROD_MACOS_NOTARIZATION_PWD"
|
||||||
xcrun notarytool store-credentials "notarytool-profile" --key notarization_key.p8 --key-id "$APPLE_NOTARIZATION_KEY_ID" --issuer "$APPLE_NOTARIZATION_ISSUER"
|
|
||||||
rm notarization_key.p8
|
|
||||||
|
|
||||||
# We can't notarize an app bundle directly, but we need to compress it as an archive.
|
# We can't notarize an app bundle directly, but we need to compress it as an archive.
|
||||||
# Therefore, we create a zip file containing our app bundle, so that we can send it to the
|
# Therefore, we create a zip file containing our app bundle, so that we can send it to the
|
||||||
@@ -345,7 +341,7 @@ jobs:
|
|||||||
cp ghostty-macos-universal-debug.zip blob/${GHOSTTY_COMMIT_LONG}/ghostty-macos-universal-debug.zip
|
cp ghostty-macos-universal-debug.zip blob/${GHOSTTY_COMMIT_LONG}/ghostty-macos-universal-debug.zip
|
||||||
cp ghostty-macos-universal-debug-dsym.zip blob/${GHOSTTY_COMMIT_LONG}/ghostty-macos-universal-debug-dsym.zip
|
cp ghostty-macos-universal-debug-dsym.zip blob/${GHOSTTY_COMMIT_LONG}/ghostty-macos-universal-debug-dsym.zip
|
||||||
- name: Upload to R2
|
- name: Upload to R2
|
||||||
uses: ryand56/r2-upload-action@b801a390acbdeb034c5e684ff5e1361c06639e7c # v1.4
|
uses: ryand56/r2-upload-action@latest
|
||||||
with:
|
with:
|
||||||
r2-account-id: ${{ secrets.CF_R2_PR_ACCOUNT_ID }}
|
r2-account-id: ${{ secrets.CF_R2_PR_ACCOUNT_ID }}
|
||||||
r2-access-key-id: ${{ secrets.CF_R2_PR_AWS_KEY }}
|
r2-access-key-id: ${{ secrets.CF_R2_PR_AWS_KEY }}
|
||||||
|
53
.github/workflows/release-tag.yml
vendored
@@ -56,7 +56,7 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
# Important so that build number generation works
|
# Important so that build number generation works
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
@@ -80,20 +80,20 @@ jobs:
|
|||||||
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
||||||
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Setup Cache
|
- name: Setup Cache
|
||||||
uses: namespacelabs/nscloud-cache-action@305bfa7ea980a858d511af4899414a84847c7991 # v1.2.16
|
uses: namespacelabs/nscloud-cache-action@v1.2.0
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
/nix
|
/nix
|
||||||
/zig
|
/zig
|
||||||
|
|
||||||
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31.5.2
|
- uses: cachix/install-nix-action@v30
|
||||||
with:
|
with:
|
||||||
nix_path: nixpkgs=channel:nixos-unstable
|
nix_path: nixpkgs=channel:nixos-unstable
|
||||||
|
|
||||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
- uses: cachix/cachix-action@v15
|
||||||
with:
|
with:
|
||||||
name: ghostty
|
name: ghostty
|
||||||
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
||||||
@@ -111,7 +111,7 @@ jobs:
|
|||||||
nix develop -c minisign -S -m "ghostty-source.tar.gz" -s minisign.key < minisign.password
|
nix develop -c minisign -S -m "ghostty-source.tar.gz" -s minisign.key < minisign.password
|
||||||
|
|
||||||
- name: Upload artifact
|
- name: Upload artifact
|
||||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: source-tarball
|
name: source-tarball
|
||||||
path: |-
|
path: |-
|
||||||
@@ -120,7 +120,7 @@ jobs:
|
|||||||
|
|
||||||
build-macos:
|
build-macos:
|
||||||
needs: [setup]
|
needs: [setup]
|
||||||
runs-on: namespace-profile-ghostty-macos-sequoia
|
runs-on: namespace-profile-ghostty-macos
|
||||||
timeout-minutes: 90
|
timeout-minutes: 90
|
||||||
env:
|
env:
|
||||||
GHOSTTY_VERSION: ${{ needs.setup.outputs.version }}
|
GHOSTTY_VERSION: ${{ needs.setup.outputs.version }}
|
||||||
@@ -128,18 +128,18 @@ jobs:
|
|||||||
GHOSTTY_COMMIT: ${{ needs.setup.outputs.commit }}
|
GHOSTTY_COMMIT: ${{ needs.setup.outputs.commit }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31.5.2
|
- uses: cachix/install-nix-action@v30
|
||||||
with:
|
with:
|
||||||
nix_path: nixpkgs=channel:nixos-unstable
|
nix_path: nixpkgs=channel:nixos-unstable
|
||||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
- uses: cachix/cachix-action@v15
|
||||||
with:
|
with:
|
||||||
name: ghostty
|
name: ghostty
|
||||||
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
||||||
|
|
||||||
- name: XCode Select
|
- name: XCode Select
|
||||||
run: sudo xcode-select -s /Applications/Xcode_16.4.app
|
run: sudo xcode-select -s /Applications/Xcode_16.0.app
|
||||||
|
|
||||||
- name: Setup Sparkle
|
- name: Setup Sparkle
|
||||||
env:
|
env:
|
||||||
@@ -158,7 +158,6 @@ jobs:
|
|||||||
nix develop -c \
|
nix develop -c \
|
||||||
zig build \
|
zig build \
|
||||||
-Doptimize=ReleaseFast \
|
-Doptimize=ReleaseFast \
|
||||||
-Demit-macos-app=false \
|
|
||||||
-Dversion-string=${GHOSTTY_VERSION}
|
-Dversion-string=${GHOSTTY_VERSION}
|
||||||
|
|
||||||
# The native app is built with native XCode tooling. This also does
|
# The native app is built with native XCode tooling. This also does
|
||||||
@@ -229,16 +228,14 @@ jobs:
|
|||||||
|
|
||||||
- name: "Notarize DMG"
|
- name: "Notarize DMG"
|
||||||
env:
|
env:
|
||||||
APPLE_NOTARIZATION_ISSUER: ${{ secrets.APPLE_NOTARIZATION_ISSUER }}
|
PROD_MACOS_NOTARIZATION_APPLE_ID: ${{ secrets.PROD_MACOS_NOTARIZATION_APPLE_ID }}
|
||||||
APPLE_NOTARIZATION_KEY_ID: ${{ secrets.APPLE_NOTARIZATION_KEY_ID }}
|
PROD_MACOS_NOTARIZATION_TEAM_ID: ${{ secrets.PROD_MACOS_NOTARIZATION_TEAM_ID }}
|
||||||
APPLE_NOTARIZATION_KEY: ${{ secrets.APPLE_NOTARIZATION_KEY }}
|
PROD_MACOS_NOTARIZATION_PWD: ${{ secrets.PROD_MACOS_NOTARIZATION_PWD }}
|
||||||
run: |
|
run: |
|
||||||
# Store the notarization credentials so that we can prevent a UI password dialog
|
# Store the notarization credentials so that we can prevent a UI password dialog
|
||||||
# from blocking the CI
|
# from blocking the CI
|
||||||
echo "Create keychain profile"
|
echo "Create keychain profile"
|
||||||
echo "$APPLE_NOTARIZATION_KEY" > notarization_key.p8
|
xcrun notarytool store-credentials "notarytool-profile" --apple-id "$PROD_MACOS_NOTARIZATION_APPLE_ID" --team-id "$PROD_MACOS_NOTARIZATION_TEAM_ID" --password "$PROD_MACOS_NOTARIZATION_PWD"
|
||||||
xcrun notarytool store-credentials "notarytool-profile" --key notarization_key.p8 --key-id "$APPLE_NOTARIZATION_KEY_ID" --issuer "$APPLE_NOTARIZATION_ISSUER"
|
|
||||||
rm notarization_key.p8
|
|
||||||
|
|
||||||
# Here we send the notarization request to the Apple's Notarization service, waiting for the result.
|
# Here we send the notarization request to the Apple's Notarization service, waiting for the result.
|
||||||
# This typically takes a few seconds inside a CI environment, but it might take more depending on the App
|
# This typically takes a few seconds inside a CI environment, but it might take more depending on the App
|
||||||
@@ -262,7 +259,7 @@ jobs:
|
|||||||
zip -9 -r --symlinks ../../../ghostty-macos-universal-dsym.zip Ghostty.app.dSYM/
|
zip -9 -r --symlinks ../../../ghostty-macos-universal-dsym.zip Ghostty.app.dSYM/
|
||||||
|
|
||||||
- name: Upload artifact
|
- name: Upload artifact
|
||||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: macos
|
name: macos
|
||||||
path: |-
|
path: |-
|
||||||
@@ -279,7 +276,7 @@ jobs:
|
|||||||
curl -sL https://sentry.io/get-cli/ | bash
|
curl -sL https://sentry.io/get-cli/ | bash
|
||||||
|
|
||||||
- name: Download macOS Artifacts
|
- name: Download macOS Artifacts
|
||||||
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
|
uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: macos
|
name: macos
|
||||||
|
|
||||||
@@ -291,7 +288,7 @@ jobs:
|
|||||||
|
|
||||||
appcast:
|
appcast:
|
||||||
needs: [setup, build-macos]
|
needs: [setup, build-macos]
|
||||||
runs-on: namespace-profile-ghostty-macos-sequoia
|
runs-on: namespace-profile-ghostty-macos
|
||||||
env:
|
env:
|
||||||
GHOSTTY_VERSION: ${{ needs.setup.outputs.version }}
|
GHOSTTY_VERSION: ${{ needs.setup.outputs.version }}
|
||||||
GHOSTTY_BUILD: ${{ needs.setup.outputs.build }}
|
GHOSTTY_BUILD: ${{ needs.setup.outputs.build }}
|
||||||
@@ -299,10 +296,10 @@ jobs:
|
|||||||
GHOSTTY_COMMIT_LONG: ${{ needs.setup.outputs.commit_long }}
|
GHOSTTY_COMMIT_LONG: ${{ needs.setup.outputs.commit_long }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Download macOS Artifacts
|
- name: Download macOS Artifacts
|
||||||
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
|
uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: macos
|
name: macos
|
||||||
|
|
||||||
@@ -333,7 +330,7 @@ jobs:
|
|||||||
mv appcast_new.xml appcast.xml
|
mv appcast_new.xml appcast.xml
|
||||||
|
|
||||||
- name: Upload artifact
|
- name: Upload artifact
|
||||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: sparkle
|
name: sparkle
|
||||||
path: |-
|
path: |-
|
||||||
@@ -350,17 +347,17 @@ jobs:
|
|||||||
GHOSTTY_VERSION: ${{ needs.setup.outputs.version }}
|
GHOSTTY_VERSION: ${{ needs.setup.outputs.version }}
|
||||||
steps:
|
steps:
|
||||||
- name: Download macOS Artifacts
|
- name: Download macOS Artifacts
|
||||||
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
|
uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: macos
|
name: macos
|
||||||
|
|
||||||
- name: Download Sparkle Artifacts
|
- name: Download Sparkle Artifacts
|
||||||
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
|
uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: sparkle
|
name: sparkle
|
||||||
|
|
||||||
- name: Download Source Tarball Artifacts
|
- name: Download Source Tarball Artifacts
|
||||||
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
|
uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: source-tarball
|
name: source-tarball
|
||||||
|
|
||||||
@@ -380,7 +377,7 @@ jobs:
|
|||||||
mv Ghostty.dmg blob/${GHOSTTY_VERSION}/Ghostty.dmg
|
mv Ghostty.dmg blob/${GHOSTTY_VERSION}/Ghostty.dmg
|
||||||
mv appcast.xml blob/${GHOSTTY_VERSION}/appcast-staged.xml
|
mv appcast.xml blob/${GHOSTTY_VERSION}/appcast-staged.xml
|
||||||
- name: Upload to R2
|
- name: Upload to R2
|
||||||
uses: ryand56/r2-upload-action@b801a390acbdeb034c5e684ff5e1361c06639e7c # v1.4
|
uses: ryand56/r2-upload-action@latest
|
||||||
with:
|
with:
|
||||||
r2-account-id: ${{ secrets.CF_R2_RELEASE_ACCOUNT_ID }}
|
r2-account-id: ${{ secrets.CF_R2_RELEASE_ACCOUNT_ID }}
|
||||||
r2-access-key-id: ${{ secrets.CF_R2_RELEASE_AWS_KEY }}
|
r2-access-key-id: ${{ secrets.CF_R2_RELEASE_AWS_KEY }}
|
||||||
|
107
.github/workflows/release-tip.yml
vendored
@@ -19,7 +19,7 @@ jobs:
|
|||||||
runs-on: namespace-profile-ghostty-sm
|
runs-on: namespace-profile-ghostty-sm
|
||||||
needs: [build-macos]
|
needs: [build-macos]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
- uses: actions/checkout@v4
|
||||||
- name: Tip Tag
|
- name: Tip Tag
|
||||||
run: |
|
run: |
|
||||||
git config user.name "github-actions[bot]"
|
git config user.name "github-actions[bot]"
|
||||||
@@ -31,7 +31,7 @@ jobs:
|
|||||||
runs-on: namespace-profile-ghostty-sm
|
runs-on: namespace-profile-ghostty-sm
|
||||||
needs: [build-macos-debug-slow]
|
needs: [build-macos-debug-slow]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Install sentry-cli
|
- name: Install sentry-cli
|
||||||
run: |
|
run: |
|
||||||
@@ -52,7 +52,7 @@ jobs:
|
|||||||
runs-on: namespace-profile-ghostty-sm
|
runs-on: namespace-profile-ghostty-sm
|
||||||
needs: [build-macos-debug-fast]
|
needs: [build-macos-debug-fast]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Install sentry-cli
|
- name: Install sentry-cli
|
||||||
run: |
|
run: |
|
||||||
@@ -73,7 +73,7 @@ jobs:
|
|||||||
runs-on: namespace-profile-ghostty-sm
|
runs-on: namespace-profile-ghostty-sm
|
||||||
needs: [build-macos]
|
needs: [build-macos]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Install sentry-cli
|
- name: Install sentry-cli
|
||||||
run: |
|
run: |
|
||||||
@@ -105,17 +105,17 @@ jobs:
|
|||||||
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
||||||
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
- uses: actions/checkout@v4
|
||||||
- name: Setup Cache
|
- name: Setup Cache
|
||||||
uses: namespacelabs/nscloud-cache-action@305bfa7ea980a858d511af4899414a84847c7991 # v1.2.16
|
uses: namespacelabs/nscloud-cache-action@v1.2.0
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
/nix
|
/nix
|
||||||
/zig
|
/zig
|
||||||
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31.5.2
|
- uses: cachix/install-nix-action@v30
|
||||||
with:
|
with:
|
||||||
nix_path: nixpkgs=channel:nixos-unstable
|
nix_path: nixpkgs=channel:nixos-unstable
|
||||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
- uses: cachix/cachix-action@v15
|
||||||
with:
|
with:
|
||||||
name: ghostty
|
name: ghostty
|
||||||
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
||||||
@@ -132,7 +132,7 @@ jobs:
|
|||||||
nix develop -c minisign -S -m ghostty-source.tar.gz -s minisign.key < minisign.password
|
nix develop -c minisign -S -m ghostty-source.tar.gz -s minisign.key < minisign.password
|
||||||
|
|
||||||
- name: Update Release
|
- name: Update Release
|
||||||
uses: softprops/action-gh-release@72f2c25fcb47643c292f7107632f7a47c1df5cd8 # v2.3.2
|
uses: softprops/action-gh-release@v2
|
||||||
with:
|
with:
|
||||||
name: 'Ghostty Tip ("Nightly")'
|
name: 'Ghostty Tip ("Nightly")'
|
||||||
prerelease: true
|
prerelease: true
|
||||||
@@ -154,29 +154,26 @@ jobs:
|
|||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
|
|
||||||
runs-on: namespace-profile-ghostty-macos-sequoia
|
runs-on: namespace-profile-ghostty-macos
|
||||||
timeout-minutes: 90
|
timeout-minutes: 90
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
# Important so that build number generation works
|
# Important so that build number generation works
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
# Install Nix and use that to run our tests so our environment matches exactly.
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
||||||
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31.5.2
|
- uses: cachix/install-nix-action@v30
|
||||||
with:
|
with:
|
||||||
nix_path: nixpkgs=channel:nixos-unstable
|
nix_path: nixpkgs=channel:nixos-unstable
|
||||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
- uses: cachix/cachix-action@v15
|
||||||
with:
|
with:
|
||||||
name: ghostty
|
name: ghostty
|
||||||
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
||||||
|
|
||||||
- name: XCode Select
|
- name: XCode Select
|
||||||
run: sudo xcode-select -s /Applications/Xcode_26.0.app
|
run: sudo xcode-select -s /Applications/Xcode_16.0.app
|
||||||
|
|
||||||
- name: Xcode Version
|
|
||||||
run: xcodebuild -version
|
|
||||||
|
|
||||||
# Setup Sparkle
|
# Setup Sparkle
|
||||||
- name: Setup Sparkle
|
- name: Setup Sparkle
|
||||||
@@ -199,7 +196,7 @@ jobs:
|
|||||||
# GhosttyKit is the framework that is built from Zig for our native
|
# GhosttyKit is the framework that is built from Zig for our native
|
||||||
# Mac app to access. Build this in release mode.
|
# Mac app to access. Build this in release mode.
|
||||||
- name: Build GhosttyKit
|
- name: Build GhosttyKit
|
||||||
run: nix develop -c zig build -Doptimize=ReleaseFast -Demit-macos-app=false
|
run: nix develop -c zig build -Doptimize=ReleaseFast
|
||||||
|
|
||||||
# The native app is built with native XCode tooling. This also does
|
# The native app is built with native XCode tooling. This also does
|
||||||
# codesigning. IMPORTANT: this must NOT run in a Nix environment.
|
# codesigning. IMPORTANT: this must NOT run in a Nix environment.
|
||||||
@@ -270,16 +267,14 @@ jobs:
|
|||||||
|
|
||||||
- name: "Notarize DMG"
|
- name: "Notarize DMG"
|
||||||
env:
|
env:
|
||||||
APPLE_NOTARIZATION_ISSUER: ${{ secrets.APPLE_NOTARIZATION_ISSUER }}
|
PROD_MACOS_NOTARIZATION_APPLE_ID: ${{ secrets.PROD_MACOS_NOTARIZATION_APPLE_ID }}
|
||||||
APPLE_NOTARIZATION_KEY_ID: ${{ secrets.APPLE_NOTARIZATION_KEY_ID }}
|
PROD_MACOS_NOTARIZATION_TEAM_ID: ${{ secrets.PROD_MACOS_NOTARIZATION_TEAM_ID }}
|
||||||
APPLE_NOTARIZATION_KEY: ${{ secrets.APPLE_NOTARIZATION_KEY }}
|
PROD_MACOS_NOTARIZATION_PWD: ${{ secrets.PROD_MACOS_NOTARIZATION_PWD }}
|
||||||
run: |
|
run: |
|
||||||
# Store the notarization credentials so that we can prevent a UI password dialog
|
# Store the notarization credentials so that we can prevent a UI password dialog
|
||||||
# from blocking the CI
|
# from blocking the CI
|
||||||
echo "Create keychain profile"
|
echo "Create keychain profile"
|
||||||
echo "$APPLE_NOTARIZATION_KEY" > notarization_key.p8
|
xcrun notarytool store-credentials "notarytool-profile" --apple-id "$PROD_MACOS_NOTARIZATION_APPLE_ID" --team-id "$PROD_MACOS_NOTARIZATION_TEAM_ID" --password "$PROD_MACOS_NOTARIZATION_PWD"
|
||||||
xcrun notarytool store-credentials "notarytool-profile" --key notarization_key.p8 --key-id "$APPLE_NOTARIZATION_KEY_ID" --issuer "$APPLE_NOTARIZATION_ISSUER"
|
|
||||||
rm notarization_key.p8
|
|
||||||
|
|
||||||
# Here we send the notarization request to the Apple's Notarization service, waiting for the result.
|
# Here we send the notarization request to the Apple's Notarization service, waiting for the result.
|
||||||
# This typically takes a few seconds inside a CI environment, but it might take more depending on the App
|
# This typically takes a few seconds inside a CI environment, but it might take more depending on the App
|
||||||
@@ -304,7 +299,7 @@ jobs:
|
|||||||
|
|
||||||
# Update Release
|
# Update Release
|
||||||
- name: Release
|
- name: Release
|
||||||
uses: softprops/action-gh-release@72f2c25fcb47643c292f7107632f7a47c1df5cd8 # v2.3.2
|
uses: softprops/action-gh-release@v2
|
||||||
with:
|
with:
|
||||||
name: 'Ghostty Tip ("Nightly")'
|
name: 'Ghostty Tip ("Nightly")'
|
||||||
prerelease: true
|
prerelease: true
|
||||||
@@ -336,7 +331,7 @@ jobs:
|
|||||||
cp Ghostty.dmg blob/${GHOSTTY_COMMIT_LONG}/Ghostty.dmg
|
cp Ghostty.dmg blob/${GHOSTTY_COMMIT_LONG}/Ghostty.dmg
|
||||||
|
|
||||||
- name: Upload to R2
|
- name: Upload to R2
|
||||||
uses: ryand56/r2-upload-action@b801a390acbdeb034c5e684ff5e1361c06639e7c # v1.4
|
uses: ryand56/r2-upload-action@latest
|
||||||
with:
|
with:
|
||||||
r2-account-id: ${{ secrets.CF_R2_TIP_ACCOUNT_ID }}
|
r2-account-id: ${{ secrets.CF_R2_TIP_ACCOUNT_ID }}
|
||||||
r2-access-key-id: ${{ secrets.CF_R2_TIP_AWS_KEY }}
|
r2-access-key-id: ${{ secrets.CF_R2_TIP_AWS_KEY }}
|
||||||
@@ -354,7 +349,7 @@ jobs:
|
|||||||
cp appcast_new.xml blob/appcast.xml
|
cp appcast_new.xml blob/appcast.xml
|
||||||
|
|
||||||
- name: Upload Appcast to R2
|
- name: Upload Appcast to R2
|
||||||
uses: ryand56/r2-upload-action@b801a390acbdeb034c5e684ff5e1361c06639e7c # v1.4
|
uses: ryand56/r2-upload-action@latest
|
||||||
with:
|
with:
|
||||||
r2-account-id: ${{ secrets.CF_R2_TIP_ACCOUNT_ID }}
|
r2-account-id: ${{ secrets.CF_R2_TIP_ACCOUNT_ID }}
|
||||||
r2-access-key-id: ${{ secrets.CF_R2_TIP_AWS_KEY }}
|
r2-access-key-id: ${{ secrets.CF_R2_TIP_AWS_KEY }}
|
||||||
@@ -374,29 +369,26 @@ jobs:
|
|||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
|
|
||||||
runs-on: namespace-profile-ghostty-macos-sequoia
|
runs-on: namespace-profile-ghostty-macos
|
||||||
timeout-minutes: 90
|
timeout-minutes: 90
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
# Important so that build number generation works
|
# Important so that build number generation works
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
# Install Nix and use that to run our tests so our environment matches exactly.
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
||||||
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31.5.2
|
- uses: cachix/install-nix-action@v30
|
||||||
with:
|
with:
|
||||||
nix_path: nixpkgs=channel:nixos-unstable
|
nix_path: nixpkgs=channel:nixos-unstable
|
||||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
- uses: cachix/cachix-action@v15
|
||||||
with:
|
with:
|
||||||
name: ghostty
|
name: ghostty
|
||||||
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
||||||
|
|
||||||
- name: XCode Select
|
- name: XCode Select
|
||||||
run: sudo xcode-select -s /Applications/Xcode_26.0.app
|
run: sudo xcode-select -s /Applications/Xcode_16.0.app
|
||||||
|
|
||||||
- name: Xcode Version
|
|
||||||
run: xcodebuild -version
|
|
||||||
|
|
||||||
# Setup Sparkle
|
# Setup Sparkle
|
||||||
- name: Setup Sparkle
|
- name: Setup Sparkle
|
||||||
@@ -419,7 +411,7 @@ jobs:
|
|||||||
# GhosttyKit is the framework that is built from Zig for our native
|
# GhosttyKit is the framework that is built from Zig for our native
|
||||||
# Mac app to access. Build this in release mode.
|
# Mac app to access. Build this in release mode.
|
||||||
- name: Build GhosttyKit
|
- name: Build GhosttyKit
|
||||||
run: nix develop -c zig build -Doptimize=Debug -Demit-macos-app=false
|
run: nix develop -c zig build -Doptimize=Debug
|
||||||
|
|
||||||
# The native app is built with native XCode tooling. This also does
|
# The native app is built with native XCode tooling. This also does
|
||||||
# codesigning. IMPORTANT: this must NOT run in a Nix environment.
|
# codesigning. IMPORTANT: this must NOT run in a Nix environment.
|
||||||
@@ -479,16 +471,14 @@ jobs:
|
|||||||
|
|
||||||
- name: "Notarize app bundle"
|
- name: "Notarize app bundle"
|
||||||
env:
|
env:
|
||||||
APPLE_NOTARIZATION_ISSUER: ${{ secrets.APPLE_NOTARIZATION_ISSUER }}
|
PROD_MACOS_NOTARIZATION_APPLE_ID: ${{ secrets.PROD_MACOS_NOTARIZATION_APPLE_ID }}
|
||||||
APPLE_NOTARIZATION_KEY_ID: ${{ secrets.APPLE_NOTARIZATION_KEY_ID }}
|
PROD_MACOS_NOTARIZATION_TEAM_ID: ${{ secrets.PROD_MACOS_NOTARIZATION_TEAM_ID }}
|
||||||
APPLE_NOTARIZATION_KEY: ${{ secrets.APPLE_NOTARIZATION_KEY }}
|
PROD_MACOS_NOTARIZATION_PWD: ${{ secrets.PROD_MACOS_NOTARIZATION_PWD }}
|
||||||
run: |
|
run: |
|
||||||
# Store the notarization credentials so that we can prevent a UI password dialog
|
# Store the notarization credentials so that we can prevent a UI password dialog
|
||||||
# from blocking the CI
|
# from blocking the CI
|
||||||
echo "Create keychain profile"
|
echo "Create keychain profile"
|
||||||
echo "$APPLE_NOTARIZATION_KEY" > notarization_key.p8
|
xcrun notarytool store-credentials "notarytool-profile" --apple-id "$PROD_MACOS_NOTARIZATION_APPLE_ID" --team-id "$PROD_MACOS_NOTARIZATION_TEAM_ID" --password "$PROD_MACOS_NOTARIZATION_PWD"
|
||||||
xcrun notarytool store-credentials "notarytool-profile" --key notarization_key.p8 --key-id "$APPLE_NOTARIZATION_KEY_ID" --issuer "$APPLE_NOTARIZATION_ISSUER"
|
|
||||||
rm notarization_key.p8
|
|
||||||
|
|
||||||
# We can't notarize an app bundle directly, but we need to compress it as an archive.
|
# We can't notarize an app bundle directly, but we need to compress it as an archive.
|
||||||
# Therefore, we create a zip file containing our app bundle, so that we can send it to the
|
# Therefore, we create a zip file containing our app bundle, so that we can send it to the
|
||||||
@@ -517,7 +507,7 @@ jobs:
|
|||||||
|
|
||||||
# Update Release
|
# Update Release
|
||||||
- name: Release
|
- name: Release
|
||||||
uses: softprops/action-gh-release@72f2c25fcb47643c292f7107632f7a47c1df5cd8 # v2.3.2
|
uses: softprops/action-gh-release@v2
|
||||||
with:
|
with:
|
||||||
name: 'Ghostty Tip ("Nightly")'
|
name: 'Ghostty Tip ("Nightly")'
|
||||||
prerelease: true
|
prerelease: true
|
||||||
@@ -534,7 +524,7 @@ jobs:
|
|||||||
cp ghostty-macos-universal-debug-slow.zip blob/${GHOSTTY_COMMIT_LONG}/ghostty-macos-universal-debug-slow.zip
|
cp ghostty-macos-universal-debug-slow.zip blob/${GHOSTTY_COMMIT_LONG}/ghostty-macos-universal-debug-slow.zip
|
||||||
cp ghostty-macos-universal-debug-slow-dsym.zip blob/${GHOSTTY_COMMIT_LONG}/ghostty-macos-universal-debug-slow-dsym.zip
|
cp ghostty-macos-universal-debug-slow-dsym.zip blob/${GHOSTTY_COMMIT_LONG}/ghostty-macos-universal-debug-slow-dsym.zip
|
||||||
- name: Upload to R2
|
- name: Upload to R2
|
||||||
uses: ryand56/r2-upload-action@b801a390acbdeb034c5e684ff5e1361c06639e7c # v1.4
|
uses: ryand56/r2-upload-action@latest
|
||||||
with:
|
with:
|
||||||
r2-account-id: ${{ secrets.CF_R2_TIP_ACCOUNT_ID }}
|
r2-account-id: ${{ secrets.CF_R2_TIP_ACCOUNT_ID }}
|
||||||
r2-access-key-id: ${{ secrets.CF_R2_TIP_AWS_KEY }}
|
r2-access-key-id: ${{ secrets.CF_R2_TIP_AWS_KEY }}
|
||||||
@@ -554,29 +544,26 @@ jobs:
|
|||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
|
|
||||||
runs-on: namespace-profile-ghostty-macos-sequoia
|
runs-on: namespace-profile-ghostty-macos
|
||||||
timeout-minutes: 90
|
timeout-minutes: 90
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
# Important so that build number generation works
|
# Important so that build number generation works
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
# Install Nix and use that to run our tests so our environment matches exactly.
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
||||||
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31.5.2
|
- uses: cachix/install-nix-action@v30
|
||||||
with:
|
with:
|
||||||
nix_path: nixpkgs=channel:nixos-unstable
|
nix_path: nixpkgs=channel:nixos-unstable
|
||||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
- uses: cachix/cachix-action@v15
|
||||||
with:
|
with:
|
||||||
name: ghostty
|
name: ghostty
|
||||||
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
||||||
|
|
||||||
- name: XCode Select
|
- name: XCode Select
|
||||||
run: sudo xcode-select -s /Applications/Xcode_26.0.app
|
run: sudo xcode-select -s /Applications/Xcode_16.0.app
|
||||||
|
|
||||||
- name: Xcode Version
|
|
||||||
run: xcodebuild -version
|
|
||||||
|
|
||||||
# Setup Sparkle
|
# Setup Sparkle
|
||||||
- name: Setup Sparkle
|
- name: Setup Sparkle
|
||||||
@@ -599,7 +586,7 @@ jobs:
|
|||||||
# GhosttyKit is the framework that is built from Zig for our native
|
# GhosttyKit is the framework that is built from Zig for our native
|
||||||
# Mac app to access. Build this in release mode.
|
# Mac app to access. Build this in release mode.
|
||||||
- name: Build GhosttyKit
|
- name: Build GhosttyKit
|
||||||
run: nix develop -c zig build -Doptimize=ReleaseSafe -Demit-macos-app=false
|
run: nix develop -c zig build -Doptimize=ReleaseSafe
|
||||||
|
|
||||||
# The native app is built with native XCode tooling. This also does
|
# The native app is built with native XCode tooling. This also does
|
||||||
# codesigning. IMPORTANT: this must NOT run in a Nix environment.
|
# codesigning. IMPORTANT: this must NOT run in a Nix environment.
|
||||||
@@ -659,16 +646,14 @@ jobs:
|
|||||||
|
|
||||||
- name: "Notarize app bundle"
|
- name: "Notarize app bundle"
|
||||||
env:
|
env:
|
||||||
APPLE_NOTARIZATION_ISSUER: ${{ secrets.APPLE_NOTARIZATION_ISSUER }}
|
PROD_MACOS_NOTARIZATION_APPLE_ID: ${{ secrets.PROD_MACOS_NOTARIZATION_APPLE_ID }}
|
||||||
APPLE_NOTARIZATION_KEY_ID: ${{ secrets.APPLE_NOTARIZATION_KEY_ID }}
|
PROD_MACOS_NOTARIZATION_TEAM_ID: ${{ secrets.PROD_MACOS_NOTARIZATION_TEAM_ID }}
|
||||||
APPLE_NOTARIZATION_KEY: ${{ secrets.APPLE_NOTARIZATION_KEY }}
|
PROD_MACOS_NOTARIZATION_PWD: ${{ secrets.PROD_MACOS_NOTARIZATION_PWD }}
|
||||||
run: |
|
run: |
|
||||||
# Store the notarization credentials so that we can prevent a UI password dialog
|
# Store the notarization credentials so that we can prevent a UI password dialog
|
||||||
# from blocking the CI
|
# from blocking the CI
|
||||||
echo "Create keychain profile"
|
echo "Create keychain profile"
|
||||||
echo "$APPLE_NOTARIZATION_KEY" > notarization_key.p8
|
xcrun notarytool store-credentials "notarytool-profile" --apple-id "$PROD_MACOS_NOTARIZATION_APPLE_ID" --team-id "$PROD_MACOS_NOTARIZATION_TEAM_ID" --password "$PROD_MACOS_NOTARIZATION_PWD"
|
||||||
xcrun notarytool store-credentials "notarytool-profile" --key notarization_key.p8 --key-id "$APPLE_NOTARIZATION_KEY_ID" --issuer "$APPLE_NOTARIZATION_ISSUER"
|
|
||||||
rm notarization_key.p8
|
|
||||||
|
|
||||||
# We can't notarize an app bundle directly, but we need to compress it as an archive.
|
# We can't notarize an app bundle directly, but we need to compress it as an archive.
|
||||||
# Therefore, we create a zip file containing our app bundle, so that we can send it to the
|
# Therefore, we create a zip file containing our app bundle, so that we can send it to the
|
||||||
@@ -697,7 +682,7 @@ jobs:
|
|||||||
|
|
||||||
# Update Release
|
# Update Release
|
||||||
- name: Release
|
- name: Release
|
||||||
uses: softprops/action-gh-release@72f2c25fcb47643c292f7107632f7a47c1df5cd8 # v2.3.2
|
uses: softprops/action-gh-release@v2
|
||||||
with:
|
with:
|
||||||
name: 'Ghostty Tip ("Nightly")'
|
name: 'Ghostty Tip ("Nightly")'
|
||||||
prerelease: true
|
prerelease: true
|
||||||
@@ -714,7 +699,7 @@ jobs:
|
|||||||
cp ghostty-macos-universal-debug-fast.zip blob/${GHOSTTY_COMMIT_LONG}/ghostty-macos-universal-debug-fast.zip
|
cp ghostty-macos-universal-debug-fast.zip blob/${GHOSTTY_COMMIT_LONG}/ghostty-macos-universal-debug-fast.zip
|
||||||
cp ghostty-macos-universal-debug-fast-dsym.zip blob/${GHOSTTY_COMMIT_LONG}/ghostty-macos-universal-debug-fast-dsym.zip
|
cp ghostty-macos-universal-debug-fast-dsym.zip blob/${GHOSTTY_COMMIT_LONG}/ghostty-macos-universal-debug-fast-dsym.zip
|
||||||
- name: Upload to R2
|
- name: Upload to R2
|
||||||
uses: ryand56/r2-upload-action@b801a390acbdeb034c5e684ff5e1361c06639e7c # v1.4
|
uses: ryand56/r2-upload-action@latest
|
||||||
with:
|
with:
|
||||||
r2-account-id: ${{ secrets.CF_R2_TIP_ACCOUNT_ID }}
|
r2-account-id: ${{ secrets.CF_R2_TIP_ACCOUNT_ID }}
|
||||||
r2-access-key-id: ${{ secrets.CF_R2_TIP_AWS_KEY }}
|
r2-access-key-id: ${{ secrets.CF_R2_TIP_AWS_KEY }}
|
||||||
|
555
.github/workflows/test.yml
vendored
@@ -18,21 +18,16 @@ jobs:
|
|||||||
- build-nix
|
- build-nix
|
||||||
- build-snap
|
- build-snap
|
||||||
- build-macos
|
- build-macos
|
||||||
- build-macos-tahoe
|
|
||||||
- build-macos-matrix
|
- build-macos-matrix
|
||||||
- build-windows
|
- build-windows
|
||||||
- flatpak-check-zig-cache
|
- build-windows-cross
|
||||||
- flatpak
|
|
||||||
- test
|
- test
|
||||||
- test-gtk
|
- test-gtk
|
||||||
- test-gtk-ng
|
|
||||||
- test-sentry-linux
|
- test-sentry-linux
|
||||||
- test-macos
|
- test-macos
|
||||||
- pinact
|
|
||||||
- prettier
|
- prettier
|
||||||
- alejandra
|
- alejandra
|
||||||
- typos
|
- typos
|
||||||
- shellcheck
|
|
||||||
- translations
|
- translations
|
||||||
- blueprint-compiler
|
- blueprint-compiler
|
||||||
- test-pkg-linux
|
- test-pkg-linux
|
||||||
@@ -67,26 +62,26 @@ jobs:
|
|||||||
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Setup Cache
|
- name: Setup Cache
|
||||||
uses: namespacelabs/nscloud-cache-action@305bfa7ea980a858d511af4899414a84847c7991 # v1.2.16
|
uses: namespacelabs/nscloud-cache-action@v1.2.0
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
/nix
|
/nix
|
||||||
/zig
|
/zig
|
||||||
|
|
||||||
# Install Nix and use that to run our tests so our environment matches exactly.
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
||||||
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31.5.2
|
- uses: cachix/install-nix-action@v30
|
||||||
with:
|
with:
|
||||||
nix_path: nixpkgs=channel:nixos-unstable
|
nix_path: nixpkgs=channel:nixos-unstable
|
||||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
- uses: cachix/cachix-action@v15
|
||||||
with:
|
with:
|
||||||
name: ghostty
|
name: ghostty
|
||||||
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
||||||
|
|
||||||
- name: Build Benchmarks
|
- name: Build Benchmarks
|
||||||
run: nix develop -c zig build -Demit-bench
|
run: nix develop -c zig build -Dapp-runtime=glfw -Demit-bench
|
||||||
|
|
||||||
build-flatpak:
|
build-flatpak:
|
||||||
strategy:
|
strategy:
|
||||||
@@ -98,20 +93,20 @@ jobs:
|
|||||||
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Setup Cache
|
- name: Setup Cache
|
||||||
uses: namespacelabs/nscloud-cache-action@305bfa7ea980a858d511af4899414a84847c7991 # v1.2.16
|
uses: namespacelabs/nscloud-cache-action@v1.2.0
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
/nix
|
/nix
|
||||||
/zig
|
/zig
|
||||||
|
|
||||||
# Install Nix and use that to run our tests so our environment matches exactly.
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
||||||
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31.5.2
|
- uses: cachix/install-nix-action@v30
|
||||||
with:
|
with:
|
||||||
nix_path: nixpkgs=channel:nixos-unstable
|
nix_path: nixpkgs=channel:nixos-unstable
|
||||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
- uses: cachix/cachix-action@v15
|
||||||
with:
|
with:
|
||||||
name: ghostty
|
name: ghostty
|
||||||
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
||||||
@@ -134,26 +129,26 @@ jobs:
|
|||||||
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Setup Cache
|
- name: Setup Cache
|
||||||
uses: namespacelabs/nscloud-cache-action@305bfa7ea980a858d511af4899414a84847c7991 # v1.2.16
|
uses: namespacelabs/nscloud-cache-action@v1.2.0
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
/nix
|
/nix
|
||||||
/zig
|
/zig
|
||||||
|
|
||||||
# Install Nix and use that to run our tests so our environment matches exactly.
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
||||||
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31.5.2
|
- uses: cachix/install-nix-action@v30
|
||||||
with:
|
with:
|
||||||
nix_path: nixpkgs=channel:nixos-unstable
|
nix_path: nixpkgs=channel:nixos-unstable
|
||||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
- uses: cachix/cachix-action@v15
|
||||||
with:
|
with:
|
||||||
name: ghostty
|
name: ghostty
|
||||||
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
||||||
|
|
||||||
- name: Test Build
|
- name: Test Build
|
||||||
run: nix develop -c zig build
|
run: nix develop -c zig build -Dapp-runtime=glfw
|
||||||
|
|
||||||
build-linux-libghostty:
|
build-linux-libghostty:
|
||||||
runs-on: namespace-profile-ghostty-md
|
runs-on: namespace-profile-ghostty-md
|
||||||
@@ -163,20 +158,20 @@ jobs:
|
|||||||
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Setup Cache
|
- name: Setup Cache
|
||||||
uses: namespacelabs/nscloud-cache-action@305bfa7ea980a858d511af4899414a84847c7991 # v1.2.16
|
uses: namespacelabs/nscloud-cache-action@v1.2.0
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
/nix
|
/nix
|
||||||
/zig
|
/zig
|
||||||
|
|
||||||
# Install Nix and use that to run our tests so our environment matches exactly.
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
||||||
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31.5.2
|
- uses: cachix/install-nix-action@v30
|
||||||
with:
|
with:
|
||||||
nix_path: nixpkgs=channel:nixos-unstable
|
nix_path: nixpkgs=channel:nixos-unstable
|
||||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
- uses: cachix/cachix-action@v15
|
||||||
with:
|
with:
|
||||||
name: ghostty
|
name: ghostty
|
||||||
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
||||||
@@ -196,41 +191,26 @@ jobs:
|
|||||||
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Setup Cache
|
- name: Setup Cache
|
||||||
uses: namespacelabs/nscloud-cache-action@305bfa7ea980a858d511af4899414a84847c7991 # v1.2.16
|
uses: namespacelabs/nscloud-cache-action@v1.2.0
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
/nix
|
/nix
|
||||||
/zig
|
/zig
|
||||||
|
|
||||||
# Install Nix and use that to run our tests so our environment matches exactly.
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
||||||
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31.5.2
|
- uses: cachix/install-nix-action@v30
|
||||||
with:
|
with:
|
||||||
nix_path: nixpkgs=channel:nixos-unstable
|
nix_path: nixpkgs=channel:nixos-unstable
|
||||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
- uses: cachix/cachix-action@v15
|
||||||
with:
|
with:
|
||||||
name: ghostty
|
name: ghostty
|
||||||
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
||||||
|
|
||||||
- name: Test release NixOS package build
|
- name: Test NixOS package build
|
||||||
run: nix build .#ghostty-releasefast
|
run: nix build .#ghostty
|
||||||
|
|
||||||
- name: Check version
|
|
||||||
run: result/bin/ghostty +version | grep -q 'builtin.OptimizeMode.ReleaseFast'
|
|
||||||
|
|
||||||
- name: Check to see if the binary has been stripped
|
|
||||||
run: nm result/bin/.ghostty-wrapped 2>&1 | grep -q 'no symbols'
|
|
||||||
|
|
||||||
- name: Test debug NixOS package build
|
|
||||||
run: nix build .#ghostty-debug
|
|
||||||
|
|
||||||
- name: Check version
|
|
||||||
run: result/bin/ghostty +version | grep -q 'builtin.OptimizeMode.Debug'
|
|
||||||
|
|
||||||
- name: Check to see if the binary has not been stripped
|
|
||||||
run: nm result/bin/.ghostty-wrapped 2>&1 | grep -q 'main_ghostty.main'
|
|
||||||
|
|
||||||
build-dist:
|
build-dist:
|
||||||
runs-on: namespace-profile-ghostty-md
|
runs-on: namespace-profile-ghostty-md
|
||||||
@@ -240,20 +220,20 @@ jobs:
|
|||||||
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Setup Cache
|
- name: Setup Cache
|
||||||
uses: namespacelabs/nscloud-cache-action@305bfa7ea980a858d511af4899414a84847c7991 # v1.2.16
|
uses: namespacelabs/nscloud-cache-action@v1.2.0
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
/nix
|
/nix
|
||||||
/zig
|
/zig
|
||||||
|
|
||||||
# Install Nix and use that to run our tests so our environment matches exactly.
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
||||||
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31.5.2
|
- uses: cachix/install-nix-action@v30
|
||||||
with:
|
with:
|
||||||
nix_path: nixpkgs=channel:nixos-unstable
|
nix_path: nixpkgs=channel:nixos-unstable
|
||||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
- uses: cachix/cachix-action@v15
|
||||||
with:
|
with:
|
||||||
name: ghostty
|
name: ghostty
|
||||||
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
||||||
@@ -265,33 +245,30 @@ jobs:
|
|||||||
cp zig-out/dist/*.tar.gz ghostty-source.tar.gz
|
cp zig-out/dist/*.tar.gz ghostty-source.tar.gz
|
||||||
|
|
||||||
- name: Upload artifact
|
- name: Upload artifact
|
||||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: source-tarball
|
name: source-tarball
|
||||||
path: |-
|
path: |-
|
||||||
ghostty-source.tar.gz
|
ghostty-source.tar.gz
|
||||||
|
|
||||||
build-macos:
|
build-macos:
|
||||||
runs-on: namespace-profile-ghostty-macos-sequoia
|
runs-on: namespace-profile-ghostty-macos
|
||||||
needs: test
|
needs: test
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
# Install Nix and use that to run our tests so our environment matches exactly.
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
||||||
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31.5.2
|
- uses: cachix/install-nix-action@v30
|
||||||
with:
|
with:
|
||||||
nix_path: nixpkgs=channel:nixos-unstable
|
nix_path: nixpkgs=channel:nixos-unstable
|
||||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
- uses: cachix/cachix-action@v15
|
||||||
with:
|
with:
|
||||||
name: ghostty
|
name: ghostty
|
||||||
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
||||||
|
|
||||||
- name: Xcode Select
|
- name: XCode Select
|
||||||
run: sudo xcode-select -s /Applications/Xcode_26.0.app
|
run: sudo xcode-select -s /Applications/Xcode_16.0.app
|
||||||
|
|
||||||
- name: Xcode Version
|
|
||||||
run: xcodebuild -version
|
|
||||||
|
|
||||||
- name: get the Zig deps
|
- name: get the Zig deps
|
||||||
id: deps
|
id: deps
|
||||||
@@ -300,49 +277,9 @@ jobs:
|
|||||||
# GhosttyKit is the framework that is built from Zig for our native
|
# GhosttyKit is the framework that is built from Zig for our native
|
||||||
# Mac app to access.
|
# Mac app to access.
|
||||||
- name: Build GhosttyKit
|
- name: Build GhosttyKit
|
||||||
run: nix develop -c zig build --system ${{ steps.deps.outputs.deps }} -Demit-macos-app=false
|
run: nix develop -c zig build --system ${{ steps.deps.outputs.deps }}
|
||||||
|
|
||||||
# The native app is built with native Xcode tooling. This also does
|
# The native app is built with native XCode tooling. This also does
|
||||||
# codesigning. IMPORTANT: this must NOT run in a Nix environment.
|
|
||||||
# Nix breaks xcodebuild so this has to be run outside.
|
|
||||||
- name: Build Ghostty.app
|
|
||||||
run: cd macos && xcodebuild -target Ghostty
|
|
||||||
|
|
||||||
# Build the iOS target without code signing just to verify it works.
|
|
||||||
- name: Build Ghostty iOS
|
|
||||||
run: |
|
|
||||||
cd macos
|
|
||||||
xcodebuild -target Ghostty-iOS "CODE_SIGNING_ALLOWED=NO"
|
|
||||||
|
|
||||||
build-macos-tahoe:
|
|
||||||
runs-on: namespace-profile-ghostty-macos-tahoe
|
|
||||||
needs: test
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
||||||
|
|
||||||
# TODO(tahoe): https://github.com/NixOS/nix/issues/13342
|
|
||||||
- uses: DeterminateSystems/nix-installer-action@main
|
|
||||||
with:
|
|
||||||
determinate: true
|
|
||||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
|
||||||
with:
|
|
||||||
name: ghostty
|
|
||||||
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
||||||
|
|
||||||
- name: Xcode Select
|
|
||||||
run: sudo xcode-select -s /Applications/Xcode_26.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 --system ${{ steps.deps.outputs.deps }} -Demit-macos-app=false
|
|
||||||
|
|
||||||
# The native app is built with native Xcode tooling. This also does
|
|
||||||
# codesigning. IMPORTANT: this must NOT run in a Nix environment.
|
# codesigning. IMPORTANT: this must NOT run in a Nix environment.
|
||||||
# Nix breaks xcodebuild so this has to be run outside.
|
# Nix breaks xcodebuild so this has to be run outside.
|
||||||
- name: Build Ghostty.app
|
- name: Build Ghostty.app
|
||||||
@@ -355,23 +292,23 @@ jobs:
|
|||||||
xcodebuild -target Ghostty-iOS "CODE_SIGNING_ALLOWED=NO"
|
xcodebuild -target Ghostty-iOS "CODE_SIGNING_ALLOWED=NO"
|
||||||
|
|
||||||
build-macos-matrix:
|
build-macos-matrix:
|
||||||
runs-on: namespace-profile-ghostty-macos-sequoia
|
runs-on: namespace-profile-ghostty-macos
|
||||||
needs: test
|
needs: test
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
# Install Nix and use that to run our tests so our environment matches exactly.
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
||||||
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31.5.2
|
- uses: cachix/install-nix-action@v30
|
||||||
with:
|
with:
|
||||||
nix_path: nixpkgs=channel:nixos-unstable
|
nix_path: nixpkgs=channel:nixos-unstable
|
||||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
- uses: cachix/cachix-action@v15
|
||||||
with:
|
with:
|
||||||
name: ghostty
|
name: ghostty
|
||||||
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
||||||
|
|
||||||
- name: Xcode Select
|
- name: XCode Select
|
||||||
run: sudo xcode-select -s /Applications/Xcode_26.0.app
|
run: sudo xcode-select -s /Applications/Xcode_16.0.app
|
||||||
|
|
||||||
- name: get the Zig deps
|
- name: get the Zig deps
|
||||||
id: deps
|
id: deps
|
||||||
@@ -379,19 +316,33 @@ jobs:
|
|||||||
|
|
||||||
- name: Test All
|
- name: Test All
|
||||||
run: |
|
run: |
|
||||||
nix develop -c zig build test --system ${{ steps.deps.outputs.deps }} -Drenderer=metal -Dfont-backend=freetype
|
# OpenGL
|
||||||
nix develop -c zig build test --system ${{ steps.deps.outputs.deps }} -Drenderer=metal -Dfont-backend=coretext
|
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 }} -Drenderer=metal -Dfont-backend=coretext_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 }} -Drenderer=metal -Dfont-backend=coretext_harfbuzz
|
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 }} -Drenderer=metal -Dfont-backend=coretext_noshape
|
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 --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
|
- name: Build All
|
||||||
run: |
|
run: |
|
||||||
nix develop -c zig build --system ${{ steps.deps.outputs.deps }} -Demit-macos-app=false -Drenderer=metal -Dfont-backend=freetype
|
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 }} -Demit-macos-app=false -Drenderer=metal -Dfont-backend=coretext
|
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 }} -Demit-macos-app=false -Drenderer=metal -Dfont-backend=coretext_freetype
|
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 }} -Demit-macos-app=false -Drenderer=metal -Dfont-backend=coretext_harfbuzz
|
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 }} -Demit-macos-app=false -Drenderer=metal -Dfont-backend=coretext_noshape
|
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-snap:
|
build-snap:
|
||||||
strategy:
|
strategy:
|
||||||
@@ -400,35 +351,24 @@ jobs:
|
|||||||
os:
|
os:
|
||||||
[namespace-profile-ghostty-snap, namespace-profile-ghostty-snap-arm64]
|
[namespace-profile-ghostty-snap, namespace-profile-ghostty-snap-arm64]
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
needs: [test, build-dist]
|
needs: test
|
||||||
env:
|
env:
|
||||||
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
||||||
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
||||||
steps:
|
steps:
|
||||||
- name: Download Source Tarball Artifacts
|
- uses: actions/checkout@v4
|
||||||
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
|
|
||||||
with:
|
with:
|
||||||
name: source-tarball
|
fetch-depth: 0
|
||||||
- name: Extract tarball
|
fetch-tags: true
|
||||||
run: |
|
|
||||||
mkdir dist
|
|
||||||
tar --verbose --extract --strip-components 1 --directory dist --file ghostty-source.tar.gz
|
|
||||||
- name: Setup Cache
|
- name: Setup Cache
|
||||||
uses: namespacelabs/nscloud-cache-action@305bfa7ea980a858d511af4899414a84847c7991 # v1.2.16
|
uses: namespacelabs/nscloud-cache-action@v1.2.0
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
/nix
|
/nix
|
||||||
/zig
|
/zig
|
||||||
- run: sudo apt install -y udev
|
- run: sudo apt install -y udev
|
||||||
- run: sudo systemctl start systemd-udevd
|
- run: sudo systemctl start systemd-udevd
|
||||||
# Workaround until this is fixed: https://github.com/canonical/lxd-pkg-snap/pull/789
|
- uses: snapcore/action-build@v1
|
||||||
- run: |
|
|
||||||
_LXD_SNAP_DEVCGROUP_CONFIG="/var/lib/snapd/cgroup/snap.lxd.device"
|
|
||||||
sudo mkdir -p /var/lib/snapd/cgroup
|
|
||||||
echo 'self-managed=true' | sudo tee "${_LXD_SNAP_DEVCGROUP_CONFIG}"
|
|
||||||
- uses: snapcore/action-build@3bdaa03e1ba6bf59a65f84a751d943d549a54e79 # v1.3.0
|
|
||||||
with:
|
|
||||||
path: dist
|
|
||||||
|
|
||||||
build-windows:
|
build-windows:
|
||||||
runs-on: windows-2022
|
runs-on: windows-2022
|
||||||
@@ -437,7 +377,7 @@ jobs:
|
|||||||
needs: test
|
needs: test
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
# This could be from a script if we wanted to but inlining here for now
|
# This could be from a script if we wanted to but inlining here for now
|
||||||
# in one place.
|
# in one place.
|
||||||
@@ -498,6 +438,52 @@ jobs:
|
|||||||
shell: pwsh
|
shell: pwsh
|
||||||
run: Get-Content -Path ".\build.log"
|
run: Get-Content -Path ".\build.log"
|
||||||
|
|
||||||
|
build-windows-cross:
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os: ["namespace-profile-ghostty-md"]
|
||||||
|
|
||||||
|
target: [
|
||||||
|
x86-windows-gnu,
|
||||||
|
x86_64-windows-gnu,
|
||||||
|
# We don't support cross-compiling to macOS or Linux because
|
||||||
|
# we require system libraries.
|
||||||
|
#aarch64-linux,
|
||||||
|
#x86_64-linux,
|
||||||
|
#aarch64-macos,
|
||||||
|
#x86_64-macos,
|
||||||
|
]
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
needs: test
|
||||||
|
env:
|
||||||
|
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
||||||
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Setup Cache
|
||||||
|
uses: namespacelabs/nscloud-cache-action@v1.2.0
|
||||||
|
with:
|
||||||
|
path: |
|
||||||
|
/nix
|
||||||
|
/zig
|
||||||
|
|
||||||
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
||||||
|
- uses: cachix/install-nix-action@v30
|
||||||
|
with:
|
||||||
|
nix_path: nixpkgs=channel:nixos-unstable
|
||||||
|
- uses: cachix/cachix-action@v15
|
||||||
|
with:
|
||||||
|
name: ghostty
|
||||||
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
||||||
|
|
||||||
|
# Cross-compile the binary. We always use static building for this
|
||||||
|
# because its the only way to access the headers.
|
||||||
|
- name: Test Build
|
||||||
|
run: nix develop -c zig build -Dapp-runtime=glfw -Dtarget=${{ matrix.target }}
|
||||||
|
|
||||||
test:
|
test:
|
||||||
if: github.repository == 'ghostty-org/ghostty'
|
if: github.repository == 'ghostty-org/ghostty'
|
||||||
runs-on: namespace-profile-ghostty-md
|
runs-on: namespace-profile-ghostty-md
|
||||||
@@ -506,20 +492,20 @@ jobs:
|
|||||||
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Setup Cache
|
- name: Setup Cache
|
||||||
uses: namespacelabs/nscloud-cache-action@305bfa7ea980a858d511af4899414a84847c7991 # v1.2.16
|
uses: namespacelabs/nscloud-cache-action@v1.2.0
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
/nix
|
/nix
|
||||||
/zig
|
/zig
|
||||||
|
|
||||||
# Install Nix and use that to run our tests so our environment matches exactly.
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
||||||
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31.5.2
|
- uses: cachix/install-nix-action@v30
|
||||||
with:
|
with:
|
||||||
nix_path: nixpkgs=channel:nixos-unstable
|
nix_path: nixpkgs=channel:nixos-unstable
|
||||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
- uses: cachix/cachix-action@v15
|
||||||
with:
|
with:
|
||||||
name: ghostty
|
name: ghostty
|
||||||
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
||||||
@@ -528,10 +514,10 @@ jobs:
|
|||||||
run: nix develop -c zig build -Dapp-runtime=none test
|
run: nix develop -c zig build -Dapp-runtime=none test
|
||||||
|
|
||||||
- name: Test GTK Build
|
- name: Test GTK Build
|
||||||
run: nix develop -c zig build -Dapp-runtime=gtk -Demit-docs -Demit-webdata
|
run: nix develop -c zig build -Dapp-runtime=gtk -Demit-docs
|
||||||
|
|
||||||
- name: Test GTK-NG Build
|
- name: Test GLFW Build
|
||||||
run: nix develop -c zig build -Dapp-runtime=gtk-ng -Demit-docs -Demit-webdata
|
run: nix develop -c zig build -Dapp-runtime=glfw
|
||||||
|
|
||||||
# This relies on the cache being populated by the commands above.
|
# This relies on the cache being populated by the commands above.
|
||||||
- name: Test System Build
|
- name: Test System Build
|
||||||
@@ -551,88 +537,30 @@ jobs:
|
|||||||
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Setup Cache
|
- name: Setup Cache
|
||||||
uses: namespacelabs/nscloud-cache-action@305bfa7ea980a858d511af4899414a84847c7991 # v1.2.16
|
uses: namespacelabs/nscloud-cache-action@v1.2.0
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
/nix
|
/nix
|
||||||
/zig
|
/zig
|
||||||
|
|
||||||
# Install Nix and use that to run our tests so our environment matches exactly.
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
||||||
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31.5.2
|
- uses: cachix/install-nix-action@v30
|
||||||
with:
|
with:
|
||||||
nix_path: nixpkgs=channel:nixos-unstable
|
nix_path: nixpkgs=channel:nixos-unstable
|
||||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
- uses: cachix/cachix-action@v15
|
||||||
with:
|
with:
|
||||||
name: ghostty
|
name: ghostty
|
||||||
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
||||||
|
|
||||||
- name: Test
|
- name: Test GTK Build
|
||||||
run: |
|
run: |
|
||||||
nix develop -c \
|
nix develop -c \
|
||||||
zig build \
|
zig build \
|
||||||
-Dapp-runtime=gtk \
|
-Dapp-runtime=gtk \
|
||||||
-Dgtk-x11=${{ matrix.x11 }} \
|
-Dgtk-x11=${{ matrix.x11 }} \
|
||||||
-Dgtk-wayland=${{ matrix.wayland }} \
|
|
||||||
test
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: |
|
|
||||||
nix develop -c \
|
|
||||||
zig build \
|
|
||||||
-Dapp-runtime=gtk \
|
|
||||||
-Dgtk-x11=${{ matrix.x11 }} \
|
|
||||||
-Dgtk-wayland=${{ matrix.wayland }}
|
|
||||||
|
|
||||||
test-gtk-ng:
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
x11: ["true", "false"]
|
|
||||||
wayland: ["true", "false"]
|
|
||||||
name: GTK x11=${{ matrix.x11 }} wayland=${{ matrix.wayland }}
|
|
||||||
runs-on: namespace-profile-ghostty-sm
|
|
||||||
needs: test
|
|
||||||
env:
|
|
||||||
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
|
||||||
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
||||||
|
|
||||||
- name: Setup Cache
|
|
||||||
uses: namespacelabs/nscloud-cache-action@305bfa7ea980a858d511af4899414a84847c7991 # v1.2.16
|
|
||||||
with:
|
|
||||||
path: |
|
|
||||||
/nix
|
|
||||||
/zig
|
|
||||||
|
|
||||||
# Install Nix and use that to run our tests so our environment matches exactly.
|
|
||||||
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31.5.2
|
|
||||||
with:
|
|
||||||
nix_path: nixpkgs=channel:nixos-unstable
|
|
||||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
|
||||||
with:
|
|
||||||
name: ghostty
|
|
||||||
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
||||||
|
|
||||||
- name: Test
|
|
||||||
run: |
|
|
||||||
nix develop -c \
|
|
||||||
zig build \
|
|
||||||
-Dapp-runtime=gtk-ng \
|
|
||||||
-Dgtk-x11=${{ matrix.x11 }} \
|
|
||||||
-Dgtk-wayland=${{ matrix.wayland }} \
|
|
||||||
test
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: |
|
|
||||||
nix develop -c \
|
|
||||||
zig build \
|
|
||||||
-Dapp-runtime=gtk-ng \
|
|
||||||
-Dgtk-x11=${{ matrix.x11 }} \
|
|
||||||
-Dgtk-wayland=${{ matrix.wayland }}
|
-Dgtk-wayland=${{ matrix.wayland }}
|
||||||
|
|
||||||
test-sentry-linux:
|
test-sentry-linux:
|
||||||
@@ -648,20 +576,20 @@ jobs:
|
|||||||
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Setup Cache
|
- name: Setup Cache
|
||||||
uses: namespacelabs/nscloud-cache-action@305bfa7ea980a858d511af4899414a84847c7991 # v1.2.16
|
uses: namespacelabs/nscloud-cache-action@v1.2.0
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
/nix
|
/nix
|
||||||
/zig
|
/zig
|
||||||
|
|
||||||
# Install Nix and use that to run our tests so our environment matches exactly.
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
||||||
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31.5.2
|
- uses: cachix/install-nix-action@v30
|
||||||
with:
|
with:
|
||||||
nix_path: nixpkgs=channel:nixos-unstable
|
nix_path: nixpkgs=channel:nixos-unstable
|
||||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
- uses: cachix/cachix-action@v15
|
||||||
with:
|
with:
|
||||||
name: ghostty
|
name: ghostty
|
||||||
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
||||||
@@ -671,23 +599,23 @@ jobs:
|
|||||||
nix develop -c zig build -Dsentry=${{ matrix.sentry }}
|
nix develop -c zig build -Dsentry=${{ matrix.sentry }}
|
||||||
|
|
||||||
test-macos:
|
test-macos:
|
||||||
runs-on: namespace-profile-ghostty-macos-sequoia
|
runs-on: namespace-profile-ghostty-macos
|
||||||
needs: test
|
needs: test
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
# Install Nix and use that to run our tests so our environment matches exactly.
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
||||||
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31.5.2
|
- uses: cachix/install-nix-action@v30
|
||||||
with:
|
with:
|
||||||
nix_path: nixpkgs=channel:nixos-unstable
|
nix_path: nixpkgs=channel:nixos-unstable
|
||||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
- uses: cachix/cachix-action@v15
|
||||||
with:
|
with:
|
||||||
name: ghostty
|
name: ghostty
|
||||||
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
||||||
|
|
||||||
- name: Xcode Select
|
- name: XCode Select
|
||||||
run: sudo xcode-select -s /Applications/Xcode_26.0.app
|
run: sudo xcode-select -s /Applications/Xcode_16.0.app
|
||||||
|
|
||||||
- name: get the Zig deps
|
- name: get the Zig deps
|
||||||
id: deps
|
id: deps
|
||||||
@@ -704,17 +632,17 @@ jobs:
|
|||||||
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
||||||
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
- uses: actions/checkout@v4 # Check out repo so we can lint it
|
||||||
- name: Setup Cache
|
- name: Setup Cache
|
||||||
uses: namespacelabs/nscloud-cache-action@305bfa7ea980a858d511af4899414a84847c7991 # v1.2.16
|
uses: namespacelabs/nscloud-cache-action@v1.2.0
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
/nix
|
/nix
|
||||||
/zig
|
/zig
|
||||||
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31.5.2
|
- uses: cachix/install-nix-action@v30
|
||||||
with:
|
with:
|
||||||
nix_path: nixpkgs=channel:nixos-unstable
|
nix_path: nixpkgs=channel:nixos-unstable
|
||||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
- uses: cachix/cachix-action@v15
|
||||||
with:
|
with:
|
||||||
name: ghostty
|
name: ghostty
|
||||||
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
||||||
@@ -723,34 +651,6 @@ jobs:
|
|||||||
- name: zig fmt
|
- name: zig fmt
|
||||||
run: nix develop -c zig fmt --check .
|
run: nix develop -c zig fmt --check .
|
||||||
|
|
||||||
pinact:
|
|
||||||
name: "GitHub Actions Pins"
|
|
||||||
if: github.repository == 'ghostty-org/ghostty'
|
|
||||||
runs-on: namespace-profile-ghostty-xsm
|
|
||||||
timeout-minutes: 60
|
|
||||||
env:
|
|
||||||
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
|
||||||
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
||||||
- name: Setup Cache
|
|
||||||
uses: namespacelabs/nscloud-cache-action@305bfa7ea980a858d511af4899414a84847c7991 # v1.2.16
|
|
||||||
with:
|
|
||||||
path: |
|
|
||||||
/nix
|
|
||||||
/zig
|
|
||||||
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31.5.2
|
|
||||||
with:
|
|
||||||
nix_path: nixpkgs=channel:nixos-unstable
|
|
||||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
|
||||||
with:
|
|
||||||
name: ghostty
|
|
||||||
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
||||||
skipPush: true
|
|
||||||
useDaemon: false # sometimes fails on short jobs
|
|
||||||
- name: pinact check
|
|
||||||
run: nix develop -c pinact run --check
|
|
||||||
|
|
||||||
prettier:
|
prettier:
|
||||||
if: github.repository == 'ghostty-org/ghostty'
|
if: github.repository == 'ghostty-org/ghostty'
|
||||||
runs-on: namespace-profile-ghostty-xsm
|
runs-on: namespace-profile-ghostty-xsm
|
||||||
@@ -759,17 +659,17 @@ jobs:
|
|||||||
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
||||||
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
- uses: actions/checkout@v4 # Check out repo so we can lint it
|
||||||
- name: Setup Cache
|
- name: Setup Cache
|
||||||
uses: namespacelabs/nscloud-cache-action@305bfa7ea980a858d511af4899414a84847c7991 # v1.2.16
|
uses: namespacelabs/nscloud-cache-action@v1.2.0
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
/nix
|
/nix
|
||||||
/zig
|
/zig
|
||||||
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31.5.2
|
- uses: cachix/install-nix-action@v30
|
||||||
with:
|
with:
|
||||||
nix_path: nixpkgs=channel:nixos-unstable
|
nix_path: nixpkgs=channel:nixos-unstable
|
||||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
- uses: cachix/cachix-action@v15
|
||||||
with:
|
with:
|
||||||
name: ghostty
|
name: ghostty
|
||||||
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
||||||
@@ -786,17 +686,17 @@ jobs:
|
|||||||
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
||||||
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
- uses: actions/checkout@v4 # Check out repo so we can lint it
|
||||||
- name: Setup Cache
|
- name: Setup Cache
|
||||||
uses: namespacelabs/nscloud-cache-action@305bfa7ea980a858d511af4899414a84847c7991 # v1.2.16
|
uses: namespacelabs/nscloud-cache-action@v1.2.0
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
/nix
|
/nix
|
||||||
/zig
|
/zig
|
||||||
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31.5.2
|
- uses: cachix/install-nix-action@v30
|
||||||
with:
|
with:
|
||||||
nix_path: nixpkgs=channel:nixos-unstable
|
nix_path: nixpkgs=channel:nixos-unstable
|
||||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
- uses: cachix/cachix-action@v15
|
||||||
with:
|
with:
|
||||||
name: ghostty
|
name: ghostty
|
||||||
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
||||||
@@ -813,17 +713,17 @@ jobs:
|
|||||||
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
||||||
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
- uses: actions/checkout@v4 # Check out repo so we can lint it
|
||||||
- name: Setup Cache
|
- name: Setup Cache
|
||||||
uses: namespacelabs/nscloud-cache-action@305bfa7ea980a858d511af4899414a84847c7991 # v1.2.16
|
uses: namespacelabs/nscloud-cache-action@v1.2.0
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
/nix
|
/nix
|
||||||
/zig
|
/zig
|
||||||
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31.5.2
|
- uses: cachix/install-nix-action@v30
|
||||||
with:
|
with:
|
||||||
nix_path: nixpkgs=channel:nixos-unstable
|
nix_path: nixpkgs=channel:nixos-unstable
|
||||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
- uses: cachix/cachix-action@v15
|
||||||
with:
|
with:
|
||||||
name: ghostty
|
name: ghostty
|
||||||
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
||||||
@@ -832,86 +732,64 @@ jobs:
|
|||||||
- name: typos check
|
- name: typos check
|
||||||
run: nix develop -c typos
|
run: nix develop -c typos
|
||||||
|
|
||||||
shellcheck:
|
|
||||||
if: github.repository == 'ghostty-org/ghostty'
|
|
||||||
runs-on: namespace-profile-ghostty-xsm
|
|
||||||
timeout-minutes: 60
|
|
||||||
env:
|
|
||||||
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
|
||||||
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
||||||
- name: Setup Cache
|
|
||||||
uses: namespacelabs/nscloud-cache-action@305bfa7ea980a858d511af4899414a84847c7991 # v1.2.16
|
|
||||||
with:
|
|
||||||
path: |
|
|
||||||
/nix
|
|
||||||
/zig
|
|
||||||
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31.5.2
|
|
||||||
with:
|
|
||||||
nix_path: nixpkgs=channel:nixos-unstable
|
|
||||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
|
||||||
with:
|
|
||||||
name: ghostty
|
|
||||||
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
||||||
skipPush: true
|
|
||||||
useDaemon: false # sometimes fails on short jobs
|
|
||||||
- name: shellcheck
|
|
||||||
run: |
|
|
||||||
nix develop -c shellcheck \
|
|
||||||
--check-sourced \
|
|
||||||
--color=always \
|
|
||||||
--severity=warning \
|
|
||||||
--shell=bash \
|
|
||||||
--external-sources \
|
|
||||||
$(find . \( -name "*.sh" -o -name "*.bash" \) -type f ! -path "./zig-out/*" ! -path "./macos/build/*" ! -path "./.git/*" | sort)
|
|
||||||
|
|
||||||
translations:
|
translations:
|
||||||
if: github.repository == 'ghostty-org/ghostty'
|
if: github.repository == 'ghostty-org/ghostty'
|
||||||
runs-on: namespace-profile-ghostty-xsm
|
runs-on: namespace-profile-ghostty-sm
|
||||||
timeout-minutes: 60
|
timeout-minutes: 60
|
||||||
env:
|
env:
|
||||||
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
||||||
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
- uses: actions/checkout@v4 # Check out repo so we can lint it
|
||||||
- name: Setup Cache
|
- name: Setup Cache
|
||||||
uses: namespacelabs/nscloud-cache-action@305bfa7ea980a858d511af4899414a84847c7991 # v1.2.16
|
uses: namespacelabs/nscloud-cache-action@v1.2.0
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
/nix
|
/nix
|
||||||
/zig
|
/zig
|
||||||
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31.5.2
|
- uses: cachix/install-nix-action@v30
|
||||||
with:
|
with:
|
||||||
nix_path: nixpkgs=channel:nixos-unstable
|
nix_path: nixpkgs=channel:nixos-unstable
|
||||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
- uses: cachix/cachix-action@v15
|
||||||
with:
|
with:
|
||||||
name: ghostty
|
name: ghostty
|
||||||
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
||||||
skipPush: true
|
skipPush: true
|
||||||
useDaemon: false # sometimes fails on short jobs
|
useDaemon: false # sometimes fails on short jobs
|
||||||
- name: check translations
|
- name: check translations
|
||||||
run: nix develop -c .github/scripts/check-translations.sh
|
run: |
|
||||||
|
old_pot=$(mktemp)
|
||||||
|
cp po/com.mitchellh.ghostty.pot "$old_pot"
|
||||||
|
nix develop -c zig build update-translations
|
||||||
|
|
||||||
|
# Compare previous POT to current POT
|
||||||
|
msgcmp "$old_pot" po/com.mitchellh.ghostty.pot --use-untranslated
|
||||||
|
|
||||||
|
# Compare all other POs to current POT
|
||||||
|
for f in po/*.po; do
|
||||||
|
# Ignore untranslated entries
|
||||||
|
msgcmp --use-untranslated "$f" po/com.mitchellh.ghostty.pot;
|
||||||
|
done
|
||||||
|
|
||||||
blueprint-compiler:
|
blueprint-compiler:
|
||||||
if: github.repository == 'ghostty-org/ghostty'
|
if: github.repository == 'ghostty-org/ghostty'
|
||||||
runs-on: namespace-profile-ghostty-xsm
|
runs-on: namespace-profile-ghostty-sm
|
||||||
timeout-minutes: 60
|
timeout-minutes: 60
|
||||||
env:
|
env:
|
||||||
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
||||||
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
- uses: actions/checkout@v4 # Check out repo so we can lint it
|
||||||
- name: Setup Cache
|
- name: Setup Cache
|
||||||
uses: namespacelabs/nscloud-cache-action@305bfa7ea980a858d511af4899414a84847c7991 # v1.2.16
|
uses: namespacelabs/nscloud-cache-action@v1.2.0
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
/nix
|
/nix
|
||||||
/zig
|
/zig
|
||||||
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31.5.2
|
- uses: cachix/install-nix-action@v30
|
||||||
with:
|
with:
|
||||||
nix_path: nixpkgs=channel:nixos-unstable
|
nix_path: nixpkgs=channel:nixos-unstable
|
||||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
- uses: cachix/cachix-action@v15
|
||||||
with:
|
with:
|
||||||
name: ghostty
|
name: ghostty
|
||||||
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
||||||
@@ -935,20 +813,20 @@ jobs:
|
|||||||
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Setup Cache
|
- name: Setup Cache
|
||||||
uses: namespacelabs/nscloud-cache-action@305bfa7ea980a858d511af4899414a84847c7991 # v1.2.16
|
uses: namespacelabs/nscloud-cache-action@v1.2.0
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
/nix
|
/nix
|
||||||
/zig
|
/zig
|
||||||
|
|
||||||
# Install Nix and use that to run our tests so our environment matches exactly.
|
# Install Nix and use that to run our tests so our environment matches exactly.
|
||||||
- uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31.5.2
|
- uses: cachix/install-nix-action@v30
|
||||||
with:
|
with:
|
||||||
nix_path: nixpkgs=channel:nixos-unstable
|
nix_path: nixpkgs=channel:nixos-unstable
|
||||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
- uses: cachix/cachix-action@v15
|
||||||
with:
|
with:
|
||||||
name: ghostty
|
name: ghostty
|
||||||
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
||||||
@@ -963,13 +841,13 @@ jobs:
|
|||||||
needs: [test, build-dist]
|
needs: [test, build-dist]
|
||||||
steps:
|
steps:
|
||||||
- name: Install and configure Namespace CLI
|
- name: Install and configure Namespace CLI
|
||||||
uses: namespacelabs/nscloud-setup@d1c625762f7c926a54bd39252efff0705fd11c64 # v0.0.10
|
uses: namespacelabs/nscloud-setup@v0
|
||||||
|
|
||||||
- name: Configure Namespace powered Buildx
|
- name: Configure Namespace powered Buildx
|
||||||
uses: namespacelabs/nscloud-setup-buildx-action@01628ae51ea5d6b0c90109c7dccbf511953aff29 # v0.0.18
|
uses: namespacelabs/nscloud-setup-buildx-action@v0
|
||||||
|
|
||||||
- name: Download Source Tarball Artifacts
|
- name: Download Source Tarball Artifacts
|
||||||
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
|
uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: source-tarball
|
name: source-tarball
|
||||||
|
|
||||||
@@ -979,62 +857,9 @@ jobs:
|
|||||||
tar --verbose --extract --strip-components 1 --directory dist --file ghostty-source.tar.gz
|
tar --verbose --extract --strip-components 1 --directory dist --file ghostty-source.tar.gz
|
||||||
|
|
||||||
- name: Build and push
|
- name: Build and push
|
||||||
uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0
|
uses: docker/build-push-action@v6
|
||||||
with:
|
with:
|
||||||
context: dist
|
context: dist
|
||||||
file: dist/src/build/docker/debian/Dockerfile
|
file: dist/src/build/docker/debian/Dockerfile
|
||||||
build-args: |
|
build-args: |
|
||||||
DISTRO_VERSION=12
|
DISTRO_VERSION=12
|
||||||
|
|
||||||
flatpak-check-zig-cache:
|
|
||||||
if: github.repository == 'ghostty-org/ghostty'
|
|
||||||
runs-on: namespace-profile-ghostty-xsm
|
|
||||||
env:
|
|
||||||
ZIG_LOCAL_CACHE_DIR: /zig/local-cache
|
|
||||||
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
||||||
- name: Setup Cache
|
|
||||||
uses: namespacelabs/nscloud-cache-action@305bfa7ea980a858d511af4899414a84847c7991 # v1.2.16
|
|
||||||
with:
|
|
||||||
path: |
|
|
||||||
/nix
|
|
||||||
/zig
|
|
||||||
- name: Setup Nix
|
|
||||||
uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31.5.2
|
|
||||||
with:
|
|
||||||
nix_path: nixpkgs=channel:nixos-unstable
|
|
||||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
|
||||||
with:
|
|
||||||
name: ghostty
|
|
||||||
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
|
||||||
useDaemon: false # sometimes fails on short jobs
|
|
||||||
- name: Check Flatpak Zig Dependencies
|
|
||||||
run: nix develop -c ./flatpak/build-support/check-zig-cache.sh
|
|
||||||
|
|
||||||
flatpak:
|
|
||||||
if: github.repository == 'ghostty-org/ghostty'
|
|
||||||
name: "Flatpak"
|
|
||||||
container:
|
|
||||||
image: ghcr.io/flathub-infra/flatpak-github-actions:gnome-47
|
|
||||||
options: --privileged
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
variant:
|
|
||||||
- arch: x86_64
|
|
||||||
runner: namespace-profile-ghostty-md
|
|
||||||
- arch: aarch64
|
|
||||||
runner: namespace-profile-ghostty-md-arm64
|
|
||||||
runs-on: ${{ matrix.variant.runner }}
|
|
||||||
needs: [flatpak-check-zig-cache, test]
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
|
||||||
- uses: flatpak/flatpak-github-actions/flatpak-builder@10a3c29f0162516f0f68006be14c92f34bd4fa6c # v6.5
|
|
||||||
with:
|
|
||||||
bundle: com.mitchellh.ghostty
|
|
||||||
manifest-path: flatpak/com.mitchellh.ghostty.yml
|
|
||||||
cache-key: flatpak-builder-${{ github.sha }}
|
|
||||||
arch: ${{ matrix.variant.arch }}
|
|
||||||
verbose: true
|
|
||||||
|
13
.github/workflows/update-colorschemes.yml
vendored
@@ -17,22 +17,22 @@ jobs:
|
|||||||
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
ZIG_GLOBAL_CACHE_DIR: /zig/global-cache
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Setup Cache
|
- name: Setup Cache
|
||||||
uses: namespacelabs/nscloud-cache-action@305bfa7ea980a858d511af4899414a84847c7991 # v1.2.16
|
uses: namespacelabs/nscloud-cache-action@v1.2.0
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
/nix
|
/nix
|
||||||
/zig
|
/zig
|
||||||
|
|
||||||
- name: Setup Nix
|
- name: Setup Nix
|
||||||
uses: cachix/install-nix-action@fc6e360bedc9ee72d75e701397f0bb30dce77568 # v31.5.2
|
uses: cachix/install-nix-action@v30
|
||||||
with:
|
with:
|
||||||
nix_path: nixpkgs=channel:nixos-unstable
|
nix_path: nixpkgs=channel:nixos-unstable
|
||||||
- uses: cachix/cachix-action@0fc020193b5a1fa3ac4575aa3a7d3aa6a35435ad # v16
|
- uses: cachix/cachix-action@v15
|
||||||
with:
|
with:
|
||||||
name: ghostty
|
name: ghostty
|
||||||
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"
|
||||||
@@ -50,8 +50,6 @@ jobs:
|
|||||||
if ! git diff --exit-code build.zig.zon; then
|
if ! git diff --exit-code build.zig.zon; then
|
||||||
nix develop -c ./nix/build-support/check-zig-cache.sh --update
|
nix develop -c ./nix/build-support/check-zig-cache.sh --update
|
||||||
nix develop -c ./nix/build-support/check-zig-cache.sh
|
nix develop -c ./nix/build-support/check-zig-cache.sh
|
||||||
nix develop -c ./flatpak/build-support/check-zig-cache.sh --update
|
|
||||||
nix develop -c ./flatpak/build-support/check-zig-cache.sh
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Verify the build still works. We choose an arbitrary build type
|
# Verify the build still works. We choose an arbitrary build type
|
||||||
@@ -60,7 +58,7 @@ jobs:
|
|||||||
run: nix build .#ghostty
|
run: nix build .#ghostty
|
||||||
|
|
||||||
- name: Create pull request
|
- name: Create pull request
|
||||||
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8
|
uses: peter-evans/create-pull-request@v7
|
||||||
with:
|
with:
|
||||||
title: Update iTerm2 colorschemes
|
title: Update iTerm2 colorschemes
|
||||||
base: main
|
base: main
|
||||||
@@ -71,7 +69,6 @@ jobs:
|
|||||||
build.zig.zon.nix
|
build.zig.zon.nix
|
||||||
build.zig.zon.txt
|
build.zig.zon.txt
|
||||||
build.zig.zon.json
|
build.zig.zon.json
|
||||||
flatpak/zig-packages.json
|
|
||||||
body: |
|
body: |
|
||||||
Upstream revision: https://github.com/mbadolato/iTerm2-Color-Schemes/tree/${{ steps.zig_fetch.outputs.upstream_rev }}
|
Upstream revision: https://github.com/mbadolato/iTerm2-Color-Schemes/tree/${{ steps.zig_fetch.outputs.upstream_rev }}
|
||||||
labels: dependencies
|
labels: dependencies
|
||||||
|
4
.gitignore
vendored
@@ -14,12 +14,8 @@ zig-out/
|
|||||||
example/*.wasm
|
example/*.wasm
|
||||||
test/ghostty
|
test/ghostty
|
||||||
test/cases/**/*.actual.png
|
test/cases/**/*.actual.png
|
||||||
flatpak/builddir/
|
|
||||||
flatpak/repo/
|
|
||||||
|
|
||||||
glad.zip
|
glad.zip
|
||||||
/Box_test.ppm
|
/Box_test.ppm
|
||||||
/Box_test_diff.ppm
|
/Box_test_diff.ppm
|
||||||
/ghostty.qcow2
|
/ghostty.qcow2
|
||||||
|
|
||||||
vgcore.*
|
|
||||||
|
@@ -11,9 +11,6 @@ zig-out/
|
|||||||
# macos is managed by XCode GUI
|
# macos is managed by XCode GUI
|
||||||
macos/
|
macos/
|
||||||
|
|
||||||
# produced by Icon Composer on macOS
|
|
||||||
images/Ghostty.icon/icon.json
|
|
||||||
|
|
||||||
# website dev run
|
# website dev run
|
||||||
website/.next
|
website/.next
|
||||||
|
|
||||||
|
22
CODEOWNERS
@@ -81,10 +81,6 @@
|
|||||||
# - @ghostty-org/localization/* - Anything related to localization
|
# - @ghostty-org/localization/* - Anything related to localization
|
||||||
# for a specific locale.
|
# for a specific locale.
|
||||||
#
|
#
|
||||||
# - @ghosty-org/localization/manager - Manage all localization tasks
|
|
||||||
# and tooling. They are not responsible for any specific locale but
|
|
||||||
# are responsible for the overall localization process and tooling.
|
|
||||||
#
|
|
||||||
# - @ghostty-org/macos - The Ghostty macOS app and any macOS-specific
|
# - @ghostty-org/macos - The Ghostty macOS app and any macOS-specific
|
||||||
# features, configurations, etc.
|
# features, configurations, etc.
|
||||||
#
|
#
|
||||||
@@ -119,7 +115,6 @@
|
|||||||
|
|
||||||
# GTK
|
# GTK
|
||||||
/src/apprt/gtk/ @ghostty-org/gtk
|
/src/apprt/gtk/ @ghostty-org/gtk
|
||||||
/src/apprt/gtk-ng/ @ghostty-org/gtk
|
|
||||||
/src/os/cgroup.zig @ghostty-org/gtk
|
/src/os/cgroup.zig @ghostty-org/gtk
|
||||||
/src/os/flatpak.zig @ghostty-org/gtk
|
/src/os/flatpak.zig @ghostty-org/gtk
|
||||||
/dist/linux/ @ghostty-org/gtk
|
/dist/linux/ @ghostty-org/gtk
|
||||||
@@ -149,14 +144,13 @@
|
|||||||
|
|
||||||
# Shell
|
# Shell
|
||||||
/src/shell-integration/ @ghostty-org/shell
|
/src/shell-integration/ @ghostty-org/shell
|
||||||
/src/termio/shell_integration.zig @ghostty-org/shell
|
/src/termio/shell-integration.zig @ghostty-org/shell
|
||||||
|
|
||||||
# Terminal
|
# Terminal
|
||||||
/src/simd/ @ghostty-org/terminal
|
/src/simd/ @ghostty-org/terminal
|
||||||
/src/input/KeyEncoder.zig @ghostty-org/terminal
|
/src/input/KeyEncoder.zig @ghostty-org/terminal
|
||||||
/src/terminal/ @ghostty-org/terminal
|
/src/terminal/ @ghostty-org/terminal
|
||||||
/src/terminfo/ @ghostty-org/terminal
|
/src/terminfo/ @ghostty-org/terminal
|
||||||
/src/termio/ @ghostty-org/terminal
|
|
||||||
/src/unicode/ @ghostty-org/terminal
|
/src/unicode/ @ghostty-org/terminal
|
||||||
/src/Surface.zig @ghostty-org/terminal
|
/src/Surface.zig @ghostty-org/terminal
|
||||||
/src/surface_mouse.zig @ghostty-org/terminal
|
/src/surface_mouse.zig @ghostty-org/terminal
|
||||||
@@ -164,25 +158,11 @@
|
|||||||
# Localization
|
# Localization
|
||||||
/po/README_TRANSLATORS.md @ghostty-org/localization
|
/po/README_TRANSLATORS.md @ghostty-org/localization
|
||||||
/po/com.mitchellh.ghostty.pot @ghostty-org/localization
|
/po/com.mitchellh.ghostty.pot @ghostty-org/localization
|
||||||
/po/ca_ES.UTF-8.po @ghostty-org/ca_ES
|
|
||||||
/po/de_DE.UTF-8.po @ghostty-org/de_DE
|
/po/de_DE.UTF-8.po @ghostty-org/de_DE
|
||||||
/po/es_BO.UTF-8.po @ghostty-org/es_BO
|
|
||||||
/po/es_AR.UTF-8.po @ghostty-org/es_AR
|
|
||||||
/po/fr_FR.UTF-8.po @ghostty-org/fr_FR
|
|
||||||
/po/id_ID.UTF-8.po @ghostty-org/id_ID
|
|
||||||
/po/ja_JP.UTF-8.po @ghostty-org/ja_JP
|
|
||||||
/po/mk_MK.UTF-8.po @ghostty-org/mk_MK
|
|
||||||
/po/nb_NO.UTF-8.po @ghostty-org/nb_NO
|
/po/nb_NO.UTF-8.po @ghostty-org/nb_NO
|
||||||
/po/nl_NL.UTF-8.po @ghostty-org/nl_NL
|
|
||||||
/po/pl_PL.UTF-8.po @ghostty-org/pl_PL
|
/po/pl_PL.UTF-8.po @ghostty-org/pl_PL
|
||||||
/po/pt_BR.UTF-8.po @ghostty-org/pt_BR
|
|
||||||
/po/ru_RU.UTF-8.po @ghostty-org/ru_RU
|
|
||||||
/po/tr_TR.UTF-8.po @ghostty-org/tr_TR
|
|
||||||
/po/uk_UA.UTF-8.po @ghostty-org/uk_UA
|
/po/uk_UA.UTF-8.po @ghostty-org/uk_UA
|
||||||
/po/zh_CN.UTF-8.po @ghostty-org/zh_CN
|
/po/zh_CN.UTF-8.po @ghostty-org/zh_CN
|
||||||
/po/ga_IE.UTF-8.po @ghostty-org/ga_IE
|
|
||||||
/po/ko_KR.UTF-8.po @ghostty-org/ko_KR
|
|
||||||
/po/he_IL.UTF-8.po @ghostty-org/he_IL
|
|
||||||
|
|
||||||
# Packaging - Snap
|
# Packaging - Snap
|
||||||
/snap/ @ghostty-org/snap
|
/snap/ @ghostty-org/snap
|
||||||
|
@@ -258,7 +258,7 @@ recreated the next time you run the VM.
|
|||||||
|
|
||||||
We welcome the contribution of new VM definitions, as long as they meet the following criteria:
|
We welcome the contribution of new VM definitions, as long as they meet the following criteria:
|
||||||
|
|
||||||
1. They should be different enough from existing VM definitions that they represent a distinct
|
1. The should be different enough from existing VM definitions that they represent a distinct
|
||||||
user (and developer) experience.
|
user (and developer) experience.
|
||||||
2. There's a significant Ghostty user population that uses a similar environment.
|
2. There's a significant Ghostty user population that uses a similar environment.
|
||||||
3. The VMs can be built using only packages from the current stable NixOS release.
|
3. The VMs can be built using only packages from the current stable NixOS release.
|
||||||
|
2
LICENSE
@@ -1,6 +1,6 @@
|
|||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2024 Mitchell Hashimoto, Ghostty contributors
|
Copyright (c) 2024 Mitchell Hashimoto
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
39
PACKAGING.md
@@ -4,12 +4,13 @@ Ghostty relies on downstream package maintainers to distribute Ghostty to
|
|||||||
end-users. This document provides guidance to package maintainers on how to
|
end-users. This document provides guidance to package maintainers on how to
|
||||||
package Ghostty for distribution.
|
package Ghostty for distribution.
|
||||||
|
|
||||||
> [!IMPORTANT]
|
> [!NOTE]
|
||||||
>
|
>
|
||||||
> This document is only accurate for the Ghostty source alongside it.
|
> While Ghostty went through an extensive private beta testing period,
|
||||||
> **Do not use this document for older or newer versions of Ghostty!** If
|
> packaging Ghostty is immature and may require additional build script
|
||||||
> you are reading this document in a different version of Ghostty, please
|
> tweaks and documentation improvement. I'm extremely motivated to work with
|
||||||
> find the `PACKAGING.md` file alongside that version.
|
> package maintainers to improve the packaging process. Please open issues
|
||||||
|
> to discuss any packaging issues you encounter.
|
||||||
|
|
||||||
## Source Tarballs
|
## Source Tarballs
|
||||||
|
|
||||||
@@ -36,19 +37,6 @@ Use the `ghostty-source.tar.gz` asset and _not the GitHub auto-generated
|
|||||||
source tarball_. These tarballs are generated for every commit to
|
source tarball_. These tarballs are generated for every commit to
|
||||||
the `main` branch and are not associated with a specific version.
|
the `main` branch and are not associated with a specific version.
|
||||||
|
|
||||||
> [!WARNING]
|
|
||||||
>
|
|
||||||
> Source tarballs are _not the same_ as a Git checkout. Source tarballs
|
|
||||||
> contain some preprocessed files that allow building Ghostty with less
|
|
||||||
> dependencies. If you are building Ghostty from a Git checkout, the
|
|
||||||
> steps below are the same but they may require additional dependencies
|
|
||||||
> not listed here. See the `README.md` for more information on building
|
|
||||||
> from a Git checkout.
|
|
||||||
>
|
|
||||||
> For everyone except Ghostty developers, please use the source tarballs.
|
|
||||||
> We generate tip source tarballs for users following the development
|
|
||||||
> branch.
|
|
||||||
|
|
||||||
## Zig Version
|
## Zig Version
|
||||||
|
|
||||||
[Zig](https://ziglang.org) is required to build Ghostty. Prior to Zig 1.0,
|
[Zig](https://ziglang.org) is required to build Ghostty. Prior to Zig 1.0,
|
||||||
@@ -93,6 +81,13 @@ for system packages which separate a build and install step, since the
|
|||||||
install step can then be done with a `mv` or `cp` command (from `/tmp/ghostty`
|
install step can then be done with a `mv` or `cp` command (from `/tmp/ghostty`
|
||||||
to wherever the package manager expects it).
|
to wherever the package manager expects it).
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
>
|
||||||
|
> **Version 1.1.1 and 1.1.2 are missing `fetch-zig-cache.sh`.** This was
|
||||||
|
> an oversight on the release process. You can use the script from version
|
||||||
|
> 1.1.0 to fetch the Zig cache for these versions. Future versions will
|
||||||
|
> restore the script.
|
||||||
|
|
||||||
### Build Options
|
### Build Options
|
||||||
|
|
||||||
Ghostty uses the Zig build system. You can see all available build options by
|
Ghostty uses the Zig build system. You can see all available build options by
|
||||||
@@ -122,3 +117,11 @@ relevant to package maintainers:
|
|||||||
often necessary for system packages to specify a specific minimum Linux
|
often necessary for system packages to specify a specific minimum Linux
|
||||||
version, glibc, etc. Run `zig targets` to a get a full list of available
|
version, glibc, etc. Run `zig targets` to a get a full list of available
|
||||||
targets.
|
targets.
|
||||||
|
|
||||||
|
> [!WARNING]
|
||||||
|
>
|
||||||
|
> **The GLFW runtime is not meant for distribution.** The GLFW runtime
|
||||||
|
> (`-Dapp-runtime=glfw`) is meant for development and testing only. It is
|
||||||
|
> missing many features, has known memory leak scenarios, known crashes,
|
||||||
|
> and more. Please do not package the GLFW-based Ghostty runtime for
|
||||||
|
> distribution.
|
||||||
|
28
README.md
@@ -194,6 +194,12 @@ omit the `-Doptimize` flag to build a debug build, and you may require
|
|||||||
additional dependencies since the source tarball includes some processed
|
additional dependencies since the source tarball includes some processed
|
||||||
files that are not in the Git repository.
|
files that are not in the Git repository.
|
||||||
|
|
||||||
|
On Linux or macOS, you can use `zig build -Dapp-runtime=glfw run` for a quick
|
||||||
|
GLFW-based app for a faster development cycle while developing core
|
||||||
|
terminal features. Note that this app is missing many features and is also
|
||||||
|
known to crash in certain scenarios, so it is only meant for development
|
||||||
|
tasks.
|
||||||
|
|
||||||
Other useful commands:
|
Other useful commands:
|
||||||
|
|
||||||
- `zig build test` for running unit tests.
|
- `zig build test` for running unit tests.
|
||||||
@@ -218,28 +224,6 @@ macOS users don't require any additional dependencies.
|
|||||||
> source tarballs, see the
|
> source tarballs, see the
|
||||||
> [website](http://ghostty.org/docs/install/build).
|
> [website](http://ghostty.org/docs/install/build).
|
||||||
|
|
||||||
### Xcode Version and SDKs
|
|
||||||
|
|
||||||
Building the Ghostty macOS app requires that Xcode, the macOS SDK,
|
|
||||||
and the iOS SDK are all installed.
|
|
||||||
|
|
||||||
A common issue is that the incorrect version of Xcode is either
|
|
||||||
installed or selected. Use the `xcode-select` command to
|
|
||||||
ensure that the correct version of Xcode is selected:
|
|
||||||
|
|
||||||
```shell-session
|
|
||||||
sudo xcode-select --switch /Applications/Xcode-beta.app
|
|
||||||
```
|
|
||||||
|
|
||||||
> [!IMPORTANT]
|
|
||||||
>
|
|
||||||
> Main branch development of Ghostty is preparing for the next major
|
|
||||||
> macOS release, Tahoe (macOS 26). Therefore, the main branch requires
|
|
||||||
> **Xcode 26 and the macOS 26 SDK**.
|
|
||||||
>
|
|
||||||
> You do not need to be running on macOS 26 to build Ghostty, you can
|
|
||||||
> still use Xcode 26 beta on macOS 15 stable.
|
|
||||||
|
|
||||||
### Linting
|
### Linting
|
||||||
|
|
||||||
#### Prettier
|
#### Prettier
|
||||||
|
21
TODO.md
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
Performance:
|
||||||
|
|
||||||
|
- Loading fonts on startups should probably happen in multiple threads
|
||||||
|
|
||||||
|
Correctness:
|
||||||
|
|
||||||
|
- test wrap against wraptest: https://github.com/mattiase/wraptest
|
||||||
|
- automate this in some way
|
||||||
|
- Charsets: UTF-8 vs. ASCII mode
|
||||||
|
- we only support UTF-8 input right now
|
||||||
|
- need fallback glyphs if they're not supported
|
||||||
|
- can effect a crash using `vttest` menu `3 10` since it tries to parse
|
||||||
|
ASCII as UTF-8.
|
||||||
|
|
||||||
|
Mac:
|
||||||
|
|
||||||
|
- Preferences window
|
||||||
|
|
||||||
|
Major Features:
|
||||||
|
|
||||||
|
- Bell
|
208
build.zig
@@ -1,5 +1,4 @@
|
|||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const assert = std.debug.assert;
|
|
||||||
const builtin = @import("builtin");
|
const builtin = @import("builtin");
|
||||||
const buildpkg = @import("src/build/main.zig");
|
const buildpkg = @import("src/build/main.zig");
|
||||||
|
|
||||||
@@ -8,26 +7,11 @@ comptime {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn build(b: *std.Build) !void {
|
pub fn build(b: *std.Build) !void {
|
||||||
// This defines all the available build options (e.g. `-D`).
|
|
||||||
const config = try buildpkg.Config.init(b);
|
const config = try buildpkg.Config.init(b);
|
||||||
const test_filter = b.option(
|
|
||||||
[]const u8,
|
|
||||||
"test-filter",
|
|
||||||
"Filter for test. Only applies to Zig tests.",
|
|
||||||
);
|
|
||||||
|
|
||||||
// All our steps which we'll hook up later. The steps are shown
|
|
||||||
// up here just so that they are more self-documenting.
|
|
||||||
const run_step = b.step("run", "Run the app");
|
|
||||||
const test_step = b.step("test", "Run all tests");
|
|
||||||
const translations_step = b.step(
|
|
||||||
"update-translations",
|
|
||||||
"Update translation files",
|
|
||||||
);
|
|
||||||
|
|
||||||
// Ghostty resources like terminfo, shell integration, themes, etc.
|
// Ghostty resources like terminfo, shell integration, themes, etc.
|
||||||
const resources = try buildpkg.GhosttyResources.init(b, &config);
|
const resources = try buildpkg.GhosttyResources.init(b, &config);
|
||||||
const i18n = if (config.i18n) try buildpkg.GhosttyI18n.init(b, &config) else null;
|
const i18n = try buildpkg.GhosttyI18n.init(b, &config);
|
||||||
|
|
||||||
// Ghostty dependencies used by many artifacts.
|
// Ghostty dependencies used by many artifacts.
|
||||||
const deps = try buildpkg.SharedDeps.init(b, &config);
|
const deps = try buildpkg.SharedDeps.init(b, &config);
|
||||||
@@ -38,14 +22,7 @@ pub fn build(b: *std.Build) !void {
|
|||||||
|
|
||||||
// Ghostty docs
|
// Ghostty docs
|
||||||
const docs = try buildpkg.GhosttyDocs.init(b, &deps);
|
const docs = try buildpkg.GhosttyDocs.init(b, &deps);
|
||||||
if (config.emit_docs) {
|
if (config.emit_docs) docs.install();
|
||||||
docs.install();
|
|
||||||
} else if (config.target.result.os.tag.isDarwin()) {
|
|
||||||
// If we aren't emitting docs we need to emit a placeholder so
|
|
||||||
// our macOS xcodeproject builds since it expects the `share/man`
|
|
||||||
// directory to exist to copy into the app bundle.
|
|
||||||
docs.installDummy(b.getInstallStep());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ghostty webdata
|
// Ghostty webdata
|
||||||
const webdata = try buildpkg.GhosttyWebdata.init(b, &deps);
|
const webdata = try buildpkg.GhosttyWebdata.init(b, &deps);
|
||||||
@@ -65,148 +42,91 @@ pub fn build(b: *std.Build) !void {
|
|||||||
check_step.dependOn(dist.install_step);
|
check_step.dependOn(dist.install_step);
|
||||||
}
|
}
|
||||||
|
|
||||||
// libghostty
|
// If we're not building libghostty, then install the exe and resources.
|
||||||
const libghostty_shared = try buildpkg.GhosttyLib.initShared(
|
|
||||||
b,
|
|
||||||
&deps,
|
|
||||||
);
|
|
||||||
const libghostty_static = try buildpkg.GhosttyLib.initStatic(
|
|
||||||
b,
|
|
||||||
&deps,
|
|
||||||
);
|
|
||||||
|
|
||||||
// Runtime "none" is libghostty, anything else is an executable.
|
|
||||||
if (config.app_runtime != .none) {
|
if (config.app_runtime != .none) {
|
||||||
exe.install();
|
exe.install();
|
||||||
resources.install();
|
resources.install();
|
||||||
if (i18n) |v| v.install();
|
i18n.install();
|
||||||
} else {
|
}
|
||||||
// Libghostty
|
|
||||||
//
|
|
||||||
// Note: libghostty is not stable for general purpose use. It is used
|
|
||||||
// heavily by Ghostty on macOS but it isn't built to be reusable yet.
|
|
||||||
// As such, these build steps are lacking. For example, the Darwin
|
|
||||||
// build only produces an xcframework.
|
|
||||||
|
|
||||||
// We shouldn't have this guard but we don't currently
|
// Libghostty
|
||||||
// build on macOS this way ironically so we need to fix that.
|
//
|
||||||
if (!config.target.result.os.tag.isDarwin()) {
|
// Note: libghostty is not stable for general purpose use. It is used
|
||||||
|
// heavily by Ghostty on macOS but it isn't built to be reusable yet.
|
||||||
|
// As such, these build steps are lacking. For example, the Darwin
|
||||||
|
// build only produces an xcframework.
|
||||||
|
if (config.app_runtime == .none) {
|
||||||
|
if (config.target.result.os.tag.isDarwin()) darwin: {
|
||||||
|
if (!config.emit_xcframework) break :darwin;
|
||||||
|
|
||||||
|
// Build the xcframework
|
||||||
|
const xcframework = try buildpkg.GhosttyXCFramework.init(b, &deps);
|
||||||
|
xcframework.install();
|
||||||
|
|
||||||
|
// The xcframework build always installs resources because our
|
||||||
|
// macOS xcode project contains references to them.
|
||||||
|
resources.install();
|
||||||
|
i18n.install();
|
||||||
|
|
||||||
|
// If we aren't emitting docs we need to emit a placeholder so
|
||||||
|
// our macOS xcodeproject builds.
|
||||||
|
if (!config.emit_docs) {
|
||||||
|
var wf = b.addWriteFiles();
|
||||||
|
const path = "share/man/.placeholder";
|
||||||
|
const placeholder = wf.add(path, "emit-docs not true so no man pages");
|
||||||
|
b.getInstallStep().dependOn(&b.addInstallFile(placeholder, path).step);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
const libghostty_shared = try buildpkg.GhosttyLib.initShared(b, &deps);
|
||||||
|
const libghostty_static = try buildpkg.GhosttyLib.initStatic(b, &deps);
|
||||||
libghostty_shared.installHeader(); // Only need one header
|
libghostty_shared.installHeader(); // Only need one header
|
||||||
libghostty_shared.install("libghostty.so");
|
libghostty_shared.install("libghostty.so");
|
||||||
libghostty_static.install("libghostty.a");
|
libghostty_static.install("libghostty.a");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// macOS only artifacts. These will error if they're initialized for
|
// Run runs the Ghostty exe
|
||||||
// other targets.
|
{
|
||||||
if (config.target.result.os.tag.isDarwin()) {
|
const run_cmd = b.addRunArtifact(exe.exe);
|
||||||
// Ghostty xcframework
|
if (b.args) |args| run_cmd.addArgs(args);
|
||||||
const xcframework = try buildpkg.GhosttyXCFramework.init(
|
|
||||||
b,
|
// Set the proper resources dir so things like shell integration
|
||||||
&deps,
|
// work correctly. If we're running `zig build run` in Ghostty,
|
||||||
config.xcframework_target,
|
// this also ensures it overwrites the release one with our debug
|
||||||
|
// build.
|
||||||
|
run_cmd.setEnvironmentVariable(
|
||||||
|
"GHOSTTY_RESOURCES_DIR",
|
||||||
|
b.getInstallPath(.prefix, "share/ghostty"),
|
||||||
);
|
);
|
||||||
if (config.emit_xcframework) {
|
|
||||||
xcframework.install();
|
|
||||||
|
|
||||||
// The xcframework build always installs resources because our
|
const run_step = b.step("run", "Run the app");
|
||||||
// macOS xcode project contains references to them.
|
run_step.dependOn(&run_cmd.step);
|
||||||
resources.install();
|
|
||||||
if (i18n) |v| v.install();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ghostty macOS app
|
|
||||||
const macos_app = try buildpkg.GhosttyXcodebuild.init(
|
|
||||||
b,
|
|
||||||
&config,
|
|
||||||
.{
|
|
||||||
.xcframework = &xcframework,
|
|
||||||
.docs = &docs,
|
|
||||||
.i18n = if (i18n) |v| &v else null,
|
|
||||||
.resources = &resources,
|
|
||||||
},
|
|
||||||
);
|
|
||||||
if (config.emit_macos_app) {
|
|
||||||
macos_app.install();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Run step
|
|
||||||
run: {
|
|
||||||
if (config.app_runtime != .none) {
|
|
||||||
const run_cmd = b.addRunArtifact(exe.exe);
|
|
||||||
if (b.args) |args| run_cmd.addArgs(args);
|
|
||||||
|
|
||||||
// Set the proper resources dir so things like shell integration
|
|
||||||
// work correctly. If we're running `zig build run` in Ghostty,
|
|
||||||
// this also ensures it overwrites the release one with our debug
|
|
||||||
// build.
|
|
||||||
run_cmd.setEnvironmentVariable(
|
|
||||||
"GHOSTTY_RESOURCES_DIR",
|
|
||||||
b.getInstallPath(.prefix, "share/ghostty"),
|
|
||||||
);
|
|
||||||
|
|
||||||
run_step.dependOn(&run_cmd.step);
|
|
||||||
break :run;
|
|
||||||
}
|
|
||||||
|
|
||||||
assert(config.app_runtime == .none);
|
|
||||||
|
|
||||||
// On macOS we can run the macOS app. For "run" we always force
|
|
||||||
// a native-only build so that we can run as quickly as possible.
|
|
||||||
if (config.target.result.os.tag.isDarwin()) {
|
|
||||||
const xcframework_native = try buildpkg.GhosttyXCFramework.init(
|
|
||||||
b,
|
|
||||||
&deps,
|
|
||||||
.native,
|
|
||||||
);
|
|
||||||
const macos_app_native_only = try buildpkg.GhosttyXcodebuild.init(
|
|
||||||
b,
|
|
||||||
&config,
|
|
||||||
.{
|
|
||||||
.xcframework = &xcframework_native,
|
|
||||||
.docs = &docs,
|
|
||||||
.i18n = if (i18n) |v| &v else null,
|
|
||||||
.resources = &resources,
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
// Run uses the native macOS app
|
|
||||||
run_step.dependOn(&macos_app_native_only.open.step);
|
|
||||||
|
|
||||||
// If we have no test filters, install the tests too
|
|
||||||
if (test_filter == null) {
|
|
||||||
macos_app_native_only.addTestStepDependencies(test_step);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tests
|
// Tests
|
||||||
{
|
{
|
||||||
|
const test_step = b.step("test", "Run all tests");
|
||||||
|
const test_filter = b.option([]const u8, "test-filter", "Filter for test");
|
||||||
|
|
||||||
const test_exe = b.addTest(.{
|
const test_exe = b.addTest(.{
|
||||||
.name = "ghostty-test",
|
.name = "ghostty-test",
|
||||||
.filters = if (test_filter) |v| &.{v} else &.{},
|
.root_source_file = b.path("src/main.zig"),
|
||||||
.root_module = b.createModule(.{
|
.target = config.target,
|
||||||
.root_source_file = b.path("src/main.zig"),
|
.filter = test_filter,
|
||||||
.target = config.target,
|
|
||||||
.optimize = .Debug,
|
|
||||||
.strip = false,
|
|
||||||
.omit_frame_pointer = false,
|
|
||||||
.unwind_tables = .sync,
|
|
||||||
}),
|
|
||||||
});
|
});
|
||||||
|
|
||||||
if (config.emit_test_exe) b.installArtifact(test_exe);
|
{
|
||||||
_ = try deps.add(test_exe);
|
if (config.emit_test_exe) b.installArtifact(test_exe);
|
||||||
const test_run = b.addRunArtifact(test_exe);
|
_ = try deps.add(test_exe);
|
||||||
test_step.dependOn(&test_run.step);
|
const test_run = b.addRunArtifact(test_exe);
|
||||||
|
test_step.dependOn(&test_run.step);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// update-translations does what it sounds like and updates the "pot"
|
// update-translations does what it sounds like and updates the "pot"
|
||||||
// files. These should be committed to the repo.
|
// files. These should be committed to the repo.
|
||||||
if (i18n) |v| {
|
{
|
||||||
translations_step.dependOn(v.update_step);
|
const step = b.step("update-translations", "Update translation files");
|
||||||
} else {
|
step.dependOn(i18n.update_step);
|
||||||
try translations_step.addError("cannot update translations when i18n is disabled", .{});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
.{
|
.{
|
||||||
.name = .ghostty,
|
.name = .ghostty,
|
||||||
.version = "1.1.4",
|
.version = "1.1.3",
|
||||||
.paths = .{""},
|
.paths = .{""},
|
||||||
.fingerprint = 0x64407a2a0b4147e5,
|
.fingerprint = 0x64407a2a0b4147e5,
|
||||||
.dependencies = .{
|
.dependencies = .{
|
||||||
@@ -8,26 +8,26 @@
|
|||||||
|
|
||||||
.libxev = .{
|
.libxev = .{
|
||||||
// mitchellh/libxev
|
// mitchellh/libxev
|
||||||
.url = "https://github.com/mitchellh/libxev/archive/7f803181b158a10fec8619f793e3b4df515566cb.tar.gz",
|
.url = "https://github.com/mitchellh/libxev/archive/3df9337a9e84450a58a2c4af434ec1a036f7b494.tar.gz",
|
||||||
.hash = "libxev-0.0.0-86vtc2UaEwDfiTKX3iBI-s_hdzfzWQUarT3MUrmUQl-Q",
|
.hash = "libxev-0.0.0-86vtc-ziEgDbLP0vihUn1MhsxNKY4GJEga6BEr7oyHpz",
|
||||||
.lazy = true,
|
.lazy = true,
|
||||||
},
|
},
|
||||||
.vaxis = .{
|
.vaxis = .{
|
||||||
// rockorager/libvaxis
|
// rockorager/libvaxis
|
||||||
.url = "git+https://github.com/rockorager/libvaxis#1f41c121e8fc153d9ce8c6eb64b2bbab68ad7d23",
|
.url = "git+https://github.com/rockorager/libvaxis#4182b7fa42f27cf14a71dbdb54cfd82c5c6e3447",
|
||||||
.hash = "vaxis-0.1.0-BWNV_FUICQAFZnTCL11TUvnUr1Y0_ZdqtXHhd51d76Rn",
|
.hash = "vaxis-0.1.0-BWNV_MHyCAA0rNbPTr50Z44PyEdNP9zQSnHcXBXoo3Ti",
|
||||||
.lazy = true,
|
.lazy = true,
|
||||||
},
|
},
|
||||||
.z2d = .{
|
.z2d = .{
|
||||||
// vancluever/z2d
|
// vancluever/z2d
|
||||||
.url = "https://github.com/vancluever/z2d/archive/8bbd035f4101f02b1d27947def0d7da3215df7fe.tar.gz",
|
.url = "https://github.com/vancluever/z2d/archive/1e89605a624940c310c7a1d81b46a7c5c05919e3.tar.gz",
|
||||||
.hash = "z2d-0.7.0-j5P_Hg_DDACq-2H2Zh7rAq6_TXWdQzv7JAUfnrdeDosg",
|
.hash = "z2d-0.6.0-j5P_HvLdCABu-dXpCeRM7Uk4m16vULg1980lMNCQj4_C",
|
||||||
.lazy = true,
|
.lazy = true,
|
||||||
},
|
},
|
||||||
.zig_objc = .{
|
.zig_objc = .{
|
||||||
// mitchellh/zig-objc
|
// mitchellh/zig-objc
|
||||||
.url = "https://github.com/mitchellh/zig-objc/archive/c9e917a4e15a983b672ca779c7985d738a2d517c.tar.gz",
|
.url = "https://github.com/mitchellh/zig-objc/archive/3ab0d37c7d6b933d6ded1b3a35b6b60f05590a98.tar.gz",
|
||||||
.hash = "zig_objc-0.0.0-Ir_SpwsPAQBJgi9YRm2ubJMfdoysSq5gKpsIj3izQ8Zk",
|
.hash = "zig_objc-0.0.0-Ir_Sp3TyAADEVRTxXlScq3t_uKAM91MYNerZkHfbD0yt",
|
||||||
.lazy = true,
|
.lazy = true,
|
||||||
},
|
},
|
||||||
.zig_js = .{
|
.zig_js = .{
|
||||||
@@ -48,15 +48,15 @@
|
|||||||
},
|
},
|
||||||
.zf = .{
|
.zf = .{
|
||||||
// natecraddock/zf
|
// natecraddock/zf
|
||||||
.url = "https://github.com/natecraddock/zf/archive/7aacbe6d155d64d15937ca95ca6c014905eb531f.tar.gz",
|
.url = "https://github.com/natecraddock/zf/archive/1039cf75447a8d5b8d481fedb914fe848d246276.tar.gz",
|
||||||
.hash = "zf-0.10.3-OIRy8aiIAACLrBllz0zjxaH0aOe5oNm3KtEMyCntST-9",
|
.hash = "zf-0.10.3-OIRy8bKIAADhjqtdjVaDfONRuI7RVl5gMbhCoOwiBWV5",
|
||||||
.lazy = true,
|
.lazy = true,
|
||||||
},
|
},
|
||||||
.gobject = .{
|
.gobject = .{
|
||||||
// https://github.com/jcollie/ghostty-gobject based on zig_gobject
|
// https://github.com/jcollie/ghostty-gobject based on zig_gobject
|
||||||
// Temporary until we generate them at build time automatically.
|
// Temporary until we generate them at build time automatically.
|
||||||
.url = "https://github.com/jcollie/ghostty-gobject/releases/download/0.14.1-2025-08-09-37-1/ghostty-gobject-0.14.1-2025-08-09-37-1.tar.zst",
|
.url = "https://github.com/jcollie/ghostty-gobject/releases/download/0.14.0-2025-03-18-21-1/ghostty-gobject-0.14.0-2025-03-18-21-1.tar.zst",
|
||||||
.hash = "gobject-0.3.0-Skun7AngnABC2BPiaoobs6YSSzSgMuEIcjb2rYrRyaAM",
|
.hash = "gobject-0.2.0-Skun7IWDlQAOKu4BV7LapIxL9Imbq1JRmzvcIkazvAxR",
|
||||||
.lazy = true,
|
.lazy = true,
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -64,6 +64,7 @@
|
|||||||
.cimgui = .{ .path = "./pkg/cimgui", .lazy = true },
|
.cimgui = .{ .path = "./pkg/cimgui", .lazy = true },
|
||||||
.fontconfig = .{ .path = "./pkg/fontconfig", .lazy = true },
|
.fontconfig = .{ .path = "./pkg/fontconfig", .lazy = true },
|
||||||
.freetype = .{ .path = "./pkg/freetype", .lazy = true },
|
.freetype = .{ .path = "./pkg/freetype", .lazy = true },
|
||||||
|
.glfw = .{ .path = "./pkg/glfw", .lazy = true },
|
||||||
.gtk4_layer_shell = .{ .path = "./pkg/gtk4-layer-shell", .lazy = true },
|
.gtk4_layer_shell = .{ .path = "./pkg/gtk4-layer-shell", .lazy = true },
|
||||||
.harfbuzz = .{ .path = "./pkg/harfbuzz", .lazy = true },
|
.harfbuzz = .{ .path = "./pkg/harfbuzz", .lazy = true },
|
||||||
.highway = .{ .path = "./pkg/highway", .lazy = true },
|
.highway = .{ .path = "./pkg/highway", .lazy = true },
|
||||||
@@ -99,21 +100,11 @@
|
|||||||
.lazy = true,
|
.lazy = true,
|
||||||
},
|
},
|
||||||
|
|
||||||
// Fonts
|
|
||||||
.jetbrains_mono = .{
|
|
||||||
.url = "https://deps.files.ghostty.org/JetBrainsMono-2.304.tar.gz",
|
|
||||||
.hash = "N-V-__8AAIC5lwAVPJJzxnCAahSvZTIlG-HhtOvnM1uh-66x",
|
|
||||||
},
|
|
||||||
.nerd_fonts_symbols_only = .{
|
|
||||||
.url = "https://deps.files.ghostty.org/NerdFontsSymbolsOnly-3.4.0.tar.gz",
|
|
||||||
.hash = "N-V-__8AAMVLTABmYkLqhZPLXnMl-KyN38R8UVYqGrxqO26s",
|
|
||||||
},
|
|
||||||
|
|
||||||
// Other
|
// Other
|
||||||
.apple_sdk = .{ .path = "./pkg/apple-sdk" },
|
.apple_sdk = .{ .path = "./pkg/apple-sdk" },
|
||||||
.iterm2_themes = .{
|
.iterm2_themes = .{
|
||||||
.url = "https://github.com/mbadolato/iTerm2-Color-Schemes/archive/3cbeca99efa10beba24b0efe86331736f09f9ed1.tar.gz",
|
.url = "https://github.com/mbadolato/iTerm2-Color-Schemes/archive/8650079de477e80a5983646e3e4d24cda1dbaefa.tar.gz",
|
||||||
.hash = "N-V-__8AABemXQQj_VhMpwuOSOiSzywW_yGD6aEL9YGI9uBu",
|
.hash = "N-V-__8AADk6LwSAbK3OMyGiadf6aeyztHNV4-zKaLy6IZa6",
|
||||||
.lazy = true,
|
.lazy = true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
63
build.zig.zon.json
generated
@@ -19,15 +19,20 @@
|
|||||||
"url": "https://deps.files.ghostty.org/gettext-0.24.tar.gz",
|
"url": "https://deps.files.ghostty.org/gettext-0.24.tar.gz",
|
||||||
"hash": "sha256-yRhQPVk9cNr0hE0XWhPYFq+stmfAb7oeydzVACwVGLc="
|
"hash": "sha256-yRhQPVk9cNr0hE0XWhPYFq+stmfAb7oeydzVACwVGLc="
|
||||||
},
|
},
|
||||||
|
"N-V-__8AAMrJSwAUGb9-vTzkNR-5LXS81MR__ZRVfF3tWgG6": {
|
||||||
|
"name": "glfw",
|
||||||
|
"url": "https://github.com/glfw/glfw/archive/e7ea71be039836da3a98cea55ae5569cb5eb885c.tar.gz",
|
||||||
|
"hash": "sha256-M3N1XUAlMebBo5X1Py+9YxjKXgZ6eacqWRCbUmwLKQo="
|
||||||
|
},
|
||||||
"N-V-__8AABzkUgISeKGgXAzgtutgJsZc0-kkeqBBscJgMkvy": {
|
"N-V-__8AABzkUgISeKGgXAzgtutgJsZc0-kkeqBBscJgMkvy": {
|
||||||
"name": "glslang",
|
"name": "glslang",
|
||||||
"url": "https://deps.files.ghostty.org/glslang-12201278a1a05c0ce0b6eb6026c65cd3e9247aa041b1c260324bf29cee559dd23ba1.tar.gz",
|
"url": "https://deps.files.ghostty.org/glslang-12201278a1a05c0ce0b6eb6026c65cd3e9247aa041b1c260324bf29cee559dd23ba1.tar.gz",
|
||||||
"hash": "sha256-FKLtu1Ccs+UamlPj9eQ12/WXFgS0uDPmPmB26MCpl7U="
|
"hash": "sha256-FKLtu1Ccs+UamlPj9eQ12/WXFgS0uDPmPmB26MCpl7U="
|
||||||
},
|
},
|
||||||
"gobject-0.3.0-Skun7AngnABC2BPiaoobs6YSSzSgMuEIcjb2rYrRyaAM": {
|
"gobject-0.2.0-Skun7IWDlQAOKu4BV7LapIxL9Imbq1JRmzvcIkazvAxR": {
|
||||||
"name": "gobject",
|
"name": "gobject",
|
||||||
"url": "https://github.com/jcollie/ghostty-gobject/releases/download/0.14.1-2025-08-09-37-1/ghostty-gobject-0.14.1-2025-08-09-37-1.tar.zst",
|
"url": "https://github.com/jcollie/ghostty-gobject/releases/download/0.14.0-2025-03-18-21-1/ghostty-gobject-0.14.0-2025-03-18-21-1.tar.zst",
|
||||||
"hash": "sha256-B0ziLzKud+kdKu5T1BTE9GMh8EPM/KhhhoNJlys5QPI="
|
"hash": "sha256-hWcpl0Wd3XydT+RY7+VIoxXPhCzele1Ip76YSh+KmLI="
|
||||||
},
|
},
|
||||||
"N-V-__8AALiNBAA-_0gprYr92CjrMj1I5bqNu0TSJOnjFNSr": {
|
"N-V-__8AALiNBAA-_0gprYr92CjrMj1I5bqNu0TSJOnjFNSr": {
|
||||||
"name": "gtk4_layer_shell",
|
"name": "gtk4_layer_shell",
|
||||||
@@ -49,36 +54,26 @@
|
|||||||
"url": "https://deps.files.ghostty.org/imgui-1220bc6b9daceaf7c8c60f3c3998058045ba0c5c5f48ae255ff97776d9cd8bfc6402.tar.gz",
|
"url": "https://deps.files.ghostty.org/imgui-1220bc6b9daceaf7c8c60f3c3998058045ba0c5c5f48ae255ff97776d9cd8bfc6402.tar.gz",
|
||||||
"hash": "sha256-oF/QHgTPEat4Hig4fGIdLkIPHmBEyOJ6JeYD6pnveGA="
|
"hash": "sha256-oF/QHgTPEat4Hig4fGIdLkIPHmBEyOJ6JeYD6pnveGA="
|
||||||
},
|
},
|
||||||
"N-V-__8AABemXQQj_VhMpwuOSOiSzywW_yGD6aEL9YGI9uBu": {
|
"N-V-__8AADk6LwSAbK3OMyGiadf6aeyztHNV4-zKaLy6IZa6": {
|
||||||
"name": "iterm2_themes",
|
"name": "iterm2_themes",
|
||||||
"url": "https://github.com/mbadolato/iTerm2-Color-Schemes/archive/3cbeca99efa10beba24b0efe86331736f09f9ed1.tar.gz",
|
"url": "https://github.com/mbadolato/iTerm2-Color-Schemes/archive/8650079de477e80a5983646e3e4d24cda1dbaefa.tar.gz",
|
||||||
"hash": "sha256-gl42NOZ59ok+umHCHbdBQhWCgFVpj5PAZDVGhJRpbiA="
|
"hash": "sha256-nOkH31MQQd2PPdjVpRxBxNQWfR9Exg6nRF/KHgSz3cM="
|
||||||
},
|
|
||||||
"N-V-__8AAIC5lwAVPJJzxnCAahSvZTIlG-HhtOvnM1uh-66x": {
|
|
||||||
"name": "jetbrains_mono",
|
|
||||||
"url": "https://deps.files.ghostty.org/JetBrainsMono-2.304.tar.gz",
|
|
||||||
"hash": "sha256-xXppHouCrQmLWWPzlZAy5AOPORCHr3cViFulkEYQXMQ="
|
|
||||||
},
|
},
|
||||||
"N-V-__8AAJrvXQCqAT8Mg9o_tk6m0yf5Fz-gCNEOKLyTSerD": {
|
"N-V-__8AAJrvXQCqAT8Mg9o_tk6m0yf5Fz-gCNEOKLyTSerD": {
|
||||||
"name": "libpng",
|
"name": "libpng",
|
||||||
"url": "https://deps.files.ghostty.org/libpng-1220aa013f0c83da3fb64ea6d327f9173fa008d10e28bc9349eac3463457723b1c66.tar.gz",
|
"url": "https://deps.files.ghostty.org/libpng-1220aa013f0c83da3fb64ea6d327f9173fa008d10e28bc9349eac3463457723b1c66.tar.gz",
|
||||||
"hash": "sha256-/syVtGzwXo4/yKQUdQ4LparQDYnp/fF16U/wQcrxoDo="
|
"hash": "sha256-/syVtGzwXo4/yKQUdQ4LparQDYnp/fF16U/wQcrxoDo="
|
||||||
},
|
},
|
||||||
"libxev-0.0.0-86vtc2UaEwDfiTKX3iBI-s_hdzfzWQUarT3MUrmUQl-Q": {
|
"libxev-0.0.0-86vtc-ziEgDbLP0vihUn1MhsxNKY4GJEga6BEr7oyHpz": {
|
||||||
"name": "libxev",
|
"name": "libxev",
|
||||||
"url": "https://github.com/mitchellh/libxev/archive/7f803181b158a10fec8619f793e3b4df515566cb.tar.gz",
|
"url": "https://github.com/mitchellh/libxev/archive/3df9337a9e84450a58a2c4af434ec1a036f7b494.tar.gz",
|
||||||
"hash": "sha256-KaozYKEhhT/6sInef7/8O/60LDBJN+8QmdLuNY1Gkmc="
|
"hash": "sha256-oKZqA9d79jHnp/HsqJWQE33Ffn5Ee5G4VnlQepQuY4o="
|
||||||
},
|
},
|
||||||
"N-V-__8AAG3RoQEyRC2Vw7Qoro5SYBf62IHn3HjqtNVY6aWK": {
|
"N-V-__8AAG3RoQEyRC2Vw7Qoro5SYBf62IHn3HjqtNVY6aWK": {
|
||||||
"name": "libxml2",
|
"name": "libxml2",
|
||||||
"url": "https://deps.files.ghostty.org/libxml2-2.11.5.tar.gz",
|
"url": "https://deps.files.ghostty.org/libxml2-2.11.5.tar.gz",
|
||||||
"hash": "sha256-bCgFni4+60K1tLFkieORamNGwQladP7jvGXNxdiaYhU="
|
"hash": "sha256-bCgFni4+60K1tLFkieORamNGwQladP7jvGXNxdiaYhU="
|
||||||
},
|
},
|
||||||
"N-V-__8AAMVLTABmYkLqhZPLXnMl-KyN38R8UVYqGrxqO26s": {
|
|
||||||
"name": "nerd_fonts_symbols_only",
|
|
||||||
"url": "https://deps.files.ghostty.org/NerdFontsSymbolsOnly-3.4.0.tar.gz",
|
|
||||||
"hash": "sha256-EWTRuVbUveJI17LwmYxDzJT1ICQxoVZKeTiVsec7DQQ="
|
|
||||||
},
|
|
||||||
"N-V-__8AAHjwMQDBXnLq3Q2QhaivE0kE2aD138vtX2Bq1g7c": {
|
"N-V-__8AAHjwMQDBXnLq3Q2QhaivE0kE2aD138vtX2Bq1g7c": {
|
||||||
"name": "oniguruma",
|
"name": "oniguruma",
|
||||||
"url": "https://deps.files.ghostty.org/oniguruma-1220c15e72eadd0d9085a8af134904d9a0f5dfcbed5f606ad60edc60ebeccd9706bb.tar.gz",
|
"url": "https://deps.files.ghostty.org/oniguruma-1220c15e72eadd0d9085a8af134904d9a0f5dfcbed5f606ad60edc60ebeccd9706bb.tar.gz",
|
||||||
@@ -109,10 +104,10 @@
|
|||||||
"url": "https://deps.files.ghostty.org/utfcpp-1220d4d18426ca72fc2b7e56ce47273149815501d0d2395c2a98c726b31ba931e641.tar.gz",
|
"url": "https://deps.files.ghostty.org/utfcpp-1220d4d18426ca72fc2b7e56ce47273149815501d0d2395c2a98c726b31ba931e641.tar.gz",
|
||||||
"hash": "sha256-/8ZooxDndgfTk/PBizJxXyI9oerExNbgV5oR345rWc8="
|
"hash": "sha256-/8ZooxDndgfTk/PBizJxXyI9oerExNbgV5oR345rWc8="
|
||||||
},
|
},
|
||||||
"vaxis-0.1.0-BWNV_FUICQAFZnTCL11TUvnUr1Y0_ZdqtXHhd51d76Rn": {
|
"vaxis-0.1.0-BWNV_MHyCAA0rNbPTr50Z44PyEdNP9zQSnHcXBXoo3Ti": {
|
||||||
"name": "vaxis",
|
"name": "vaxis",
|
||||||
"url": "git+https://github.com/rockorager/libvaxis#1f41c121e8fc153d9ce8c6eb64b2bbab68ad7d23",
|
"url": "git+https://github.com/rockorager/libvaxis#4182b7fa42f27cf14a71dbdb54cfd82c5c6e3447",
|
||||||
"hash": "sha256-bNZ3oveT6vPChjimPJ/GGfcdivlAeJdl/xfWM+S/MHY="
|
"hash": "sha256-iONEySjPeD0WYJ93fw5mxT+0pVfUO/m6008J/LXjQkA="
|
||||||
},
|
},
|
||||||
"N-V-__8AAKrHGAAs2shYq8UkE6bGcR1QJtLTyOE_lcosMn6t": {
|
"N-V-__8AAKrHGAAs2shYq8UkE6bGcR1QJtLTyOE_lcosMn6t": {
|
||||||
"name": "wayland",
|
"name": "wayland",
|
||||||
@@ -129,15 +124,15 @@
|
|||||||
"url": "https://deps.files.ghostty.org/wuffs-122037b39d577ec2db3fd7b2130e7b69ef6cc1807d68607a7c232c958315d381b5cd.tar.gz",
|
"url": "https://deps.files.ghostty.org/wuffs-122037b39d577ec2db3fd7b2130e7b69ef6cc1807d68607a7c232c958315d381b5cd.tar.gz",
|
||||||
"hash": "sha256-nkzSCr6W5sTG7enDBXEIhgEm574uLD41UVR2wlC+HBM="
|
"hash": "sha256-nkzSCr6W5sTG7enDBXEIhgEm574uLD41UVR2wlC+HBM="
|
||||||
},
|
},
|
||||||
"z2d-0.7.0-j5P_Hg_DDACq-2H2Zh7rAq6_TXWdQzv7JAUfnrdeDosg": {
|
"z2d-0.6.0-j5P_HvLdCABu-dXpCeRM7Uk4m16vULg1980lMNCQj4_C": {
|
||||||
"name": "z2d",
|
"name": "z2d",
|
||||||
"url": "https://github.com/vancluever/z2d/archive/8bbd035f4101f02b1d27947def0d7da3215df7fe.tar.gz",
|
"url": "https://github.com/vancluever/z2d/archive/1e89605a624940c310c7a1d81b46a7c5c05919e3.tar.gz",
|
||||||
"hash": "sha256-wfadegeixcbgxRzRtf6M2H34CTuvDM22XVIhuufFBG4="
|
"hash": "sha256-PEKVSUZ6teRbDyhFPWSiuBSe40pgr0kVRivIY8Cn8HQ="
|
||||||
},
|
},
|
||||||
"zf-0.10.3-OIRy8aiIAACLrBllz0zjxaH0aOe5oNm3KtEMyCntST-9": {
|
"zf-0.10.3-OIRy8bKIAADhjqtdjVaDfONRuI7RVl5gMbhCoOwiBWV5": {
|
||||||
"name": "zf",
|
"name": "zf",
|
||||||
"url": "https://github.com/natecraddock/zf/archive/7aacbe6d155d64d15937ca95ca6c014905eb531f.tar.gz",
|
"url": "https://github.com/natecraddock/zf/archive/1039cf75447a8d5b8d481fedb914fe848d246276.tar.gz",
|
||||||
"hash": "sha256-3nulNQd/4rZ4paeXJYXwAliNNyRNsIOX/q3z1JB8C7I="
|
"hash": "sha256-xVva07TAYlVv4E4PKe2wUj86a6Ky2YC30YBgtbvNKvw="
|
||||||
},
|
},
|
||||||
"zg-0.13.4-AAAAAGiZ7QLz4pvECFa_wG4O4TP4FLABHHbemH2KakWM": {
|
"zg-0.13.4-AAAAAGiZ7QLz4pvECFa_wG4O4TP4FLABHHbemH2KakWM": {
|
||||||
"name": "zg",
|
"name": "zg",
|
||||||
@@ -149,20 +144,20 @@
|
|||||||
"url": "https://deps.files.ghostty.org/zig_js-12205a66d423259567764fa0fc60c82be35365c21aeb76c5a7dc99698401f4f6fefc.tar.gz",
|
"url": "https://deps.files.ghostty.org/zig_js-12205a66d423259567764fa0fc60c82be35365c21aeb76c5a7dc99698401f4f6fefc.tar.gz",
|
||||||
"hash": "sha256-fyNeCVbC9UAaKJY6JhAZlT0A479M/AKYMPIWEZbDWD0="
|
"hash": "sha256-fyNeCVbC9UAaKJY6JhAZlT0A479M/AKYMPIWEZbDWD0="
|
||||||
},
|
},
|
||||||
"zig_objc-0.0.0-Ir_SpwsPAQBJgi9YRm2ubJMfdoysSq5gKpsIj3izQ8Zk": {
|
"zig_objc-0.0.0-Ir_Sp3TyAADEVRTxXlScq3t_uKAM91MYNerZkHfbD0yt": {
|
||||||
"name": "zig_objc",
|
"name": "zig_objc",
|
||||||
"url": "https://github.com/mitchellh/zig-objc/archive/c9e917a4e15a983b672ca779c7985d738a2d517c.tar.gz",
|
"url": "https://github.com/mitchellh/zig-objc/archive/3ab0d37c7d6b933d6ded1b3a35b6b60f05590a98.tar.gz",
|
||||||
"hash": "sha256-o3vl7qfkSi0bKXa6JWuF92qMEGP8Af/shcip5nRo5Nw="
|
"hash": "sha256-zn1tR6xhSmDla4UJ3t+Gni4Ni3R8deSK3tEe7DGzNXw="
|
||||||
},
|
},
|
||||||
"wayland-0.4.0-dev-lQa1kjfIAQCmhhQu3xF0KH-94-TzeMXOqfnP0-Dg6Wyy": {
|
"wayland-0.4.0-dev-lQa1kjfIAQCmhhQu3xF0KH-94-TzeMXOqfnP0-Dg6Wyy": {
|
||||||
"name": "zig_wayland",
|
"name": "zig_wayland",
|
||||||
"url": "https://codeberg.org/ifreund/zig-wayland/archive/f3c5d503e540ada8cbcb056420de240af0c094f7.tar.gz",
|
"url": "https://codeberg.org/ifreund/zig-wayland/archive/f3c5d503e540ada8cbcb056420de240af0c094f7.tar.gz",
|
||||||
"hash": "sha256-E77GZ15APYbbO1WzmuJi8eG9/iQFbc2CgkNBxjCLUhk="
|
"hash": "sha256-E77GZ15APYbbO1WzmuJi8eG9/iQFbc2CgkNBxjCLUhk="
|
||||||
},
|
},
|
||||||
"zigimg-0.1.0-lly-O6N2EABOxke8dqyzCwhtUCAafqP35zC7wsZ4Ddxj": {
|
"zigimg-0.1.0-lly-O4heEADSRxoTwJwrD3TBfUob9052sIgb9SL8Iz-A": {
|
||||||
"name": "zigimg",
|
"name": "zigimg",
|
||||||
"url": "git+https://github.com/TUSF/zigimg#31268548fe3276c0e95f318a6c0d2ab10565b58d",
|
"url": "git+https://github.com/TUSF/zigimg#0ce4eca3560d5553b13263d6b6bb72e146dd43d0",
|
||||||
"hash": "sha256-oblfr2FIzuqq0FLo/RrzCwUX1NJJuT53EwD3nP3KwN0="
|
"hash": "sha256-Rr+mAfbLOoaxHOwCug+0cWCmW9gDhjhnaO2J/Oik9HI="
|
||||||
},
|
},
|
||||||
"ziglyph-0.11.2-AAAAAHPtHwB4Mbzn1KvOV7Wpjo82NYEc_v0WC8oCLrkf": {
|
"ziglyph-0.11.2-AAAAAHPtHwB4Mbzn1KvOV7Wpjo82NYEc_v0WC8oCLrkf": {
|
||||||
"name": "ziglyph",
|
"name": "ziglyph",
|
||||||
|
72
build.zig.zon.nix
generated
@@ -113,6 +113,14 @@ in
|
|||||||
hash = "sha256-yRhQPVk9cNr0hE0XWhPYFq+stmfAb7oeydzVACwVGLc=";
|
hash = "sha256-yRhQPVk9cNr0hE0XWhPYFq+stmfAb7oeydzVACwVGLc=";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
name = "N-V-__8AAMrJSwAUGb9-vTzkNR-5LXS81MR__ZRVfF3tWgG6";
|
||||||
|
path = fetchZigArtifact {
|
||||||
|
name = "glfw";
|
||||||
|
url = "https://github.com/glfw/glfw/archive/e7ea71be039836da3a98cea55ae5569cb5eb885c.tar.gz";
|
||||||
|
hash = "sha256-M3N1XUAlMebBo5X1Py+9YxjKXgZ6eacqWRCbUmwLKQo=";
|
||||||
|
};
|
||||||
|
}
|
||||||
{
|
{
|
||||||
name = "N-V-__8AABzkUgISeKGgXAzgtutgJsZc0-kkeqBBscJgMkvy";
|
name = "N-V-__8AABzkUgISeKGgXAzgtutgJsZc0-kkeqBBscJgMkvy";
|
||||||
path = fetchZigArtifact {
|
path = fetchZigArtifact {
|
||||||
@@ -122,11 +130,11 @@ in
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "gobject-0.3.0-Skun7AngnABC2BPiaoobs6YSSzSgMuEIcjb2rYrRyaAM";
|
name = "gobject-0.2.0-Skun7IWDlQAOKu4BV7LapIxL9Imbq1JRmzvcIkazvAxR";
|
||||||
path = fetchZigArtifact {
|
path = fetchZigArtifact {
|
||||||
name = "gobject";
|
name = "gobject";
|
||||||
url = "https://github.com/jcollie/ghostty-gobject/releases/download/0.14.1-2025-08-09-37-1/ghostty-gobject-0.14.1-2025-08-09-37-1.tar.zst";
|
url = "https://github.com/jcollie/ghostty-gobject/releases/download/0.14.0-2025-03-18-21-1/ghostty-gobject-0.14.0-2025-03-18-21-1.tar.zst";
|
||||||
hash = "sha256-B0ziLzKud+kdKu5T1BTE9GMh8EPM/KhhhoNJlys5QPI=";
|
hash = "sha256-hWcpl0Wd3XydT+RY7+VIoxXPhCzele1Ip76YSh+KmLI=";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
@@ -162,19 +170,11 @@ in
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "N-V-__8AABemXQQj_VhMpwuOSOiSzywW_yGD6aEL9YGI9uBu";
|
name = "N-V-__8AADk6LwSAbK3OMyGiadf6aeyztHNV4-zKaLy6IZa6";
|
||||||
path = fetchZigArtifact {
|
path = fetchZigArtifact {
|
||||||
name = "iterm2_themes";
|
name = "iterm2_themes";
|
||||||
url = "https://github.com/mbadolato/iTerm2-Color-Schemes/archive/3cbeca99efa10beba24b0efe86331736f09f9ed1.tar.gz";
|
url = "https://github.com/mbadolato/iTerm2-Color-Schemes/archive/8650079de477e80a5983646e3e4d24cda1dbaefa.tar.gz";
|
||||||
hash = "sha256-gl42NOZ59ok+umHCHbdBQhWCgFVpj5PAZDVGhJRpbiA=";
|
hash = "sha256-nOkH31MQQd2PPdjVpRxBxNQWfR9Exg6nRF/KHgSz3cM=";
|
||||||
};
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "N-V-__8AAIC5lwAVPJJzxnCAahSvZTIlG-HhtOvnM1uh-66x";
|
|
||||||
path = fetchZigArtifact {
|
|
||||||
name = "jetbrains_mono";
|
|
||||||
url = "https://deps.files.ghostty.org/JetBrainsMono-2.304.tar.gz";
|
|
||||||
hash = "sha256-xXppHouCrQmLWWPzlZAy5AOPORCHr3cViFulkEYQXMQ=";
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
@@ -186,11 +186,11 @@ in
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "libxev-0.0.0-86vtc2UaEwDfiTKX3iBI-s_hdzfzWQUarT3MUrmUQl-Q";
|
name = "libxev-0.0.0-86vtc-ziEgDbLP0vihUn1MhsxNKY4GJEga6BEr7oyHpz";
|
||||||
path = fetchZigArtifact {
|
path = fetchZigArtifact {
|
||||||
name = "libxev";
|
name = "libxev";
|
||||||
url = "https://github.com/mitchellh/libxev/archive/7f803181b158a10fec8619f793e3b4df515566cb.tar.gz";
|
url = "https://github.com/mitchellh/libxev/archive/3df9337a9e84450a58a2c4af434ec1a036f7b494.tar.gz";
|
||||||
hash = "sha256-KaozYKEhhT/6sInef7/8O/60LDBJN+8QmdLuNY1Gkmc=";
|
hash = "sha256-oKZqA9d79jHnp/HsqJWQE33Ffn5Ee5G4VnlQepQuY4o=";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
@@ -201,14 +201,6 @@ in
|
|||||||
hash = "sha256-bCgFni4+60K1tLFkieORamNGwQladP7jvGXNxdiaYhU=";
|
hash = "sha256-bCgFni4+60K1tLFkieORamNGwQladP7jvGXNxdiaYhU=";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
|
||||||
name = "N-V-__8AAMVLTABmYkLqhZPLXnMl-KyN38R8UVYqGrxqO26s";
|
|
||||||
path = fetchZigArtifact {
|
|
||||||
name = "nerd_fonts_symbols_only";
|
|
||||||
url = "https://deps.files.ghostty.org/NerdFontsSymbolsOnly-3.4.0.tar.gz";
|
|
||||||
hash = "sha256-EWTRuVbUveJI17LwmYxDzJT1ICQxoVZKeTiVsec7DQQ=";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
{
|
{
|
||||||
name = "N-V-__8AAHjwMQDBXnLq3Q2QhaivE0kE2aD138vtX2Bq1g7c";
|
name = "N-V-__8AAHjwMQDBXnLq3Q2QhaivE0kE2aD138vtX2Bq1g7c";
|
||||||
path = fetchZigArtifact {
|
path = fetchZigArtifact {
|
||||||
@@ -258,11 +250,11 @@ in
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "vaxis-0.1.0-BWNV_FUICQAFZnTCL11TUvnUr1Y0_ZdqtXHhd51d76Rn";
|
name = "vaxis-0.1.0-BWNV_MHyCAA0rNbPTr50Z44PyEdNP9zQSnHcXBXoo3Ti";
|
||||||
path = fetchZigArtifact {
|
path = fetchZigArtifact {
|
||||||
name = "vaxis";
|
name = "vaxis";
|
||||||
url = "git+https://github.com/rockorager/libvaxis#1f41c121e8fc153d9ce8c6eb64b2bbab68ad7d23";
|
url = "git+https://github.com/rockorager/libvaxis#4182b7fa42f27cf14a71dbdb54cfd82c5c6e3447";
|
||||||
hash = "sha256-bNZ3oveT6vPChjimPJ/GGfcdivlAeJdl/xfWM+S/MHY=";
|
hash = "sha256-iONEySjPeD0WYJ93fw5mxT+0pVfUO/m6008J/LXjQkA=";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
@@ -290,19 +282,19 @@ in
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "z2d-0.7.0-j5P_Hg_DDACq-2H2Zh7rAq6_TXWdQzv7JAUfnrdeDosg";
|
name = "z2d-0.6.0-j5P_HvLdCABu-dXpCeRM7Uk4m16vULg1980lMNCQj4_C";
|
||||||
path = fetchZigArtifact {
|
path = fetchZigArtifact {
|
||||||
name = "z2d";
|
name = "z2d";
|
||||||
url = "https://github.com/vancluever/z2d/archive/8bbd035f4101f02b1d27947def0d7da3215df7fe.tar.gz";
|
url = "https://github.com/vancluever/z2d/archive/1e89605a624940c310c7a1d81b46a7c5c05919e3.tar.gz";
|
||||||
hash = "sha256-wfadegeixcbgxRzRtf6M2H34CTuvDM22XVIhuufFBG4=";
|
hash = "sha256-PEKVSUZ6teRbDyhFPWSiuBSe40pgr0kVRivIY8Cn8HQ=";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "zf-0.10.3-OIRy8aiIAACLrBllz0zjxaH0aOe5oNm3KtEMyCntST-9";
|
name = "zf-0.10.3-OIRy8bKIAADhjqtdjVaDfONRuI7RVl5gMbhCoOwiBWV5";
|
||||||
path = fetchZigArtifact {
|
path = fetchZigArtifact {
|
||||||
name = "zf";
|
name = "zf";
|
||||||
url = "https://github.com/natecraddock/zf/archive/7aacbe6d155d64d15937ca95ca6c014905eb531f.tar.gz";
|
url = "https://github.com/natecraddock/zf/archive/1039cf75447a8d5b8d481fedb914fe848d246276.tar.gz";
|
||||||
hash = "sha256-3nulNQd/4rZ4paeXJYXwAliNNyRNsIOX/q3z1JB8C7I=";
|
hash = "sha256-xVva07TAYlVv4E4PKe2wUj86a6Ky2YC30YBgtbvNKvw=";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
@@ -322,11 +314,11 @@ in
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "zig_objc-0.0.0-Ir_SpwsPAQBJgi9YRm2ubJMfdoysSq5gKpsIj3izQ8Zk";
|
name = "zig_objc-0.0.0-Ir_Sp3TyAADEVRTxXlScq3t_uKAM91MYNerZkHfbD0yt";
|
||||||
path = fetchZigArtifact {
|
path = fetchZigArtifact {
|
||||||
name = "zig_objc";
|
name = "zig_objc";
|
||||||
url = "https://github.com/mitchellh/zig-objc/archive/c9e917a4e15a983b672ca779c7985d738a2d517c.tar.gz";
|
url = "https://github.com/mitchellh/zig-objc/archive/3ab0d37c7d6b933d6ded1b3a35b6b60f05590a98.tar.gz";
|
||||||
hash = "sha256-o3vl7qfkSi0bKXa6JWuF92qMEGP8Af/shcip5nRo5Nw=";
|
hash = "sha256-zn1tR6xhSmDla4UJ3t+Gni4Ni3R8deSK3tEe7DGzNXw=";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
@@ -338,11 +330,11 @@ in
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
name = "zigimg-0.1.0-lly-O6N2EABOxke8dqyzCwhtUCAafqP35zC7wsZ4Ddxj";
|
name = "zigimg-0.1.0-lly-O4heEADSRxoTwJwrD3TBfUob9052sIgb9SL8Iz-A";
|
||||||
path = fetchZigArtifact {
|
path = fetchZigArtifact {
|
||||||
name = "zigimg";
|
name = "zigimg";
|
||||||
url = "git+https://github.com/TUSF/zigimg#31268548fe3276c0e95f318a6c0d2ab10565b58d";
|
url = "git+https://github.com/TUSF/zigimg#0ce4eca3560d5553b13263d6b6bb72e146dd43d0";
|
||||||
hash = "sha256-oblfr2FIzuqq0FLo/RrzCwUX1NJJuT53EwD3nP3KwN0=";
|
hash = "sha256-Rr+mAfbLOoaxHOwCug+0cWCmW9gDhjhnaO2J/Oik9HI=";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
|
19
build.zig.zon.txt
generated
@@ -1,9 +1,7 @@
|
|||||||
git+https://codeberg.org/atman/zg#4a002763419a34d61dcbb1f415821b83b9bf8ddc
|
git+https://codeberg.org/atman/zg#4a002763419a34d61dcbb1f415821b83b9bf8ddc
|
||||||
git+https://github.com/TUSF/zigimg#31268548fe3276c0e95f318a6c0d2ab10565b58d
|
git+https://github.com/TUSF/zigimg#0ce4eca3560d5553b13263d6b6bb72e146dd43d0
|
||||||
git+https://github.com/rockorager/libvaxis#1f41c121e8fc153d9ce8c6eb64b2bbab68ad7d23
|
git+https://github.com/rockorager/libvaxis#4182b7fa42f27cf14a71dbdb54cfd82c5c6e3447
|
||||||
https://codeberg.org/ifreund/zig-wayland/archive/f3c5d503e540ada8cbcb056420de240af0c094f7.tar.gz
|
https://codeberg.org/ifreund/zig-wayland/archive/f3c5d503e540ada8cbcb056420de240af0c094f7.tar.gz
|
||||||
https://deps.files.ghostty.org/JetBrainsMono-2.304.tar.gz
|
|
||||||
https://deps.files.ghostty.org/NerdFontsSymbolsOnly-3.4.0.tar.gz
|
|
||||||
https://deps.files.ghostty.org/breakpad-b99f444ba5f6b98cac261cbb391d8766b34a5918.tar.gz
|
https://deps.files.ghostty.org/breakpad-b99f444ba5f6b98cac261cbb391d8766b34a5918.tar.gz
|
||||||
https://deps.files.ghostty.org/fontconfig-2.14.2.tar.gz
|
https://deps.files.ghostty.org/fontconfig-2.14.2.tar.gz
|
||||||
https://deps.files.ghostty.org/freetype-1220b81f6ecfb3fd222f76cf9106fecfa6554ab07ec7fdc4124b9bb063ae2adf969d.tar.gz
|
https://deps.files.ghostty.org/freetype-1220b81f6ecfb3fd222f76cf9106fecfa6554ab07ec7fdc4124b9bb063ae2adf969d.tar.gz
|
||||||
@@ -27,9 +25,10 @@ https://deps.files.ghostty.org/wuffs-122037b39d577ec2db3fd7b2130e7b69ef6cc1807d6
|
|||||||
https://deps.files.ghostty.org/zig_js-12205a66d423259567764fa0fc60c82be35365c21aeb76c5a7dc99698401f4f6fefc.tar.gz
|
https://deps.files.ghostty.org/zig_js-12205a66d423259567764fa0fc60c82be35365c21aeb76c5a7dc99698401f4f6fefc.tar.gz
|
||||||
https://deps.files.ghostty.org/ziglyph-b89d43d1e3fb01b6074bc1f7fc980324b04d26a5.tar.gz
|
https://deps.files.ghostty.org/ziglyph-b89d43d1e3fb01b6074bc1f7fc980324b04d26a5.tar.gz
|
||||||
https://deps.files.ghostty.org/zlib-1220fed0c74e1019b3ee29edae2051788b080cd96e90d56836eea857b0b966742efb.tar.gz
|
https://deps.files.ghostty.org/zlib-1220fed0c74e1019b3ee29edae2051788b080cd96e90d56836eea857b0b966742efb.tar.gz
|
||||||
https://github.com/jcollie/ghostty-gobject/releases/download/0.14.1-2025-08-09-37-1/ghostty-gobject-0.14.1-2025-08-09-37-1.tar.zst
|
https://github.com/glfw/glfw/archive/e7ea71be039836da3a98cea55ae5569cb5eb885c.tar.gz
|
||||||
https://github.com/mbadolato/iTerm2-Color-Schemes/archive/3cbeca99efa10beba24b0efe86331736f09f9ed1.tar.gz
|
https://github.com/jcollie/ghostty-gobject/releases/download/0.14.0-2025-03-18-21-1/ghostty-gobject-0.14.0-2025-03-18-21-1.tar.zst
|
||||||
https://github.com/mitchellh/libxev/archive/7f803181b158a10fec8619f793e3b4df515566cb.tar.gz
|
https://github.com/mbadolato/iTerm2-Color-Schemes/archive/8650079de477e80a5983646e3e4d24cda1dbaefa.tar.gz
|
||||||
https://github.com/mitchellh/zig-objc/archive/c9e917a4e15a983b672ca779c7985d738a2d517c.tar.gz
|
https://github.com/mitchellh/libxev/archive/3df9337a9e84450a58a2c4af434ec1a036f7b494.tar.gz
|
||||||
https://github.com/natecraddock/zf/archive/7aacbe6d155d64d15937ca95ca6c014905eb531f.tar.gz
|
https://github.com/mitchellh/zig-objc/archive/3ab0d37c7d6b933d6ded1b3a35b6b60f05590a98.tar.gz
|
||||||
https://github.com/vancluever/z2d/archive/8bbd035f4101f02b1d27947def0d7da3215df7fe.tar.gz
|
https://github.com/natecraddock/zf/archive/1039cf75447a8d5b8d481fedb914fe848d246276.tar.gz
|
||||||
|
https://github.com/vancluever/z2d/archive/1e89605a624940c310c7a1d81b46a7c5c05919e3.tar.gz
|
||||||
|
59
com.mitchellh.ghostty.yml
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
# Note: the flatpak build is likely broken right now and is not actively
|
||||||
|
# maintained. We may completely remove this file in the future. For now,
|
||||||
|
# we want to keep _trying_ but its something with known issues.
|
||||||
|
app-id: com.mitchellh.ghostty
|
||||||
|
runtime: org.gnome.Platform
|
||||||
|
runtime-version: "43"
|
||||||
|
sdk: org.gnome.Sdk
|
||||||
|
default-branch: tip
|
||||||
|
command: ghostty
|
||||||
|
build-options:
|
||||||
|
append-path: /app/tmp/zig
|
||||||
|
strip: false
|
||||||
|
no-debuginfo: true
|
||||||
|
# Note: we have to use cleanup-commands because flatpak-builder doesn't
|
||||||
|
# run "cleanup" on its own: https://github.com/flatpak/flatpak-builder/issues/14
|
||||||
|
cleanup-commands:
|
||||||
|
- "rm -rf /app/tmp"
|
||||||
|
finish-args:
|
||||||
|
# 3D rendering
|
||||||
|
- --device=dri
|
||||||
|
# Windowing
|
||||||
|
- --share=ipc
|
||||||
|
- --socket=x11
|
||||||
|
- --socket=wayland
|
||||||
|
# Files (we are a terminal so we need all of them)
|
||||||
|
- --filesystem=host
|
||||||
|
# So we can escape the sandbox
|
||||||
|
- --talk-name=org.freedesktop.Flatpak
|
||||||
|
modules:
|
||||||
|
# Note: this should be kept in sync with our flake.nix. Over time this
|
||||||
|
# should stabilize to being a release version and not a nightly.
|
||||||
|
- name: zig
|
||||||
|
buildsystem: simple
|
||||||
|
build-commands:
|
||||||
|
- mkdir -p /app/tmp/zig
|
||||||
|
- cp -r ./* /app/tmp/zig
|
||||||
|
sources:
|
||||||
|
- type: archive
|
||||||
|
url: https://ziglang.org/builds/zig-linux-x86_64-0.12.0-dev.141+ddf5859c2.tar.xz
|
||||||
|
sha256: eaf519b1ec3cb0f3c9bcbc47ead5f50610f9c106279a35b9feb09bed8afc628b
|
||||||
|
only-arches:
|
||||||
|
- x86_64
|
||||||
|
- type: archive
|
||||||
|
url: https://ziglang.org/builds/zig-linux-aarch64-0.12.0-dev.141+ddf5859c2.tar.xz
|
||||||
|
sha256: 4f918ae185a5dc281b5d30be92cd4c36ebd77b8665729c5e2c47a8eeccd243e8
|
||||||
|
only-arches:
|
||||||
|
- aarch64
|
||||||
|
|
||||||
|
- name: ghostty
|
||||||
|
buildsystem: simple
|
||||||
|
build-commands:
|
||||||
|
- MACH_SDK_PATH="$(pwd)/vendor/mach-sdk" zig build -Doptimize=ReleaseSafe -Dcpu=baseline -Dflatpak=true -Dapp-runtime=gtk --prefix /app
|
||||||
|
sources:
|
||||||
|
- type: dir
|
||||||
|
path: .
|
||||||
|
skip:
|
||||||
|
- .flatpak-builder
|
||||||
|
- zig-cache
|
||||||
|
- zig-out
|
@@ -1,15 +1,13 @@
|
|||||||
[Desktop Entry]
|
[Desktop Entry]
|
||||||
Version=1.0
|
Name=Ghostty
|
||||||
Name=@NAME@
|
|
||||||
Type=Application
|
Type=Application
|
||||||
Comment=A terminal emulator
|
Comment=A terminal emulator
|
||||||
TryExec=@GHOSTTY@
|
Exec=ghostty
|
||||||
Exec=@GHOSTTY@ --launched-from=desktop
|
|
||||||
Icon=com.mitchellh.ghostty
|
Icon=com.mitchellh.ghostty
|
||||||
Categories=System;TerminalEmulator;
|
Categories=System;TerminalEmulator;
|
||||||
Keywords=terminal;tty;pty;
|
Keywords=terminal;tty;pty;
|
||||||
StartupNotify=true
|
StartupNotify=true
|
||||||
StartupWMClass=@APPID@
|
StartupWMClass=com.mitchellh.ghostty
|
||||||
Terminal=false
|
Terminal=false
|
||||||
Actions=new-window;
|
Actions=new-window;
|
||||||
X-GNOME-UsesNotifications=true
|
X-GNOME-UsesNotifications=true
|
||||||
@@ -18,9 +16,7 @@ X-TerminalArgTitle=--title=
|
|||||||
X-TerminalArgAppId=--class=
|
X-TerminalArgAppId=--class=
|
||||||
X-TerminalArgDir=--working-directory=
|
X-TerminalArgDir=--working-directory=
|
||||||
X-TerminalArgHold=--wait-after-command
|
X-TerminalArgHold=--wait-after-command
|
||||||
DBusActivatable=true
|
|
||||||
X-KDE-Shortcuts=Ctrl+Alt+T
|
|
||||||
|
|
||||||
[Desktop Action new-window]
|
[Desktop Action new-window]
|
||||||
Name=New Window
|
Name=New Window
|
||||||
Exec=@GHOSTTY@ --launched-from=desktop
|
Exec=ghostty
|
59
dist/linux/com.mitchellh.ghostty.metainfo.xml.in
vendored
@@ -1,59 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<component type="desktop-application">
|
|
||||||
<id>@APPID@</id>
|
|
||||||
<launchable type="desktop-id">@APPID@.desktop</launchable>
|
|
||||||
<name>@NAME@</name>
|
|
||||||
<url type="homepage">https://ghostty.org</url>
|
|
||||||
<url type="help">https://ghostty.org/docs</url>
|
|
||||||
<url type="bugtracker">https://github.com/ghostty-org/ghostty/discussions</url>
|
|
||||||
<url type="contact">https://ghostty.org/docs/help</url>
|
|
||||||
<url type="contribute">https://github.com/ghostty-org/ghostty/blob/main/CONTRIBUTING.md</url>
|
|
||||||
<url type="translate">https://github.com/ghostty-org/ghostty/blob/main/po/README_TRANSLATORS.md</url>
|
|
||||||
<url type="vcs-browser">https://github.com/ghostty-org/ghostty</url>
|
|
||||||
<summary>Ghostty is a fast, feature-rich, and cross-platform terminal emulator</summary>
|
|
||||||
<metadata_license>MIT</metadata_license>
|
|
||||||
<project_license>MIT</project_license>
|
|
||||||
<content_rating type="oars-1.1" />
|
|
||||||
<developer id="com.mitchellh">
|
|
||||||
<name>Mitchell Hashimoto</name>
|
|
||||||
</developer>
|
|
||||||
<update_contact>m@mitchellh.com</update_contact>
|
|
||||||
<description>
|
|
||||||
<p>
|
|
||||||
Ghostty is a terminal emulator that differentiates itself by being fast,
|
|
||||||
feature-rich, and native. While there are many excellent terminal
|
|
||||||
emulators available, they all force you to choose between speed,
|
|
||||||
features, or native UIs. Ghostty provides all three.
|
|
||||||
</p>
|
|
||||||
</description>
|
|
||||||
<recommends>
|
|
||||||
<control>keyboard</control>
|
|
||||||
<control>pointing</control>
|
|
||||||
</recommends>
|
|
||||||
<requires>
|
|
||||||
<!--
|
|
||||||
Mobile/tablet AND desktop supported
|
|
||||||
|
|
||||||
Ref: https://docs.flathub.org/docs/for-app-authors/metainfo-guidelines#display-size
|
|
||||||
-->
|
|
||||||
<display_length compare="ge">360</display_length>
|
|
||||||
</requires>
|
|
||||||
<translation type="gettext">com.mitchellh.ghostty</translation>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
TODO: Generate manifest location data.
|
|
||||||
|
|
||||||
Ref: https://docs.flathub.org/docs/for-app-authors/metainfo-guidelines#manifest-location
|
|
||||||
|
|
||||||
<custom>
|
|
||||||
<value key="flathub::manifest">https://github.com/ghostty-org/ghostty/blob/<hash>/flatpak/com.mitchellh.ghostty.yml</value>
|
|
||||||
</custom>
|
|
||||||
-->
|
|
||||||
|
|
||||||
<releases>
|
|
||||||
<!-- TODO: Generate this automatically -->
|
|
||||||
<release version="1.0.1" date="2024-12-31">
|
|
||||||
<url type="details">https://ghostty.org/docs/install/release-notes/1-0-1</url>
|
|
||||||
</release>
|
|
||||||
</releases>
|
|
||||||
</component>
|
|
3
dist/linux/dbus.service.flatpak.in
vendored
@@ -1,3 +0,0 @@
|
|||||||
[D-BUS Service]
|
|
||||||
Name=@APPID@
|
|
||||||
Exec=@GHOSTTY@ --launched-from=dbus
|
|
4
dist/linux/dbus.service.in
vendored
@@ -1,4 +0,0 @@
|
|||||||
[D-BUS Service]
|
|
||||||
Name=@APPID@
|
|
||||||
SystemdService=app-@APPID@.service
|
|
||||||
Exec=@GHOSTTY@ --launched-from=dbus
|
|
14
dist/linux/systemd.service.in
vendored
@@ -1,14 +0,0 @@
|
|||||||
[Unit]
|
|
||||||
Description=@NAME@
|
|
||||||
After=graphical-session.target
|
|
||||||
After=dbus.socket
|
|
||||||
Requires=dbus.socket
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=notify-reload
|
|
||||||
ReloadSignal=SIGUSR2
|
|
||||||
BusName=@APPID@
|
|
||||||
ExecStart=@GHOSTTY@ --launched-from=systemd
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=graphical-session.target
|
|
BIN
dist/macos/Ghostty.icns
vendored
Normal file
17
dist/macos/Info.plist
vendored
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleExecutable</key>
|
||||||
|
<string>ghostty</string>
|
||||||
|
<key>CFBundleIdentifier</key>
|
||||||
|
<string>com.mitchellh.ghostty</string>
|
||||||
|
<key>CFBundleName</key>
|
||||||
|
<string>Ghostty</string>
|
||||||
|
<key>CFBundleDisplayName</key>
|
||||||
|
<string>Ghostty</string>
|
||||||
|
<key>CFBundleIconFile</key>
|
||||||
|
<string>Ghostty.icns</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
|
|
60
flake.lock
generated
@@ -3,11 +3,11 @@
|
|||||||
"flake-compat": {
|
"flake-compat": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1747046372,
|
"lastModified": 1733328505,
|
||||||
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
|
"narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=",
|
||||||
"owner": "edolstra",
|
"owner": "edolstra",
|
||||||
"repo": "flake-compat",
|
"repo": "flake-compat",
|
||||||
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
|
"rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -34,24 +34,44 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs-stable": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1748189127,
|
"lastModified": 1741992157,
|
||||||
"narHash": "sha256-zRDR+EbbeObu4V2X5QCd2Bk5eltfDlCr5yvhBwUT6pY=",
|
"narHash": "sha256-nlIfTsTrMSksEJc1f7YexXiPVuzD1gOfeN1ggwZyUoc=",
|
||||||
"rev": "7c43f080a7f28b2774f3b3f43234ca11661bf334",
|
"owner": "nixos",
|
||||||
"type": "tarball",
|
"repo": "nixpkgs",
|
||||||
"url": "https://releases.nixos.org/nixos/25.05/nixos-25.05.802491.7c43f080a7f2/nixexprs.tar.xz"
|
"rev": "da4b122f63095ca1199bd4d526f9e26426697689",
|
||||||
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"type": "tarball",
|
"owner": "nixos",
|
||||||
"url": "https://channels.nixos.org/nixos-25.05/nixexprs.tar.xz"
|
"ref": "release-24.11",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs-unstable": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1741865919,
|
||||||
|
"narHash": "sha256-4thdbnP6dlbdq+qZWTsm4ffAwoS8Tiq1YResB+RP6WE=",
|
||||||
|
"owner": "nixos",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "573c650e8a14b2faa0041645ab18aed7e60f0c9a",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nixos",
|
||||||
|
"ref": "nixpkgs-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"root": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-compat": "flake-compat",
|
"flake-compat": "flake-compat",
|
||||||
"flake-utils": "flake-utils",
|
"flake-utils": "flake-utils",
|
||||||
"nixpkgs": "nixpkgs",
|
"nixpkgs-stable": "nixpkgs-stable",
|
||||||
|
"nixpkgs-unstable": "nixpkgs-unstable",
|
||||||
"zig": "zig",
|
"zig": "zig",
|
||||||
"zon2nix": "zon2nix"
|
"zon2nix": "zon2nix"
|
||||||
}
|
}
|
||||||
@@ -73,22 +93,20 @@
|
|||||||
},
|
},
|
||||||
"zig": {
|
"zig": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-compat": [
|
"flake-compat": [],
|
||||||
"flake-compat"
|
|
||||||
],
|
|
||||||
"flake-utils": [
|
"flake-utils": [
|
||||||
"flake-utils"
|
"flake-utils"
|
||||||
],
|
],
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"nixpkgs"
|
"nixpkgs-stable"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1748261582,
|
"lastModified": 1741825901,
|
||||||
"narHash": "sha256-3i0IL3s18hdDlbsf0/E+5kyPRkZwGPbSFngq5eToiAA=",
|
"narHash": "sha256-aeopo+aXg5I2IksOPFN79usw7AeimH1+tjfuMzJHFdk=",
|
||||||
"owner": "mitchellh",
|
"owner": "mitchellh",
|
||||||
"repo": "zig-overlay",
|
"repo": "zig-overlay",
|
||||||
"rev": "aafb1b093fb838f7a02613b719e85ec912914221",
|
"rev": "0b14285e283f5a747f372fb2931835dd937c4383",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -103,7 +121,7 @@
|
|||||||
"flake-utils"
|
"flake-utils"
|
||||||
],
|
],
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"nixpkgs"
|
"nixpkgs-unstable"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
@@ -116,8 +134,8 @@
|
|||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "jcollie",
|
"owner": "jcollie",
|
||||||
|
"ref": "56c159be489cc6c0e73c3930bd908ddc6fe89613",
|
||||||
"repo": "zon2nix",
|
"repo": "zon2nix",
|
||||||
"rev": "56c159be489cc6c0e73c3930bd908ddc6fe89613",
|
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
45
flake.nix
@@ -2,10 +2,12 @@
|
|||||||
description = "👻";
|
description = "👻";
|
||||||
|
|
||||||
inputs = {
|
inputs = {
|
||||||
|
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixpkgs-unstable";
|
||||||
|
|
||||||
# We want to stay as up to date as possible but need to be careful that the
|
# We want to stay as up to date as possible but need to be careful that the
|
||||||
# glibc versions used by our dependencies from Nix are compatible with the
|
# glibc versions used by our dependencies from Nix are compatible with the
|
||||||
# system glibc that the user is building for.
|
# system glibc that the user is building for.
|
||||||
nixpkgs.url = "https://channels.nixos.org/nixos-25.05/nixexprs.tar.xz";
|
nixpkgs-stable.url = "github:nixos/nixpkgs/release-24.11";
|
||||||
flake-utils.url = "github:numtide/flake-utils";
|
flake-utils.url = "github:numtide/flake-utils";
|
||||||
|
|
||||||
# Used for shell.nix
|
# Used for shell.nix
|
||||||
@@ -17,16 +19,16 @@
|
|||||||
zig = {
|
zig = {
|
||||||
url = "github:mitchellh/zig-overlay";
|
url = "github:mitchellh/zig-overlay";
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.follows = "nixpkgs";
|
nixpkgs.follows = "nixpkgs-stable";
|
||||||
flake-utils.follows = "flake-utils";
|
flake-utils.follows = "flake-utils";
|
||||||
flake-compat.follows = "flake-compat";
|
flake-compat.follows = "";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
zon2nix = {
|
zon2nix = {
|
||||||
url = "github:jcollie/zon2nix?rev=56c159be489cc6c0e73c3930bd908ddc6fe89613";
|
url = "github:jcollie/zon2nix?ref=56c159be489cc6c0e73c3930bd908ddc6fe89613";
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.follows = "nixpkgs";
|
nixpkgs.follows = "nixpkgs-unstable";
|
||||||
flake-utils.follows = "flake-utils";
|
flake-utils.follows = "flake-utils";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -34,19 +36,23 @@
|
|||||||
|
|
||||||
outputs = {
|
outputs = {
|
||||||
self,
|
self,
|
||||||
nixpkgs,
|
nixpkgs-unstable,
|
||||||
|
nixpkgs-stable,
|
||||||
zig,
|
zig,
|
||||||
zon2nix,
|
zon2nix,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
builtins.foldl' nixpkgs.lib.recursiveUpdate {} (
|
builtins.foldl' nixpkgs-stable.lib.recursiveUpdate {} (
|
||||||
builtins.map (
|
builtins.map (
|
||||||
system: let
|
system: let
|
||||||
pkgs = nixpkgs.legacyPackages.${system};
|
pkgs-stable = nixpkgs-stable.legacyPackages.${system};
|
||||||
|
pkgs-unstable = nixpkgs-unstable.legacyPackages.${system};
|
||||||
in {
|
in {
|
||||||
devShell.${system} = pkgs.callPackage ./nix/devShell.nix {
|
devShell.${system} = pkgs-stable.callPackage ./nix/devShell.nix {
|
||||||
zig = zig.packages.${system}."0.14.1";
|
zig = zig.packages.${system}."0.14.0";
|
||||||
wraptest = pkgs.callPackage ./nix/wraptest.nix {};
|
wraptest = pkgs-stable.callPackage ./nix/wraptest.nix {};
|
||||||
|
# remove once blueprint-compiler 0.16.0 is in the stable nixpkgs
|
||||||
|
blueprint-compiler = pkgs-unstable.blueprint-compiler;
|
||||||
zon2nix = zon2nix;
|
zon2nix = zon2nix;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -57,29 +63,30 @@
|
|||||||
revision = self.shortRev or self.dirtyShortRev or "dirty";
|
revision = self.shortRev or self.dirtyShortRev or "dirty";
|
||||||
};
|
};
|
||||||
in rec {
|
in rec {
|
||||||
deps = pkgs.callPackage ./build.zig.zon.nix {};
|
deps = pkgs-unstable.callPackage ./build.zig.zon.nix {};
|
||||||
ghostty-debug = pkgs.callPackage ./nix/package.nix (mkArgs "Debug");
|
ghostty-debug = pkgs-unstable.callPackage ./nix/package.nix (mkArgs "Debug");
|
||||||
ghostty-releasesafe = pkgs.callPackage ./nix/package.nix (mkArgs "ReleaseSafe");
|
ghostty-releasesafe = pkgs-unstable.callPackage ./nix/package.nix (mkArgs "ReleaseSafe");
|
||||||
ghostty-releasefast = pkgs.callPackage ./nix/package.nix (mkArgs "ReleaseFast");
|
ghostty-releasefast = pkgs-unstable.callPackage ./nix/package.nix (mkArgs "ReleaseFast");
|
||||||
|
|
||||||
ghostty = ghostty-releasefast;
|
ghostty = ghostty-releasefast;
|
||||||
default = ghostty;
|
default = ghostty;
|
||||||
};
|
};
|
||||||
|
|
||||||
formatter.${system} = pkgs.alejandra;
|
formatter.${system} = pkgs-stable.alejandra;
|
||||||
|
|
||||||
apps.${system} = let
|
apps.${system} = let
|
||||||
runVM = (
|
runVM = (
|
||||||
module: let
|
module: let
|
||||||
vm = import ./nix/vm/create.nix {
|
vm = import ./nix/vm/create.nix {
|
||||||
inherit system module nixpkgs;
|
inherit system module;
|
||||||
|
nixpkgs = nixpkgs-unstable;
|
||||||
overlay = self.overlays.debug;
|
overlay = self.overlays.debug;
|
||||||
};
|
};
|
||||||
program = pkgs.writeShellScript "run-ghostty-vm" ''
|
program = pkgs-unstable.writeShellScript "run-ghostty-vm" ''
|
||||||
SHARED_DIR=$(pwd)
|
SHARED_DIR=$(pwd)
|
||||||
export SHARED_DIR
|
export SHARED_DIR
|
||||||
|
|
||||||
${pkgs.lib.getExe vm.config.system.build.vm} "$@"
|
${pkgs-unstable.lib.getExe vm.config.system.build.vm} "$@"
|
||||||
'';
|
'';
|
||||||
in {
|
in {
|
||||||
type = "app";
|
type = "app";
|
||||||
|
@@ -1,108 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
#
|
|
||||||
# This script checks if the flatpak/zig-packages.json file is up-to-date.
|
|
||||||
# If the `--update` flag is passed, it will update all necessary
|
|
||||||
# files to be up to date.
|
|
||||||
#
|
|
||||||
# The files owned by this are:
|
|
||||||
#
|
|
||||||
# - flatpak/zig-packages.json
|
|
||||||
#
|
|
||||||
# All of these are auto-generated and should not be edited manually.
|
|
||||||
|
|
||||||
# Nothing in this script should fail.
|
|
||||||
set -eu
|
|
||||||
set -o pipefail
|
|
||||||
|
|
||||||
WORK_DIR=$(mktemp -d)
|
|
||||||
|
|
||||||
if [[ ! "$WORK_DIR" || ! -d "$WORK_DIR" ]]; then
|
|
||||||
echo "could not create temp dir"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
function cleanup {
|
|
||||||
rm -rf "$WORK_DIR"
|
|
||||||
}
|
|
||||||
|
|
||||||
trap cleanup EXIT
|
|
||||||
|
|
||||||
help() {
|
|
||||||
echo ""
|
|
||||||
echo "To fix, please (manually) re-run the script from the repository root,"
|
|
||||||
echo "commit, and submit a PR with the update:"
|
|
||||||
echo ""
|
|
||||||
echo " ./flatpak/build-support/check-zig-cache.sh --update"
|
|
||||||
echo " git add flatpak/zig-packages.json"
|
|
||||||
echo " git commit -m \"flatpak: update zig-packages.json\""
|
|
||||||
echo ""
|
|
||||||
}
|
|
||||||
|
|
||||||
# Turn Nix's base64 hashes into regular hexadecimal form
|
|
||||||
decode_hash() {
|
|
||||||
input=$1
|
|
||||||
input=${input#sha256-}
|
|
||||||
echo "$input" | base64 -d | od -vAn -t x1 | tr -d ' \n'
|
|
||||||
}
|
|
||||||
|
|
||||||
ROOT="$(realpath "$(dirname "$0")/../../")"
|
|
||||||
ZIG_PACKAGES_JSON="$ROOT/flatpak/zig-packages.json"
|
|
||||||
BUILD_ZIG_ZON_JSON="$ROOT/build.zig.zon.json"
|
|
||||||
|
|
||||||
if [ ! -f "${BUILD_ZIG_ZON_JSON}" ]; then
|
|
||||||
echo -e "\nERROR: build.zig.zon2json-lock missing."
|
|
||||||
help
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -f "${ZIG_PACKAGES_JSON}" ]; then
|
|
||||||
OLD_HASH=$(sha512sum "${ZIG_PACKAGES_JSON}" | awk '{print $1}')
|
|
||||||
fi
|
|
||||||
|
|
||||||
while read -r url sha256 dest; do
|
|
||||||
src_type=archive
|
|
||||||
sha256=$(decode_hash "$sha256")
|
|
||||||
git_commit=
|
|
||||||
if [[ "$url" =~ ^git\+* ]]; then
|
|
||||||
src_type=git
|
|
||||||
sha256=
|
|
||||||
url=${url#git+}
|
|
||||||
git_commit=${url##*#}
|
|
||||||
url=${url%%/\?ref*}
|
|
||||||
url=${url%%#*}
|
|
||||||
fi
|
|
||||||
|
|
||||||
jq \
|
|
||||||
-nec \
|
|
||||||
--arg type "$src_type" \
|
|
||||||
--arg url "$url" \
|
|
||||||
--arg git_commit "$git_commit" \
|
|
||||||
--arg dest "$dest" \
|
|
||||||
--arg sha256 "$sha256" \
|
|
||||||
'{
|
|
||||||
type: $type,
|
|
||||||
url: $url,
|
|
||||||
commit: $git_commit,
|
|
||||||
dest: $dest,
|
|
||||||
sha256: $sha256,
|
|
||||||
} | with_entries(select(.value != ""))'
|
|
||||||
done < <(jq -rc 'to_entries[] | [.value.url, .value.hash, "vendor/p/\(.key)"] | @tsv' "$BUILD_ZIG_ZON_JSON") |
|
|
||||||
jq -s '.' >"$WORK_DIR/zig-packages.json"
|
|
||||||
|
|
||||||
NEW_HASH=$(sha512sum "$WORK_DIR/zig-packages.json" | awk '{print $1}')
|
|
||||||
|
|
||||||
if [ "${OLD_HASH}" == "${NEW_HASH}" ]; then
|
|
||||||
echo -e "\nOK: flatpak/zig-packages.json unchanged."
|
|
||||||
exit 0
|
|
||||||
elif [ "${1:-}" != "--update" ]; then
|
|
||||||
echo -e "\nERROR: flatpak/zig-packages.json needs to be updated."
|
|
||||||
echo ""
|
|
||||||
echo " * Old hash: ${OLD_HASH}"
|
|
||||||
echo " * New hash: ${NEW_HASH}"
|
|
||||||
help
|
|
||||||
exit 1
|
|
||||||
else
|
|
||||||
mv "$WORK_DIR/zig-packages.json" "$ZIG_PACKAGES_JSON"
|
|
||||||
echo -e "\nOK: flatpak/zig-packages.json updated."
|
|
||||||
exit 0
|
|
||||||
fi
|
|
@@ -1,61 +0,0 @@
|
|||||||
app-id: com.mitchellh.ghostty-debug
|
|
||||||
runtime: org.gnome.Platform
|
|
||||||
runtime-version: "48"
|
|
||||||
sdk: org.gnome.Sdk
|
|
||||||
sdk-extensions:
|
|
||||||
- org.freedesktop.Sdk.Extension.ziglang
|
|
||||||
default-branch: tip
|
|
||||||
command: ghostty
|
|
||||||
rename-icon: com.mitchellh.ghostty
|
|
||||||
finish-args:
|
|
||||||
# 3D rendering
|
|
||||||
- --device=dri
|
|
||||||
# use host PTS namespace
|
|
||||||
- --device=all
|
|
||||||
# Windowing
|
|
||||||
- --share=ipc
|
|
||||||
- --socket=fallback-x11
|
|
||||||
- --socket=wayland
|
|
||||||
# Allow user to specify additional config files in home by default
|
|
||||||
- --filesystem=home:ro
|
|
||||||
# So we can escape the sandbox
|
|
||||||
- --talk-name=org.freedesktop.Flatpak
|
|
||||||
cleanup:
|
|
||||||
- /include
|
|
||||||
- /lib/girepository-1.0
|
|
||||||
- /lib/pkgconfig
|
|
||||||
- /share/gir-1.0
|
|
||||||
- /share/pkgconfig
|
|
||||||
- /share/vala
|
|
||||||
- "*.la"
|
|
||||||
- "*.a"
|
|
||||||
- "*.so"
|
|
||||||
|
|
||||||
modules:
|
|
||||||
- dependencies.yml
|
|
||||||
|
|
||||||
- name: ghostty
|
|
||||||
buildsystem: simple
|
|
||||||
build-options:
|
|
||||||
append-path: /usr/lib/sdk/ziglang
|
|
||||||
build-commands:
|
|
||||||
- zig build
|
|
||||||
-Doptimize=Debug
|
|
||||||
-Dcpu=baseline
|
|
||||||
-Dflatpak=true
|
|
||||||
-Dstrip=false
|
|
||||||
-fno-sys=oniguruma
|
|
||||||
--prefix /app
|
|
||||||
--search-prefix /app
|
|
||||||
--system $PWD/vendor/p
|
|
||||||
sources:
|
|
||||||
- type: dir
|
|
||||||
path: ..
|
|
||||||
skip:
|
|
||||||
- flatpak/.flatpak-builder
|
|
||||||
- flatpak/builddir
|
|
||||||
- flatpak/repo
|
|
||||||
- zig-cache
|
|
||||||
- zig-out
|
|
||||||
|
|
||||||
- zig-packages.json
|
|
@@ -1,60 +0,0 @@
|
|||||||
app-id: com.mitchellh.ghostty
|
|
||||||
runtime: org.gnome.Platform
|
|
||||||
runtime-version: "48"
|
|
||||||
sdk: org.gnome.Sdk
|
|
||||||
sdk-extensions:
|
|
||||||
- org.freedesktop.Sdk.Extension.ziglang
|
|
||||||
default-branch: tip
|
|
||||||
command: ghostty
|
|
||||||
finish-args:
|
|
||||||
# 3D rendering
|
|
||||||
- --device=dri
|
|
||||||
# use host PTS namespace
|
|
||||||
- --device=all
|
|
||||||
# Windowing
|
|
||||||
- --share=ipc
|
|
||||||
- --socket=fallback-x11
|
|
||||||
- --socket=wayland
|
|
||||||
# Allow user to specify additional config files in home by default
|
|
||||||
- --filesystem=home:ro
|
|
||||||
# So we can escape the sandbox
|
|
||||||
- --talk-name=org.freedesktop.Flatpak
|
|
||||||
cleanup:
|
|
||||||
- /include
|
|
||||||
- /lib/girepository-1.0
|
|
||||||
- /lib/pkgconfig
|
|
||||||
- /share/gir-1.0
|
|
||||||
- /share/pkgconfig
|
|
||||||
- /share/vala
|
|
||||||
- "*.la"
|
|
||||||
- "*.a"
|
|
||||||
- "*.so"
|
|
||||||
|
|
||||||
modules:
|
|
||||||
- dependencies.yml
|
|
||||||
|
|
||||||
- name: ghostty
|
|
||||||
buildsystem: simple
|
|
||||||
build-options:
|
|
||||||
append-path: /usr/lib/sdk/ziglang
|
|
||||||
build-commands:
|
|
||||||
- zig build
|
|
||||||
-Doptimize=ReleaseFast
|
|
||||||
-Dcpu=baseline
|
|
||||||
-Dflatpak=true
|
|
||||||
-Dstrip=false
|
|
||||||
-fno-sys=oniguruma
|
|
||||||
--prefix /app
|
|
||||||
--search-prefix /app
|
|
||||||
--system $PWD/vendor/p
|
|
||||||
sources:
|
|
||||||
- type: dir
|
|
||||||
path: ..
|
|
||||||
skip:
|
|
||||||
- flatpak/.flatpak-builder
|
|
||||||
- flatpak/builddir
|
|
||||||
- flatpak/repo
|
|
||||||
- zig-cache
|
|
||||||
- zig-out
|
|
||||||
|
|
||||||
- zig-packages.json
|
|
@@ -1,66 +0,0 @@
|
|||||||
name: dependencies-meta
|
|
||||||
buildsystem: simple
|
|
||||||
build-commands:
|
|
||||||
- true
|
|
||||||
modules:
|
|
||||||
- name: bzip2-redirect
|
|
||||||
buildsystem: simple
|
|
||||||
build-commands:
|
|
||||||
- install -Dm644 libbzip2.so /app/lib/libbzip2.so
|
|
||||||
sources:
|
|
||||||
- type: inline
|
|
||||||
contents: INPUT(libbz2.so)
|
|
||||||
dest-filename: libbzip2.so
|
|
||||||
|
|
||||||
- name: blueprint-compiler
|
|
||||||
buildsystem: meson
|
|
||||||
cleanup:
|
|
||||||
- "*"
|
|
||||||
sources:
|
|
||||||
- type: git
|
|
||||||
url: https://gitlab.gnome.org/jwestman/blueprint-compiler.git
|
|
||||||
tag: v0.16.0
|
|
||||||
commit: 04ef0944db56ab01307a29aaa7303df6067cb3c0
|
|
||||||
x-checker-data:
|
|
||||||
type: git
|
|
||||||
tag-pattern: ^v([\d.]+)$
|
|
||||||
|
|
||||||
- name: gtk4-layer-shell
|
|
||||||
buildsystem: meson
|
|
||||||
sources:
|
|
||||||
# no x-checker-data since this should be synchronized with Nix
|
|
||||||
#
|
|
||||||
# TODO: Automate this with check-zig-cache.sh
|
|
||||||
- type: archive
|
|
||||||
url: https://github.com/wmww/gtk4-layer-shell/archive/refs/tags/v1.1.0.tar.gz
|
|
||||||
sha256: 98284281260a5eef5b4f63a55f16c4bf6a788a1020a6db037ecb0f71fa336988
|
|
||||||
|
|
||||||
- name: pandoc
|
|
||||||
buildsystem: simple
|
|
||||||
cleanup:
|
|
||||||
- "*"
|
|
||||||
build-commands:
|
|
||||||
- install -Dm755 bin/pandoc /app/bin/pandoc
|
|
||||||
sources:
|
|
||||||
- type: archive
|
|
||||||
sha256: d04c95c138202f87d6b00ac19aa3dd874c681f60a9feb3b55c74f764d6d1a17d
|
|
||||||
url: https://github.com/jgm/pandoc/releases/download/3.6.3/pandoc-3.6.3-linux-amd64.tar.gz
|
|
||||||
only-arches: [x86_64]
|
|
||||||
x-checker-data:
|
|
||||||
type: json
|
|
||||||
url: https://api.github.com/repos/jgm/pandoc/releases/latest
|
|
||||||
url-query:
|
|
||||||
.assets[] | select(.name=="pandoc-" + $version + "-linux-amd64.tar.gz")
|
|
||||||
| .browser_download_url
|
|
||||||
version-query: .tag_name
|
|
||||||
- type: archive
|
|
||||||
sha256: 4e774cb1bdb6e56bc55b8eb79200bd9aa6a39905a04ecda7267f5149116f0881
|
|
||||||
url: https://github.com/jgm/pandoc/releases/download/3.6.3/pandoc-3.6.3-linux-arm64.tar.gz
|
|
||||||
only-arches: [aarch64]
|
|
||||||
x-checker-data:
|
|
||||||
type: json
|
|
||||||
url: https://api.github.com/repos/jgm/pandoc/releases/latest
|
|
||||||
url-query:
|
|
||||||
.assets[] | select(.name=="pandoc-" + $version + "-linux-arm64.tar.gz")
|
|
||||||
| .browser_download_url
|
|
||||||
version-query: .tag_name
|
|
@@ -1,3 +0,0 @@
|
|||||||
{
|
|
||||||
"com.mitchellh.ghostty": ["finish-args-flatpak-spawn-access"]
|
|
||||||
}
|
|
@@ -1,212 +0,0 @@
|
|||||||
[
|
|
||||||
{
|
|
||||||
"type": "archive",
|
|
||||||
"url": "https://deps.files.ghostty.org/breakpad-b99f444ba5f6b98cac261cbb391d8766b34a5918.tar.gz",
|
|
||||||
"dest": "vendor/p/N-V-__8AALw2uwF_03u4JRkZwRLc3Y9hakkYV7NKRR9-RIZJ",
|
|
||||||
"sha256": "6cca98943d1a990766cef61077c09aff5938063fe17a1efe1228e5412b6d6ad9"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "archive",
|
|
||||||
"url": "https://deps.files.ghostty.org/fontconfig-2.14.2.tar.gz",
|
|
||||||
"dest": "vendor/p/N-V-__8AAIrfdwARSa-zMmxWwFuwpXf1T3asIN7s5jqi9c1v",
|
|
||||||
"sha256": "3ba2dd92158718acec5caaf1a716043b5aa055c27b081d914af3ccb40dce8a55"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "archive",
|
|
||||||
"url": "https://deps.files.ghostty.org/freetype-1220b81f6ecfb3fd222f76cf9106fecfa6554ab07ec7fdc4124b9bb063ae2adf969d.tar.gz",
|
|
||||||
"dest": "vendor/p/N-V-__8AAKLKpwC4H27Ps_0iL3bPkQb-z6ZVSrB-x_3EEkub",
|
|
||||||
"sha256": "427201f5d5151670d05c1f5b45bef5dda1f2e7dd971ef54f0feaaa7ffd2ab90c"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "archive",
|
|
||||||
"url": "https://deps.files.ghostty.org/gettext-0.24.tar.gz",
|
|
||||||
"dest": "vendor/p/N-V-__8AADcZkgn4cMhTUpIz6mShCKyqqB-NBtf_S2bHaTC-",
|
|
||||||
"sha256": "c918503d593d70daf4844d175a13d816afacb667c06fba1ec9dcd5002c1518b7"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "archive",
|
|
||||||
"url": "https://deps.files.ghostty.org/glslang-12201278a1a05c0ce0b6eb6026c65cd3e9247aa041b1c260324bf29cee559dd23ba1.tar.gz",
|
|
||||||
"dest": "vendor/p/N-V-__8AABzkUgISeKGgXAzgtutgJsZc0-kkeqBBscJgMkvy",
|
|
||||||
"sha256": "14a2edbb509cb3e51a9a53e3f5e435dbf5971604b4b833e63e6076e8c0a997b5"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "archive",
|
|
||||||
"url": "https://github.com/jcollie/ghostty-gobject/releases/download/0.14.1-2025-08-09-37-1/ghostty-gobject-0.14.1-2025-08-09-37-1.tar.zst",
|
|
||||||
"dest": "vendor/p/gobject-0.3.0-Skun7AngnABC2BPiaoobs6YSSzSgMuEIcjb2rYrRyaAM",
|
|
||||||
"sha256": "074ce22f32ae77e91d2aee53d414c4f46321f043ccfca861868349972b3940f2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "archive",
|
|
||||||
"url": "https://deps.files.ghostty.org/gtk4-layer-shell-1.1.0.tar.gz",
|
|
||||||
"dest": "vendor/p/N-V-__8AALiNBAA-_0gprYr92CjrMj1I5bqNu0TSJOnjFNSr",
|
|
||||||
"sha256": "98284281260a5eef5b4f63a55f16c4bf6a788a1020a6db037ecb0f71fa336988"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "archive",
|
|
||||||
"url": "https://deps.files.ghostty.org/harfbuzz-11.0.0.tar.xz",
|
|
||||||
"dest": "vendor/p/N-V-__8AAG02ugUcWec-Ndp-i7JTsJ0dgF8nnJRUInkGLG7G",
|
|
||||||
"sha256": "f16351bafe214725fe2c1d5b59f0d93e49905a4b247899fb90d70cff953a2b9b"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "archive",
|
|
||||||
"url": "https://deps.files.ghostty.org/highway-66486a10623fa0d72fe91260f96c892e41aceb06.tar.gz",
|
|
||||||
"dest": "vendor/p/N-V-__8AAGmZhABbsPJLfbqrh6JTHsXhY6qCaLAQyx25e0XE",
|
|
||||||
"sha256": "87d4f8893ef4e08f224973608ffebf94268a81380ba79c12e8841968c80aa212"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "archive",
|
|
||||||
"url": "https://deps.files.ghostty.org/imgui-1220bc6b9daceaf7c8c60f3c3998058045ba0c5c5f48ae255ff97776d9cd8bfc6402.tar.gz",
|
|
||||||
"dest": "vendor/p/N-V-__8AAH0GaQC8a52s6vfIxg88OZgFgEW6DFxfSK4lX_l3",
|
|
||||||
"sha256": "a05fd01e04cf11ab781e28387c621d2e420f1e6044c8e27a25e603ea99ef7860"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "archive",
|
|
||||||
"url": "https://github.com/mbadolato/iTerm2-Color-Schemes/archive/3cbeca99efa10beba24b0efe86331736f09f9ed1.tar.gz",
|
|
||||||
"dest": "vendor/p/N-V-__8AABemXQQj_VhMpwuOSOiSzywW_yGD6aEL9YGI9uBu",
|
|
||||||
"sha256": "825e3634e679f6893eba61c21db7414215828055698f93c06435468494696e20"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "archive",
|
|
||||||
"url": "https://deps.files.ghostty.org/JetBrainsMono-2.304.tar.gz",
|
|
||||||
"dest": "vendor/p/N-V-__8AAIC5lwAVPJJzxnCAahSvZTIlG-HhtOvnM1uh-66x",
|
|
||||||
"sha256": "c57a691e8b82ad098b5963f3959032e4038f391087af7715885ba59046105cc4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "archive",
|
|
||||||
"url": "https://deps.files.ghostty.org/libpng-1220aa013f0c83da3fb64ea6d327f9173fa008d10e28bc9349eac3463457723b1c66.tar.gz",
|
|
||||||
"dest": "vendor/p/N-V-__8AAJrvXQCqAT8Mg9o_tk6m0yf5Fz-gCNEOKLyTSerD",
|
|
||||||
"sha256": "fecc95b46cf05e8e3fc8a414750e0ba5aad00d89e9fdf175e94ff041caf1a03a"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "archive",
|
|
||||||
"url": "https://github.com/mitchellh/libxev/archive/7f803181b158a10fec8619f793e3b4df515566cb.tar.gz",
|
|
||||||
"dest": "vendor/p/libxev-0.0.0-86vtc2UaEwDfiTKX3iBI-s_hdzfzWQUarT3MUrmUQl-Q",
|
|
||||||
"sha256": "29aa3360a121853ffab089de7fbffc3bfeb42c304937ef1099d2ee358d469267"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "archive",
|
|
||||||
"url": "https://deps.files.ghostty.org/libxml2-2.11.5.tar.gz",
|
|
||||||
"dest": "vendor/p/N-V-__8AAG3RoQEyRC2Vw7Qoro5SYBf62IHn3HjqtNVY6aWK",
|
|
||||||
"sha256": "6c28059e2e3eeb42b5b4b16489e3916a6346c1095a74fee3bc65cdc5d89a6215"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "archive",
|
|
||||||
"url": "https://deps.files.ghostty.org/NerdFontsSymbolsOnly-3.4.0.tar.gz",
|
|
||||||
"dest": "vendor/p/N-V-__8AAMVLTABmYkLqhZPLXnMl-KyN38R8UVYqGrxqO26s",
|
|
||||||
"sha256": "1164d1b956d4bde248d7b2f0998c43cc94f5202431a1564a793895b1e73b0d04"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "archive",
|
|
||||||
"url": "https://deps.files.ghostty.org/oniguruma-1220c15e72eadd0d9085a8af134904d9a0f5dfcbed5f606ad60edc60ebeccd9706bb.tar.gz",
|
|
||||||
"dest": "vendor/p/N-V-__8AAHjwMQDBXnLq3Q2QhaivE0kE2aD138vtX2Bq1g7c",
|
|
||||||
"sha256": "001aa1202e78448f4c0bf1a48c76e556876b36f16d92ce3207eccfd61d99f2a0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "archive",
|
|
||||||
"url": "https://deps.files.ghostty.org/pixels-12207ff340169c7d40c570b4b6a97db614fe47e0d83b5801a932dcd44917424c8806.tar.gz",
|
|
||||||
"dest": "vendor/p/N-V-__8AADYiAAB_80AWnH1AxXC0tql9thT-R-DYO1gBqTLc",
|
|
||||||
"sha256": "55e83b16d091082502bf149bf457f31f42092c5982650e3ffbae7b48871bf11a"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "archive",
|
|
||||||
"url": "https://deps.files.ghostty.org/plasma_wayland_protocols-12207e0851c12acdeee0991e893e0132fc87bb763969a585dc16ecca33e88334c566.tar.gz",
|
|
||||||
"dest": "vendor/p/N-V-__8AAKYZBAB-CFHBKs3u4JkeiT4BMvyHu3Y5aaWF3Bbs",
|
|
||||||
"sha256": "5c58ba214acd8e6bca3426dc08b022c46a8dd997b29a1b3e28badf71c20df441"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "archive",
|
|
||||||
"url": "https://deps.files.ghostty.org/sentry-1220446be831adcca918167647c06c7b825849fa3fba5f22da394667974537a9c77e.tar.gz",
|
|
||||||
"dest": "vendor/p/N-V-__8AAPlZGwBEa-gxrcypGBZ2R8Bse4JYSfo_ul8i2jlG",
|
|
||||||
"sha256": "2ac6497cc8d61a8d31093e47addb8c9b2c45b16b0705bb334a835b6423c318df"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "archive",
|
|
||||||
"url": "https://deps.files.ghostty.org/spirv_cross-1220fb3b5586e8be67bc3feb34cbe749cf42a60d628d2953632c2f8141302748c8da.tar.gz",
|
|
||||||
"dest": "vendor/p/N-V-__8AANb6pwD7O1WG6L5nvD_rNMvnSc9Cpg1ijSlTYywv",
|
|
||||||
"sha256": "b52b6fcfc45e7fa69b1f06a1362c155473444e2cc09995556b156c53ba6657e3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "archive",
|
|
||||||
"url": "https://deps.files.ghostty.org/utfcpp-1220d4d18426ca72fc2b7e56ce47273149815501d0d2395c2a98c726b31ba931e641.tar.gz",
|
|
||||||
"dest": "vendor/p/N-V-__8AAHffAgDU0YQmynL8K35WzkcnMUmBVQHQ0jlcKpjH",
|
|
||||||
"sha256": "ffc668a310e77607d393f3c18b32715f223da1eac4c4d6e0579a11df8e6b59cf"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/rockorager/libvaxis",
|
|
||||||
"commit": "1f41c121e8fc153d9ce8c6eb64b2bbab68ad7d23",
|
|
||||||
"dest": "vendor/p/vaxis-0.1.0-BWNV_FUICQAFZnTCL11TUvnUr1Y0_ZdqtXHhd51d76Rn"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "archive",
|
|
||||||
"url": "https://deps.files.ghostty.org/wayland-9cb3d7aa9dc995ffafdbdef7ab86a949d0fb0e7d.tar.gz",
|
|
||||||
"dest": "vendor/p/N-V-__8AAKrHGAAs2shYq8UkE6bGcR1QJtLTyOE_lcosMn6t",
|
|
||||||
"sha256": "ea4191d68e437677e51f3aacde27829810144e931d397a327dc6035e2c39c50d"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "archive",
|
|
||||||
"url": "https://deps.files.ghostty.org/wayland-protocols-258d8f88f2c8c25a830c6316f87d23ce1a0f12d9.tar.gz",
|
|
||||||
"dest": "vendor/p/N-V-__8AAKw-DAAaV8bOAAGqA0-oD7o-HNIlPFYKRXSPT03S",
|
|
||||||
"sha256": "5cedcadde81b75e60f23e5e83b5dd2b8eb4efb9f8f79bd7a347d148aeb0530f8"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "archive",
|
|
||||||
"url": "https://deps.files.ghostty.org/wuffs-122037b39d577ec2db3fd7b2130e7b69ef6cc1807d68607a7c232c958315d381b5cd.tar.gz",
|
|
||||||
"dest": "vendor/p/N-V-__8AAAzZywE3s51XfsLbP9eyEw57ae9swYB9aGB6fCMs",
|
|
||||||
"sha256": "9e4cd20abe96e6c4c6ede9c3057108860126e7be2e2c3e35515476c250be1c13"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "archive",
|
|
||||||
"url": "https://github.com/vancluever/z2d/archive/8bbd035f4101f02b1d27947def0d7da3215df7fe.tar.gz",
|
|
||||||
"dest": "vendor/p/z2d-0.7.0-j5P_Hg_DDACq-2H2Zh7rAq6_TXWdQzv7JAUfnrdeDosg",
|
|
||||||
"sha256": "c1f69d7a07a2c5c6e0c51cd1b5fe8cd87df8093baf0ccdb65d5221bae7c5046e"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "archive",
|
|
||||||
"url": "https://github.com/natecraddock/zf/archive/7aacbe6d155d64d15937ca95ca6c014905eb531f.tar.gz",
|
|
||||||
"dest": "vendor/p/zf-0.10.3-OIRy8aiIAACLrBllz0zjxaH0aOe5oNm3KtEMyCntST-9",
|
|
||||||
"sha256": "de7ba535077fe2b678a5a7972585f002588d37244db08397feadf3d4907c0bb2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://codeberg.org/atman/zg",
|
|
||||||
"commit": "4a002763419a34d61dcbb1f415821b83b9bf8ddc",
|
|
||||||
"dest": "vendor/p/zg-0.13.4-AAAAAGiZ7QLz4pvECFa_wG4O4TP4FLABHHbemH2KakWM"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "archive",
|
|
||||||
"url": "https://deps.files.ghostty.org/zig_js-12205a66d423259567764fa0fc60c82be35365c21aeb76c5a7dc99698401f4f6fefc.tar.gz",
|
|
||||||
"dest": "vendor/p/N-V-__8AAB9YCQBaZtQjJZVndk-g_GDIK-NTZcIa63bFp9yZ",
|
|
||||||
"sha256": "7f235e0956c2f5401a28963a261019953d00e3bf4cfc029830f2161196c3583d"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "archive",
|
|
||||||
"url": "https://github.com/mitchellh/zig-objc/archive/c9e917a4e15a983b672ca779c7985d738a2d517c.tar.gz",
|
|
||||||
"dest": "vendor/p/zig_objc-0.0.0-Ir_SpwsPAQBJgi9YRm2ubJMfdoysSq5gKpsIj3izQ8Zk",
|
|
||||||
"sha256": "a37be5eea7e44a2d1b2976ba256b85f76a8c1063fc01ffec85c8a9e67468e4dc"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "archive",
|
|
||||||
"url": "https://codeberg.org/ifreund/zig-wayland/archive/f3c5d503e540ada8cbcb056420de240af0c094f7.tar.gz",
|
|
||||||
"dest": "vendor/p/wayland-0.4.0-dev-lQa1kjfIAQCmhhQu3xF0KH-94-TzeMXOqfnP0-Dg6Wyy",
|
|
||||||
"sha256": "13bec6675e403d86db3b55b39ae262f1e1bdfe24056dcd82824341c6308b5219"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/TUSF/zigimg",
|
|
||||||
"commit": "31268548fe3276c0e95f318a6c0d2ab10565b58d",
|
|
||||||
"dest": "vendor/p/zigimg-0.1.0-lly-O6N2EABOxke8dqyzCwhtUCAafqP35zC7wsZ4Ddxj"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "archive",
|
|
||||||
"url": "https://deps.files.ghostty.org/ziglyph-b89d43d1e3fb01b6074bc1f7fc980324b04d26a5.tar.gz",
|
|
||||||
"dest": "vendor/p/ziglyph-0.11.2-AAAAAHPtHwB4Mbzn1KvOV7Wpjo82NYEc_v0WC8oCLrkf",
|
|
||||||
"sha256": "72c7bdf3e16df105235fe3fcf32c987dac49389190f4ced89b0ee31710f3f3d9"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "archive",
|
|
||||||
"url": "https://deps.files.ghostty.org/zlib-1220fed0c74e1019b3ee29edae2051788b080cd96e90d56836eea857b0b966742efb.tar.gz",
|
|
||||||
"dest": "vendor/p/N-V-__8AAB0eQwD-0MdOEBmz7intriBReIsIDNlukNVoNu6o",
|
|
||||||
"sha256": "17e88863f3600672ab49182f217281b6fc4d3c762bde361935e436a95214d05c"
|
|
||||||
}
|
|
||||||
]
|
|
Before Width: | Height: | Size: 104 KiB |
Before Width: | Height: | Size: 426 KiB |
Before Width: | Height: | Size: 90 KiB |
Before Width: | Height: | Size: 140 KiB |
Before Width: | Height: | Size: 3.3 KiB |
@@ -1,170 +0,0 @@
|
|||||||
{
|
|
||||||
"color-space-for-untagged-svg-colors" : "display-p3",
|
|
||||||
"fill" : {
|
|
||||||
"linear-gradient" : [
|
|
||||||
"display-p3:0.87945,0.87945,0.87945,1.00000",
|
|
||||||
"display-p3:0.40000,0.40000,0.40392,1.00000"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"groups" : [
|
|
||||||
{
|
|
||||||
"blend-mode" : "normal",
|
|
||||||
"layers" : [
|
|
||||||
{
|
|
||||||
"blend-mode" : "overlay",
|
|
||||||
"fill" : {
|
|
||||||
"linear-gradient" : [
|
|
||||||
"srgb:1.00000,1.00000,1.00000,1.00000",
|
|
||||||
"srgb:0.00000,0.00000,0.00000,1.00000"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"hidden" : false,
|
|
||||||
"image-name" : "gloss.png",
|
|
||||||
"name" : "GlossTop",
|
|
||||||
"opacity" : 0.25,
|
|
||||||
"position" : {
|
|
||||||
"scale" : 0.98,
|
|
||||||
"translation-in-points" : [
|
|
||||||
0.90625,
|
|
||||||
-236.4609375
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"blend-mode" : "normal",
|
|
||||||
"fill" : "automatic",
|
|
||||||
"hidden" : false,
|
|
||||||
"image-name" : "gloss.png",
|
|
||||||
"name" : "gloss",
|
|
||||||
"position" : {
|
|
||||||
"scale" : 0.98,
|
|
||||||
"translation-in-points" : [
|
|
||||||
0.90625,
|
|
||||||
-236.4609375
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"lighting" : "individual",
|
|
||||||
"name" : "Group 4",
|
|
||||||
"shadow" : {
|
|
||||||
"kind" : "neutral",
|
|
||||||
"opacity" : 0.5
|
|
||||||
},
|
|
||||||
"translucency" : {
|
|
||||||
"enabled" : true,
|
|
||||||
"value" : 0.5
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"blend-mode" : "overlay",
|
|
||||||
"layers" : [
|
|
||||||
{
|
|
||||||
"blend-mode" : "overlay",
|
|
||||||
"fill" : "automatic",
|
|
||||||
"glass" : false,
|
|
||||||
"hidden" : false,
|
|
||||||
"image-name" : "Screen Effects.png",
|
|
||||||
"name" : "Screen Effects"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"blend-mode" : "overlay",
|
|
||||||
"fill" : "automatic",
|
|
||||||
"glass" : true,
|
|
||||||
"hidden" : false,
|
|
||||||
"image-name" : "Screen Effects.png",
|
|
||||||
"name" : "Screen Effects"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"lighting" : "individual",
|
|
||||||
"name" : "Group 3",
|
|
||||||
"shadow" : {
|
|
||||||
"kind" : "neutral",
|
|
||||||
"opacity" : 0.5
|
|
||||||
},
|
|
||||||
"translucency" : {
|
|
||||||
"enabled" : false,
|
|
||||||
"value" : 0.5
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"blur-material" : null,
|
|
||||||
"layers" : [
|
|
||||||
{
|
|
||||||
"blend-mode" : "normal",
|
|
||||||
"fill" : "automatic",
|
|
||||||
"hidden" : false,
|
|
||||||
"image-name" : "Ghostty.png",
|
|
||||||
"name" : "Ghostty",
|
|
||||||
"position" : {
|
|
||||||
"scale" : 1,
|
|
||||||
"translation-in-points" : [
|
|
||||||
-185.015625,
|
|
||||||
-143.8359375
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"blend-mode" : "normal",
|
|
||||||
"fill" : {
|
|
||||||
"solid" : "extended-srgb:0.00000,0.47843,1.00000,1.00000"
|
|
||||||
},
|
|
||||||
"glass" : true,
|
|
||||||
"hidden" : false,
|
|
||||||
"image-name" : "Ghostty.png",
|
|
||||||
"name" : "GhosttyBlur",
|
|
||||||
"position" : {
|
|
||||||
"scale" : 1,
|
|
||||||
"translation-in-points" : [
|
|
||||||
-186.59375,
|
|
||||||
-143.8359375
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"hidden" : false,
|
|
||||||
"image-name" : "Screen.png",
|
|
||||||
"name" : "Screen"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"lighting" : "individual",
|
|
||||||
"name" : "Group 2",
|
|
||||||
"shadow" : {
|
|
||||||
"kind" : "neutral",
|
|
||||||
"opacity" : 0.5
|
|
||||||
},
|
|
||||||
"translucency" : {
|
|
||||||
"enabled" : false,
|
|
||||||
"value" : 0.5
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"blend-mode" : "normal",
|
|
||||||
"blur-material" : null,
|
|
||||||
"hidden" : false,
|
|
||||||
"layers" : [
|
|
||||||
{
|
|
||||||
"image-name" : "Inner Bevel 6px.png",
|
|
||||||
"name" : "Inner Bevel 6px"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"lighting" : "individual",
|
|
||||||
"name" : "Group 1",
|
|
||||||
"shadow" : {
|
|
||||||
"kind" : "layer-color",
|
|
||||||
"opacity" : 0.2
|
|
||||||
},
|
|
||||||
"specular" : false,
|
|
||||||
"translucency" : {
|
|
||||||
"enabled" : false,
|
|
||||||
"value" : 0.5
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"supported-platforms" : {
|
|
||||||
"circles" : [
|
|
||||||
"watchOS"
|
|
||||||
],
|
|
||||||
"squares" : "shared"
|
|
||||||
}
|
|
||||||
}
|
|
Before Width: | Height: | Size: 298 KiB |
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 572 B |
Before Width: | Height: | Size: 802 KiB |
Before Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 117 KiB |
Before Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 211 KiB |
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 653 B |
Before Width: | Height: | Size: 496 KiB |
Before Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 208 KiB |
Before Width: | Height: | Size: 4.0 KiB |
Before Width: | Height: | Size: 2.3 MiB After Width: | Height: | Size: 454 KiB |
Before Width: | Height: | Size: 2.3 MiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 232 KiB After Width: | Height: | Size: 67 KiB |
Before Width: | Height: | Size: 232 KiB After Width: | Height: | Size: 216 KiB |
Before Width: | Height: | Size: 652 KiB After Width: | Height: | Size: 216 KiB |
Before Width: | Height: | Size: 652 KiB |
@@ -103,30 +103,10 @@ typedef enum {
|
|||||||
GHOSTTY_ACTION_REPEAT,
|
GHOSTTY_ACTION_REPEAT,
|
||||||
} ghostty_input_action_e;
|
} ghostty_input_action_e;
|
||||||
|
|
||||||
// Based on: https://www.w3.org/TR/uievents-code/
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
GHOSTTY_KEY_UNIDENTIFIED,
|
GHOSTTY_KEY_INVALID,
|
||||||
|
|
||||||
// "Writing System Keys" § 3.1.1
|
// a-z
|
||||||
GHOSTTY_KEY_BACKQUOTE,
|
|
||||||
GHOSTTY_KEY_BACKSLASH,
|
|
||||||
GHOSTTY_KEY_BRACKET_LEFT,
|
|
||||||
GHOSTTY_KEY_BRACKET_RIGHT,
|
|
||||||
GHOSTTY_KEY_COMMA,
|
|
||||||
GHOSTTY_KEY_DIGIT_0,
|
|
||||||
GHOSTTY_KEY_DIGIT_1,
|
|
||||||
GHOSTTY_KEY_DIGIT_2,
|
|
||||||
GHOSTTY_KEY_DIGIT_3,
|
|
||||||
GHOSTTY_KEY_DIGIT_4,
|
|
||||||
GHOSTTY_KEY_DIGIT_5,
|
|
||||||
GHOSTTY_KEY_DIGIT_6,
|
|
||||||
GHOSTTY_KEY_DIGIT_7,
|
|
||||||
GHOSTTY_KEY_DIGIT_8,
|
|
||||||
GHOSTTY_KEY_DIGIT_9,
|
|
||||||
GHOSTTY_KEY_EQUAL,
|
|
||||||
GHOSTTY_KEY_INTL_BACKSLASH,
|
|
||||||
GHOSTTY_KEY_INTL_RO,
|
|
||||||
GHOSTTY_KEY_INTL_YEN,
|
|
||||||
GHOSTTY_KEY_A,
|
GHOSTTY_KEY_A,
|
||||||
GHOSTTY_KEY_B,
|
GHOSTTY_KEY_B,
|
||||||
GHOSTTY_KEY_C,
|
GHOSTTY_KEY_C,
|
||||||
@@ -153,91 +133,56 @@ typedef enum {
|
|||||||
GHOSTTY_KEY_X,
|
GHOSTTY_KEY_X,
|
||||||
GHOSTTY_KEY_Y,
|
GHOSTTY_KEY_Y,
|
||||||
GHOSTTY_KEY_Z,
|
GHOSTTY_KEY_Z,
|
||||||
GHOSTTY_KEY_MINUS,
|
|
||||||
GHOSTTY_KEY_PERIOD,
|
// numbers
|
||||||
GHOSTTY_KEY_QUOTE,
|
GHOSTTY_KEY_ZERO,
|
||||||
|
GHOSTTY_KEY_ONE,
|
||||||
|
GHOSTTY_KEY_TWO,
|
||||||
|
GHOSTTY_KEY_THREE,
|
||||||
|
GHOSTTY_KEY_FOUR,
|
||||||
|
GHOSTTY_KEY_FIVE,
|
||||||
|
GHOSTTY_KEY_SIX,
|
||||||
|
GHOSTTY_KEY_SEVEN,
|
||||||
|
GHOSTTY_KEY_EIGHT,
|
||||||
|
GHOSTTY_KEY_NINE,
|
||||||
|
|
||||||
|
// puncuation
|
||||||
GHOSTTY_KEY_SEMICOLON,
|
GHOSTTY_KEY_SEMICOLON,
|
||||||
GHOSTTY_KEY_SLASH,
|
|
||||||
|
|
||||||
// "Functional Keys" § 3.1.2
|
|
||||||
GHOSTTY_KEY_ALT_LEFT,
|
|
||||||
GHOSTTY_KEY_ALT_RIGHT,
|
|
||||||
GHOSTTY_KEY_BACKSPACE,
|
|
||||||
GHOSTTY_KEY_CAPS_LOCK,
|
|
||||||
GHOSTTY_KEY_CONTEXT_MENU,
|
|
||||||
GHOSTTY_KEY_CONTROL_LEFT,
|
|
||||||
GHOSTTY_KEY_CONTROL_RIGHT,
|
|
||||||
GHOSTTY_KEY_ENTER,
|
|
||||||
GHOSTTY_KEY_META_LEFT,
|
|
||||||
GHOSTTY_KEY_META_RIGHT,
|
|
||||||
GHOSTTY_KEY_SHIFT_LEFT,
|
|
||||||
GHOSTTY_KEY_SHIFT_RIGHT,
|
|
||||||
GHOSTTY_KEY_SPACE,
|
GHOSTTY_KEY_SPACE,
|
||||||
GHOSTTY_KEY_TAB,
|
GHOSTTY_KEY_APOSTROPHE,
|
||||||
GHOSTTY_KEY_CONVERT,
|
GHOSTTY_KEY_COMMA,
|
||||||
GHOSTTY_KEY_KANA_MODE,
|
GHOSTTY_KEY_GRAVE_ACCENT, // `
|
||||||
GHOSTTY_KEY_NON_CONVERT,
|
GHOSTTY_KEY_PERIOD,
|
||||||
|
GHOSTTY_KEY_SLASH,
|
||||||
|
GHOSTTY_KEY_MINUS,
|
||||||
|
GHOSTTY_KEY_PLUS,
|
||||||
|
GHOSTTY_KEY_EQUAL,
|
||||||
|
GHOSTTY_KEY_LEFT_BRACKET, // [
|
||||||
|
GHOSTTY_KEY_RIGHT_BRACKET, // ]
|
||||||
|
GHOSTTY_KEY_BACKSLASH, // \
|
||||||
|
|
||||||
// "Control Pad Section" § 3.2
|
// control
|
||||||
GHOSTTY_KEY_DELETE,
|
GHOSTTY_KEY_UP,
|
||||||
GHOSTTY_KEY_END,
|
GHOSTTY_KEY_DOWN,
|
||||||
GHOSTTY_KEY_HELP,
|
GHOSTTY_KEY_RIGHT,
|
||||||
|
GHOSTTY_KEY_LEFT,
|
||||||
GHOSTTY_KEY_HOME,
|
GHOSTTY_KEY_HOME,
|
||||||
|
GHOSTTY_KEY_END,
|
||||||
GHOSTTY_KEY_INSERT,
|
GHOSTTY_KEY_INSERT,
|
||||||
GHOSTTY_KEY_PAGE_DOWN,
|
GHOSTTY_KEY_DELETE,
|
||||||
GHOSTTY_KEY_PAGE_UP,
|
GHOSTTY_KEY_CAPS_LOCK,
|
||||||
|
GHOSTTY_KEY_SCROLL_LOCK,
|
||||||
// "Arrow Pad Section" § 3.3
|
|
||||||
GHOSTTY_KEY_ARROW_DOWN,
|
|
||||||
GHOSTTY_KEY_ARROW_LEFT,
|
|
||||||
GHOSTTY_KEY_ARROW_RIGHT,
|
|
||||||
GHOSTTY_KEY_ARROW_UP,
|
|
||||||
|
|
||||||
// "Numpad Section" § 3.4
|
|
||||||
GHOSTTY_KEY_NUM_LOCK,
|
GHOSTTY_KEY_NUM_LOCK,
|
||||||
GHOSTTY_KEY_NUMPAD_0,
|
GHOSTTY_KEY_PAGE_UP,
|
||||||
GHOSTTY_KEY_NUMPAD_1,
|
GHOSTTY_KEY_PAGE_DOWN,
|
||||||
GHOSTTY_KEY_NUMPAD_2,
|
|
||||||
GHOSTTY_KEY_NUMPAD_3,
|
|
||||||
GHOSTTY_KEY_NUMPAD_4,
|
|
||||||
GHOSTTY_KEY_NUMPAD_5,
|
|
||||||
GHOSTTY_KEY_NUMPAD_6,
|
|
||||||
GHOSTTY_KEY_NUMPAD_7,
|
|
||||||
GHOSTTY_KEY_NUMPAD_8,
|
|
||||||
GHOSTTY_KEY_NUMPAD_9,
|
|
||||||
GHOSTTY_KEY_NUMPAD_ADD,
|
|
||||||
GHOSTTY_KEY_NUMPAD_BACKSPACE,
|
|
||||||
GHOSTTY_KEY_NUMPAD_CLEAR,
|
|
||||||
GHOSTTY_KEY_NUMPAD_CLEAR_ENTRY,
|
|
||||||
GHOSTTY_KEY_NUMPAD_COMMA,
|
|
||||||
GHOSTTY_KEY_NUMPAD_DECIMAL,
|
|
||||||
GHOSTTY_KEY_NUMPAD_DIVIDE,
|
|
||||||
GHOSTTY_KEY_NUMPAD_ENTER,
|
|
||||||
GHOSTTY_KEY_NUMPAD_EQUAL,
|
|
||||||
GHOSTTY_KEY_NUMPAD_MEMORY_ADD,
|
|
||||||
GHOSTTY_KEY_NUMPAD_MEMORY_CLEAR,
|
|
||||||
GHOSTTY_KEY_NUMPAD_MEMORY_RECALL,
|
|
||||||
GHOSTTY_KEY_NUMPAD_MEMORY_STORE,
|
|
||||||
GHOSTTY_KEY_NUMPAD_MEMORY_SUBTRACT,
|
|
||||||
GHOSTTY_KEY_NUMPAD_MULTIPLY,
|
|
||||||
GHOSTTY_KEY_NUMPAD_PAREN_LEFT,
|
|
||||||
GHOSTTY_KEY_NUMPAD_PAREN_RIGHT,
|
|
||||||
GHOSTTY_KEY_NUMPAD_SUBTRACT,
|
|
||||||
GHOSTTY_KEY_NUMPAD_SEPARATOR,
|
|
||||||
GHOSTTY_KEY_NUMPAD_UP,
|
|
||||||
GHOSTTY_KEY_NUMPAD_DOWN,
|
|
||||||
GHOSTTY_KEY_NUMPAD_RIGHT,
|
|
||||||
GHOSTTY_KEY_NUMPAD_LEFT,
|
|
||||||
GHOSTTY_KEY_NUMPAD_BEGIN,
|
|
||||||
GHOSTTY_KEY_NUMPAD_HOME,
|
|
||||||
GHOSTTY_KEY_NUMPAD_END,
|
|
||||||
GHOSTTY_KEY_NUMPAD_INSERT,
|
|
||||||
GHOSTTY_KEY_NUMPAD_DELETE,
|
|
||||||
GHOSTTY_KEY_NUMPAD_PAGE_UP,
|
|
||||||
GHOSTTY_KEY_NUMPAD_PAGE_DOWN,
|
|
||||||
|
|
||||||
// "Function Section" § 3.5
|
|
||||||
GHOSTTY_KEY_ESCAPE,
|
GHOSTTY_KEY_ESCAPE,
|
||||||
|
GHOSTTY_KEY_ENTER,
|
||||||
|
GHOSTTY_KEY_TAB,
|
||||||
|
GHOSTTY_KEY_BACKSPACE,
|
||||||
|
GHOSTTY_KEY_PRINT_SCREEN,
|
||||||
|
GHOSTTY_KEY_PAUSE,
|
||||||
|
|
||||||
|
// function keys
|
||||||
GHOSTTY_KEY_F1,
|
GHOSTTY_KEY_F1,
|
||||||
GHOSTTY_KEY_F2,
|
GHOSTTY_KEY_F2,
|
||||||
GHOSTTY_KEY_F3,
|
GHOSTTY_KEY_F3,
|
||||||
@@ -263,53 +208,59 @@ typedef enum {
|
|||||||
GHOSTTY_KEY_F23,
|
GHOSTTY_KEY_F23,
|
||||||
GHOSTTY_KEY_F24,
|
GHOSTTY_KEY_F24,
|
||||||
GHOSTTY_KEY_F25,
|
GHOSTTY_KEY_F25,
|
||||||
GHOSTTY_KEY_FN,
|
|
||||||
GHOSTTY_KEY_FN_LOCK,
|
|
||||||
GHOSTTY_KEY_PRINT_SCREEN,
|
|
||||||
GHOSTTY_KEY_SCROLL_LOCK,
|
|
||||||
GHOSTTY_KEY_PAUSE,
|
|
||||||
|
|
||||||
// "Media Keys" § 3.6
|
// keypad
|
||||||
GHOSTTY_KEY_BROWSER_BACK,
|
GHOSTTY_KEY_KP_0,
|
||||||
GHOSTTY_KEY_BROWSER_FAVORITES,
|
GHOSTTY_KEY_KP_1,
|
||||||
GHOSTTY_KEY_BROWSER_FORWARD,
|
GHOSTTY_KEY_KP_2,
|
||||||
GHOSTTY_KEY_BROWSER_HOME,
|
GHOSTTY_KEY_KP_3,
|
||||||
GHOSTTY_KEY_BROWSER_REFRESH,
|
GHOSTTY_KEY_KP_4,
|
||||||
GHOSTTY_KEY_BROWSER_SEARCH,
|
GHOSTTY_KEY_KP_5,
|
||||||
GHOSTTY_KEY_BROWSER_STOP,
|
GHOSTTY_KEY_KP_6,
|
||||||
GHOSTTY_KEY_EJECT,
|
GHOSTTY_KEY_KP_7,
|
||||||
GHOSTTY_KEY_LAUNCH_APP_1,
|
GHOSTTY_KEY_KP_8,
|
||||||
GHOSTTY_KEY_LAUNCH_APP_2,
|
GHOSTTY_KEY_KP_9,
|
||||||
GHOSTTY_KEY_LAUNCH_MAIL,
|
GHOSTTY_KEY_KP_DECIMAL,
|
||||||
GHOSTTY_KEY_MEDIA_PLAY_PAUSE,
|
GHOSTTY_KEY_KP_DIVIDE,
|
||||||
GHOSTTY_KEY_MEDIA_SELECT,
|
GHOSTTY_KEY_KP_MULTIPLY,
|
||||||
GHOSTTY_KEY_MEDIA_STOP,
|
GHOSTTY_KEY_KP_SUBTRACT,
|
||||||
GHOSTTY_KEY_MEDIA_TRACK_NEXT,
|
GHOSTTY_KEY_KP_ADD,
|
||||||
GHOSTTY_KEY_MEDIA_TRACK_PREVIOUS,
|
GHOSTTY_KEY_KP_ENTER,
|
||||||
GHOSTTY_KEY_POWER,
|
GHOSTTY_KEY_KP_EQUAL,
|
||||||
GHOSTTY_KEY_SLEEP,
|
GHOSTTY_KEY_KP_SEPARATOR,
|
||||||
GHOSTTY_KEY_AUDIO_VOLUME_DOWN,
|
GHOSTTY_KEY_KP_LEFT,
|
||||||
GHOSTTY_KEY_AUDIO_VOLUME_MUTE,
|
GHOSTTY_KEY_KP_RIGHT,
|
||||||
GHOSTTY_KEY_AUDIO_VOLUME_UP,
|
GHOSTTY_KEY_KP_UP,
|
||||||
GHOSTTY_KEY_WAKE_UP,
|
GHOSTTY_KEY_KP_DOWN,
|
||||||
|
GHOSTTY_KEY_KP_PAGE_UP,
|
||||||
|
GHOSTTY_KEY_KP_PAGE_DOWN,
|
||||||
|
GHOSTTY_KEY_KP_HOME,
|
||||||
|
GHOSTTY_KEY_KP_END,
|
||||||
|
GHOSTTY_KEY_KP_INSERT,
|
||||||
|
GHOSTTY_KEY_KP_DELETE,
|
||||||
|
GHOSTTY_KEY_KP_BEGIN,
|
||||||
|
|
||||||
// "Legacy, Non-standard, and Special Keys" § 3.7
|
// modifiers
|
||||||
GHOSTTY_KEY_COPY,
|
GHOSTTY_KEY_LEFT_SHIFT,
|
||||||
GHOSTTY_KEY_CUT,
|
GHOSTTY_KEY_LEFT_CONTROL,
|
||||||
GHOSTTY_KEY_PASTE,
|
GHOSTTY_KEY_LEFT_ALT,
|
||||||
|
GHOSTTY_KEY_LEFT_SUPER,
|
||||||
|
GHOSTTY_KEY_RIGHT_SHIFT,
|
||||||
|
GHOSTTY_KEY_RIGHT_CONTROL,
|
||||||
|
GHOSTTY_KEY_RIGHT_ALT,
|
||||||
|
GHOSTTY_KEY_RIGHT_SUPER,
|
||||||
} ghostty_input_key_e;
|
} ghostty_input_key_e;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
ghostty_input_action_e action;
|
ghostty_input_action_e action;
|
||||||
ghostty_input_mods_e mods;
|
ghostty_input_mods_e mods;
|
||||||
ghostty_input_mods_e consumed_mods;
|
|
||||||
uint32_t keycode;
|
uint32_t keycode;
|
||||||
const char* text;
|
const char* text;
|
||||||
uint32_t unshifted_codepoint;
|
|
||||||
bool composing;
|
bool composing;
|
||||||
} ghostty_input_key_s;
|
} ghostty_input_key_s;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
GHOSTTY_TRIGGER_TRANSLATED,
|
||||||
GHOSTTY_TRIGGER_PHYSICAL,
|
GHOSTTY_TRIGGER_PHYSICAL,
|
||||||
GHOSTTY_TRIGGER_UNICODE,
|
GHOSTTY_TRIGGER_UNICODE,
|
||||||
} ghostty_input_trigger_tag_e;
|
} ghostty_input_trigger_tag_e;
|
||||||
@@ -326,13 +277,6 @@ typedef struct {
|
|||||||
ghostty_input_mods_e mods;
|
ghostty_input_mods_e mods;
|
||||||
} ghostty_input_trigger_s;
|
} ghostty_input_trigger_s;
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
const char* action_key;
|
|
||||||
const char* action;
|
|
||||||
const char* title;
|
|
||||||
const char* description;
|
|
||||||
} ghostty_command_s;
|
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
GHOSTTY_BUILD_MODE_DEBUG,
|
GHOSTTY_BUILD_MODE_DEBUG,
|
||||||
GHOSTTY_BUILD_MODE_RELEASE_SAFE,
|
GHOSTTY_BUILD_MODE_RELEASE_SAFE,
|
||||||
@@ -350,51 +294,13 @@ typedef struct {
|
|||||||
const char* message;
|
const char* message;
|
||||||
} ghostty_diagnostic_s;
|
} ghostty_diagnostic_s;
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
const char* ptr;
|
|
||||||
uintptr_t len;
|
|
||||||
} ghostty_string_s;
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
double tl_px_x;
|
double tl_px_x;
|
||||||
double tl_px_y;
|
double tl_px_y;
|
||||||
uint32_t offset_start;
|
uint32_t offset_start;
|
||||||
uint32_t offset_len;
|
uint32_t offset_len;
|
||||||
const char* text;
|
|
||||||
uintptr_t text_len;
|
|
||||||
} ghostty_text_s;
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
GHOSTTY_POINT_ACTIVE,
|
|
||||||
GHOSTTY_POINT_VIEWPORT,
|
|
||||||
GHOSTTY_POINT_SCREEN,
|
|
||||||
GHOSTTY_POINT_SURFACE,
|
|
||||||
} ghostty_point_tag_e;
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
GHOSTTY_POINT_COORD_EXACT,
|
|
||||||
GHOSTTY_POINT_COORD_TOP_LEFT,
|
|
||||||
GHOSTTY_POINT_COORD_BOTTOM_RIGHT,
|
|
||||||
} ghostty_point_coord_e;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
ghostty_point_tag_e tag;
|
|
||||||
ghostty_point_coord_e coord;
|
|
||||||
uint32_t x;
|
|
||||||
uint32_t y;
|
|
||||||
} ghostty_point_s;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
ghostty_point_s top_left;
|
|
||||||
ghostty_point_s bottom_right;
|
|
||||||
bool rectangle;
|
|
||||||
} ghostty_selection_s;
|
} ghostty_selection_s;
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
const char* key;
|
|
||||||
const char* value;
|
|
||||||
} ghostty_env_var_s;
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
void* nsview;
|
void* nsview;
|
||||||
} ghostty_platform_macos_s;
|
} ghostty_platform_macos_s;
|
||||||
@@ -416,9 +322,6 @@ typedef struct {
|
|||||||
float font_size;
|
float font_size;
|
||||||
const char* working_directory;
|
const char* working_directory;
|
||||||
const char* command;
|
const char* command;
|
||||||
ghostty_env_var_s* env_vars;
|
|
||||||
size_t env_var_count;
|
|
||||||
const char* initial_input;
|
|
||||||
} ghostty_surface_config_s;
|
} ghostty_surface_config_s;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@@ -445,11 +348,6 @@ typedef struct {
|
|||||||
size_t len;
|
size_t len;
|
||||||
} ghostty_config_color_list_s;
|
} ghostty_config_color_list_s;
|
||||||
|
|
||||||
// config.Palette
|
|
||||||
typedef struct {
|
|
||||||
ghostty_config_color_s colors[256];
|
|
||||||
} ghostty_config_palette_s;
|
|
||||||
|
|
||||||
// apprt.Target.Key
|
// apprt.Target.Key
|
||||||
typedef enum {
|
typedef enum {
|
||||||
GHOSTTY_TARGET_APP,
|
GHOSTTY_TARGET_APP,
|
||||||
@@ -517,13 +415,6 @@ typedef enum {
|
|||||||
GHOSTTY_FULLSCREEN_NON_NATIVE_PADDED_NOTCH,
|
GHOSTTY_FULLSCREEN_NON_NATIVE_PADDED_NOTCH,
|
||||||
} ghostty_action_fullscreen_e;
|
} ghostty_action_fullscreen_e;
|
||||||
|
|
||||||
// apprt.action.FloatWindow
|
|
||||||
typedef enum {
|
|
||||||
GHOSTTY_FLOAT_WINDOW_ON,
|
|
||||||
GHOSTTY_FLOAT_WINDOW_OFF,
|
|
||||||
GHOSTTY_FLOAT_WINDOW_TOGGLE,
|
|
||||||
} ghostty_action_float_window_e;
|
|
||||||
|
|
||||||
// apprt.action.SecureInput
|
// apprt.action.SecureInput
|
||||||
typedef enum {
|
typedef enum {
|
||||||
GHOSTTY_SECURE_INPUT_ON,
|
GHOSTTY_SECURE_INPUT_ON,
|
||||||
@@ -667,42 +558,6 @@ typedef struct {
|
|||||||
bool soft;
|
bool soft;
|
||||||
} ghostty_action_reload_config_s;
|
} ghostty_action_reload_config_s;
|
||||||
|
|
||||||
// apprt.action.OpenUrlKind
|
|
||||||
typedef enum {
|
|
||||||
GHOSTTY_ACTION_OPEN_URL_KIND_UNKNOWN,
|
|
||||||
GHOSTTY_ACTION_OPEN_URL_KIND_TEXT,
|
|
||||||
} ghostty_action_open_url_kind_e;
|
|
||||||
|
|
||||||
// apprt.action.OpenUrl.C
|
|
||||||
typedef struct {
|
|
||||||
ghostty_action_open_url_kind_e kind;
|
|
||||||
const char* url;
|
|
||||||
uintptr_t len;
|
|
||||||
} ghostty_action_open_url_s;
|
|
||||||
|
|
||||||
// apprt.surface.Message.ChildExited
|
|
||||||
typedef struct {
|
|
||||||
uint32_t exit_code;
|
|
||||||
uint64_t timetime_ms;
|
|
||||||
} ghostty_surface_message_childexited_s;
|
|
||||||
|
|
||||||
// terminal.osc.Command.ProgressReport.State
|
|
||||||
typedef enum {
|
|
||||||
GHOSTTY_PROGRESS_STATE_REMOVE,
|
|
||||||
GHOSTTY_PROGRESS_STATE_SET,
|
|
||||||
GHOSTTY_PROGRESS_STATE_ERROR,
|
|
||||||
GHOSTTY_PROGRESS_STATE_INDETERMINATE,
|
|
||||||
GHOSTTY_PROGRESS_STATE_PAUSE,
|
|
||||||
} ghostty_terminal_osc_command_progressreport_state_e;
|
|
||||||
|
|
||||||
// terminal.osc.Command.ProgressReport.C
|
|
||||||
typedef struct {
|
|
||||||
ghostty_terminal_osc_command_progressreport_state_e state;
|
|
||||||
// -1 if no progress was reported, otherwise 0-100 indicating percent
|
|
||||||
// completeness.
|
|
||||||
int8_t progress;
|
|
||||||
} ghostty_terminal_osc_command_progressreport_s;
|
|
||||||
|
|
||||||
// apprt.Action.Key
|
// apprt.Action.Key
|
||||||
typedef enum {
|
typedef enum {
|
||||||
GHOSTTY_ACTION_QUIT,
|
GHOSTTY_ACTION_QUIT,
|
||||||
@@ -716,7 +571,6 @@ typedef enum {
|
|||||||
GHOSTTY_ACTION_TOGGLE_TAB_OVERVIEW,
|
GHOSTTY_ACTION_TOGGLE_TAB_OVERVIEW,
|
||||||
GHOSTTY_ACTION_TOGGLE_WINDOW_DECORATIONS,
|
GHOSTTY_ACTION_TOGGLE_WINDOW_DECORATIONS,
|
||||||
GHOSTTY_ACTION_TOGGLE_QUICK_TERMINAL,
|
GHOSTTY_ACTION_TOGGLE_QUICK_TERMINAL,
|
||||||
GHOSTTY_ACTION_TOGGLE_COMMAND_PALETTE,
|
|
||||||
GHOSTTY_ACTION_TOGGLE_VISIBILITY,
|
GHOSTTY_ACTION_TOGGLE_VISIBILITY,
|
||||||
GHOSTTY_ACTION_MOVE_TAB,
|
GHOSTTY_ACTION_MOVE_TAB,
|
||||||
GHOSTTY_ACTION_GOTO_TAB,
|
GHOSTTY_ACTION_GOTO_TAB,
|
||||||
@@ -729,9 +583,7 @@ typedef enum {
|
|||||||
GHOSTTY_ACTION_RESET_WINDOW_SIZE,
|
GHOSTTY_ACTION_RESET_WINDOW_SIZE,
|
||||||
GHOSTTY_ACTION_INITIAL_SIZE,
|
GHOSTTY_ACTION_INITIAL_SIZE,
|
||||||
GHOSTTY_ACTION_CELL_SIZE,
|
GHOSTTY_ACTION_CELL_SIZE,
|
||||||
GHOSTTY_ACTION_RENDER,
|
|
||||||
GHOSTTY_ACTION_INSPECTOR,
|
GHOSTTY_ACTION_INSPECTOR,
|
||||||
GHOSTTY_ACTION_SHOW_GTK_INSPECTOR,
|
|
||||||
GHOSTTY_ACTION_RENDER_INSPECTOR,
|
GHOSTTY_ACTION_RENDER_INSPECTOR,
|
||||||
GHOSTTY_ACTION_DESKTOP_NOTIFICATION,
|
GHOSTTY_ACTION_DESKTOP_NOTIFICATION,
|
||||||
GHOSTTY_ACTION_SET_TITLE,
|
GHOSTTY_ACTION_SET_TITLE,
|
||||||
@@ -743,20 +595,12 @@ typedef enum {
|
|||||||
GHOSTTY_ACTION_RENDERER_HEALTH,
|
GHOSTTY_ACTION_RENDERER_HEALTH,
|
||||||
GHOSTTY_ACTION_OPEN_CONFIG,
|
GHOSTTY_ACTION_OPEN_CONFIG,
|
||||||
GHOSTTY_ACTION_QUIT_TIMER,
|
GHOSTTY_ACTION_QUIT_TIMER,
|
||||||
GHOSTTY_ACTION_FLOAT_WINDOW,
|
|
||||||
GHOSTTY_ACTION_SECURE_INPUT,
|
GHOSTTY_ACTION_SECURE_INPUT,
|
||||||
GHOSTTY_ACTION_KEY_SEQUENCE,
|
GHOSTTY_ACTION_KEY_SEQUENCE,
|
||||||
GHOSTTY_ACTION_COLOR_CHANGE,
|
GHOSTTY_ACTION_COLOR_CHANGE,
|
||||||
GHOSTTY_ACTION_RELOAD_CONFIG,
|
GHOSTTY_ACTION_RELOAD_CONFIG,
|
||||||
GHOSTTY_ACTION_CONFIG_CHANGE,
|
GHOSTTY_ACTION_CONFIG_CHANGE,
|
||||||
GHOSTTY_ACTION_CLOSE_WINDOW,
|
GHOSTTY_ACTION_CLOSE_WINDOW,
|
||||||
GHOSTTY_ACTION_RING_BELL,
|
|
||||||
GHOSTTY_ACTION_UNDO,
|
|
||||||
GHOSTTY_ACTION_REDO,
|
|
||||||
GHOSTTY_ACTION_CHECK_FOR_UPDATES,
|
|
||||||
GHOSTTY_ACTION_OPEN_URL,
|
|
||||||
GHOSTTY_ACTION_SHOW_CHILD_EXITED,
|
|
||||||
GHOSTTY_ACTION_PROGRESS_REPORT,
|
|
||||||
} ghostty_action_tag_e;
|
} ghostty_action_tag_e;
|
||||||
|
|
||||||
typedef union {
|
typedef union {
|
||||||
@@ -778,15 +622,11 @@ typedef union {
|
|||||||
ghostty_action_mouse_over_link_s mouse_over_link;
|
ghostty_action_mouse_over_link_s mouse_over_link;
|
||||||
ghostty_action_renderer_health_e renderer_health;
|
ghostty_action_renderer_health_e renderer_health;
|
||||||
ghostty_action_quit_timer_e quit_timer;
|
ghostty_action_quit_timer_e quit_timer;
|
||||||
ghostty_action_float_window_e float_window;
|
|
||||||
ghostty_action_secure_input_e secure_input;
|
ghostty_action_secure_input_e secure_input;
|
||||||
ghostty_action_key_sequence_s key_sequence;
|
ghostty_action_key_sequence_s key_sequence;
|
||||||
ghostty_action_color_change_s color_change;
|
ghostty_action_color_change_s color_change;
|
||||||
ghostty_action_reload_config_s reload_config;
|
ghostty_action_reload_config_s reload_config;
|
||||||
ghostty_action_config_change_s config_change;
|
ghostty_action_config_change_s config_change;
|
||||||
ghostty_action_open_url_s open_url;
|
|
||||||
ghostty_surface_message_childexited_s child_exited;
|
|
||||||
ghostty_terminal_osc_command_progressreport_s progress_report;
|
|
||||||
} ghostty_action_u;
|
} ghostty_action_u;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@@ -823,44 +663,13 @@ typedef struct {
|
|||||||
ghostty_runtime_close_surface_cb close_surface_cb;
|
ghostty_runtime_close_surface_cb close_surface_cb;
|
||||||
} ghostty_runtime_config_s;
|
} ghostty_runtime_config_s;
|
||||||
|
|
||||||
// apprt.ipc.Target.Key
|
|
||||||
typedef enum {
|
|
||||||
GHOSTTY_IPC_TARGET_CLASS,
|
|
||||||
GHOSTTY_IPC_TARGET_DETECT,
|
|
||||||
} ghostty_ipc_target_tag_e;
|
|
||||||
|
|
||||||
typedef union {
|
|
||||||
char *klass;
|
|
||||||
} ghostty_ipc_target_u;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
ghostty_ipc_target_tag_e tag;
|
|
||||||
ghostty_ipc_target_u target;
|
|
||||||
} chostty_ipc_target_s;
|
|
||||||
|
|
||||||
// apprt.ipc.Action.NewWindow
|
|
||||||
typedef struct {
|
|
||||||
// This should be a null terminated list of strings.
|
|
||||||
const char **arguments;
|
|
||||||
} ghostty_ipc_action_new_window_s;
|
|
||||||
|
|
||||||
typedef union {
|
|
||||||
ghostty_ipc_action_new_window_s new_window;
|
|
||||||
} ghostty_ipc_action_u;
|
|
||||||
|
|
||||||
// apprt.ipc.Action.Key
|
|
||||||
typedef enum {
|
|
||||||
GHOSTTY_IPC_ACTION_NEW_WINDOW,
|
|
||||||
} ghostty_ipc_action_tag_e;
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------
|
//-------------------------------------------------------------------
|
||||||
// Published API
|
// Published API
|
||||||
|
|
||||||
int ghostty_init(uintptr_t, char**);
|
int ghostty_init(void);
|
||||||
void ghostty_cli_try_action(void);
|
void ghostty_cli_main(uintptr_t, char**);
|
||||||
ghostty_info_s ghostty_info(void);
|
ghostty_info_s ghostty_info(void);
|
||||||
const char* ghostty_translate(const char*);
|
const char* ghostty_translate(const char*);
|
||||||
void ghostty_string_free(ghostty_string_s);
|
|
||||||
|
|
||||||
ghostty_config_t ghostty_config_new();
|
ghostty_config_t ghostty_config_new();
|
||||||
void ghostty_config_free(ghostty_config_t);
|
void ghostty_config_free(ghostty_config_t);
|
||||||
@@ -875,7 +684,7 @@ ghostty_input_trigger_s ghostty_config_trigger(ghostty_config_t,
|
|||||||
uintptr_t);
|
uintptr_t);
|
||||||
uint32_t ghostty_config_diagnostics_count(ghostty_config_t);
|
uint32_t ghostty_config_diagnostics_count(ghostty_config_t);
|
||||||
ghostty_diagnostic_s ghostty_config_get_diagnostic(ghostty_config_t, uint32_t);
|
ghostty_diagnostic_s ghostty_config_get_diagnostic(ghostty_config_t, uint32_t);
|
||||||
ghostty_string_s ghostty_config_open_path(void);
|
void ghostty_config_open();
|
||||||
|
|
||||||
ghostty_app_t ghostty_app_new(const ghostty_runtime_config_s*,
|
ghostty_app_t ghostty_app_new(const ghostty_runtime_config_s*,
|
||||||
ghostty_config_t);
|
ghostty_config_t);
|
||||||
@@ -894,15 +703,13 @@ void ghostty_app_set_color_scheme(ghostty_app_t, ghostty_color_scheme_e);
|
|||||||
|
|
||||||
ghostty_surface_config_s ghostty_surface_config_new();
|
ghostty_surface_config_s ghostty_surface_config_new();
|
||||||
|
|
||||||
ghostty_surface_t ghostty_surface_new(ghostty_app_t,
|
ghostty_surface_t ghostty_surface_new(ghostty_app_t, ghostty_surface_config_s*);
|
||||||
const ghostty_surface_config_s*);
|
|
||||||
void ghostty_surface_free(ghostty_surface_t);
|
void ghostty_surface_free(ghostty_surface_t);
|
||||||
void* ghostty_surface_userdata(ghostty_surface_t);
|
void* ghostty_surface_userdata(ghostty_surface_t);
|
||||||
ghostty_app_t ghostty_surface_app(ghostty_surface_t);
|
ghostty_app_t ghostty_surface_app(ghostty_surface_t);
|
||||||
ghostty_surface_config_s ghostty_surface_inherited_config(ghostty_surface_t);
|
ghostty_surface_config_s ghostty_surface_inherited_config(ghostty_surface_t);
|
||||||
void ghostty_surface_update_config(ghostty_surface_t, ghostty_config_t);
|
void ghostty_surface_update_config(ghostty_surface_t, ghostty_config_t);
|
||||||
bool ghostty_surface_needs_confirm_quit(ghostty_surface_t);
|
bool ghostty_surface_needs_confirm_quit(ghostty_surface_t);
|
||||||
bool ghostty_surface_process_exited(ghostty_surface_t);
|
|
||||||
void ghostty_surface_refresh(ghostty_surface_t);
|
void ghostty_surface_refresh(ghostty_surface_t);
|
||||||
void ghostty_surface_draw(ghostty_surface_t);
|
void ghostty_surface_draw(ghostty_surface_t);
|
||||||
void ghostty_surface_set_content_scale(ghostty_surface_t, double, double);
|
void ghostty_surface_set_content_scale(ghostty_surface_t, double, double);
|
||||||
@@ -914,11 +721,9 @@ void ghostty_surface_set_color_scheme(ghostty_surface_t,
|
|||||||
ghostty_color_scheme_e);
|
ghostty_color_scheme_e);
|
||||||
ghostty_input_mods_e ghostty_surface_key_translation_mods(ghostty_surface_t,
|
ghostty_input_mods_e ghostty_surface_key_translation_mods(ghostty_surface_t,
|
||||||
ghostty_input_mods_e);
|
ghostty_input_mods_e);
|
||||||
void ghostty_surface_commands(ghostty_surface_t, ghostty_command_s**, size_t*);
|
|
||||||
bool ghostty_surface_key(ghostty_surface_t, ghostty_input_key_s);
|
bool ghostty_surface_key(ghostty_surface_t, ghostty_input_key_s);
|
||||||
bool ghostty_surface_key_is_binding(ghostty_surface_t, ghostty_input_key_s);
|
bool ghostty_surface_key_is_binding(ghostty_surface_t, ghostty_input_key_s);
|
||||||
void ghostty_surface_text(ghostty_surface_t, const char*, uintptr_t);
|
void ghostty_surface_text(ghostty_surface_t, const char*, uintptr_t);
|
||||||
void ghostty_surface_preedit(ghostty_surface_t, const char*, uintptr_t);
|
|
||||||
bool ghostty_surface_mouse_captured(ghostty_surface_t);
|
bool ghostty_surface_mouse_captured(ghostty_surface_t);
|
||||||
bool ghostty_surface_mouse_button(ghostty_surface_t,
|
bool ghostty_surface_mouse_button(ghostty_surface_t,
|
||||||
ghostty_input_mouse_state_e,
|
ghostty_input_mouse_state_e,
|
||||||
@@ -948,16 +753,16 @@ void ghostty_surface_complete_clipboard_request(ghostty_surface_t,
|
|||||||
void*,
|
void*,
|
||||||
bool);
|
bool);
|
||||||
bool ghostty_surface_has_selection(ghostty_surface_t);
|
bool ghostty_surface_has_selection(ghostty_surface_t);
|
||||||
bool ghostty_surface_read_selection(ghostty_surface_t, ghostty_text_s*);
|
uintptr_t ghostty_surface_selection(ghostty_surface_t, char*, uintptr_t);
|
||||||
bool ghostty_surface_read_text(ghostty_surface_t,
|
|
||||||
ghostty_selection_s,
|
|
||||||
ghostty_text_s*);
|
|
||||||
void ghostty_surface_free_text(ghostty_surface_t, ghostty_text_s*);
|
|
||||||
|
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
void ghostty_surface_set_display_id(ghostty_surface_t, uint32_t);
|
void ghostty_surface_set_display_id(ghostty_surface_t, uint32_t);
|
||||||
void* ghostty_surface_quicklook_font(ghostty_surface_t);
|
void* ghostty_surface_quicklook_font(ghostty_surface_t);
|
||||||
bool ghostty_surface_quicklook_word(ghostty_surface_t, ghostty_text_s*);
|
uintptr_t ghostty_surface_quicklook_word(ghostty_surface_t,
|
||||||
|
char*,
|
||||||
|
uintptr_t,
|
||||||
|
ghostty_selection_s*);
|
||||||
|
bool ghostty_surface_selection_info(ghostty_surface_t, ghostty_selection_s*);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ghostty_inspector_t ghostty_surface_inspector(ghostty_surface_t);
|
ghostty_inspector_t ghostty_surface_inspector(ghostty_surface_t);
|
||||||
@@ -990,9 +795,6 @@ bool ghostty_inspector_metal_shutdown(ghostty_inspector_t);
|
|||||||
// Don't use these unless you know what you're doing.
|
// Don't use these unless you know what you're doing.
|
||||||
void ghostty_set_window_background_blur(ghostty_app_t, void*);
|
void ghostty_set_window_background_blur(ghostty_app_t, void*);
|
||||||
|
|
||||||
// Benchmark API, if available.
|
|
||||||
bool ghostty_benchmark_cli(const char*, const char*);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
74
macos/Assets.xcassets/AppIcon.appiconset/Contents.json
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"filename" : "macOS-AppIcon-1024px.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"platform" : "ios",
|
||||||
|
"size" : "1024x1024"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "macOS-AppIcon-16px-16pt@1x.png",
|
||||||
|
"idiom" : "mac",
|
||||||
|
"scale" : "1x",
|
||||||
|
"size" : "16x16"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "macOS-AppIcon-32px-16pt@2x.png",
|
||||||
|
"idiom" : "mac",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "16x16"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "macOS-AppIcon-32px-32pt@1x.png",
|
||||||
|
"idiom" : "mac",
|
||||||
|
"scale" : "1x",
|
||||||
|
"size" : "32x32"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "macOS-AppIcon-64px-32pt@2x.png",
|
||||||
|
"idiom" : "mac",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "32x32"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "macOS-AppIcon-128px-128pt@1x.png",
|
||||||
|
"idiom" : "mac",
|
||||||
|
"scale" : "1x",
|
||||||
|
"size" : "128x128"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "macOS-AppIcon-256px-128pt@2x.png",
|
||||||
|
"idiom" : "mac",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "128x128"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "macOS-AppIcon-256px-128pt@2x 1.png",
|
||||||
|
"idiom" : "mac",
|
||||||
|
"scale" : "1x",
|
||||||
|
"size" : "256x256"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "macOS-AppIcon-512px-256pt@2x.png",
|
||||||
|
"idiom" : "mac",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "256x256"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "macOS-AppIcon-512px.png",
|
||||||
|
"idiom" : "mac",
|
||||||
|
"scale" : "1x",
|
||||||
|
"size" : "512x512"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "macOS-AppIcon-1024px 1.png",
|
||||||
|
"idiom" : "mac",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "512x512"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
After Width: | Height: | Size: 454 KiB |
After Width: | Height: | Size: 454 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 666 B |
After Width: | Height: | Size: 67 KiB |
After Width: | Height: | Size: 67 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 216 KiB |
BIN
macos/Assets.xcassets/AppIcon.appiconset/macOS-AppIcon-512px.png
Normal file
After Width: | Height: | Size: 216 KiB |
After Width: | Height: | Size: 4.4 KiB |
@@ -48,8 +48,8 @@
|
|||||||
<string></string>
|
<string></string>
|
||||||
<key>LSEnvironment</key>
|
<key>LSEnvironment</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>GHOSTTY_MAC_LAUNCH_SOURCE</key>
|
<key>GHOSTTY_MAC_APP</key>
|
||||||
<string>app</string>
|
<string>1</string>
|
||||||
</dict>
|
</dict>
|
||||||
<key>MDItemKeywords</key>
|
<key>MDItemKeywords</key>
|
||||||
<string>Terminal</string>
|
<string>Terminal</string>
|
||||||
|
@@ -3,7 +3,7 @@
|
|||||||
archiveVersion = 1;
|
archiveVersion = 1;
|
||||||
classes = {
|
classes = {
|
||||||
};
|
};
|
||||||
objectVersion = 70;
|
objectVersion = 56;
|
||||||
objects = {
|
objects = {
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
@@ -12,20 +12,10 @@
|
|||||||
552964E62B34A9B400030505 /* vim in Resources */ = {isa = PBXBuildFile; fileRef = 552964E52B34A9B400030505 /* vim */; };
|
552964E62B34A9B400030505 /* vim in Resources */ = {isa = PBXBuildFile; fileRef = 552964E52B34A9B400030505 /* vim */; };
|
||||||
857F63812A5E64F200CA4815 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 857F63802A5E64F200CA4815 /* MainMenu.xib */; };
|
857F63812A5E64F200CA4815 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 857F63802A5E64F200CA4815 /* MainMenu.xib */; };
|
||||||
9351BE8E3D22937F003B3499 /* nvim in Resources */ = {isa = PBXBuildFile; fileRef = 9351BE8E2D22937F003B3499 /* nvim */; };
|
9351BE8E3D22937F003B3499 /* nvim in Resources */ = {isa = PBXBuildFile; fileRef = 9351BE8E2D22937F003B3499 /* nvim */; };
|
||||||
A50297352DFA0F3400B4E924 /* Double+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = A50297342DFA0F3300B4E924 /* Double+Extension.swift */; };
|
|
||||||
A505D21D2E1A2FA20018808F /* FileHandle+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = A505D21C2E1A2F9E0018808F /* FileHandle+Extension.swift */; };
|
|
||||||
A505D21F2E1B6DE00018808F /* NSWorkspace+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = A505D21E2E1B6DDC0018808F /* NSWorkspace+Extension.swift */; };
|
|
||||||
A511940F2E050595007258CC /* CloseTerminalIntent.swift in Sources */ = {isa = PBXBuildFile; fileRef = A511940E2E050590007258CC /* CloseTerminalIntent.swift */; };
|
|
||||||
A51194112E05A483007258CC /* QuickTerminalIntent.swift in Sources */ = {isa = PBXBuildFile; fileRef = A51194102E05A480007258CC /* QuickTerminalIntent.swift */; };
|
|
||||||
A51194132E05D006007258CC /* Optional+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = A51194122E05D003007258CC /* Optional+Extension.swift */; };
|
|
||||||
A51194172E05D964007258CC /* PermissionRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = A51194162E05D95E007258CC /* PermissionRequest.swift */; };
|
|
||||||
A51194192E05DFC4007258CC /* IntentPermission.swift in Sources */ = {isa = PBXBuildFile; fileRef = A51194182E05DFBB007258CC /* IntentPermission.swift */; };
|
|
||||||
A514C8D62B54A16400493A16 /* Ghostty.Config.swift in Sources */ = {isa = PBXBuildFile; fileRef = A514C8D52B54A16400493A16 /* Ghostty.Config.swift */; };
|
A514C8D62B54A16400493A16 /* Ghostty.Config.swift in Sources */ = {isa = PBXBuildFile; fileRef = A514C8D52B54A16400493A16 /* Ghostty.Config.swift */; };
|
||||||
A514C8D72B54A16400493A16 /* Ghostty.Config.swift in Sources */ = {isa = PBXBuildFile; fileRef = A514C8D52B54A16400493A16 /* Ghostty.Config.swift */; };
|
A514C8D72B54A16400493A16 /* Ghostty.Config.swift in Sources */ = {isa = PBXBuildFile; fileRef = A514C8D52B54A16400493A16 /* Ghostty.Config.swift */; };
|
||||||
A514C8D82B54DC6800493A16 /* Ghostty.App.swift in Sources */ = {isa = PBXBuildFile; fileRef = A53D0C992B543F3B00305CE6 /* Ghostty.App.swift */; };
|
A514C8D82B54DC6800493A16 /* Ghostty.App.swift in Sources */ = {isa = PBXBuildFile; fileRef = A53D0C992B543F3B00305CE6 /* Ghostty.App.swift */; };
|
||||||
A51544FE2DFB111C009E85D8 /* TitlebarTabsTahoeTerminalWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = A51544FD2DFB1110009E85D8 /* TitlebarTabsTahoeTerminalWindow.swift */; };
|
A51B78472AF4B58B00F3EDB9 /* TerminalWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = A51B78462AF4B58B00F3EDB9 /* TerminalWindow.swift */; };
|
||||||
A51545002DFB112E009E85D8 /* TerminalTabsTitlebarTahoe.xib in Resources */ = {isa = PBXBuildFile; fileRef = A51544FF2DFB112E009E85D8 /* TerminalTabsTitlebarTahoe.xib */; };
|
|
||||||
A51B78472AF4B58B00F3EDB9 /* TitlebarTabsVenturaTerminalWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = A51B78462AF4B58B00F3EDB9 /* TitlebarTabsVenturaTerminalWindow.swift */; };
|
|
||||||
A51BFC1E2B2FB5CE00E92F16 /* About.xib in Resources */ = {isa = PBXBuildFile; fileRef = A51BFC1D2B2FB5CE00E92F16 /* About.xib */; };
|
A51BFC1E2B2FB5CE00E92F16 /* About.xib in Resources */ = {isa = PBXBuildFile; fileRef = A51BFC1D2B2FB5CE00E92F16 /* About.xib */; };
|
||||||
A51BFC202B2FB64F00E92F16 /* AboutController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A51BFC1F2B2FB64F00E92F16 /* AboutController.swift */; };
|
A51BFC202B2FB64F00E92F16 /* AboutController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A51BFC1F2B2FB64F00E92F16 /* AboutController.swift */; };
|
||||||
A51BFC222B2FB6B400E92F16 /* AboutView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A51BFC212B2FB6B400E92F16 /* AboutView.swift */; };
|
A51BFC222B2FB6B400E92F16 /* AboutView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A51BFC212B2FB6B400E92F16 /* AboutView.swift */; };
|
||||||
@@ -44,10 +34,6 @@
|
|||||||
A5333E242B5A22D9008AEFF7 /* Ghostty.Shell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A56D58852ACDDB4100508D2C /* Ghostty.Shell.swift */; };
|
A5333E242B5A22D9008AEFF7 /* Ghostty.Shell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A56D58852ACDDB4100508D2C /* Ghostty.Shell.swift */; };
|
||||||
A53426352A7DA53D00EBB7A2 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = A53426342A7DA53D00EBB7A2 /* AppDelegate.swift */; };
|
A53426352A7DA53D00EBB7A2 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = A53426342A7DA53D00EBB7A2 /* AppDelegate.swift */; };
|
||||||
A535B9DA299C569B0017E2E4 /* ErrorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A535B9D9299C569B0017E2E4 /* ErrorView.swift */; };
|
A535B9DA299C569B0017E2E4 /* ErrorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A535B9D9299C569B0017E2E4 /* ErrorView.swift */; };
|
||||||
A53A297B2DB2E49700B6E02C /* CommandPalette.swift in Sources */ = {isa = PBXBuildFile; fileRef = A53A297A2DB2E49400B6E02C /* CommandPalette.swift */; };
|
|
||||||
A53A297F2DB4480F00B6E02C /* EventModifiers+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = A53A297E2DB4480A00B6E02C /* EventModifiers+Extension.swift */; };
|
|
||||||
A53A29812DB44A6100B6E02C /* KeyboardShortcut+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = A53A29802DB44A5E00B6E02C /* KeyboardShortcut+Extension.swift */; };
|
|
||||||
A53A29882DB69D2F00B6E02C /* TerminalCommandPalette.swift in Sources */ = {isa = PBXBuildFile; fileRef = A53A29872DB69D2C00B6E02C /* TerminalCommandPalette.swift */; };
|
|
||||||
A53A6C032CCC1B7F00943E98 /* Ghostty.Action.swift in Sources */ = {isa = PBXBuildFile; fileRef = A53A6C022CCC1B7D00943E98 /* Ghostty.Action.swift */; };
|
A53A6C032CCC1B7F00943E98 /* Ghostty.Action.swift in Sources */ = {isa = PBXBuildFile; fileRef = A53A6C022CCC1B7D00943E98 /* Ghostty.Action.swift */; };
|
||||||
A53D0C8E2B53B0EA00305CE6 /* GhosttyKit.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = A5D495A1299BEC7E00DD1313 /* GhosttyKit.xcframework */; };
|
A53D0C8E2B53B0EA00305CE6 /* GhosttyKit.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = A5D495A1299BEC7E00DD1313 /* GhosttyKit.xcframework */; };
|
||||||
A53D0C942B53B43700305CE6 /* iOSApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = A53D0C932B53B43700305CE6 /* iOSApp.swift */; };
|
A53D0C942B53B43700305CE6 /* iOSApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = A53D0C932B53B43700305CE6 /* iOSApp.swift */; };
|
||||||
@@ -60,16 +46,7 @@
|
|||||||
A54B0CED2D0CFB7700CBEFF8 /* ColorizedGhosttyIcon.swift in Sources */ = {isa = PBXBuildFile; fileRef = A54B0CEC2D0CFB7300CBEFF8 /* ColorizedGhosttyIcon.swift */; };
|
A54B0CED2D0CFB7700CBEFF8 /* ColorizedGhosttyIcon.swift in Sources */ = {isa = PBXBuildFile; fileRef = A54B0CEC2D0CFB7300CBEFF8 /* ColorizedGhosttyIcon.swift */; };
|
||||||
A54B0CEF2D0D2E2800CBEFF8 /* ColorizedGhosttyIconImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = A54B0CEE2D0D2E2400CBEFF8 /* ColorizedGhosttyIconImage.swift */; };
|
A54B0CEF2D0D2E2800CBEFF8 /* ColorizedGhosttyIconImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = A54B0CEE2D0D2E2400CBEFF8 /* ColorizedGhosttyIconImage.swift */; };
|
||||||
A54D786C2CA7978E001B19B1 /* BaseTerminalController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A54D786B2CA79788001B19B1 /* BaseTerminalController.swift */; };
|
A54D786C2CA7978E001B19B1 /* BaseTerminalController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A54D786B2CA79788001B19B1 /* BaseTerminalController.swift */; };
|
||||||
A553F4062E05E93000257779 /* Optional+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = A51194122E05D003007258CC /* Optional+Extension.swift */; };
|
A55685E029A03A9F004303CE /* AppError.swift in Sources */ = {isa = PBXBuildFile; fileRef = A55685DF29A03A9F004303CE /* AppError.swift */; };
|
||||||
A553F4072E05E93D00257779 /* Array+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = A586366A2DF0A98900E04A10 /* Array+Extension.swift */; };
|
|
||||||
A553F4132E06EB1600257779 /* Ghostty.icon in Resources */ = {isa = PBXBuildFile; fileRef = A553F4122E06EB1600257779 /* Ghostty.icon */; };
|
|
||||||
A553F4142E06EB1600257779 /* Ghostty.icon in Resources */ = {isa = PBXBuildFile; fileRef = A553F4122E06EB1600257779 /* Ghostty.icon */; };
|
|
||||||
A5593FDF2DF8D57C00B47B10 /* TerminalWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5593FDE2DF8D57100B47B10 /* TerminalWindow.swift */; };
|
|
||||||
A5593FE12DF8D74000B47B10 /* HiddenTitlebarTerminalWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5593FE02DF8D73400B47B10 /* HiddenTitlebarTerminalWindow.swift */; };
|
|
||||||
A5593FE32DF8D78600B47B10 /* TerminalHiddenTitlebar.xib in Resources */ = {isa = PBXBuildFile; fileRef = A5593FE22DF8D78600B47B10 /* TerminalHiddenTitlebar.xib */; };
|
|
||||||
A5593FE52DF8DE3000B47B10 /* TerminalTabsTitlebarVentura.xib in Resources */ = {isa = PBXBuildFile; fileRef = A5593FE42DF8DE3000B47B10 /* TerminalTabsTitlebarVentura.xib */; };
|
|
||||||
A5593FE72DF927D200B47B10 /* TransparentTitlebarTerminalWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5593FE62DF927CC00B47B10 /* TransparentTitlebarTerminalWindow.swift */; };
|
|
||||||
A5593FE92DF927DF00B47B10 /* TerminalTransparentTitlebar.xib in Resources */ = {isa = PBXBuildFile; fileRef = A5593FE82DF927DF00B47B10 /* TerminalTransparentTitlebar.xib */; };
|
|
||||||
A55B7BB829B6F53A0055DE60 /* Package.swift in Sources */ = {isa = PBXBuildFile; fileRef = A55B7BB729B6F53A0055DE60 /* Package.swift */; };
|
A55B7BB829B6F53A0055DE60 /* Package.swift in Sources */ = {isa = PBXBuildFile; fileRef = A55B7BB729B6F53A0055DE60 /* Package.swift */; };
|
||||||
A55B7BBC29B6FC330055DE60 /* SurfaceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A55B7BBB29B6FC330055DE60 /* SurfaceView.swift */; };
|
A55B7BBC29B6FC330055DE60 /* SurfaceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A55B7BBB29B6FC330055DE60 /* SurfaceView.swift */; };
|
||||||
A56B880B2A840447007A0E29 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A56B880A2A840447007A0E29 /* Carbon.framework */; };
|
A56B880B2A840447007A0E29 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A56B880A2A840447007A0E29 /* Carbon.framework */; };
|
||||||
@@ -78,19 +55,14 @@
|
|||||||
A571AB1D2A206FCF00248498 /* GhosttyKit.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = A5D495A1299BEC7E00DD1313 /* GhosttyKit.xcframework */; };
|
A571AB1D2A206FCF00248498 /* GhosttyKit.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = A5D495A1299BEC7E00DD1313 /* GhosttyKit.xcframework */; };
|
||||||
A57D79272C9C879B001D522E /* SecureInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = A57D79262C9C8798001D522E /* SecureInput.swift */; };
|
A57D79272C9C879B001D522E /* SecureInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = A57D79262C9C8798001D522E /* SecureInput.swift */; };
|
||||||
A586167C2B7703CC009BDB1D /* fish in Resources */ = {isa = PBXBuildFile; fileRef = A586167B2B7703CC009BDB1D /* fish */; };
|
A586167C2B7703CC009BDB1D /* fish in Resources */ = {isa = PBXBuildFile; fileRef = A586167B2B7703CC009BDB1D /* fish */; };
|
||||||
A586365F2DEE6C2300E04A10 /* SplitTree.swift in Sources */ = {isa = PBXBuildFile; fileRef = A586365E2DEE6C2100E04A10 /* SplitTree.swift */; };
|
|
||||||
A58636662DEF964100E04A10 /* TerminalSplitTreeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A58636652DEF963F00E04A10 /* TerminalSplitTreeView.swift */; };
|
|
||||||
A586366B2DF0A98C00E04A10 /* Array+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = A586366A2DF0A98900E04A10 /* Array+Extension.swift */; };
|
|
||||||
A586366F2DF25D8600E04A10 /* Duration+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = A586366E2DF25D8300E04A10 /* Duration+Extension.swift */; };
|
|
||||||
A58636712DF298FB00E04A10 /* ExpiringUndoManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = A58636702DF298F700E04A10 /* ExpiringUndoManager.swift */; };
|
|
||||||
A58636732DF4813400E04A10 /* UndoManager+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = A58636722DF4813000E04A10 /* UndoManager+Extension.swift */; };
|
|
||||||
A5874D992DAD751B00E83852 /* CGS.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5874D982DAD751A00E83852 /* CGS.swift */; };
|
|
||||||
A5874D9D2DAD786100E83852 /* NSWindow+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5874D9C2DAD785F00E83852 /* NSWindow+Extension.swift */; };
|
|
||||||
A59444F729A2ED5200725BBA /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A59444F629A2ED5200725BBA /* SettingsView.swift */; };
|
A59444F729A2ED5200725BBA /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A59444F629A2ED5200725BBA /* SettingsView.swift */; };
|
||||||
A59630972AEE163600D64628 /* HostingWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = A59630962AEE163600D64628 /* HostingWindow.swift */; };
|
A59630972AEE163600D64628 /* HostingWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = A59630962AEE163600D64628 /* HostingWindow.swift */; };
|
||||||
A596309A2AEE1C6400D64628 /* Terminal.xib in Resources */ = {isa = PBXBuildFile; fileRef = A59630992AEE1C6400D64628 /* Terminal.xib */; };
|
A596309A2AEE1C6400D64628 /* Terminal.xib in Resources */ = {isa = PBXBuildFile; fileRef = A59630992AEE1C6400D64628 /* Terminal.xib */; };
|
||||||
A596309C2AEE1C9E00D64628 /* TerminalController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A596309B2AEE1C9E00D64628 /* TerminalController.swift */; };
|
A596309C2AEE1C9E00D64628 /* TerminalController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A596309B2AEE1C9E00D64628 /* TerminalController.swift */; };
|
||||||
A596309E2AEE1D6C00D64628 /* TerminalView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A596309D2AEE1D6C00D64628 /* TerminalView.swift */; };
|
A596309E2AEE1D6C00D64628 /* TerminalView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A596309D2AEE1D6C00D64628 /* TerminalView.swift */; };
|
||||||
|
A59630A02AEF6AEB00D64628 /* TerminalManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = A596309F2AEF6AEB00D64628 /* TerminalManager.swift */; };
|
||||||
|
A59630A22AF0415000D64628 /* Ghostty.TerminalSplit.swift in Sources */ = {isa = PBXBuildFile; fileRef = A59630A12AF0415000D64628 /* Ghostty.TerminalSplit.swift */; };
|
||||||
|
A59630A42AF059BB00D64628 /* Ghostty.SplitNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = A59630A32AF059BB00D64628 /* Ghostty.SplitNode.swift */; };
|
||||||
A5985CD72C320C4500C57AD3 /* String+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5985CD62C320C4500C57AD3 /* String+Extension.swift */; };
|
A5985CD72C320C4500C57AD3 /* String+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5985CD62C320C4500C57AD3 /* String+Extension.swift */; };
|
||||||
A5985CD82C320C4500C57AD3 /* String+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5985CD62C320C4500C57AD3 /* String+Extension.swift */; };
|
A5985CD82C320C4500C57AD3 /* String+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5985CD62C320C4500C57AD3 /* String+Extension.swift */; };
|
||||||
A5985CE62C33060F00C57AD3 /* man in Resources */ = {isa = PBXBuildFile; fileRef = A5985CE52C33060F00C57AD3 /* man */; };
|
A5985CE62C33060F00C57AD3 /* man in Resources */ = {isa = PBXBuildFile; fileRef = A5985CE52C33060F00C57AD3 /* man */; };
|
||||||
@@ -100,10 +72,9 @@
|
|||||||
A5A1F8852A489D6800D1E8BC /* terminfo in Resources */ = {isa = PBXBuildFile; fileRef = A5A1F8842A489D6800D1E8BC /* terminfo */; };
|
A5A1F8852A489D6800D1E8BC /* terminfo in Resources */ = {isa = PBXBuildFile; fileRef = A5A1F8842A489D6800D1E8BC /* terminfo */; };
|
||||||
A5A2A3CA2D4445E30033CF96 /* Dock.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5A2A3C92D4445E20033CF96 /* Dock.swift */; };
|
A5A2A3CA2D4445E30033CF96 /* Dock.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5A2A3C92D4445E20033CF96 /* Dock.swift */; };
|
||||||
A5A2A3CC2D444ABB0033CF96 /* NSApplication+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5A2A3CB2D444AB80033CF96 /* NSApplication+Extension.swift */; };
|
A5A2A3CC2D444ABB0033CF96 /* NSApplication+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5A2A3CB2D444AB80033CF96 /* NSApplication+Extension.swift */; };
|
||||||
A5A6F72A2CC41B8900B232A5 /* AppInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5A6F7292CC41B8700B232A5 /* AppInfo.swift */; };
|
A5A6F72A2CC41B8900B232A5 /* Xcode.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5A6F7292CC41B8700B232A5 /* Xcode.swift */; };
|
||||||
A5AEB1652D5BE7D000513529 /* LastWindowPosition.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5AEB1642D5BE7BF00513529 /* LastWindowPosition.swift */; };
|
A5AEB1652D5BE7D000513529 /* LastWindowPosition.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5AEB1642D5BE7BF00513529 /* LastWindowPosition.swift */; };
|
||||||
A5B30539299BEAAB0047F10C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A5B30538299BEAAB0047F10C /* Assets.xcassets */; };
|
A5B30539299BEAAB0047F10C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A5B30538299BEAAB0047F10C /* Assets.xcassets */; };
|
||||||
A5B4EA852DFE691B0022C3A2 /* NSMenuItem+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5B4EA842DFE69140022C3A2 /* NSMenuItem+Extension.swift */; };
|
|
||||||
A5CA378C2D2A4DEB00931030 /* KeyboardLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5CA378B2D2A4DE800931030 /* KeyboardLayout.swift */; };
|
A5CA378C2D2A4DEB00931030 /* KeyboardLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5CA378B2D2A4DE800931030 /* KeyboardLayout.swift */; };
|
||||||
A5CA378E2D31D6C300931030 /* Weak.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5CA378D2D31D6C100931030 /* Weak.swift */; };
|
A5CA378E2D31D6C300931030 /* Weak.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5CA378D2D31D6C100931030 /* Weak.swift */; };
|
||||||
A5CBD0562C9E65B80017A1AE /* DraggableWindowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5CBD0552C9E65A50017A1AE /* DraggableWindowView.swift */; };
|
A5CBD0562C9E65B80017A1AE /* DraggableWindowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5CBD0552C9E65A50017A1AE /* DraggableWindowView.swift */; };
|
||||||
@@ -129,20 +100,9 @@
|
|||||||
A5E112932AF73E6E00C6E0C2 /* ClipboardConfirmation.xib in Resources */ = {isa = PBXBuildFile; fileRef = A5E112922AF73E6E00C6E0C2 /* ClipboardConfirmation.xib */; };
|
A5E112932AF73E6E00C6E0C2 /* ClipboardConfirmation.xib in Resources */ = {isa = PBXBuildFile; fileRef = A5E112922AF73E6E00C6E0C2 /* ClipboardConfirmation.xib */; };
|
||||||
A5E112952AF73E8A00C6E0C2 /* ClipboardConfirmationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5E112942AF73E8A00C6E0C2 /* ClipboardConfirmationController.swift */; };
|
A5E112952AF73E8A00C6E0C2 /* ClipboardConfirmationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5E112942AF73E8A00C6E0C2 /* ClipboardConfirmationController.swift */; };
|
||||||
A5E112972AF7401B00C6E0C2 /* ClipboardConfirmationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5E112962AF7401B00C6E0C2 /* ClipboardConfirmationView.swift */; };
|
A5E112972AF7401B00C6E0C2 /* ClipboardConfirmationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5E112962AF7401B00C6E0C2 /* ClipboardConfirmationView.swift */; };
|
||||||
A5E4082A2E022E9E0035FEAC /* TabGroupCloseCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5E408292E022E9B0035FEAC /* TabGroupCloseCoordinator.swift */; };
|
|
||||||
A5E4082E2E0237460035FEAC /* NewTerminalIntent.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5E4082D2E0237410035FEAC /* NewTerminalIntent.swift */; };
|
|
||||||
A5E408302E0271320035FEAC /* GhosttyIntentError.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5E4082F2E0271320035FEAC /* GhosttyIntentError.swift */; };
|
|
||||||
A5E408322E02FEDF0035FEAC /* TerminalEntity.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5E408312E02FEDC0035FEAC /* TerminalEntity.swift */; };
|
|
||||||
A5E408342E0320140035FEAC /* GetTerminalDetailsIntent.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5E408332E03200F0035FEAC /* GetTerminalDetailsIntent.swift */; };
|
|
||||||
A5E408382E03C7DA0035FEAC /* Ghostty.Surface.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5E408372E03C7D80035FEAC /* Ghostty.Surface.swift */; };
|
|
||||||
A5E4083A2E0449BD0035FEAC /* Ghostty.Command.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5E408392E0449BB0035FEAC /* Ghostty.Command.swift */; };
|
|
||||||
A5E4083C2E044DB50035FEAC /* Ghostty.Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5E4083B2E044DB40035FEAC /* Ghostty.Error.swift */; };
|
|
||||||
A5E408402E04532C0035FEAC /* CommandEntity.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5E4083F2E04532A0035FEAC /* CommandEntity.swift */; };
|
|
||||||
A5E408432E047D0B0035FEAC /* CommandPaletteIntent.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5E408422E047D060035FEAC /* CommandPaletteIntent.swift */; };
|
|
||||||
A5E408452E0483FD0035FEAC /* KeybindIntent.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5E408442E0483F80035FEAC /* KeybindIntent.swift */; };
|
|
||||||
A5E408472E04852B0035FEAC /* InputIntent.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5E408462E0485270035FEAC /* InputIntent.swift */; };
|
|
||||||
A5FEB3002ABB69450068369E /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5FEB2FF2ABB69450068369E /* main.swift */; };
|
A5FEB3002ABB69450068369E /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5FEB2FF2ABB69450068369E /* main.swift */; };
|
||||||
AEE8B3452B9AA39600260C5E /* NSPasteboard+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEE8B3442B9AA39600260C5E /* NSPasteboard+Extension.swift */; };
|
AEE8B3452B9AA39600260C5E /* NSPasteboard+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEE8B3442B9AA39600260C5E /* NSPasteboard+Extension.swift */; };
|
||||||
|
AEF9CE242B6AD07A0017E195 /* TerminalToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEF9CE232B6AD07A0017E195 /* TerminalToolbar.swift */; };
|
||||||
C159E81D2B66A06B00FDFE9C /* OSColor+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C159E81C2B66A06B00FDFE9C /* OSColor+Extension.swift */; };
|
C159E81D2B66A06B00FDFE9C /* OSColor+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C159E81C2B66A06B00FDFE9C /* OSColor+Extension.swift */; };
|
||||||
C159E89D2B69A2EF00FDFE9C /* OSColor+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C159E81C2B66A06B00FDFE9C /* OSColor+Extension.swift */; };
|
C159E89D2B69A2EF00FDFE9C /* OSColor+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C159E81C2B66A06B00FDFE9C /* OSColor+Extension.swift */; };
|
||||||
C1F26EA72B738B9900404083 /* NSView+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1F26EA62B738B9900404083 /* NSView+Extension.swift */; };
|
C1F26EA72B738B9900404083 /* NSView+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1F26EA62B738B9900404083 /* NSView+Extension.swift */; };
|
||||||
@@ -152,16 +112,6 @@
|
|||||||
FC9ABA9C2D0F53F80020D4C8 /* bash-completion in Resources */ = {isa = PBXBuildFile; fileRef = FC9ABA9B2D0F538D0020D4C8 /* bash-completion */; };
|
FC9ABA9C2D0F53F80020D4C8 /* bash-completion in Resources */ = {isa = PBXBuildFile; fileRef = FC9ABA9B2D0F538D0020D4C8 /* bash-completion */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXContainerItemProxy section */
|
|
||||||
A54F45F72E1F047A0046BD5C /* PBXContainerItemProxy */ = {
|
|
||||||
isa = PBXContainerItemProxy;
|
|
||||||
containerPortal = A5B30529299BEAAA0047F10C /* Project object */;
|
|
||||||
proxyType = 1;
|
|
||||||
remoteGlobalIDString = A5B30530299BEAAA0047F10C;
|
|
||||||
remoteInfo = Ghostty;
|
|
||||||
};
|
|
||||||
/* End PBXContainerItemProxy section */
|
|
||||||
|
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
29C15B1C2CDC3B2000520DD4 /* bat */ = {isa = PBXFileReference; lastKnownFileType = folder; name = bat; path = "../zig-out/share/bat"; sourceTree = "<group>"; };
|
29C15B1C2CDC3B2000520DD4 /* bat */ = {isa = PBXFileReference; lastKnownFileType = folder; name = bat; path = "../zig-out/share/bat"; sourceTree = "<group>"; };
|
||||||
3B39CAA42B33949B00DABEB8 /* GhosttyReleaseLocal.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = GhosttyReleaseLocal.entitlements; sourceTree = "<group>"; };
|
3B39CAA42B33949B00DABEB8 /* GhosttyReleaseLocal.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = GhosttyReleaseLocal.entitlements; sourceTree = "<group>"; };
|
||||||
@@ -169,18 +119,8 @@
|
|||||||
552964E52B34A9B400030505 /* vim */ = {isa = PBXFileReference; lastKnownFileType = folder; name = vim; path = "../zig-out/share/vim"; sourceTree = "<group>"; };
|
552964E52B34A9B400030505 /* vim */ = {isa = PBXFileReference; lastKnownFileType = folder; name = vim; path = "../zig-out/share/vim"; sourceTree = "<group>"; };
|
||||||
857F63802A5E64F200CA4815 /* MainMenu.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MainMenu.xib; sourceTree = "<group>"; };
|
857F63802A5E64F200CA4815 /* MainMenu.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MainMenu.xib; sourceTree = "<group>"; };
|
||||||
9351BE8E2D22937F003B3499 /* nvim */ = {isa = PBXFileReference; lastKnownFileType = folder; name = nvim; path = "../zig-out/share/nvim"; sourceTree = "<group>"; };
|
9351BE8E2D22937F003B3499 /* nvim */ = {isa = PBXFileReference; lastKnownFileType = folder; name = nvim; path = "../zig-out/share/nvim"; sourceTree = "<group>"; };
|
||||||
A50297342DFA0F3300B4E924 /* Double+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Double+Extension.swift"; sourceTree = "<group>"; };
|
|
||||||
A505D21C2E1A2F9E0018808F /* FileHandle+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "FileHandle+Extension.swift"; sourceTree = "<group>"; };
|
|
||||||
A505D21E2E1B6DDC0018808F /* NSWorkspace+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSWorkspace+Extension.swift"; sourceTree = "<group>"; };
|
|
||||||
A511940E2E050590007258CC /* CloseTerminalIntent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CloseTerminalIntent.swift; sourceTree = "<group>"; };
|
|
||||||
A51194102E05A480007258CC /* QuickTerminalIntent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuickTerminalIntent.swift; sourceTree = "<group>"; };
|
|
||||||
A51194122E05D003007258CC /* Optional+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Optional+Extension.swift"; sourceTree = "<group>"; };
|
|
||||||
A51194162E05D95E007258CC /* PermissionRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PermissionRequest.swift; sourceTree = "<group>"; };
|
|
||||||
A51194182E05DFBB007258CC /* IntentPermission.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntentPermission.swift; sourceTree = "<group>"; };
|
|
||||||
A514C8D52B54A16400493A16 /* Ghostty.Config.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Ghostty.Config.swift; sourceTree = "<group>"; };
|
A514C8D52B54A16400493A16 /* Ghostty.Config.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Ghostty.Config.swift; sourceTree = "<group>"; };
|
||||||
A51544FD2DFB1110009E85D8 /* TitlebarTabsTahoeTerminalWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TitlebarTabsTahoeTerminalWindow.swift; sourceTree = "<group>"; };
|
A51B78462AF4B58B00F3EDB9 /* TerminalWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TerminalWindow.swift; sourceTree = "<group>"; };
|
||||||
A51544FF2DFB112E009E85D8 /* TerminalTabsTitlebarTahoe.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = TerminalTabsTitlebarTahoe.xib; sourceTree = "<group>"; };
|
|
||||||
A51B78462AF4B58B00F3EDB9 /* TitlebarTabsVenturaTerminalWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TitlebarTabsVenturaTerminalWindow.swift; sourceTree = "<group>"; };
|
|
||||||
A51BFC1D2B2FB5CE00E92F16 /* About.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = About.xib; sourceTree = "<group>"; };
|
A51BFC1D2B2FB5CE00E92F16 /* About.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = About.xib; sourceTree = "<group>"; };
|
||||||
A51BFC1F2B2FB64F00E92F16 /* AboutController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutController.swift; sourceTree = "<group>"; };
|
A51BFC1F2B2FB64F00E92F16 /* AboutController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutController.swift; sourceTree = "<group>"; };
|
||||||
A51BFC212B2FB6B400E92F16 /* AboutView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutView.swift; sourceTree = "<group>"; };
|
A51BFC212B2FB6B400E92F16 /* AboutView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutView.swift; sourceTree = "<group>"; };
|
||||||
@@ -196,10 +136,6 @@
|
|||||||
A5333E212B5A2128008AEFF7 /* SurfaceView_AppKit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SurfaceView_AppKit.swift; sourceTree = "<group>"; };
|
A5333E212B5A2128008AEFF7 /* SurfaceView_AppKit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SurfaceView_AppKit.swift; sourceTree = "<group>"; };
|
||||||
A53426342A7DA53D00EBB7A2 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
A53426342A7DA53D00EBB7A2 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||||
A535B9D9299C569B0017E2E4 /* ErrorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErrorView.swift; sourceTree = "<group>"; };
|
A535B9D9299C569B0017E2E4 /* ErrorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErrorView.swift; sourceTree = "<group>"; };
|
||||||
A53A297A2DB2E49400B6E02C /* CommandPalette.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommandPalette.swift; sourceTree = "<group>"; };
|
|
||||||
A53A297E2DB4480A00B6E02C /* EventModifiers+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "EventModifiers+Extension.swift"; sourceTree = "<group>"; };
|
|
||||||
A53A29802DB44A5E00B6E02C /* KeyboardShortcut+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "KeyboardShortcut+Extension.swift"; sourceTree = "<group>"; };
|
|
||||||
A53A29872DB69D2C00B6E02C /* TerminalCommandPalette.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TerminalCommandPalette.swift; sourceTree = "<group>"; };
|
|
||||||
A53A6C022CCC1B7D00943E98 /* Ghostty.Action.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Ghostty.Action.swift; sourceTree = "<group>"; };
|
A53A6C022CCC1B7D00943E98 /* Ghostty.Action.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Ghostty.Action.swift; sourceTree = "<group>"; };
|
||||||
A53D0C932B53B43700305CE6 /* iOSApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = iOSApp.swift; sourceTree = "<group>"; };
|
A53D0C932B53B43700305CE6 /* iOSApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = iOSApp.swift; sourceTree = "<group>"; };
|
||||||
A53D0C992B543F3B00305CE6 /* Ghostty.App.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Ghostty.App.swift; sourceTree = "<group>"; };
|
A53D0C992B543F3B00305CE6 /* Ghostty.App.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Ghostty.App.swift; sourceTree = "<group>"; };
|
||||||
@@ -209,14 +145,7 @@
|
|||||||
A54B0CEC2D0CFB7300CBEFF8 /* ColorizedGhosttyIcon.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ColorizedGhosttyIcon.swift; sourceTree = "<group>"; };
|
A54B0CEC2D0CFB7300CBEFF8 /* ColorizedGhosttyIcon.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ColorizedGhosttyIcon.swift; sourceTree = "<group>"; };
|
||||||
A54B0CEE2D0D2E2400CBEFF8 /* ColorizedGhosttyIconImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ColorizedGhosttyIconImage.swift; sourceTree = "<group>"; };
|
A54B0CEE2D0D2E2400CBEFF8 /* ColorizedGhosttyIconImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ColorizedGhosttyIconImage.swift; sourceTree = "<group>"; };
|
||||||
A54D786B2CA79788001B19B1 /* BaseTerminalController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseTerminalController.swift; sourceTree = "<group>"; };
|
A54D786B2CA79788001B19B1 /* BaseTerminalController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseTerminalController.swift; sourceTree = "<group>"; };
|
||||||
A54F45F32E1F047A0046BD5C /* GhosttyTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GhosttyTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
A55685DF29A03A9F004303CE /* AppError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppError.swift; sourceTree = "<group>"; };
|
||||||
A553F4122E06EB1600257779 /* Ghostty.icon */ = {isa = PBXFileReference; lastKnownFileType = folder.iconcomposer.icon; name = Ghostty.icon; path = ../images/Ghostty.icon; sourceTree = SOURCE_ROOT; };
|
|
||||||
A5593FDE2DF8D57100B47B10 /* TerminalWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TerminalWindow.swift; sourceTree = "<group>"; };
|
|
||||||
A5593FE02DF8D73400B47B10 /* HiddenTitlebarTerminalWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HiddenTitlebarTerminalWindow.swift; sourceTree = "<group>"; };
|
|
||||||
A5593FE22DF8D78600B47B10 /* TerminalHiddenTitlebar.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = TerminalHiddenTitlebar.xib; sourceTree = "<group>"; };
|
|
||||||
A5593FE42DF8DE3000B47B10 /* TerminalTabsTitlebarVentura.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = TerminalTabsTitlebarVentura.xib; sourceTree = "<group>"; };
|
|
||||||
A5593FE62DF927CC00B47B10 /* TransparentTitlebarTerminalWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransparentTitlebarTerminalWindow.swift; sourceTree = "<group>"; };
|
|
||||||
A5593FE82DF927DF00B47B10 /* TerminalTransparentTitlebar.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = TerminalTransparentTitlebar.xib; sourceTree = "<group>"; };
|
|
||||||
A55B7BB729B6F53A0055DE60 /* Package.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Package.swift; sourceTree = "<group>"; };
|
A55B7BB729B6F53A0055DE60 /* Package.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Package.swift; sourceTree = "<group>"; };
|
||||||
A55B7BBB29B6FC330055DE60 /* SurfaceView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SurfaceView.swift; sourceTree = "<group>"; };
|
A55B7BBB29B6FC330055DE60 /* SurfaceView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SurfaceView.swift; sourceTree = "<group>"; };
|
||||||
A56B880A2A840447007A0E29 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; };
|
A56B880A2A840447007A0E29 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = System/Library/Frameworks/Carbon.framework; sourceTree = SDKROOT; };
|
||||||
@@ -225,19 +154,14 @@
|
|||||||
A571AB1C2A206FC600248498 /* Ghostty-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Ghostty-Info.plist"; sourceTree = "<group>"; };
|
A571AB1C2A206FC600248498 /* Ghostty-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Ghostty-Info.plist"; sourceTree = "<group>"; };
|
||||||
A57D79262C9C8798001D522E /* SecureInput.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureInput.swift; sourceTree = "<group>"; };
|
A57D79262C9C8798001D522E /* SecureInput.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecureInput.swift; sourceTree = "<group>"; };
|
||||||
A586167B2B7703CC009BDB1D /* fish */ = {isa = PBXFileReference; lastKnownFileType = folder; name = fish; path = "../zig-out/share/fish"; sourceTree = "<group>"; };
|
A586167B2B7703CC009BDB1D /* fish */ = {isa = PBXFileReference; lastKnownFileType = folder; name = fish; path = "../zig-out/share/fish"; sourceTree = "<group>"; };
|
||||||
A586365E2DEE6C2100E04A10 /* SplitTree.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SplitTree.swift; sourceTree = "<group>"; };
|
|
||||||
A58636652DEF963F00E04A10 /* TerminalSplitTreeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TerminalSplitTreeView.swift; sourceTree = "<group>"; };
|
|
||||||
A586366A2DF0A98900E04A10 /* Array+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Array+Extension.swift"; sourceTree = "<group>"; };
|
|
||||||
A586366E2DF25D8300E04A10 /* Duration+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Duration+Extension.swift"; sourceTree = "<group>"; };
|
|
||||||
A58636702DF298F700E04A10 /* ExpiringUndoManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExpiringUndoManager.swift; sourceTree = "<group>"; };
|
|
||||||
A58636722DF4813000E04A10 /* UndoManager+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UndoManager+Extension.swift"; sourceTree = "<group>"; };
|
|
||||||
A5874D982DAD751A00E83852 /* CGS.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CGS.swift; sourceTree = "<group>"; };
|
|
||||||
A5874D9C2DAD785F00E83852 /* NSWindow+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSWindow+Extension.swift"; sourceTree = "<group>"; };
|
|
||||||
A59444F629A2ED5200725BBA /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = "<group>"; };
|
A59444F629A2ED5200725BBA /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = "<group>"; };
|
||||||
A59630962AEE163600D64628 /* HostingWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HostingWindow.swift; sourceTree = "<group>"; };
|
A59630962AEE163600D64628 /* HostingWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HostingWindow.swift; sourceTree = "<group>"; };
|
||||||
A59630992AEE1C6400D64628 /* Terminal.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = Terminal.xib; sourceTree = "<group>"; };
|
A59630992AEE1C6400D64628 /* Terminal.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = Terminal.xib; sourceTree = "<group>"; };
|
||||||
A596309B2AEE1C9E00D64628 /* TerminalController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TerminalController.swift; sourceTree = "<group>"; };
|
A596309B2AEE1C9E00D64628 /* TerminalController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TerminalController.swift; sourceTree = "<group>"; };
|
||||||
A596309D2AEE1D6C00D64628 /* TerminalView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TerminalView.swift; sourceTree = "<group>"; };
|
A596309D2AEE1D6C00D64628 /* TerminalView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TerminalView.swift; sourceTree = "<group>"; };
|
||||||
|
A596309F2AEF6AEB00D64628 /* TerminalManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TerminalManager.swift; sourceTree = "<group>"; };
|
||||||
|
A59630A12AF0415000D64628 /* Ghostty.TerminalSplit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Ghostty.TerminalSplit.swift; sourceTree = "<group>"; };
|
||||||
|
A59630A32AF059BB00D64628 /* Ghostty.SplitNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Ghostty.SplitNode.swift; sourceTree = "<group>"; };
|
||||||
A5985CD62C320C4500C57AD3 /* String+Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "String+Extension.swift"; sourceTree = "<group>"; };
|
A5985CD62C320C4500C57AD3 /* String+Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "String+Extension.swift"; sourceTree = "<group>"; };
|
||||||
A5985CE52C33060F00C57AD3 /* man */ = {isa = PBXFileReference; lastKnownFileType = folder; name = man; path = "../zig-out/share/man"; sourceTree = "<group>"; };
|
A5985CE52C33060F00C57AD3 /* man */ = {isa = PBXFileReference; lastKnownFileType = folder; name = man; path = "../zig-out/share/man"; sourceTree = "<group>"; };
|
||||||
A599CDAF2CF103F20049FA26 /* NSAppearance+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSAppearance+Extension.swift"; sourceTree = "<group>"; };
|
A599CDAF2CF103F20049FA26 /* NSAppearance+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSAppearance+Extension.swift"; sourceTree = "<group>"; };
|
||||||
@@ -246,12 +170,11 @@
|
|||||||
A5A1F8842A489D6800D1E8BC /* terminfo */ = {isa = PBXFileReference; lastKnownFileType = folder; name = terminfo; path = "../zig-out/share/terminfo"; sourceTree = "<group>"; };
|
A5A1F8842A489D6800D1E8BC /* terminfo */ = {isa = PBXFileReference; lastKnownFileType = folder; name = terminfo; path = "../zig-out/share/terminfo"; sourceTree = "<group>"; };
|
||||||
A5A2A3C92D4445E20033CF96 /* Dock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Dock.swift; sourceTree = "<group>"; };
|
A5A2A3C92D4445E20033CF96 /* Dock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Dock.swift; sourceTree = "<group>"; };
|
||||||
A5A2A3CB2D444AB80033CF96 /* NSApplication+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSApplication+Extension.swift"; sourceTree = "<group>"; };
|
A5A2A3CB2D444AB80033CF96 /* NSApplication+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSApplication+Extension.swift"; sourceTree = "<group>"; };
|
||||||
A5A6F7292CC41B8700B232A5 /* AppInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppInfo.swift; sourceTree = "<group>"; };
|
A5A6F7292CC41B8700B232A5 /* Xcode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Xcode.swift; sourceTree = "<group>"; };
|
||||||
A5AEB1642D5BE7BF00513529 /* LastWindowPosition.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LastWindowPosition.swift; sourceTree = "<group>"; };
|
A5AEB1642D5BE7BF00513529 /* LastWindowPosition.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LastWindowPosition.swift; sourceTree = "<group>"; };
|
||||||
A5B30531299BEAAA0047F10C /* Ghostty.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Ghostty.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
A5B30531299BEAAA0047F10C /* Ghostty.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Ghostty.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
A5B30538299BEAAB0047F10C /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
A5B30538299BEAAB0047F10C /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
||||||
A5B3053D299BEAAB0047F10C /* Ghostty.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Ghostty.entitlements; sourceTree = "<group>"; };
|
A5B3053D299BEAAB0047F10C /* Ghostty.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Ghostty.entitlements; sourceTree = "<group>"; };
|
||||||
A5B4EA842DFE69140022C3A2 /* NSMenuItem+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSMenuItem+Extension.swift"; sourceTree = "<group>"; };
|
|
||||||
A5CA378B2D2A4DE800931030 /* KeyboardLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyboardLayout.swift; sourceTree = "<group>"; };
|
A5CA378B2D2A4DE800931030 /* KeyboardLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyboardLayout.swift; sourceTree = "<group>"; };
|
||||||
A5CA378D2D31D6C100931030 /* Weak.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Weak.swift; sourceTree = "<group>"; };
|
A5CA378D2D31D6C100931030 /* Weak.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Weak.swift; sourceTree = "<group>"; };
|
||||||
A5CBD0552C9E65A50017A1AE /* DraggableWindowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DraggableWindowView.swift; sourceTree = "<group>"; };
|
A5CBD0552C9E65A50017A1AE /* DraggableWindowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DraggableWindowView.swift; sourceTree = "<group>"; };
|
||||||
@@ -278,20 +201,9 @@
|
|||||||
A5E112922AF73E6E00C6E0C2 /* ClipboardConfirmation.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ClipboardConfirmation.xib; sourceTree = "<group>"; };
|
A5E112922AF73E6E00C6E0C2 /* ClipboardConfirmation.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ClipboardConfirmation.xib; sourceTree = "<group>"; };
|
||||||
A5E112942AF73E8A00C6E0C2 /* ClipboardConfirmationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClipboardConfirmationController.swift; sourceTree = "<group>"; };
|
A5E112942AF73E8A00C6E0C2 /* ClipboardConfirmationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClipboardConfirmationController.swift; sourceTree = "<group>"; };
|
||||||
A5E112962AF7401B00C6E0C2 /* ClipboardConfirmationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClipboardConfirmationView.swift; sourceTree = "<group>"; };
|
A5E112962AF7401B00C6E0C2 /* ClipboardConfirmationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClipboardConfirmationView.swift; sourceTree = "<group>"; };
|
||||||
A5E408292E022E9B0035FEAC /* TabGroupCloseCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TabGroupCloseCoordinator.swift; sourceTree = "<group>"; };
|
|
||||||
A5E4082D2E0237410035FEAC /* NewTerminalIntent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewTerminalIntent.swift; sourceTree = "<group>"; };
|
|
||||||
A5E4082F2E0271320035FEAC /* GhosttyIntentError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GhosttyIntentError.swift; sourceTree = "<group>"; };
|
|
||||||
A5E408312E02FEDC0035FEAC /* TerminalEntity.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TerminalEntity.swift; sourceTree = "<group>"; };
|
|
||||||
A5E408332E03200F0035FEAC /* GetTerminalDetailsIntent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetTerminalDetailsIntent.swift; sourceTree = "<group>"; };
|
|
||||||
A5E408372E03C7D80035FEAC /* Ghostty.Surface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Ghostty.Surface.swift; sourceTree = "<group>"; };
|
|
||||||
A5E408392E0449BB0035FEAC /* Ghostty.Command.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Ghostty.Command.swift; sourceTree = "<group>"; };
|
|
||||||
A5E4083B2E044DB40035FEAC /* Ghostty.Error.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Ghostty.Error.swift; sourceTree = "<group>"; };
|
|
||||||
A5E4083F2E04532A0035FEAC /* CommandEntity.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommandEntity.swift; sourceTree = "<group>"; };
|
|
||||||
A5E408422E047D060035FEAC /* CommandPaletteIntent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommandPaletteIntent.swift; sourceTree = "<group>"; };
|
|
||||||
A5E408442E0483F80035FEAC /* KeybindIntent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeybindIntent.swift; sourceTree = "<group>"; };
|
|
||||||
A5E408462E0485270035FEAC /* InputIntent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InputIntent.swift; sourceTree = "<group>"; };
|
|
||||||
A5FEB2FF2ABB69450068369E /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = "<group>"; };
|
A5FEB2FF2ABB69450068369E /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = "<group>"; };
|
||||||
AEE8B3442B9AA39600260C5E /* NSPasteboard+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSPasteboard+Extension.swift"; sourceTree = "<group>"; };
|
AEE8B3442B9AA39600260C5E /* NSPasteboard+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSPasteboard+Extension.swift"; sourceTree = "<group>"; };
|
||||||
|
AEF9CE232B6AD07A0017E195 /* TerminalToolbar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TerminalToolbar.swift; sourceTree = "<group>"; };
|
||||||
C159E81C2B66A06B00FDFE9C /* OSColor+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "OSColor+Extension.swift"; sourceTree = "<group>"; };
|
C159E81C2B66A06B00FDFE9C /* OSColor+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "OSColor+Extension.swift"; sourceTree = "<group>"; };
|
||||||
C1F26EA62B738B9900404083 /* NSView+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSView+Extension.swift"; sourceTree = "<group>"; };
|
C1F26EA62B738B9900404083 /* NSView+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSView+Extension.swift"; sourceTree = "<group>"; };
|
||||||
C1F26EE72B76CBFC00404083 /* VibrantLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VibrantLayer.h; sourceTree = "<group>"; };
|
C1F26EE72B76CBFC00404083 /* VibrantLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VibrantLayer.h; sourceTree = "<group>"; };
|
||||||
@@ -302,18 +214,7 @@
|
|||||||
FC9ABA9B2D0F538D0020D4C8 /* bash-completion */ = {isa = PBXFileReference; lastKnownFileType = folder; name = "bash-completion"; path = "../zig-out/share/bash-completion"; sourceTree = "<group>"; };
|
FC9ABA9B2D0F538D0020D4C8 /* bash-completion */ = {isa = PBXFileReference; lastKnownFileType = folder; name = "bash-completion"; path = "../zig-out/share/bash-completion"; sourceTree = "<group>"; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
/* Begin PBXFileSystemSynchronizedRootGroup section */
|
|
||||||
A54F45F42E1F047A0046BD5C /* Tests */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = Tests; sourceTree = "<group>"; };
|
|
||||||
/* End PBXFileSystemSynchronizedRootGroup section */
|
|
||||||
|
|
||||||
/* Begin PBXFrameworksBuildPhase section */
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
A54F45F02E1F047A0046BD5C /* Frameworks */ = {
|
|
||||||
isa = PBXFrameworksBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
};
|
|
||||||
A5B3052E299BEAAA0047F10C /* Frameworks */ = {
|
A5B3052E299BEAAA0047F10C /* Frameworks */ = {
|
||||||
isa = PBXFrameworksBuildPhase;
|
isa = PBXFrameworksBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
@@ -360,11 +261,8 @@
|
|||||||
A56D58872ACDE6BE00508D2C /* Services */,
|
A56D58872ACDE6BE00508D2C /* Services */,
|
||||||
A59630982AEE1C4400D64628 /* Terminal */,
|
A59630982AEE1C4400D64628 /* Terminal */,
|
||||||
A5CBD05A2CA0C5910017A1AE /* QuickTerminal */,
|
A5CBD05A2CA0C5910017A1AE /* QuickTerminal */,
|
||||||
A5E4082C2E0237270035FEAC /* App Intents */,
|
|
||||||
A5E112912AF73E4D00C6E0C2 /* ClipboardConfirmation */,
|
A5E112912AF73E4D00C6E0C2 /* ClipboardConfirmation */,
|
||||||
A57D79252C9C8782001D522E /* Secure Input */,
|
A57D79252C9C8782001D522E /* Secure Input */,
|
||||||
A58636622DEF955100E04A10 /* Splits */,
|
|
||||||
A53A29742DB2E04900B6E02C /* Command Palette */,
|
|
||||||
A534263E2A7DCC5800EBB7A2 /* Settings */,
|
A534263E2A7DCC5800EBB7A2 /* Settings */,
|
||||||
A51BFC1C2B2FB5AB00E92F16 /* About */,
|
A51BFC1C2B2FB5AB00E92F16 /* About */,
|
||||||
A54B0CE72D0CEC9800CBEFF8 /* Colorized Ghostty Icon */,
|
A54B0CE72D0CEC9800CBEFF8 /* Colorized Ghostty Icon */,
|
||||||
@@ -376,25 +274,31 @@
|
|||||||
A534263D2A7DCBB000EBB7A2 /* Helpers */ = {
|
A534263D2A7DCBB000EBB7A2 /* Helpers */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
A58636692DF0A98100E04A10 /* Extensions */,
|
|
||||||
A5874D9B2DAD781100E83852 /* Private */,
|
|
||||||
A5A6F7292CC41B8700B232A5 /* AppInfo.swift */,
|
|
||||||
A5AEB1642D5BE7BF00513529 /* LastWindowPosition.swift */,
|
A5AEB1642D5BE7BF00513529 /* LastWindowPosition.swift */,
|
||||||
|
A5A6F7292CC41B8700B232A5 /* Xcode.swift */,
|
||||||
A5CEAFFE29C2410700646FDA /* Backport.swift */,
|
A5CEAFFE29C2410700646FDA /* Backport.swift */,
|
||||||
A5333E1B2B5A1CE3008AEFF7 /* CrossKit.swift */,
|
A5333E1B2B5A1CE3008AEFF7 /* CrossKit.swift */,
|
||||||
A5CBD0572C9F30860017A1AE /* Cursor.swift */,
|
A5CBD0572C9F30860017A1AE /* Cursor.swift */,
|
||||||
A5D0AF3C2B37804400D21823 /* CodableBridge.swift */,
|
A5D0AF3C2B37804400D21823 /* CodableBridge.swift */,
|
||||||
A5CBD0552C9E65A50017A1AE /* DraggableWindowView.swift */,
|
A5A2A3C92D4445E20033CF96 /* Dock.swift */,
|
||||||
A58636702DF298F700E04A10 /* ExpiringUndoManager.swift */,
|
|
||||||
A52FFF582CAA4FF1000C6A5B /* Fullscreen.swift */,
|
A52FFF582CAA4FF1000C6A5B /* Fullscreen.swift */,
|
||||||
A59630962AEE163600D64628 /* HostingWindow.swift */,
|
A59630962AEE163600D64628 /* HostingWindow.swift */,
|
||||||
A5CA378B2D2A4DE800931030 /* KeyboardLayout.swift */,
|
A5CA378B2D2A4DE800931030 /* KeyboardLayout.swift */,
|
||||||
A59FB5D02AE0DEA7009128F3 /* MetalView.swift */,
|
A59FB5D02AE0DEA7009128F3 /* MetalView.swift */,
|
||||||
A51194162E05D95E007258CC /* PermissionRequest.swift */,
|
A5CBD0552C9E65A50017A1AE /* DraggableWindowView.swift */,
|
||||||
A5E408292E022E9B0035FEAC /* TabGroupCloseCoordinator.swift */,
|
C159E81C2B66A06B00FDFE9C /* OSColor+Extension.swift */,
|
||||||
|
A599CDAF2CF103F20049FA26 /* NSAppearance+Extension.swift */,
|
||||||
|
A5A2A3CB2D444AB80033CF96 /* NSApplication+Extension.swift */,
|
||||||
|
A54B0CEA2D0CFB4A00CBEFF8 /* NSImage+Extension.swift */,
|
||||||
|
A52FFF5C2CAB4D05000C6A5B /* NSScreen+Extension.swift */,
|
||||||
|
C1F26EA62B738B9900404083 /* NSView+Extension.swift */,
|
||||||
|
AEE8B3442B9AA39600260C5E /* NSPasteboard+Extension.swift */,
|
||||||
|
A5985CD62C320C4500C57AD3 /* String+Extension.swift */,
|
||||||
|
A5CC36142C9CDA03004D6760 /* View+Extension.swift */,
|
||||||
A5CA378D2D31D6C100931030 /* Weak.swift */,
|
A5CA378D2D31D6C100931030 /* Weak.swift */,
|
||||||
C1F26EE72B76CBFC00404083 /* VibrantLayer.h */,
|
C1F26EE72B76CBFC00404083 /* VibrantLayer.h */,
|
||||||
C1F26EE82B76CBFC00404083 /* VibrantLayer.m */,
|
C1F26EE82B76CBFC00404083 /* VibrantLayer.m */,
|
||||||
|
A5CEAFDA29B8005900646FDA /* SplitView */,
|
||||||
);
|
);
|
||||||
path = Helpers;
|
path = Helpers;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -410,15 +314,6 @@
|
|||||||
path = Settings;
|
path = Settings;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
A53A29742DB2E04900B6E02C /* Command Palette */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
A53A297A2DB2E49400B6E02C /* CommandPalette.swift */,
|
|
||||||
A53A29872DB69D2C00B6E02C /* TerminalCommandPalette.swift */,
|
|
||||||
);
|
|
||||||
path = "Command Palette";
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
A53D0C912B53B41900305CE6 /* App */ = {
|
A53D0C912B53B41900305CE6 /* App */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
@@ -468,23 +363,6 @@
|
|||||||
path = Sources;
|
path = Sources;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
A5593FDD2DF8D56000B47B10 /* Window Styles */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
A59630992AEE1C6400D64628 /* Terminal.xib */,
|
|
||||||
A5593FE22DF8D78600B47B10 /* TerminalHiddenTitlebar.xib */,
|
|
||||||
A51544FF2DFB112E009E85D8 /* TerminalTabsTitlebarTahoe.xib */,
|
|
||||||
A5593FE42DF8DE3000B47B10 /* TerminalTabsTitlebarVentura.xib */,
|
|
||||||
A5593FE82DF927DF00B47B10 /* TerminalTransparentTitlebar.xib */,
|
|
||||||
A5593FDE2DF8D57100B47B10 /* TerminalWindow.swift */,
|
|
||||||
A5593FE02DF8D73400B47B10 /* HiddenTitlebarTerminalWindow.swift */,
|
|
||||||
A51B78462AF4B58B00F3EDB9 /* TitlebarTabsVenturaTerminalWindow.swift */,
|
|
||||||
A51544FD2DFB1110009E85D8 /* TitlebarTabsTahoeTerminalWindow.swift */,
|
|
||||||
A5593FE62DF927CC00B47B10 /* TransparentTitlebarTerminalWindow.swift */,
|
|
||||||
);
|
|
||||||
path = "Window Styles";
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
A55B7BB429B6F4410055DE60 /* Ghostty */ = {
|
A55B7BB429B6F4410055DE60 /* Ghostty */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
@@ -494,14 +372,14 @@
|
|||||||
A5333E152B59DE8E008AEFF7 /* SurfaceView_UIKit.swift */,
|
A5333E152B59DE8E008AEFF7 /* SurfaceView_UIKit.swift */,
|
||||||
A59FB5CE2AE0DB50009128F3 /* InspectorView.swift */,
|
A59FB5CE2AE0DB50009128F3 /* InspectorView.swift */,
|
||||||
A53D0C992B543F3B00305CE6 /* Ghostty.App.swift */,
|
A53D0C992B543F3B00305CE6 /* Ghostty.App.swift */,
|
||||||
A5E408392E0449BB0035FEAC /* Ghostty.Command.swift */,
|
|
||||||
A514C8D52B54A16400493A16 /* Ghostty.Config.swift */,
|
A514C8D52B54A16400493A16 /* Ghostty.Config.swift */,
|
||||||
A53A6C022CCC1B7D00943E98 /* Ghostty.Action.swift */,
|
A53A6C022CCC1B7D00943E98 /* Ghostty.Action.swift */,
|
||||||
A5E4083B2E044DB40035FEAC /* Ghostty.Error.swift */,
|
|
||||||
A5CF66D62D29DDB100139794 /* Ghostty.Event.swift */,
|
A5CF66D62D29DDB100139794 /* Ghostty.Event.swift */,
|
||||||
A5278A9A2AA05B2600CD3039 /* Ghostty.Input.swift */,
|
A5278A9A2AA05B2600CD3039 /* Ghostty.Input.swift */,
|
||||||
A56D58852ACDDB4100508D2C /* Ghostty.Shell.swift */,
|
A56D58852ACDDB4100508D2C /* Ghostty.Shell.swift */,
|
||||||
A5E408372E03C7D80035FEAC /* Ghostty.Surface.swift */,
|
A59630A32AF059BB00D64628 /* Ghostty.SplitNode.swift */,
|
||||||
|
A59630A12AF0415000D64628 /* Ghostty.TerminalSplit.swift */,
|
||||||
|
A55685DF29A03A9F004303CE /* AppError.swift */,
|
||||||
A52FFF5A2CAA54A8000C6A5B /* FullscreenMode+Extension.swift */,
|
A52FFF5A2CAA54A8000C6A5B /* FullscreenMode+Extension.swift */,
|
||||||
A5CF66D32D289CEA00139794 /* NSEvent+Extension.swift */,
|
A5CF66D32D289CEA00139794 /* NSEvent+Extension.swift */,
|
||||||
);
|
);
|
||||||
@@ -525,60 +403,16 @@
|
|||||||
path = "Secure Input";
|
path = "Secure Input";
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
A58636622DEF955100E04A10 /* Splits */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
A586365E2DEE6C2100E04A10 /* SplitTree.swift */,
|
|
||||||
A58636652DEF963F00E04A10 /* TerminalSplitTreeView.swift */,
|
|
||||||
A5CEAFDB29B8009000646FDA /* SplitView.swift */,
|
|
||||||
A5CEAFDD29B8058B00646FDA /* SplitView.Divider.swift */,
|
|
||||||
);
|
|
||||||
path = Splits;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
A58636692DF0A98100E04A10 /* Extensions */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
A586366A2DF0A98900E04A10 /* Array+Extension.swift */,
|
|
||||||
A50297342DFA0F3300B4E924 /* Double+Extension.swift */,
|
|
||||||
A586366E2DF25D8300E04A10 /* Duration+Extension.swift */,
|
|
||||||
A505D21C2E1A2F9E0018808F /* FileHandle+Extension.swift */,
|
|
||||||
A53A29802DB44A5E00B6E02C /* KeyboardShortcut+Extension.swift */,
|
|
||||||
A53A297E2DB4480A00B6E02C /* EventModifiers+Extension.swift */,
|
|
||||||
A51194122E05D003007258CC /* Optional+Extension.swift */,
|
|
||||||
C159E81C2B66A06B00FDFE9C /* OSColor+Extension.swift */,
|
|
||||||
A599CDAF2CF103F20049FA26 /* NSAppearance+Extension.swift */,
|
|
||||||
A5A2A3CB2D444AB80033CF96 /* NSApplication+Extension.swift */,
|
|
||||||
A54B0CEA2D0CFB4A00CBEFF8 /* NSImage+Extension.swift */,
|
|
||||||
A5B4EA842DFE69140022C3A2 /* NSMenuItem+Extension.swift */,
|
|
||||||
A52FFF5C2CAB4D05000C6A5B /* NSScreen+Extension.swift */,
|
|
||||||
AEE8B3442B9AA39600260C5E /* NSPasteboard+Extension.swift */,
|
|
||||||
C1F26EA62B738B9900404083 /* NSView+Extension.swift */,
|
|
||||||
A5874D9C2DAD785F00E83852 /* NSWindow+Extension.swift */,
|
|
||||||
A505D21E2E1B6DDC0018808F /* NSWorkspace+Extension.swift */,
|
|
||||||
A5985CD62C320C4500C57AD3 /* String+Extension.swift */,
|
|
||||||
A58636722DF4813000E04A10 /* UndoManager+Extension.swift */,
|
|
||||||
A5CC36142C9CDA03004D6760 /* View+Extension.swift */,
|
|
||||||
);
|
|
||||||
path = Extensions;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
A5874D9B2DAD781100E83852 /* Private */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
A5874D982DAD751A00E83852 /* CGS.swift */,
|
|
||||||
A5A2A3C92D4445E20033CF96 /* Dock.swift */,
|
|
||||||
);
|
|
||||||
path = Private;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
A59630982AEE1C4400D64628 /* Terminal */ = {
|
A59630982AEE1C4400D64628 /* Terminal */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
A5593FDD2DF8D56000B47B10 /* Window Styles */,
|
A59630992AEE1C6400D64628 /* Terminal.xib */,
|
||||||
|
A596309F2AEF6AEB00D64628 /* TerminalManager.swift */,
|
||||||
A596309B2AEE1C9E00D64628 /* TerminalController.swift */,
|
A596309B2AEE1C9E00D64628 /* TerminalController.swift */,
|
||||||
A5D0AF3A2B36A1DE00D21823 /* TerminalRestorable.swift */,
|
A5D0AF3A2B36A1DE00D21823 /* TerminalRestorable.swift */,
|
||||||
A596309D2AEE1D6C00D64628 /* TerminalView.swift */,
|
A596309D2AEE1D6C00D64628 /* TerminalView.swift */,
|
||||||
|
A51B78462AF4B58B00F3EDB9 /* TerminalWindow.swift */,
|
||||||
|
AEF9CE232B6AD07A0017E195 /* TerminalToolbar.swift */,
|
||||||
A535B9D9299C569B0017E2E4 /* ErrorView.swift */,
|
A535B9D9299C569B0017E2E4 /* ErrorView.swift */,
|
||||||
A54D786B2CA79788001B19B1 /* BaseTerminalController.swift */,
|
A54D786B2CA79788001B19B1 /* BaseTerminalController.swift */,
|
||||||
);
|
);
|
||||||
@@ -607,12 +441,10 @@
|
|||||||
children = (
|
children = (
|
||||||
A571AB1C2A206FC600248498 /* Ghostty-Info.plist */,
|
A571AB1C2A206FC600248498 /* Ghostty-Info.plist */,
|
||||||
A5B30538299BEAAB0047F10C /* Assets.xcassets */,
|
A5B30538299BEAAB0047F10C /* Assets.xcassets */,
|
||||||
A553F4122E06EB1600257779 /* Ghostty.icon */,
|
|
||||||
A5B3053D299BEAAB0047F10C /* Ghostty.entitlements */,
|
A5B3053D299BEAAB0047F10C /* Ghostty.entitlements */,
|
||||||
A51BFC282B30F26D00E92F16 /* GhosttyDebug.entitlements */,
|
A51BFC282B30F26D00E92F16 /* GhosttyDebug.entitlements */,
|
||||||
3B39CAA42B33949B00DABEB8 /* GhosttyReleaseLocal.entitlements */,
|
3B39CAA42B33949B00DABEB8 /* GhosttyReleaseLocal.entitlements */,
|
||||||
A54CD6ED299BEB14008C95BB /* Sources */,
|
A54CD6ED299BEB14008C95BB /* Sources */,
|
||||||
A54F45F42E1F047A0046BD5C /* Tests */,
|
|
||||||
A5D495A3299BECBA00DD1313 /* Frameworks */,
|
A5D495A3299BECBA00DD1313 /* Frameworks */,
|
||||||
A5A1F8862A489D7400D1E8BC /* Resources */,
|
A5A1F8862A489D7400D1E8BC /* Resources */,
|
||||||
A5B30532299BEAAA0047F10C /* Products */,
|
A5B30532299BEAAA0047F10C /* Products */,
|
||||||
@@ -624,7 +456,6 @@
|
|||||||
children = (
|
children = (
|
||||||
A5B30531299BEAAA0047F10C /* Ghostty.app */,
|
A5B30531299BEAAA0047F10C /* Ghostty.app */,
|
||||||
A5D4499D2B53AE7B000F5B83 /* Ghostty-iOS.app */,
|
A5D4499D2B53AE7B000F5B83 /* Ghostty-iOS.app */,
|
||||||
A54F45F32E1F047A0046BD5C /* GhosttyTests.xctest */,
|
|
||||||
);
|
);
|
||||||
name = Products;
|
name = Products;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -650,6 +481,15 @@
|
|||||||
path = "Global Keybinds";
|
path = "Global Keybinds";
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
A5CEAFDA29B8005900646FDA /* SplitView */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
A5CEAFDB29B8009000646FDA /* SplitView.swift */,
|
||||||
|
A5CEAFDD29B8058B00646FDA /* SplitView.Divider.swift */,
|
||||||
|
);
|
||||||
|
path = SplitView;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
A5D495A3299BECBA00DD1313 /* Frameworks */ = {
|
A5D495A3299BECBA00DD1313 /* Frameworks */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
@@ -669,58 +509,9 @@
|
|||||||
path = ClipboardConfirmation;
|
path = ClipboardConfirmation;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
A5E4082C2E0237270035FEAC /* App Intents */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
A5E408412E0453370035FEAC /* Entities */,
|
|
||||||
A511940E2E050590007258CC /* CloseTerminalIntent.swift */,
|
|
||||||
A5E4082D2E0237410035FEAC /* NewTerminalIntent.swift */,
|
|
||||||
A5E408332E03200F0035FEAC /* GetTerminalDetailsIntent.swift */,
|
|
||||||
A51194102E05A480007258CC /* QuickTerminalIntent.swift */,
|
|
||||||
A5E408422E047D060035FEAC /* CommandPaletteIntent.swift */,
|
|
||||||
A5E408462E0485270035FEAC /* InputIntent.swift */,
|
|
||||||
A5E408442E0483F80035FEAC /* KeybindIntent.swift */,
|
|
||||||
A5E4082F2E0271320035FEAC /* GhosttyIntentError.swift */,
|
|
||||||
A51194182E05DFBB007258CC /* IntentPermission.swift */,
|
|
||||||
);
|
|
||||||
path = "App Intents";
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
A5E408412E0453370035FEAC /* Entities */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
A5E408312E02FEDC0035FEAC /* TerminalEntity.swift */,
|
|
||||||
A5E4083F2E04532A0035FEAC /* CommandEntity.swift */,
|
|
||||||
);
|
|
||||||
path = Entities;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
/* End PBXGroup section */
|
/* End PBXGroup section */
|
||||||
|
|
||||||
/* Begin PBXNativeTarget section */
|
/* Begin PBXNativeTarget section */
|
||||||
A54F45F22E1F047A0046BD5C /* GhosttyTests */ = {
|
|
||||||
isa = PBXNativeTarget;
|
|
||||||
buildConfigurationList = A54F45FC2E1F047A0046BD5C /* Build configuration list for PBXNativeTarget "GhosttyTests" */;
|
|
||||||
buildPhases = (
|
|
||||||
A54F45EF2E1F047A0046BD5C /* Sources */,
|
|
||||||
A54F45F02E1F047A0046BD5C /* Frameworks */,
|
|
||||||
A54F45F12E1F047A0046BD5C /* Resources */,
|
|
||||||
);
|
|
||||||
buildRules = (
|
|
||||||
);
|
|
||||||
dependencies = (
|
|
||||||
A54F45F82E1F047A0046BD5C /* PBXTargetDependency */,
|
|
||||||
);
|
|
||||||
fileSystemSynchronizedGroups = (
|
|
||||||
A54F45F42E1F047A0046BD5C /* Tests */,
|
|
||||||
);
|
|
||||||
name = GhosttyTests;
|
|
||||||
packageProductDependencies = (
|
|
||||||
);
|
|
||||||
productName = GhosttyTests;
|
|
||||||
productReference = A54F45F32E1F047A0046BD5C /* GhosttyTests.xctest */;
|
|
||||||
productType = "com.apple.product-type.bundle.unit-test";
|
|
||||||
};
|
|
||||||
A5B30530299BEAAA0047F10C /* Ghostty */ = {
|
A5B30530299BEAAA0047F10C /* Ghostty */ = {
|
||||||
isa = PBXNativeTarget;
|
isa = PBXNativeTarget;
|
||||||
buildConfigurationList = A5B30540299BEAAB0047F10C /* Build configuration list for PBXNativeTarget "Ghostty" */;
|
buildConfigurationList = A5B30540299BEAAB0047F10C /* Build configuration list for PBXNativeTarget "Ghostty" */;
|
||||||
@@ -765,13 +556,9 @@
|
|||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
BuildIndependentTargetsInParallel = 1;
|
BuildIndependentTargetsInParallel = 1;
|
||||||
LastSwiftUpdateCheck = 2600;
|
LastSwiftUpdateCheck = 1520;
|
||||||
LastUpgradeCheck = 1610;
|
LastUpgradeCheck = 1610;
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
A54F45F22E1F047A0046BD5C = {
|
|
||||||
CreatedOnToolsVersion = 26.0;
|
|
||||||
TestTargetID = A5B30530299BEAAA0047F10C;
|
|
||||||
};
|
|
||||||
A5B30530299BEAAA0047F10C = {
|
A5B30530299BEAAA0047F10C = {
|
||||||
CreatedOnToolsVersion = 14.2;
|
CreatedOnToolsVersion = 14.2;
|
||||||
LastSwiftMigration = 1510;
|
LastSwiftMigration = 1510;
|
||||||
@@ -799,30 +586,19 @@
|
|||||||
targets = (
|
targets = (
|
||||||
A5B30530299BEAAA0047F10C /* Ghostty */,
|
A5B30530299BEAAA0047F10C /* Ghostty */,
|
||||||
A5D4499C2B53AE7B000F5B83 /* Ghostty-iOS */,
|
A5D4499C2B53AE7B000F5B83 /* Ghostty-iOS */,
|
||||||
A54F45F22E1F047A0046BD5C /* GhosttyTests */,
|
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
/* End PBXProject section */
|
/* End PBXProject section */
|
||||||
|
|
||||||
/* Begin PBXResourcesBuildPhase section */
|
/* Begin PBXResourcesBuildPhase section */
|
||||||
A54F45F12E1F047A0046BD5C /* Resources */ = {
|
|
||||||
isa = PBXResourcesBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
};
|
|
||||||
A5B3052F299BEAAA0047F10C /* Resources */ = {
|
A5B3052F299BEAAA0047F10C /* Resources */ = {
|
||||||
isa = PBXResourcesBuildPhase;
|
isa = PBXResourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
FC9ABA9C2D0F53F80020D4C8 /* bash-completion in Resources */,
|
FC9ABA9C2D0F53F80020D4C8 /* bash-completion in Resources */,
|
||||||
A553F4142E06EB1600257779 /* Ghostty.icon in Resources */,
|
|
||||||
A5593FE52DF8DE3000B47B10 /* TerminalTabsTitlebarVentura.xib in Resources */,
|
|
||||||
29C15B1D2CDC3B2900520DD4 /* bat in Resources */,
|
29C15B1D2CDC3B2900520DD4 /* bat in Resources */,
|
||||||
A586167C2B7703CC009BDB1D /* fish in Resources */,
|
A586167C2B7703CC009BDB1D /* fish in Resources */,
|
||||||
55154BE02B33911F001622DC /* ghostty in Resources */,
|
55154BE02B33911F001622DC /* ghostty in Resources */,
|
||||||
A5593FE32DF8D78600B47B10 /* TerminalHiddenTitlebar.xib in Resources */,
|
|
||||||
A546F1142D7B68D7003B11A0 /* locale in Resources */,
|
A546F1142D7B68D7003B11A0 /* locale in Resources */,
|
||||||
A5985CE62C33060F00C57AD3 /* man in Resources */,
|
A5985CE62C33060F00C57AD3 /* man in Resources */,
|
||||||
9351BE8E3D22937F003B3499 /* nvim in Resources */,
|
9351BE8E3D22937F003B3499 /* nvim in Resources */,
|
||||||
@@ -831,12 +607,10 @@
|
|||||||
FC5218FA2D10FFCE004C93E0 /* zsh in Resources */,
|
FC5218FA2D10FFCE004C93E0 /* zsh in Resources */,
|
||||||
A5B30539299BEAAB0047F10C /* Assets.xcassets in Resources */,
|
A5B30539299BEAAB0047F10C /* Assets.xcassets in Resources */,
|
||||||
A51BFC1E2B2FB5CE00E92F16 /* About.xib in Resources */,
|
A51BFC1E2B2FB5CE00E92F16 /* About.xib in Resources */,
|
||||||
A5593FE92DF927DF00B47B10 /* TerminalTransparentTitlebar.xib in Resources */,
|
|
||||||
A5E112932AF73E6E00C6E0C2 /* ClipboardConfirmation.xib in Resources */,
|
A5E112932AF73E6E00C6E0C2 /* ClipboardConfirmation.xib in Resources */,
|
||||||
A5CDF1912AAF9A5800513312 /* ConfigurationErrors.xib in Resources */,
|
A5CDF1912AAF9A5800513312 /* ConfigurationErrors.xib in Resources */,
|
||||||
857F63812A5E64F200CA4815 /* MainMenu.xib in Resources */,
|
857F63812A5E64F200CA4815 /* MainMenu.xib in Resources */,
|
||||||
A596309A2AEE1C6400D64628 /* Terminal.xib in Resources */,
|
A596309A2AEE1C6400D64628 /* Terminal.xib in Resources */,
|
||||||
A51545002DFB112E009E85D8 /* TerminalTabsTitlebarTahoe.xib in Resources */,
|
|
||||||
A5CBD05C2CA0C5C70017A1AE /* QuickTerminal.xib in Resources */,
|
A5CBD05C2CA0C5C70017A1AE /* QuickTerminal.xib in Resources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
@@ -846,122 +620,82 @@
|
|||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
A53D0C952B53B4D800305CE6 /* Assets.xcassets in Resources */,
|
A53D0C952B53B4D800305CE6 /* Assets.xcassets in Resources */,
|
||||||
A553F4132E06EB1600257779 /* Ghostty.icon in Resources */,
|
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
/* End PBXResourcesBuildPhase section */
|
/* End PBXResourcesBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXSourcesBuildPhase section */
|
/* Begin PBXSourcesBuildPhase section */
|
||||||
A54F45EF2E1F047A0046BD5C /* Sources */ = {
|
|
||||||
isa = PBXSourcesBuildPhase;
|
|
||||||
buildActionMask = 2147483647;
|
|
||||||
files = (
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
|
||||||
};
|
|
||||||
A5B3052D299BEAAA0047F10C /* Sources */ = {
|
A5B3052D299BEAAA0047F10C /* Sources */ = {
|
||||||
isa = PBXSourcesBuildPhase;
|
isa = PBXSourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
A5AEB1652D5BE7D000513529 /* LastWindowPosition.swift in Sources */,
|
A5AEB1652D5BE7D000513529 /* LastWindowPosition.swift in Sources */,
|
||||||
A5E408432E047D0B0035FEAC /* CommandPaletteIntent.swift in Sources */,
|
A59630A42AF059BB00D64628 /* Ghostty.SplitNode.swift in Sources */,
|
||||||
A514C8D62B54A16400493A16 /* Ghostty.Config.swift in Sources */,
|
A514C8D62B54A16400493A16 /* Ghostty.Config.swift in Sources */,
|
||||||
A54B0CEB2D0CFB4C00CBEFF8 /* NSImage+Extension.swift in Sources */,
|
A54B0CEB2D0CFB4C00CBEFF8 /* NSImage+Extension.swift in Sources */,
|
||||||
A5874D9D2DAD786100E83852 /* NSWindow+Extension.swift in Sources */,
|
|
||||||
A54D786C2CA7978E001B19B1 /* BaseTerminalController.swift in Sources */,
|
A54D786C2CA7978E001B19B1 /* BaseTerminalController.swift in Sources */,
|
||||||
A58636732DF4813400E04A10 /* UndoManager+Extension.swift in Sources */,
|
|
||||||
A505D21D2E1A2FA20018808F /* FileHandle+Extension.swift in Sources */,
|
|
||||||
A59FB5CF2AE0DB50009128F3 /* InspectorView.swift in Sources */,
|
A59FB5CF2AE0DB50009128F3 /* InspectorView.swift in Sources */,
|
||||||
CFBB5FEA2D231E5000FD62EE /* QuickTerminalSpaceBehavior.swift in Sources */,
|
CFBB5FEA2D231E5000FD62EE /* QuickTerminalSpaceBehavior.swift in Sources */,
|
||||||
A54B0CE92D0CECD100CBEFF8 /* ColorizedGhosttyIconView.swift in Sources */,
|
A54B0CE92D0CECD100CBEFF8 /* ColorizedGhosttyIconView.swift in Sources */,
|
||||||
A5D0AF3D2B37804400D21823 /* CodableBridge.swift in Sources */,
|
A5D0AF3D2B37804400D21823 /* CodableBridge.swift in Sources */,
|
||||||
A51194132E05D006007258CC /* Optional+Extension.swift in Sources */,
|
|
||||||
A5D0AF3B2B36A1DE00D21823 /* TerminalRestorable.swift in Sources */,
|
A5D0AF3B2B36A1DE00D21823 /* TerminalRestorable.swift in Sources */,
|
||||||
C1F26EA72B738B9900404083 /* NSView+Extension.swift in Sources */,
|
C1F26EA72B738B9900404083 /* NSView+Extension.swift in Sources */,
|
||||||
A586366F2DF25D8600E04A10 /* Duration+Extension.swift in Sources */,
|
|
||||||
A5CF66D42D289CEE00139794 /* NSEvent+Extension.swift in Sources */,
|
A5CF66D42D289CEE00139794 /* NSEvent+Extension.swift in Sources */,
|
||||||
A5E408342E0320140035FEAC /* GetTerminalDetailsIntent.swift in Sources */,
|
|
||||||
A5CBD0642CA122E70017A1AE /* QuickTerminalPosition.swift in Sources */,
|
A5CBD0642CA122E70017A1AE /* QuickTerminalPosition.swift in Sources */,
|
||||||
A596309C2AEE1C9E00D64628 /* TerminalController.swift in Sources */,
|
A596309C2AEE1C9E00D64628 /* TerminalController.swift in Sources */,
|
||||||
A5E408322E02FEDF0035FEAC /* TerminalEntity.swift in Sources */,
|
|
||||||
A5CC36152C9CDA06004D6760 /* View+Extension.swift in Sources */,
|
A5CC36152C9CDA06004D6760 /* View+Extension.swift in Sources */,
|
||||||
A56D58892ACDE6CA00508D2C /* ServiceProvider.swift in Sources */,
|
A56D58892ACDE6CA00508D2C /* ServiceProvider.swift in Sources */,
|
||||||
A5CBD0602CA0C90A0017A1AE /* QuickTerminalWindow.swift in Sources */,
|
A5CBD0602CA0C90A0017A1AE /* QuickTerminalWindow.swift in Sources */,
|
||||||
A505D21F2E1B6DE00018808F /* NSWorkspace+Extension.swift in Sources */,
|
|
||||||
A5CBD05E2CA0C5EC0017A1AE /* QuickTerminalController.swift in Sources */,
|
A5CBD05E2CA0C5EC0017A1AE /* QuickTerminalController.swift in Sources */,
|
||||||
A5CF66D72D29DDB500139794 /* Ghostty.Event.swift in Sources */,
|
A5CF66D72D29DDB500139794 /* Ghostty.Event.swift in Sources */,
|
||||||
A511940F2E050595007258CC /* CloseTerminalIntent.swift in Sources */,
|
|
||||||
A5E408382E03C7DA0035FEAC /* Ghostty.Surface.swift in Sources */,
|
|
||||||
A5593FE72DF927D200B47B10 /* TransparentTitlebarTerminalWindow.swift in Sources */,
|
|
||||||
A5A2A3CA2D4445E30033CF96 /* Dock.swift in Sources */,
|
A5A2A3CA2D4445E30033CF96 /* Dock.swift in Sources */,
|
||||||
A586365F2DEE6C2300E04A10 /* SplitTree.swift in Sources */,
|
|
||||||
A51BFC222B2FB6B400E92F16 /* AboutView.swift in Sources */,
|
A51BFC222B2FB6B400E92F16 /* AboutView.swift in Sources */,
|
||||||
A5278A9B2AA05B2600CD3039 /* Ghostty.Input.swift in Sources */,
|
A5278A9B2AA05B2600CD3039 /* Ghostty.Input.swift in Sources */,
|
||||||
A53A29812DB44A6100B6E02C /* KeyboardShortcut+Extension.swift in Sources */,
|
|
||||||
A50297352DFA0F3400B4E924 /* Double+Extension.swift in Sources */,
|
|
||||||
A5CBD0562C9E65B80017A1AE /* DraggableWindowView.swift in Sources */,
|
A5CBD0562C9E65B80017A1AE /* DraggableWindowView.swift in Sources */,
|
||||||
A51194112E05A483007258CC /* QuickTerminalIntent.swift in Sources */,
|
|
||||||
C1F26EE92B76CBFC00404083 /* VibrantLayer.m in Sources */,
|
C1F26EE92B76CBFC00404083 /* VibrantLayer.m in Sources */,
|
||||||
A5593FDF2DF8D57C00B47B10 /* TerminalWindow.swift in Sources */,
|
|
||||||
A58636712DF298FB00E04A10 /* ExpiringUndoManager.swift in Sources */,
|
|
||||||
A59630972AEE163600D64628 /* HostingWindow.swift in Sources */,
|
A59630972AEE163600D64628 /* HostingWindow.swift in Sources */,
|
||||||
|
A59630A02AEF6AEB00D64628 /* TerminalManager.swift in Sources */,
|
||||||
A51BFC2B2B30F6BE00E92F16 /* UpdateDelegate.swift in Sources */,
|
A51BFC2B2B30F6BE00E92F16 /* UpdateDelegate.swift in Sources */,
|
||||||
A5CBD06B2CA322430017A1AE /* GlobalEventTap.swift in Sources */,
|
A5CBD06B2CA322430017A1AE /* GlobalEventTap.swift in Sources */,
|
||||||
AEE8B3452B9AA39600260C5E /* NSPasteboard+Extension.swift in Sources */,
|
AEE8B3452B9AA39600260C5E /* NSPasteboard+Extension.swift in Sources */,
|
||||||
A51194172E05D964007258CC /* PermissionRequest.swift in Sources */,
|
|
||||||
A51194192E05DFC4007258CC /* IntentPermission.swift in Sources */,
|
|
||||||
A52FFF5D2CAB4D08000C6A5B /* NSScreen+Extension.swift in Sources */,
|
A52FFF5D2CAB4D08000C6A5B /* NSScreen+Extension.swift in Sources */,
|
||||||
A53426352A7DA53D00EBB7A2 /* AppDelegate.swift in Sources */,
|
A53426352A7DA53D00EBB7A2 /* AppDelegate.swift in Sources */,
|
||||||
A5CBD0582C9F30960017A1AE /* Cursor.swift in Sources */,
|
A5CBD0582C9F30960017A1AE /* Cursor.swift in Sources */,
|
||||||
A5A6F72A2CC41B8900B232A5 /* AppInfo.swift in Sources */,
|
A5A6F72A2CC41B8900B232A5 /* Xcode.swift in Sources */,
|
||||||
A52FFF5B2CAA54B1000C6A5B /* FullscreenMode+Extension.swift in Sources */,
|
A52FFF5B2CAA54B1000C6A5B /* FullscreenMode+Extension.swift in Sources */,
|
||||||
A5333E222B5A2128008AEFF7 /* SurfaceView_AppKit.swift in Sources */,
|
A5333E222B5A2128008AEFF7 /* SurfaceView_AppKit.swift in Sources */,
|
||||||
A5CA378E2D31D6C300931030 /* Weak.swift in Sources */,
|
A5CA378E2D31D6C300931030 /* Weak.swift in Sources */,
|
||||||
A5CDF1952AAFA19600513312 /* ConfigurationErrorsView.swift in Sources */,
|
A5CDF1952AAFA19600513312 /* ConfigurationErrorsView.swift in Sources */,
|
||||||
A55B7BBC29B6FC330055DE60 /* SurfaceView.swift in Sources */,
|
A55B7BBC29B6FC330055DE60 /* SurfaceView.swift in Sources */,
|
||||||
A5333E1C2B5A1CE3008AEFF7 /* CrossKit.swift in Sources */,
|
A5333E1C2B5A1CE3008AEFF7 /* CrossKit.swift in Sources */,
|
||||||
A5B4EA852DFE691B0022C3A2 /* NSMenuItem+Extension.swift in Sources */,
|
|
||||||
A5874D992DAD751B00E83852 /* CGS.swift in Sources */,
|
|
||||||
A586366B2DF0A98C00E04A10 /* Array+Extension.swift in Sources */,
|
|
||||||
A5E408472E04852B0035FEAC /* InputIntent.swift in Sources */,
|
|
||||||
A51544FE2DFB111C009E85D8 /* TitlebarTabsTahoeTerminalWindow.swift in Sources */,
|
|
||||||
A59444F729A2ED5200725BBA /* SettingsView.swift in Sources */,
|
A59444F729A2ED5200725BBA /* SettingsView.swift in Sources */,
|
||||||
A56D58862ACDDB4100508D2C /* Ghostty.Shell.swift in Sources */,
|
A56D58862ACDDB4100508D2C /* Ghostty.Shell.swift in Sources */,
|
||||||
A5985CD72C320C4500C57AD3 /* String+Extension.swift in Sources */,
|
A5985CD72C320C4500C57AD3 /* String+Extension.swift in Sources */,
|
||||||
A5A2A3CC2D444ABB0033CF96 /* NSApplication+Extension.swift in Sources */,
|
A5A2A3CC2D444ABB0033CF96 /* NSApplication+Extension.swift in Sources */,
|
||||||
A5E408302E0271320035FEAC /* GhosttyIntentError.swift in Sources */,
|
A59630A22AF0415000D64628 /* Ghostty.TerminalSplit.swift in Sources */,
|
||||||
A5E4083A2E0449BD0035FEAC /* Ghostty.Command.swift in Sources */,
|
|
||||||
A5E408452E0483FD0035FEAC /* KeybindIntent.swift in Sources */,
|
|
||||||
A5FEB3002ABB69450068369E /* main.swift in Sources */,
|
A5FEB3002ABB69450068369E /* main.swift in Sources */,
|
||||||
A53A297F2DB4480F00B6E02C /* EventModifiers+Extension.swift in Sources */,
|
|
||||||
A5E4082E2E0237460035FEAC /* NewTerminalIntent.swift in Sources */,
|
|
||||||
A53A297B2DB2E49700B6E02C /* CommandPalette.swift in Sources */,
|
|
||||||
A55B7BB829B6F53A0055DE60 /* Package.swift in Sources */,
|
A55B7BB829B6F53A0055DE60 /* Package.swift in Sources */,
|
||||||
A51B78472AF4B58B00F3EDB9 /* TitlebarTabsVenturaTerminalWindow.swift in Sources */,
|
A51B78472AF4B58B00F3EDB9 /* TerminalWindow.swift in Sources */,
|
||||||
A57D79272C9C879B001D522E /* SecureInput.swift in Sources */,
|
A57D79272C9C879B001D522E /* SecureInput.swift in Sources */,
|
||||||
A5CEAFDC29B8009000646FDA /* SplitView.swift in Sources */,
|
A5CEAFDC29B8009000646FDA /* SplitView.swift in Sources */,
|
||||||
A5593FE12DF8D74000B47B10 /* HiddenTitlebarTerminalWindow.swift in Sources */,
|
|
||||||
A5E4083C2E044DB50035FEAC /* Ghostty.Error.swift in Sources */,
|
|
||||||
A5CDF1932AAF9E0800513312 /* ConfigurationErrorsController.swift in Sources */,
|
A5CDF1932AAF9E0800513312 /* ConfigurationErrorsController.swift in Sources */,
|
||||||
A53A6C032CCC1B7F00943E98 /* Ghostty.Action.swift in Sources */,
|
A53A6C032CCC1B7F00943E98 /* Ghostty.Action.swift in Sources */,
|
||||||
A54B0CED2D0CFB7700CBEFF8 /* ColorizedGhosttyIcon.swift in Sources */,
|
A54B0CED2D0CFB7700CBEFF8 /* ColorizedGhosttyIcon.swift in Sources */,
|
||||||
A5CA378C2D2A4DEB00931030 /* KeyboardLayout.swift in Sources */,
|
A5CA378C2D2A4DEB00931030 /* KeyboardLayout.swift in Sources */,
|
||||||
A54B0CEF2D0D2E2800CBEFF8 /* ColorizedGhosttyIconImage.swift in Sources */,
|
A54B0CEF2D0D2E2800CBEFF8 /* ColorizedGhosttyIconImage.swift in Sources */,
|
||||||
A59FB5D12AE0DEA7009128F3 /* MetalView.swift in Sources */,
|
A59FB5D12AE0DEA7009128F3 /* MetalView.swift in Sources */,
|
||||||
|
A55685E029A03A9F004303CE /* AppError.swift in Sources */,
|
||||||
A599CDB02CF103F60049FA26 /* NSAppearance+Extension.swift in Sources */,
|
A599CDB02CF103F60049FA26 /* NSAppearance+Extension.swift in Sources */,
|
||||||
A52FFF572CA90484000C6A5B /* QuickTerminalScreen.swift in Sources */,
|
A52FFF572CA90484000C6A5B /* QuickTerminalScreen.swift in Sources */,
|
||||||
A5CC36132C9CD72D004D6760 /* SecureInputOverlay.swift in Sources */,
|
A5CC36132C9CD72D004D6760 /* SecureInputOverlay.swift in Sources */,
|
||||||
A5E408402E04532C0035FEAC /* CommandEntity.swift in Sources */,
|
|
||||||
A5E4082A2E022E9E0035FEAC /* TabGroupCloseCoordinator.swift in Sources */,
|
|
||||||
A535B9DA299C569B0017E2E4 /* ErrorView.swift in Sources */,
|
A535B9DA299C569B0017E2E4 /* ErrorView.swift in Sources */,
|
||||||
A53A29882DB69D2F00B6E02C /* TerminalCommandPalette.swift in Sources */,
|
|
||||||
A51BFC202B2FB64F00E92F16 /* AboutController.swift in Sources */,
|
A51BFC202B2FB64F00E92F16 /* AboutController.swift in Sources */,
|
||||||
A5CEAFFF29C2410700646FDA /* Backport.swift in Sources */,
|
A5CEAFFF29C2410700646FDA /* Backport.swift in Sources */,
|
||||||
A5E112952AF73E8A00C6E0C2 /* ClipboardConfirmationController.swift in Sources */,
|
A5E112952AF73E8A00C6E0C2 /* ClipboardConfirmationController.swift in Sources */,
|
||||||
A596309E2AEE1D6C00D64628 /* TerminalView.swift in Sources */,
|
A596309E2AEE1D6C00D64628 /* TerminalView.swift in Sources */,
|
||||||
A58636662DEF964100E04A10 /* TerminalSplitTreeView.swift in Sources */,
|
|
||||||
A52FFF592CAA4FF3000C6A5B /* Fullscreen.swift in Sources */,
|
A52FFF592CAA4FF3000C6A5B /* Fullscreen.swift in Sources */,
|
||||||
|
AEF9CE242B6AD07A0017E195 /* TerminalToolbar.swift in Sources */,
|
||||||
C159E81D2B66A06B00FDFE9C /* OSColor+Extension.swift in Sources */,
|
C159E81D2B66A06B00FDFE9C /* OSColor+Extension.swift in Sources */,
|
||||||
A5CEAFDE29B8058B00646FDA /* SplitView.Divider.swift in Sources */,
|
A5CEAFDE29B8058B00646FDA /* SplitView.Divider.swift in Sources */,
|
||||||
A5E112972AF7401B00C6E0C2 /* ClipboardConfirmationView.swift in Sources */,
|
A5E112972AF7401B00C6E0C2 /* ClipboardConfirmationView.swift in Sources */,
|
||||||
@@ -974,7 +708,6 @@
|
|||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
A5CBD0592C9F37B10017A1AE /* Backport.swift in Sources */,
|
A5CBD0592C9F37B10017A1AE /* Backport.swift in Sources */,
|
||||||
A553F4062E05E93000257779 /* Optional+Extension.swift in Sources */,
|
|
||||||
A53D0C942B53B43700305CE6 /* iOSApp.swift in Sources */,
|
A53D0C942B53B43700305CE6 /* iOSApp.swift in Sources */,
|
||||||
A514C8D72B54A16400493A16 /* Ghostty.Config.swift in Sources */,
|
A514C8D72B54A16400493A16 /* Ghostty.Config.swift in Sources */,
|
||||||
A5333E232B5A219A008AEFF7 /* SurfaceView.swift in Sources */,
|
A5333E232B5A219A008AEFF7 /* SurfaceView.swift in Sources */,
|
||||||
@@ -984,21 +717,12 @@
|
|||||||
A53D0C9B2B543F3B00305CE6 /* Ghostty.App.swift in Sources */,
|
A53D0C9B2B543F3B00305CE6 /* Ghostty.App.swift in Sources */,
|
||||||
A5333E242B5A22D9008AEFF7 /* Ghostty.Shell.swift in Sources */,
|
A5333E242B5A22D9008AEFF7 /* Ghostty.Shell.swift in Sources */,
|
||||||
A5985CD82C320C4500C57AD3 /* String+Extension.swift in Sources */,
|
A5985CD82C320C4500C57AD3 /* String+Extension.swift in Sources */,
|
||||||
A553F4072E05E93D00257779 /* Array+Extension.swift in Sources */,
|
|
||||||
C159E89D2B69A2EF00FDFE9C /* OSColor+Extension.swift in Sources */,
|
C159E89D2B69A2EF00FDFE9C /* OSColor+Extension.swift in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
/* End PBXSourcesBuildPhase section */
|
/* End PBXSourcesBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXTargetDependency section */
|
|
||||||
A54F45F82E1F047A0046BD5C /* PBXTargetDependency */ = {
|
|
||||||
isa = PBXTargetDependency;
|
|
||||||
target = A5B30530299BEAAA0047F10C /* Ghostty */;
|
|
||||||
targetProxy = A54F45F72E1F047A0046BD5C /* PBXContainerItemProxy */;
|
|
||||||
};
|
|
||||||
/* End PBXTargetDependency section */
|
|
||||||
|
|
||||||
/* Begin XCBuildConfiguration section */
|
/* Begin XCBuildConfiguration section */
|
||||||
3B39CAA22B33946300DABEB8 /* ReleaseLocal */ = {
|
3B39CAA22B33946300DABEB8 /* ReleaseLocal */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
@@ -1058,7 +782,7 @@
|
|||||||
3B39CAA32B33946300DABEB8 /* ReleaseLocal */ = {
|
3B39CAA32B33946300DABEB8 /* ReleaseLocal */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = Ghostty;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||||
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO;
|
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
@@ -1108,76 +832,6 @@
|
|||||||
};
|
};
|
||||||
name = ReleaseLocal;
|
name = ReleaseLocal;
|
||||||
};
|
};
|
||||||
A54F45F92E1F047A0046BD5C /* Debug */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
CURRENT_PROJECT_VERSION = 1;
|
|
||||||
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu17;
|
|
||||||
GENERATE_INFOPLIST_FILE = YES;
|
|
||||||
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
|
|
||||||
MACOSX_DEPLOYMENT_TARGET = 15.5;
|
|
||||||
MARKETING_VERSION = 1.0;
|
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.mitchellh.GhosttyTests;
|
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
|
||||||
STRING_CATALOG_GENERATE_SYMBOLS = NO;
|
|
||||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
|
|
||||||
SWIFT_APPROACHABLE_CONCURRENCY = YES;
|
|
||||||
SWIFT_EMIT_LOC_STRINGS = NO;
|
|
||||||
SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
|
|
||||||
SWIFT_VERSION = 5.0;
|
|
||||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Ghostty.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/ghostty";
|
|
||||||
};
|
|
||||||
name = Debug;
|
|
||||||
};
|
|
||||||
A54F45FA2E1F047A0046BD5C /* Release */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
CURRENT_PROJECT_VERSION = 1;
|
|
||||||
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu17;
|
|
||||||
GENERATE_INFOPLIST_FILE = YES;
|
|
||||||
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
|
|
||||||
MACOSX_DEPLOYMENT_TARGET = 15.5;
|
|
||||||
MARKETING_VERSION = 1.0;
|
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.mitchellh.GhosttyTests;
|
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
|
||||||
STRING_CATALOG_GENERATE_SYMBOLS = NO;
|
|
||||||
SWIFT_APPROACHABLE_CONCURRENCY = YES;
|
|
||||||
SWIFT_EMIT_LOC_STRINGS = NO;
|
|
||||||
SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
|
|
||||||
SWIFT_VERSION = 5.0;
|
|
||||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Ghostty.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/ghostty";
|
|
||||||
};
|
|
||||||
name = Release;
|
|
||||||
};
|
|
||||||
A54F45FB2E1F047A0046BD5C /* ReleaseLocal */ = {
|
|
||||||
isa = XCBuildConfiguration;
|
|
||||||
buildSettings = {
|
|
||||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
|
||||||
CODE_SIGN_STYLE = Automatic;
|
|
||||||
CURRENT_PROJECT_VERSION = 1;
|
|
||||||
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu17;
|
|
||||||
GENERATE_INFOPLIST_FILE = YES;
|
|
||||||
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
|
|
||||||
MACOSX_DEPLOYMENT_TARGET = 15.5;
|
|
||||||
MARKETING_VERSION = 1.0;
|
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.mitchellh.GhosttyTests;
|
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
|
||||||
STRING_CATALOG_GENERATE_SYMBOLS = NO;
|
|
||||||
SWIFT_APPROACHABLE_CONCURRENCY = YES;
|
|
||||||
SWIFT_EMIT_LOC_STRINGS = NO;
|
|
||||||
SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
|
|
||||||
SWIFT_VERSION = 5.0;
|
|
||||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Ghostty.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/ghostty";
|
|
||||||
};
|
|
||||||
name = ReleaseLocal;
|
|
||||||
};
|
|
||||||
A5B3053E299BEAAB0047F10C /* Debug */ = {
|
A5B3053E299BEAAB0047F10C /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
@@ -1298,7 +952,7 @@
|
|||||||
A5B30541299BEAAB0047F10C /* Debug */ = {
|
A5B30541299BEAAB0047F10C /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = Ghostty;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||||
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO;
|
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
@@ -1352,7 +1006,7 @@
|
|||||||
A5B30542299BEAAB0047F10C /* Release */ = {
|
A5B30542299BEAAB0047F10C /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = Ghostty;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||||
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO;
|
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
@@ -1405,7 +1059,7 @@
|
|||||||
A5D449A82B53AE7B000F5B83 /* Debug */ = {
|
A5D449A82B53AE7B000F5B83 /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = Ghostty;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
||||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
@@ -1444,7 +1098,7 @@
|
|||||||
A5D449A92B53AE7B000F5B83 /* Release */ = {
|
A5D449A92B53AE7B000F5B83 /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = Ghostty;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
||||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
@@ -1483,7 +1137,7 @@
|
|||||||
A5D449AA2B53AE7B000F5B83 /* ReleaseLocal */ = {
|
A5D449AA2B53AE7B000F5B83 /* ReleaseLocal */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = Ghostty;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
||||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
@@ -1522,16 +1176,6 @@
|
|||||||
/* End XCBuildConfiguration section */
|
/* End XCBuildConfiguration section */
|
||||||
|
|
||||||
/* Begin XCConfigurationList section */
|
/* Begin XCConfigurationList section */
|
||||||
A54F45FC2E1F047A0046BD5C /* Build configuration list for PBXNativeTarget "GhosttyTests" */ = {
|
|
||||||
isa = XCConfigurationList;
|
|
||||||
buildConfigurations = (
|
|
||||||
A54F45F92E1F047A0046BD5C /* Debug */,
|
|
||||||
A54F45FA2E1F047A0046BD5C /* Release */,
|
|
||||||
A54F45FB2E1F047A0046BD5C /* ReleaseLocal */,
|
|
||||||
);
|
|
||||||
defaultConfigurationIsVisible = 0;
|
|
||||||
defaultConfigurationName = ReleaseLocal;
|
|
||||||
};
|
|
||||||
A5B3052C299BEAAA0047F10C /* Build configuration list for PBXProject "Ghostty" */ = {
|
A5B3052C299BEAAA0047F10C /* Build configuration list for PBXProject "Ghostty" */ = {
|
||||||
isa = XCConfigurationList;
|
isa = XCConfigurationList;
|
||||||
buildConfigurations = (
|
buildConfigurations = (
|
||||||
|
@@ -28,19 +28,6 @@
|
|||||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
shouldAutocreateTestPlan = "YES">
|
shouldAutocreateTestPlan = "YES">
|
||||||
<Testables>
|
|
||||||
<TestableReference
|
|
||||||
skipped = "NO"
|
|
||||||
parallelizable = "YES">
|
|
||||||
<BuildableReference
|
|
||||||
BuildableIdentifier = "primary"
|
|
||||||
BlueprintIdentifier = "A54F45F22E1F047A0046BD5C"
|
|
||||||
BuildableName = "GhosttyTests.xctest"
|
|
||||||
BlueprintName = "GhosttyTests"
|
|
||||||
ReferencedContainer = "container:Ghostty.xcodeproj">
|
|
||||||
</BuildableReference>
|
|
||||||
</TestableReference>
|
|
||||||
</Testables>
|
|
||||||
</TestAction>
|
</TestAction>
|
||||||
<LaunchAction
|
<LaunchAction
|
||||||
buildConfiguration = "Debug"
|
buildConfiguration = "Debug"
|
||||||
|
@@ -18,7 +18,6 @@ class AppDelegate: NSObject,
|
|||||||
)
|
)
|
||||||
|
|
||||||
/// Various menu items so that we can programmatically sync the keyboard shortcut with the Ghostty config
|
/// Various menu items so that we can programmatically sync the keyboard shortcut with the Ghostty config
|
||||||
@IBOutlet private var menuAbout: NSMenuItem?
|
|
||||||
@IBOutlet private var menuServices: NSMenu?
|
@IBOutlet private var menuServices: NSMenu?
|
||||||
@IBOutlet private var menuCheckForUpdates: NSMenuItem?
|
@IBOutlet private var menuCheckForUpdates: NSMenuItem?
|
||||||
@IBOutlet private var menuOpenConfig: NSMenuItem?
|
@IBOutlet private var menuOpenConfig: NSMenuItem?
|
||||||
@@ -37,8 +36,6 @@ class AppDelegate: NSObject,
|
|||||||
@IBOutlet private var menuCloseWindow: NSMenuItem?
|
@IBOutlet private var menuCloseWindow: NSMenuItem?
|
||||||
@IBOutlet private var menuCloseAllWindows: NSMenuItem?
|
@IBOutlet private var menuCloseAllWindows: NSMenuItem?
|
||||||
|
|
||||||
@IBOutlet private var menuUndo: NSMenuItem?
|
|
||||||
@IBOutlet private var menuRedo: NSMenuItem?
|
|
||||||
@IBOutlet private var menuCopy: NSMenuItem?
|
@IBOutlet private var menuCopy: NSMenuItem?
|
||||||
@IBOutlet private var menuPaste: NSMenuItem?
|
@IBOutlet private var menuPaste: NSMenuItem?
|
||||||
@IBOutlet private var menuPasteSelection: NSMenuItem?
|
@IBOutlet private var menuPasteSelection: NSMenuItem?
|
||||||
@@ -55,8 +52,6 @@ class AppDelegate: NSObject,
|
|||||||
@IBOutlet private var menuSelectSplitLeft: NSMenuItem?
|
@IBOutlet private var menuSelectSplitLeft: NSMenuItem?
|
||||||
@IBOutlet private var menuSelectSplitRight: NSMenuItem?
|
@IBOutlet private var menuSelectSplitRight: NSMenuItem?
|
||||||
@IBOutlet private var menuReturnToDefaultSize: NSMenuItem?
|
@IBOutlet private var menuReturnToDefaultSize: NSMenuItem?
|
||||||
@IBOutlet private var menuFloatOnTop: NSMenuItem?
|
|
||||||
@IBOutlet private var menuUseAsDefault: NSMenuItem?
|
|
||||||
|
|
||||||
@IBOutlet private var menuIncreaseFontSize: NSMenuItem?
|
@IBOutlet private var menuIncreaseFontSize: NSMenuItem?
|
||||||
@IBOutlet private var menuDecreaseFontSize: NSMenuItem?
|
@IBOutlet private var menuDecreaseFontSize: NSMenuItem?
|
||||||
@@ -64,7 +59,6 @@ class AppDelegate: NSObject,
|
|||||||
@IBOutlet private var menuChangeTitle: NSMenuItem?
|
@IBOutlet private var menuChangeTitle: NSMenuItem?
|
||||||
@IBOutlet private var menuQuickTerminal: NSMenuItem?
|
@IBOutlet private var menuQuickTerminal: NSMenuItem?
|
||||||
@IBOutlet private var menuTerminalInspector: NSMenuItem?
|
@IBOutlet private var menuTerminalInspector: NSMenuItem?
|
||||||
@IBOutlet private var menuCommandPalette: NSMenuItem?
|
|
||||||
|
|
||||||
@IBOutlet private var menuEqualizeSplits: NSMenuItem?
|
@IBOutlet private var menuEqualizeSplits: NSMenuItem?
|
||||||
@IBOutlet private var menuMoveSplitDividerUp: NSMenuItem?
|
@IBOutlet private var menuMoveSplitDividerUp: NSMenuItem?
|
||||||
@@ -88,14 +82,11 @@ class AppDelegate: NSObject,
|
|||||||
/// The ghostty global state. Only one per process.
|
/// The ghostty global state. Only one per process.
|
||||||
let ghostty: Ghostty.App = Ghostty.App()
|
let ghostty: Ghostty.App = Ghostty.App()
|
||||||
|
|
||||||
/// The global undo manager for app-level state such as window restoration.
|
/// Manages our terminal windows.
|
||||||
lazy var undoManager = ExpiringUndoManager()
|
let terminalManager: TerminalManager
|
||||||
|
|
||||||
/// Our quick terminal. This starts out uninitialized and only initializes if used.
|
/// Our quick terminal. This starts out uninitialized and only initializes if used.
|
||||||
private(set) lazy var quickController = QuickTerminalController(
|
private var quickController: QuickTerminalController? = nil
|
||||||
ghostty,
|
|
||||||
position: derivedConfig.quickTerminalPosition
|
|
||||||
)
|
|
||||||
|
|
||||||
/// Manages updates
|
/// Manages updates
|
||||||
let updaterController: SPUStandardUpdaterController
|
let updaterController: SPUStandardUpdaterController
|
||||||
@@ -112,9 +103,6 @@ class AppDelegate: NSObject,
|
|||||||
/// The observer for the app appearance.
|
/// The observer for the app appearance.
|
||||||
private var appearanceObserver: NSKeyValueObservation? = nil
|
private var appearanceObserver: NSKeyValueObservation? = nil
|
||||||
|
|
||||||
/// Signals
|
|
||||||
private var signals: [DispatchSourceSignal] = []
|
|
||||||
|
|
||||||
/// The custom app icon image that is currently in use.
|
/// The custom app icon image that is currently in use.
|
||||||
@Published private(set) var appIcon: NSImage? = nil {
|
@Published private(set) var appIcon: NSImage? = nil {
|
||||||
didSet {
|
didSet {
|
||||||
@@ -123,6 +111,7 @@ class AppDelegate: NSObject,
|
|||||||
}
|
}
|
||||||
|
|
||||||
override init() {
|
override init() {
|
||||||
|
terminalManager = TerminalManager(ghostty)
|
||||||
updaterController = SPUStandardUpdaterController(
|
updaterController = SPUStandardUpdaterController(
|
||||||
// Important: we must not start the updater here because we need to read our configuration
|
// Important: we must not start the updater here because we need to read our configuration
|
||||||
// first to determine whether we're automatically checking, downloading, etc. The updater
|
// first to determine whether we're automatically checking, downloading, etc. The updater
|
||||||
@@ -162,6 +151,10 @@ class AppDelegate: NSObject,
|
|||||||
toggleSecureInput(self)
|
toggleSecureInput(self)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Hook up updater menu
|
||||||
|
menuCheckForUpdates?.target = updaterController
|
||||||
|
menuCheckForUpdates?.action = #selector(SPUStandardUpdaterController.checkForUpdates(_:))
|
||||||
|
|
||||||
// Initial config loading
|
// Initial config loading
|
||||||
ghosttyConfigDidChange(config: ghostty.config)
|
ghosttyConfigDidChange(config: ghostty.config)
|
||||||
|
|
||||||
@@ -181,12 +174,6 @@ class AppDelegate: NSObject,
|
|||||||
handler: localEventHandler)
|
handler: localEventHandler)
|
||||||
|
|
||||||
// Notifications
|
// Notifications
|
||||||
NotificationCenter.default.addObserver(
|
|
||||||
self,
|
|
||||||
selector: #selector(windowDidBecomeKey),
|
|
||||||
name: NSWindow.didBecomeKeyNotification,
|
|
||||||
object: nil
|
|
||||||
)
|
|
||||||
NotificationCenter.default.addObserver(
|
NotificationCenter.default.addObserver(
|
||||||
self,
|
self,
|
||||||
selector: #selector(quickTerminalDidChangeVisibility),
|
selector: #selector(quickTerminalDidChangeVisibility),
|
||||||
@@ -199,22 +186,6 @@ class AppDelegate: NSObject,
|
|||||||
name: .ghosttyConfigDidChange,
|
name: .ghosttyConfigDidChange,
|
||||||
object: nil
|
object: nil
|
||||||
)
|
)
|
||||||
NotificationCenter.default.addObserver(
|
|
||||||
self,
|
|
||||||
selector: #selector(ghosttyBellDidRing(_:)),
|
|
||||||
name: .ghosttyBellDidRing,
|
|
||||||
object: nil
|
|
||||||
)
|
|
||||||
NotificationCenter.default.addObserver(
|
|
||||||
self,
|
|
||||||
selector: #selector(ghosttyNewWindow(_:)),
|
|
||||||
name: Ghostty.Notification.ghosttyNewWindow,
|
|
||||||
object: nil)
|
|
||||||
NotificationCenter.default.addObserver(
|
|
||||||
self,
|
|
||||||
selector: #selector(ghosttyNewTab(_:)),
|
|
||||||
name: Ghostty.Notification.ghosttyNewTab,
|
|
||||||
object: nil)
|
|
||||||
|
|
||||||
// Configure user notifications
|
// Configure user notifications
|
||||||
let actions = [
|
let actions = [
|
||||||
@@ -222,7 +193,6 @@ class AppDelegate: NSObject,
|
|||||||
]
|
]
|
||||||
|
|
||||||
let center = UNUserNotificationCenter.current()
|
let center = UNUserNotificationCenter.current()
|
||||||
|
|
||||||
center.setNotificationCategories([
|
center.setNotificationCategories([
|
||||||
UNNotificationCategory(
|
UNNotificationCategory(
|
||||||
identifier: Ghostty.userNotificationCategory,
|
identifier: Ghostty.userNotificationCategory,
|
||||||
@@ -249,36 +219,12 @@ class AppDelegate: NSObject,
|
|||||||
|
|
||||||
ghostty_app_set_color_scheme(app, scheme)
|
ghostty_app_set_color_scheme(app, scheme)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Setup our menu
|
|
||||||
setupMenuImages()
|
|
||||||
|
|
||||||
// Setup signal handlers
|
|
||||||
setupSignals()
|
|
||||||
|
|
||||||
// If we launched via zig run then we need to force foreground.
|
|
||||||
if Ghostty.launchSource == .zig_run {
|
|
||||||
// This never gets called until we click the dock icon. This forces it
|
|
||||||
// activate immediately.
|
|
||||||
applicationDidBecomeActive(.init(name: NSApplication.didBecomeActiveNotification))
|
|
||||||
|
|
||||||
// We run in the background, this forces us to the front.
|
|
||||||
DispatchQueue.main.async {
|
|
||||||
NSApp.setActivationPolicy(.regular)
|
|
||||||
NSApp.activate(ignoringOtherApps: true)
|
|
||||||
NSApp.unhide(nil)
|
|
||||||
NSApp.arrangeInFront(nil)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func applicationDidBecomeActive(_ notification: Notification) {
|
func applicationDidBecomeActive(_ notification: Notification) {
|
||||||
// If we're back manually then clear the hidden state because macOS handles it.
|
// If we're back manually then clear the hidden state because macOS handles it.
|
||||||
self.hiddenState = nil
|
self.hiddenState = nil
|
||||||
|
|
||||||
// Clear the dock badge when the app becomes active
|
|
||||||
self.setDockBadge(nil)
|
|
||||||
|
|
||||||
// First launch stuff
|
// First launch stuff
|
||||||
if (!applicationHasBecomeActive) {
|
if (!applicationHasBecomeActive) {
|
||||||
applicationHasBecomeActive = true
|
applicationHasBecomeActive = true
|
||||||
@@ -287,10 +233,8 @@ class AppDelegate: NSObject,
|
|||||||
// is possible to have other windows in a few scenarios:
|
// is possible to have other windows in a few scenarios:
|
||||||
// - if we're opening a URL since `application(_:openFile:)` is called before this.
|
// - if we're opening a URL since `application(_:openFile:)` is called before this.
|
||||||
// - if we're restoring from persisted state
|
// - if we're restoring from persisted state
|
||||||
if TerminalController.all.isEmpty && derivedConfig.initialWindow {
|
if terminalManager.windows.count == 0 && derivedConfig.initialWindow {
|
||||||
undoManager.disableUndoRegistration()
|
terminalManager.newWindow()
|
||||||
_ = TerminalController.newWindow(ghostty)
|
|
||||||
undoManager.enableUndoRegistration()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -310,7 +254,7 @@ class AppDelegate: NSObject,
|
|||||||
// NOTE(mitchellh): I don't think we need this check at all anymore. I'm keeping it
|
// NOTE(mitchellh): I don't think we need this check at all anymore. I'm keeping it
|
||||||
// here because I don't want to remove it in a patch release cycle but we should
|
// here because I don't want to remove it in a patch release cycle but we should
|
||||||
// target removing it soon.
|
// target removing it soon.
|
||||||
if (windows.allSatisfy { !$0.isVisible }) {
|
if (self.quickController == nil && windows.allSatisfy { !$0.isVisible }) {
|
||||||
return .terminateNow
|
return .terminateNow
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -357,13 +301,6 @@ class AppDelegate: NSObject,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func applicationWillTerminate(_ notification: Notification) {
|
|
||||||
// We have no notifications we want to persist after death,
|
|
||||||
// so remove them all now. In the future we may want to be
|
|
||||||
// more selective and only remove surface-targeted notifications.
|
|
||||||
UNUserNotificationCenter.current().removeAllDeliveredNotifications()
|
|
||||||
}
|
|
||||||
|
|
||||||
/// This is called when the application is already open and someone double-clicks the icon
|
/// This is called when the application is already open and someone double-clicks the icon
|
||||||
/// or clicks the dock icon.
|
/// or clicks the dock icon.
|
||||||
func applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool {
|
func applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool {
|
||||||
@@ -375,15 +312,10 @@ class AppDelegate: NSObject,
|
|||||||
// This is possible with flag set to false if there a race where the
|
// This is possible with flag set to false if there a race where the
|
||||||
// window is still initializing and is not visible but the user clicked
|
// window is still initializing and is not visible but the user clicked
|
||||||
// the dock icon.
|
// the dock icon.
|
||||||
guard TerminalController.all.isEmpty else { return true }
|
guard terminalManager.windows.count == 0 else { return true }
|
||||||
|
|
||||||
// If the application isn't active yet then we don't want to process
|
|
||||||
// this because we're not ready. This happens sometimes in Xcode runs
|
|
||||||
// but I haven't seen it happen in releases. I'm unsure why.
|
|
||||||
guard applicationHasBecomeActive else { return true }
|
|
||||||
|
|
||||||
// No visible windows, open a new one.
|
// No visible windows, open a new one.
|
||||||
_ = TerminalController.newWindow(ghostty)
|
terminalManager.newWindow()
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -399,24 +331,16 @@ class AppDelegate: NSObject,
|
|||||||
var config = Ghostty.SurfaceConfiguration()
|
var config = Ghostty.SurfaceConfiguration()
|
||||||
|
|
||||||
if (isDirectory.boolValue) {
|
if (isDirectory.boolValue) {
|
||||||
// When opening a directory, create a new tab in the main
|
// When opening a directory, create a new tab in the main window with that as the working directory.
|
||||||
// window with that as the working directory.
|
|
||||||
// If no windows exist, a new one will be created.
|
// If no windows exist, a new one will be created.
|
||||||
config.workingDirectory = filename
|
config.workingDirectory = filename
|
||||||
_ = TerminalController.newTab(ghostty, withBaseConfig: config)
|
terminalManager.newTab(withBaseConfig: config)
|
||||||
} else {
|
} else {
|
||||||
// When opening a file, we want to execute the file. To do this, we
|
// When opening a file, open a new window with that file as the command,
|
||||||
// don't override the command directly, because it won't load the
|
// and its parent directory as the working directory.
|
||||||
// profile/rc files for the shell, which is super important on macOS
|
config.command = filename
|
||||||
// due to things like Homebrew. Instead, we set the command to
|
|
||||||
// `<filename>; exit` which is what Terminal and iTerm2 do.
|
|
||||||
config.initialInput = "\(filename); exit\n"
|
|
||||||
|
|
||||||
// Set the parent directory to our working directory so that relative
|
|
||||||
// paths in scripts work.
|
|
||||||
config.workingDirectory = (filename as NSString).deletingLastPathComponent
|
config.workingDirectory = (filename as NSString).deletingLastPathComponent
|
||||||
|
terminalManager.newWindow(withBaseConfig: config)
|
||||||
_ = TerminalController.newWindow(ghostty, withBaseConfig: config)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true
|
return true
|
||||||
@@ -427,80 +351,10 @@ class AppDelegate: NSObject,
|
|||||||
return dockMenu
|
return dockMenu
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Setup signal handlers
|
|
||||||
private func setupSignals() {
|
|
||||||
// Register a signal handler for config reloading. It appears that all
|
|
||||||
// of this is required. I've commented each line because its a bit unclear.
|
|
||||||
// Warning: signal handlers don't work when run via Xcode. They have to be
|
|
||||||
// run on a real app bundle.
|
|
||||||
|
|
||||||
// We need to ignore signals we register with makeSignalSource or they
|
|
||||||
// don't seem to handle.
|
|
||||||
signal(SIGUSR2, SIG_IGN)
|
|
||||||
|
|
||||||
// Make the signal source and register our event handle. We keep a weak
|
|
||||||
// ref to ourself so we don't create a retain cycle.
|
|
||||||
let sigusr2 = DispatchSource.makeSignalSource(signal: SIGUSR2, queue: .main)
|
|
||||||
sigusr2.setEventHandler { [weak self] in
|
|
||||||
guard let self else { return }
|
|
||||||
Ghostty.logger.info("reloading configuration in response to SIGUSR2")
|
|
||||||
self.ghostty.reloadConfig()
|
|
||||||
}
|
|
||||||
|
|
||||||
// The signal source starts unactivated, so we have to resume it once
|
|
||||||
// we setup the event handler.
|
|
||||||
sigusr2.resume()
|
|
||||||
|
|
||||||
// We need to keep a strong reference to it so it isn't disabled.
|
|
||||||
signals.append(sigusr2)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Setup all the images for our menu items.
|
|
||||||
private func setupMenuImages() {
|
|
||||||
// Note: This COULD Be done all in the xib file, but I find it easier to
|
|
||||||
// modify this stuff as code.
|
|
||||||
self.menuAbout?.setImageIfDesired(systemSymbolName: "info.circle")
|
|
||||||
self.menuCheckForUpdates?.setImageIfDesired(systemSymbolName: "square.and.arrow.down")
|
|
||||||
self.menuOpenConfig?.setImageIfDesired(systemSymbolName: "gear")
|
|
||||||
self.menuReloadConfig?.setImageIfDesired(systemSymbolName: "arrow.trianglehead.2.clockwise.rotate.90")
|
|
||||||
self.menuSecureInput?.setImageIfDesired(systemSymbolName: "lock.display")
|
|
||||||
self.menuNewWindow?.setImageIfDesired(systemSymbolName: "macwindow.badge.plus")
|
|
||||||
self.menuNewTab?.setImageIfDesired(systemSymbolName: "macwindow")
|
|
||||||
self.menuSplitRight?.setImageIfDesired(systemSymbolName: "rectangle.righthalf.inset.filled")
|
|
||||||
self.menuSplitLeft?.setImageIfDesired(systemSymbolName: "rectangle.leadinghalf.inset.filled")
|
|
||||||
self.menuSplitUp?.setImageIfDesired(systemSymbolName: "rectangle.tophalf.inset.filled")
|
|
||||||
self.menuSplitDown?.setImageIfDesired(systemSymbolName: "rectangle.bottomhalf.inset.filled")
|
|
||||||
self.menuClose?.setImageIfDesired(systemSymbolName: "xmark")
|
|
||||||
self.menuPasteSelection?.setImageIfDesired(systemSymbolName: "doc.on.clipboard.fill")
|
|
||||||
self.menuIncreaseFontSize?.setImageIfDesired(systemSymbolName: "textformat.size.larger")
|
|
||||||
self.menuResetFontSize?.setImageIfDesired(systemSymbolName: "textformat.size")
|
|
||||||
self.menuDecreaseFontSize?.setImageIfDesired(systemSymbolName: "textformat.size.smaller")
|
|
||||||
self.menuCommandPalette?.setImageIfDesired(systemSymbolName: "filemenu.and.selection")
|
|
||||||
self.menuQuickTerminal?.setImageIfDesired(systemSymbolName: "apple.terminal")
|
|
||||||
self.menuChangeTitle?.setImageIfDesired(systemSymbolName: "pencil.line")
|
|
||||||
self.menuTerminalInspector?.setImageIfDesired(systemSymbolName: "scope")
|
|
||||||
self.menuToggleFullScreen?.setImageIfDesired(systemSymbolName: "square.arrowtriangle.4.outward")
|
|
||||||
self.menuToggleVisibility?.setImageIfDesired(systemSymbolName: "eye")
|
|
||||||
self.menuZoomSplit?.setImageIfDesired(systemSymbolName: "arrow.up.left.and.arrow.down.right")
|
|
||||||
self.menuPreviousSplit?.setImageIfDesired(systemSymbolName: "chevron.backward.2")
|
|
||||||
self.menuNextSplit?.setImageIfDesired(systemSymbolName: "chevron.forward.2")
|
|
||||||
self.menuEqualizeSplits?.setImageIfDesired(systemSymbolName: "inset.filled.topleft.topright.bottomleft.bottomright.rectangle")
|
|
||||||
self.menuSelectSplitLeft?.setImageIfDesired(systemSymbolName: "arrow.left")
|
|
||||||
self.menuSelectSplitRight?.setImageIfDesired(systemSymbolName: "arrow.right")
|
|
||||||
self.menuSelectSplitAbove?.setImageIfDesired(systemSymbolName: "arrow.up")
|
|
||||||
self.menuSelectSplitBelow?.setImageIfDesired(systemSymbolName: "arrow.down")
|
|
||||||
self.menuMoveSplitDividerUp?.setImageIfDesired(systemSymbolName: "arrow.up.to.line")
|
|
||||||
self.menuMoveSplitDividerDown?.setImageIfDesired(systemSymbolName: "arrow.down.to.line")
|
|
||||||
self.menuMoveSplitDividerLeft?.setImageIfDesired(systemSymbolName: "arrow.left.to.line")
|
|
||||||
self.menuMoveSplitDividerRight?.setImageIfDesired(systemSymbolName: "arrow.right.to.line")
|
|
||||||
self.menuFloatOnTop?.setImageIfDesired(systemSymbolName: "square.filled.on.square")
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Sync all of our menu item keyboard shortcuts with the Ghostty configuration.
|
/// Sync all of our menu item keyboard shortcuts with the Ghostty configuration.
|
||||||
private func syncMenuShortcuts(_ config: Ghostty.Config) {
|
private func syncMenuShortcuts(_ config: Ghostty.Config) {
|
||||||
guard ghostty.readiness == .ready else { return }
|
guard ghostty.readiness == .ready else { return }
|
||||||
|
|
||||||
syncMenuShortcut(config, action: "check_for_updates", menuItem: self.menuCheckForUpdates)
|
|
||||||
syncMenuShortcut(config, action: "open_config", menuItem: self.menuOpenConfig)
|
syncMenuShortcut(config, action: "open_config", menuItem: self.menuOpenConfig)
|
||||||
syncMenuShortcut(config, action: "reload_config", menuItem: self.menuReloadConfig)
|
syncMenuShortcut(config, action: "reload_config", menuItem: self.menuReloadConfig)
|
||||||
syncMenuShortcut(config, action: "quit", menuItem: self.menuQuit)
|
syncMenuShortcut(config, action: "quit", menuItem: self.menuQuit)
|
||||||
@@ -516,8 +370,6 @@ class AppDelegate: NSObject,
|
|||||||
syncMenuShortcut(config, action: "new_split:down", menuItem: self.menuSplitDown)
|
syncMenuShortcut(config, action: "new_split:down", menuItem: self.menuSplitDown)
|
||||||
syncMenuShortcut(config, action: "new_split:up", menuItem: self.menuSplitUp)
|
syncMenuShortcut(config, action: "new_split:up", menuItem: self.menuSplitUp)
|
||||||
|
|
||||||
syncMenuShortcut(config, action: "undo", menuItem: self.menuUndo)
|
|
||||||
syncMenuShortcut(config, action: "redo", menuItem: self.menuRedo)
|
|
||||||
syncMenuShortcut(config, action: "copy_to_clipboard", menuItem: self.menuCopy)
|
syncMenuShortcut(config, action: "copy_to_clipboard", menuItem: self.menuCopy)
|
||||||
syncMenuShortcut(config, action: "paste_from_clipboard", menuItem: self.menuPaste)
|
syncMenuShortcut(config, action: "paste_from_clipboard", menuItem: self.menuPaste)
|
||||||
syncMenuShortcut(config, action: "paste_from_selection", menuItem: self.menuPasteSelection)
|
syncMenuShortcut(config, action: "paste_from_selection", menuItem: self.menuPasteSelection)
|
||||||
@@ -540,12 +392,10 @@ class AppDelegate: NSObject,
|
|||||||
syncMenuShortcut(config, action: "increase_font_size:1", menuItem: self.menuIncreaseFontSize)
|
syncMenuShortcut(config, action: "increase_font_size:1", menuItem: self.menuIncreaseFontSize)
|
||||||
syncMenuShortcut(config, action: "decrease_font_size:1", menuItem: self.menuDecreaseFontSize)
|
syncMenuShortcut(config, action: "decrease_font_size:1", menuItem: self.menuDecreaseFontSize)
|
||||||
syncMenuShortcut(config, action: "reset_font_size", menuItem: self.menuResetFontSize)
|
syncMenuShortcut(config, action: "reset_font_size", menuItem: self.menuResetFontSize)
|
||||||
syncMenuShortcut(config, action: "prompt_surface_title", menuItem: self.menuChangeTitle)
|
syncMenuShortcut(config, action: "change_title_prompt", menuItem: self.menuChangeTitle)
|
||||||
syncMenuShortcut(config, action: "toggle_quick_terminal", menuItem: self.menuQuickTerminal)
|
syncMenuShortcut(config, action: "toggle_quick_terminal", menuItem: self.menuQuickTerminal)
|
||||||
syncMenuShortcut(config, action: "toggle_visibility", menuItem: self.menuToggleVisibility)
|
syncMenuShortcut(config, action: "toggle_visibility", menuItem: self.menuToggleVisibility)
|
||||||
syncMenuShortcut(config, action: "toggle_window_float_on_top", menuItem: self.menuFloatOnTop)
|
|
||||||
syncMenuShortcut(config, action: "inspector:toggle", menuItem: self.menuTerminalInspector)
|
syncMenuShortcut(config, action: "inspector:toggle", menuItem: self.menuTerminalInspector)
|
||||||
syncMenuShortcut(config, action: "toggle_command_palette", menuItem: self.menuCommandPalette)
|
|
||||||
|
|
||||||
syncMenuShortcut(config, action: "toggle_secure_input", menuItem: self.menuSecureInput)
|
syncMenuShortcut(config, action: "toggle_secure_input", menuItem: self.menuSecureInput)
|
||||||
|
|
||||||
@@ -563,15 +413,19 @@ class AppDelegate: NSObject,
|
|||||||
/// action string used for the Ghostty configuration.
|
/// action string used for the Ghostty configuration.
|
||||||
private func syncMenuShortcut(_ config: Ghostty.Config, action: String, menuItem: NSMenuItem?) {
|
private func syncMenuShortcut(_ config: Ghostty.Config, action: String, menuItem: NSMenuItem?) {
|
||||||
guard let menu = menuItem else { return }
|
guard let menu = menuItem else { return }
|
||||||
guard let shortcut = config.keyboardShortcut(for: action) else {
|
guard let equiv = config.keyEquivalent(for: action) else {
|
||||||
// No shortcut, clear the menu item
|
// No shortcut, clear the menu item
|
||||||
menu.keyEquivalent = ""
|
menu.keyEquivalent = ""
|
||||||
menu.keyEquivalentModifierMask = []
|
menu.keyEquivalentModifierMask = []
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
menu.keyEquivalent = shortcut.key.character.description
|
menu.keyEquivalent = equiv.key
|
||||||
menu.keyEquivalentModifierMask = .init(swiftUIFlags: shortcut.modifiers)
|
menu.keyEquivalentModifierMask = equiv.modifiers
|
||||||
|
}
|
||||||
|
|
||||||
|
private func focusedSurface() -> ghostty_surface_t? {
|
||||||
|
return terminalManager.focusedSurface?.surface
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: Notifications and Events
|
// MARK: Notifications and Events
|
||||||
@@ -594,22 +448,17 @@ class AppDelegate: NSObject,
|
|||||||
guard NSApp.mainWindow == nil else { return event }
|
guard NSApp.mainWindow == nil else { return event }
|
||||||
|
|
||||||
// If this event as-is would result in a key binding then we send it.
|
// If this event as-is would result in a key binding then we send it.
|
||||||
if let app = ghostty.app {
|
if let app = ghostty.app,
|
||||||
var ghosttyEvent = event.ghosttyKeyEvent(GHOSTTY_ACTION_PRESS)
|
ghostty_app_key_is_binding(
|
||||||
let match = (event.characters ?? "").withCString { ptr in
|
app,
|
||||||
ghosttyEvent.text = ptr
|
event.ghosttyKeyEvent(GHOSTTY_ACTION_PRESS)) {
|
||||||
if !ghostty_app_key_is_binding(app, ghosttyEvent) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
return ghostty_app_key(app, ghosttyEvent)
|
|
||||||
}
|
|
||||||
|
|
||||||
// If the key was handled by Ghostty we stop the event chain. If
|
// If the key was handled by Ghostty we stop the event chain. If
|
||||||
// the key wasn't handled then we let it fall through and continue
|
// the key wasn't handled then we let it fall through and continue
|
||||||
// processing. This is important because some bindings may have no
|
// processing. This is important because some bindings may have no
|
||||||
// affect at this scope.
|
// affect at this scope.
|
||||||
if match {
|
if (ghostty_app_key(
|
||||||
|
app,
|
||||||
|
event.ghosttyKeyEvent(GHOSTTY_ACTION_PRESS))) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -636,10 +485,6 @@ class AppDelegate: NSObject,
|
|||||||
return event
|
return event
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc private func windowDidBecomeKey(_ notification: Notification) {
|
|
||||||
syncFloatOnTopMenu(notification.object as? NSWindow)
|
|
||||||
}
|
|
||||||
|
|
||||||
@objc private func quickTerminalDidChangeVisibility(_ notification: Notification) {
|
@objc private func quickTerminalDidChangeVisibility(_ notification: Notification) {
|
||||||
guard let quickController = notification.object as? QuickTerminalController else { return }
|
guard let quickController = notification.object as? QuickTerminalController else { return }
|
||||||
self.menuQuickTerminal?.state = if (quickController.visible) { .on } else { .off }
|
self.menuQuickTerminal?.state = if (quickController.visible) { .on } else { .off }
|
||||||
@@ -657,80 +502,6 @@ class AppDelegate: NSObject,
|
|||||||
ghosttyConfigDidChange(config: config)
|
ghosttyConfigDidChange(config: config)
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc private func ghosttyBellDidRing(_ notification: Notification) {
|
|
||||||
if (ghostty.config.bellFeatures.contains(.attention)) {
|
|
||||||
// Bounce the dock icon if we're not focused.
|
|
||||||
NSApp.requestUserAttention(.informationalRequest)
|
|
||||||
|
|
||||||
// Handle setting the dock badge based on permissions
|
|
||||||
ghosttyUpdateBadgeForBell()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private func ghosttyUpdateBadgeForBell() {
|
|
||||||
let center = UNUserNotificationCenter.current()
|
|
||||||
center.getNotificationSettings { settings in
|
|
||||||
switch settings.authorizationStatus {
|
|
||||||
case .authorized:
|
|
||||||
// Already authorized, check badge setting and set if enabled
|
|
||||||
if settings.badgeSetting == .enabled {
|
|
||||||
DispatchQueue.main.async {
|
|
||||||
self.setDockBadge()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
case .notDetermined:
|
|
||||||
// Not determined yet, request authorization for badge
|
|
||||||
center.requestAuthorization(options: [.badge]) { granted, error in
|
|
||||||
if let error = error {
|
|
||||||
Self.logger.warning("Error requesting badge authorization: \(error)")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if granted {
|
|
||||||
// Permission granted, set the badge
|
|
||||||
DispatchQueue.main.async {
|
|
||||||
self.setDockBadge()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
case .denied, .provisional, .ephemeral:
|
|
||||||
// In these known non-authorized states, do not attempt to set the badge.
|
|
||||||
break
|
|
||||||
|
|
||||||
@unknown default:
|
|
||||||
// Handle future unknown states by doing nothing.
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@objc private func ghosttyNewWindow(_ notification: Notification) {
|
|
||||||
let configAny = notification.userInfo?[Ghostty.Notification.NewSurfaceConfigKey]
|
|
||||||
let config = configAny as? Ghostty.SurfaceConfiguration
|
|
||||||
_ = TerminalController.newWindow(ghostty, withBaseConfig: config)
|
|
||||||
}
|
|
||||||
|
|
||||||
@objc private func ghosttyNewTab(_ notification: Notification) {
|
|
||||||
guard let surfaceView = notification.object as? Ghostty.SurfaceView else { return }
|
|
||||||
guard let window = surfaceView.window else { return }
|
|
||||||
|
|
||||||
// We only want to listen to new tabs if the focused parent is
|
|
||||||
// a regular terminal controller.
|
|
||||||
guard window.windowController is TerminalController else { return }
|
|
||||||
|
|
||||||
let configAny = notification.userInfo?[Ghostty.Notification.NewSurfaceConfigKey]
|
|
||||||
let config = configAny as? Ghostty.SurfaceConfiguration
|
|
||||||
|
|
||||||
_ = TerminalController.newTab(ghostty, from: window, withBaseConfig: config)
|
|
||||||
}
|
|
||||||
|
|
||||||
private func setDockBadge(_ label: String? = "•") {
|
|
||||||
NSApp.dockTile.badgeLabel = label
|
|
||||||
NSApp.dockTile.display()
|
|
||||||
}
|
|
||||||
|
|
||||||
private func ghosttyConfigDidChange(config: Ghostty.Config) {
|
private func ghosttyConfigDidChange(config: Ghostty.Config) {
|
||||||
// Update the config we need to store
|
// Update the config we need to store
|
||||||
self.derivedConfig = DerivedConfig(config)
|
self.derivedConfig = DerivedConfig(config)
|
||||||
@@ -761,7 +532,7 @@ class AppDelegate: NSObject,
|
|||||||
|
|
||||||
// Config could change keybindings, so update everything that depends on that
|
// Config could change keybindings, so update everything that depends on that
|
||||||
syncMenuShortcuts(config)
|
syncMenuShortcuts(config)
|
||||||
TerminalController.all.forEach { $0.relabelTabs() }
|
terminalManager.relabelAllTabs()
|
||||||
|
|
||||||
// Config could change window appearance. We wrap this in an async queue because when
|
// Config could change window appearance. We wrap this in an async queue because when
|
||||||
// this is called as part of application launch it can deadlock with an internal
|
// this is called as part of application launch it can deadlock with an internal
|
||||||
@@ -890,11 +661,9 @@ class AppDelegate: NSObject,
|
|||||||
//MARK: - GhosttyAppDelegate
|
//MARK: - GhosttyAppDelegate
|
||||||
|
|
||||||
func findSurface(forUUID uuid: UUID) -> Ghostty.SurfaceView? {
|
func findSurface(forUUID uuid: UUID) -> Ghostty.SurfaceView? {
|
||||||
for c in TerminalController.all {
|
for c in terminalManager.windows {
|
||||||
for view in c.surfaceTree {
|
if let v = c.controller.surfaceTree?.findUUID(uuid: uuid) {
|
||||||
if view.uuid == uuid {
|
return v
|
||||||
return view
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -933,19 +702,15 @@ class AppDelegate: NSObject,
|
|||||||
//MARK: - IB Actions
|
//MARK: - IB Actions
|
||||||
|
|
||||||
@IBAction func openConfig(_ sender: Any?) {
|
@IBAction func openConfig(_ sender: Any?) {
|
||||||
Ghostty.App.openConfig()
|
ghostty.openConfig()
|
||||||
}
|
}
|
||||||
|
|
||||||
@IBAction func reloadConfig(_ sender: Any?) {
|
@IBAction func reloadConfig(_ sender: Any?) {
|
||||||
ghostty.reloadConfig()
|
ghostty.reloadConfig()
|
||||||
}
|
}
|
||||||
|
|
||||||
@IBAction func checkForUpdates(_ sender: Any?) {
|
|
||||||
updaterController.checkForUpdates(sender)
|
|
||||||
}
|
|
||||||
|
|
||||||
@IBAction func newWindow(_ sender: Any?) {
|
@IBAction func newWindow(_ sender: Any?) {
|
||||||
_ = TerminalController.newWindow(ghostty)
|
terminalManager.newWindow()
|
||||||
|
|
||||||
// We also activate our app so that it becomes front. This may be
|
// We also activate our app so that it becomes front. This may be
|
||||||
// necessary for the dock menu.
|
// necessary for the dock menu.
|
||||||
@@ -953,7 +718,7 @@ class AppDelegate: NSObject,
|
|||||||
}
|
}
|
||||||
|
|
||||||
@IBAction func newTab(_ sender: Any?) {
|
@IBAction func newTab(_ sender: Any?) {
|
||||||
_ = TerminalController.newTab(ghostty)
|
terminalManager.newTab()
|
||||||
|
|
||||||
// We also activate our app so that it becomes front. This may be
|
// We also activate our app so that it becomes front. This may be
|
||||||
// necessary for the dock menu.
|
// necessary for the dock menu.
|
||||||
@@ -961,7 +726,7 @@ class AppDelegate: NSObject,
|
|||||||
}
|
}
|
||||||
|
|
||||||
@IBAction func closeAllWindows(_ sender: Any?) {
|
@IBAction func closeAllWindows(_ sender: Any?) {
|
||||||
TerminalController.closeAllWindows()
|
terminalManager.closeAllWindows()
|
||||||
AboutController.shared.hide()
|
AboutController.shared.hide()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -979,6 +744,14 @@ class AppDelegate: NSObject,
|
|||||||
}
|
}
|
||||||
|
|
||||||
@IBAction func toggleQuickTerminal(_ sender: Any) {
|
@IBAction func toggleQuickTerminal(_ sender: Any) {
|
||||||
|
if quickController == nil {
|
||||||
|
quickController = QuickTerminalController(
|
||||||
|
ghostty,
|
||||||
|
position: derivedConfig.quickTerminalPosition
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
guard let quickController = self.quickController else { return }
|
||||||
quickController.toggle()
|
quickController.toggle()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1006,23 +779,15 @@ class AppDelegate: NSObject,
|
|||||||
hiddenState?.restore()
|
hiddenState?.restore()
|
||||||
hiddenState = nil
|
hiddenState = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@IBAction func bringAllToFront(_ sender: Any) {
|
@IBAction func bringAllToFront(_ sender: Any) {
|
||||||
if !NSApp.isActive {
|
if !NSApp.isActive {
|
||||||
NSApp.activate(ignoringOtherApps: true)
|
NSApp.activate(ignoringOtherApps: true)
|
||||||
}
|
}
|
||||||
|
|
||||||
NSApplication.shared.arrangeInFront(sender)
|
NSApplication.shared.arrangeInFront(sender)
|
||||||
}
|
}
|
||||||
|
|
||||||
@IBAction func undo(_ sender: Any?) {
|
|
||||||
undoManager.undo()
|
|
||||||
}
|
|
||||||
|
|
||||||
@IBAction func redo(_ sender: Any?) {
|
|
||||||
undoManager.redo()
|
|
||||||
}
|
|
||||||
|
|
||||||
private struct DerivedConfig {
|
private struct DerivedConfig {
|
||||||
let initialWindow: Bool
|
let initialWindow: Bool
|
||||||
let shouldQuitAfterLastWindowClosed: Bool
|
let shouldQuitAfterLastWindowClosed: Bool
|
||||||
@@ -1070,66 +835,3 @@ class AppDelegate: NSObject,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: Floating Windows
|
|
||||||
|
|
||||||
extension AppDelegate {
|
|
||||||
func syncFloatOnTopMenu(_ window: NSWindow?) {
|
|
||||||
guard let window = (window ?? NSApp.keyWindow) as? TerminalWindow else {
|
|
||||||
// If some other window became key we always turn this off
|
|
||||||
self.menuFloatOnTop?.state = .off
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
self.menuFloatOnTop?.state = window.level == .floating ? .on : .off
|
|
||||||
}
|
|
||||||
|
|
||||||
@IBAction func floatOnTop(_ menuItem: NSMenuItem) {
|
|
||||||
menuItem.state = menuItem.state == .on ? .off : .on
|
|
||||||
guard let window = NSApp.keyWindow else { return }
|
|
||||||
window.level = menuItem.state == .on ? .floating : .normal
|
|
||||||
}
|
|
||||||
|
|
||||||
@IBAction func useAsDefault(_ sender: NSMenuItem) {
|
|
||||||
let ud = UserDefaults.standard
|
|
||||||
let key = TerminalWindow.defaultLevelKey
|
|
||||||
if (menuFloatOnTop?.state == .on) {
|
|
||||||
ud.set(NSWindow.Level.floating, forKey: key)
|
|
||||||
} else {
|
|
||||||
ud.removeObject(forKey: key)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: NSMenuItemValidation
|
|
||||||
|
|
||||||
extension AppDelegate: NSMenuItemValidation {
|
|
||||||
func validateMenuItem(_ item: NSMenuItem) -> Bool {
|
|
||||||
switch item.action {
|
|
||||||
case #selector(floatOnTop(_:)),
|
|
||||||
#selector(useAsDefault(_:)):
|
|
||||||
// Float on top items only active if the key window is a primary
|
|
||||||
// terminal window (not quick terminal).
|
|
||||||
return NSApp.keyWindow is TerminalWindow
|
|
||||||
|
|
||||||
case #selector(undo(_:)):
|
|
||||||
if undoManager.canUndo {
|
|
||||||
item.title = "Undo \(undoManager.undoActionName)"
|
|
||||||
} else {
|
|
||||||
item.title = "Undo"
|
|
||||||
}
|
|
||||||
return undoManager.canUndo
|
|
||||||
|
|
||||||
case #selector(redo(_:)):
|
|
||||||
if undoManager.canRedo {
|
|
||||||
item.title = "Redo \(undoManager.redoActionName)"
|
|
||||||
} else {
|
|
||||||
item.title = "Redo"
|
|
||||||
}
|
|
||||||
return undoManager.canRedo
|
|
||||||
|
|
||||||
default:
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@@ -1,8 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="24093.7" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="23504" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="macosx"/>
|
<deployment identifier="macosx"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="24093.7"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="23504"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<objects>
|
<objects>
|
||||||
<customObject id="-2" userLabel="File's Owner" customClass="NSApplication">
|
<customObject id="-2" userLabel="File's Owner" customClass="NSApplication">
|
||||||
@@ -14,7 +14,6 @@
|
|||||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||||
<customObject id="bbz-4X-AYv" userLabel="AppDelegate" customClass="AppDelegate" customModule="Ghostty" customModuleProvider="target">
|
<customObject id="bbz-4X-AYv" userLabel="AppDelegate" customClass="AppDelegate" customModule="Ghostty" customModuleProvider="target">
|
||||||
<connections>
|
<connections>
|
||||||
<outlet property="menuAbout" destination="5kV-Vb-QxS" id="Y5y-UO-NK6"/>
|
|
||||||
<outlet property="menuBringAllToFront" destination="LE2-aR-0XJ" id="AP9-oK-60V"/>
|
<outlet property="menuBringAllToFront" destination="LE2-aR-0XJ" id="AP9-oK-60V"/>
|
||||||
<outlet property="menuChangeTitle" destination="24I-xg-qIq" id="kg6-kT-jNL"/>
|
<outlet property="menuChangeTitle" destination="24I-xg-qIq" id="kg6-kT-jNL"/>
|
||||||
<outlet property="menuCheckForUpdates" destination="GEA-5y-yzH" id="0nV-Tf-nJQ"/>
|
<outlet property="menuCheckForUpdates" destination="GEA-5y-yzH" id="0nV-Tf-nJQ"/>
|
||||||
@@ -22,11 +21,9 @@
|
|||||||
<outlet property="menuCloseAllWindows" destination="yKr-Vi-Yqw" id="Zet-Ir-zbm"/>
|
<outlet property="menuCloseAllWindows" destination="yKr-Vi-Yqw" id="Zet-Ir-zbm"/>
|
||||||
<outlet property="menuCloseTab" destination="Obb-Mk-j8J" id="Gda-L0-gdz"/>
|
<outlet property="menuCloseTab" destination="Obb-Mk-j8J" id="Gda-L0-gdz"/>
|
||||||
<outlet property="menuCloseWindow" destination="W5w-UZ-crk" id="6ff-BT-ENV"/>
|
<outlet property="menuCloseWindow" destination="W5w-UZ-crk" id="6ff-BT-ENV"/>
|
||||||
<outlet property="menuCommandPalette" destination="et6-de-Mh7" id="53t-cu-dm5"/>
|
|
||||||
<outlet property="menuCopy" destination="Jqf-pv-Zcu" id="bKd-1C-oy9"/>
|
<outlet property="menuCopy" destination="Jqf-pv-Zcu" id="bKd-1C-oy9"/>
|
||||||
<outlet property="menuDecreaseFontSize" destination="kzb-SZ-dOA" id="Y1B-Vh-6Z2"/>
|
<outlet property="menuDecreaseFontSize" destination="kzb-SZ-dOA" id="Y1B-Vh-6Z2"/>
|
||||||
<outlet property="menuEqualizeSplits" destination="3gH-VD-vL9" id="SiZ-ce-FOF"/>
|
<outlet property="menuEqualizeSplits" destination="3gH-VD-vL9" id="SiZ-ce-FOF"/>
|
||||||
<outlet property="menuFloatOnTop" destination="uRj-7z-1Nh" id="94n-o9-Jol"/>
|
|
||||||
<outlet property="menuIncreaseFontSize" destination="CIH-ey-Z6x" id="hkc-9C-80E"/>
|
<outlet property="menuIncreaseFontSize" destination="CIH-ey-Z6x" id="hkc-9C-80E"/>
|
||||||
<outlet property="menuMoveSplitDividerDown" destination="Zj7-2W-fdF" id="997-LL-nlN"/>
|
<outlet property="menuMoveSplitDividerDown" destination="Zj7-2W-fdF" id="997-LL-nlN"/>
|
||||||
<outlet property="menuMoveSplitDividerLeft" destination="wSR-ny-j1a" id="HCZ-CI-2ob"/>
|
<outlet property="menuMoveSplitDividerLeft" destination="wSR-ny-j1a" id="HCZ-CI-2ob"/>
|
||||||
@@ -41,7 +38,6 @@
|
|||||||
<outlet property="menuPreviousSplit" destination="Lic-px-1wg" id="Rto-CG-yRe"/>
|
<outlet property="menuPreviousSplit" destination="Lic-px-1wg" id="Rto-CG-yRe"/>
|
||||||
<outlet property="menuQuickTerminal" destination="1pv-LF-NBJ" id="glN-5B-IGi"/>
|
<outlet property="menuQuickTerminal" destination="1pv-LF-NBJ" id="glN-5B-IGi"/>
|
||||||
<outlet property="menuQuit" destination="4sb-4s-VLi" id="qYN-S1-6UW"/>
|
<outlet property="menuQuit" destination="4sb-4s-VLi" id="qYN-S1-6UW"/>
|
||||||
<outlet property="menuRedo" destination="EX8-lB-4s7" id="wON-2J-yT1"/>
|
|
||||||
<outlet property="menuReloadConfig" destination="KKH-XX-5py" id="Wvp-7J-wqX"/>
|
<outlet property="menuReloadConfig" destination="KKH-XX-5py" id="Wvp-7J-wqX"/>
|
||||||
<outlet property="menuResetFontSize" destination="Jah-MY-aLX" id="ger-qM-wrm"/>
|
<outlet property="menuResetFontSize" destination="Jah-MY-aLX" id="ger-qM-wrm"/>
|
||||||
<outlet property="menuReturnToDefaultSize" destination="Gbx-Vi-OGC" id="po9-qC-Iz6"/>
|
<outlet property="menuReturnToDefaultSize" destination="Gbx-Vi-OGC" id="po9-qC-Iz6"/>
|
||||||
@@ -59,8 +55,6 @@
|
|||||||
<outlet property="menuTerminalInspector" destination="QwP-M5-fvh" id="wJi-Dh-S9f"/>
|
<outlet property="menuTerminalInspector" destination="QwP-M5-fvh" id="wJi-Dh-S9f"/>
|
||||||
<outlet property="menuToggleFullScreen" destination="8kY-Pi-KaY" id="yQg-6V-OO6"/>
|
<outlet property="menuToggleFullScreen" destination="8kY-Pi-KaY" id="yQg-6V-OO6"/>
|
||||||
<outlet property="menuToggleVisibility" destination="DOX-wA-ilh" id="iBj-Bc-2bq"/>
|
<outlet property="menuToggleVisibility" destination="DOX-wA-ilh" id="iBj-Bc-2bq"/>
|
||||||
<outlet property="menuUndo" destination="r83-CV-syt" id="bU9-0b-xgQ"/>
|
|
||||||
<outlet property="menuUseAsDefault" destination="TrB-O8-g8H" id="af4-Jh-2HU"/>
|
|
||||||
<outlet property="menuZoomSplit" destination="oPd-mn-IEH" id="wTu-jK-egI"/>
|
<outlet property="menuZoomSplit" destination="oPd-mn-IEH" id="wTu-jK-egI"/>
|
||||||
</connections>
|
</connections>
|
||||||
</customObject>
|
</customObject>
|
||||||
@@ -79,9 +73,6 @@
|
|||||||
</menuItem>
|
</menuItem>
|
||||||
<menuItem title="Check for Updates..." id="GEA-5y-yzH">
|
<menuItem title="Check for Updates..." id="GEA-5y-yzH">
|
||||||
<modifierMask key="keyEquivalentModifierMask"/>
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
<connections>
|
|
||||||
<action selector="checkForUpdates:" target="bbz-4X-AYv" id="z2n-lC-48f"/>
|
|
||||||
</connections>
|
|
||||||
</menuItem>
|
</menuItem>
|
||||||
<menuItem isSeparatorItem="YES" id="VOq-y0-SEH"/>
|
<menuItem isSeparatorItem="YES" id="VOq-y0-SEH"/>
|
||||||
<menuItem title="Preferences…" keyEquivalent="," id="BOF-NM-1cW">
|
<menuItem title="Preferences…" keyEquivalent="," id="BOF-NM-1cW">
|
||||||
@@ -207,19 +198,6 @@
|
|||||||
<modifierMask key="keyEquivalentModifierMask"/>
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
<menu key="submenu" title="Edit" id="iU4-OB-ccf">
|
<menu key="submenu" title="Edit" id="iU4-OB-ccf">
|
||||||
<items>
|
<items>
|
||||||
<menuItem title="Undo" id="r83-CV-syt">
|
|
||||||
<modifierMask key="keyEquivalentModifierMask"/>
|
|
||||||
<connections>
|
|
||||||
<action selector="undo:" target="-1" id="jrW-j3-OZj"/>
|
|
||||||
</connections>
|
|
||||||
</menuItem>
|
|
||||||
<menuItem title="Redo" id="EX8-lB-4s7">
|
|
||||||
<modifierMask key="keyEquivalentModifierMask"/>
|
|
||||||
<connections>
|
|
||||||
<action selector="redo:" target="-1" id="7UK-Hj-s4O"/>
|
|
||||||
</connections>
|
|
||||||
</menuItem>
|
|
||||||
<menuItem isSeparatorItem="YES" id="4O9-zO-zB9"/>
|
|
||||||
<menuItem title="Copy" id="Jqf-pv-Zcu">
|
<menuItem title="Copy" id="Jqf-pv-Zcu">
|
||||||
<modifierMask key="keyEquivalentModifierMask"/>
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
<connections>
|
<connections>
|
||||||
@@ -252,18 +230,18 @@
|
|||||||
<modifierMask key="keyEquivalentModifierMask"/>
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
<menu key="submenu" title="View" id="m6z-2H-VW7">
|
<menu key="submenu" title="View" id="m6z-2H-VW7">
|
||||||
<items>
|
<items>
|
||||||
<menuItem title="Reset Font Size" id="Jah-MY-aLX">
|
|
||||||
<modifierMask key="keyEquivalentModifierMask"/>
|
|
||||||
<connections>
|
|
||||||
<action selector="resetFontSize:" target="-1" id="3dh-T9-IkH"/>
|
|
||||||
</connections>
|
|
||||||
</menuItem>
|
|
||||||
<menuItem title="Increase Font Size" id="CIH-ey-Z6x" userLabel="Increase Font Size">
|
<menuItem title="Increase Font Size" id="CIH-ey-Z6x" userLabel="Increase Font Size">
|
||||||
<modifierMask key="keyEquivalentModifierMask"/>
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="increaseFontSize:" target="-1" id="361-5E-7PY"/>
|
<action selector="increaseFontSize:" target="-1" id="361-5E-7PY"/>
|
||||||
</connections>
|
</connections>
|
||||||
</menuItem>
|
</menuItem>
|
||||||
|
<menuItem title="Reset Font Size" id="Jah-MY-aLX">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="resetFontSize:" target="-1" id="3dh-T9-IkH"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
<menuItem title="Decrease Font Size" id="kzb-SZ-dOA">
|
<menuItem title="Decrease Font Size" id="kzb-SZ-dOA">
|
||||||
<modifierMask key="keyEquivalentModifierMask"/>
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
<connections>
|
<connections>
|
||||||
@@ -271,12 +249,6 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</menuItem>
|
</menuItem>
|
||||||
<menuItem isSeparatorItem="YES" id="L3L-I8-sqk"/>
|
<menuItem isSeparatorItem="YES" id="L3L-I8-sqk"/>
|
||||||
<menuItem title="Command Palette" id="et6-de-Mh7">
|
|
||||||
<modifierMask key="keyEquivalentModifierMask"/>
|
|
||||||
<connections>
|
|
||||||
<action selector="toggleCommandPalette:" target="-1" id="FcT-XD-gM1"/>
|
|
||||||
</connections>
|
|
||||||
</menuItem>
|
|
||||||
<menuItem title="Change Title..." id="24I-xg-qIq">
|
<menuItem title="Change Title..." id="24I-xg-qIq">
|
||||||
<modifierMask key="keyEquivalentModifierMask"/>
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
<connections>
|
<connections>
|
||||||
@@ -423,19 +395,6 @@
|
|||||||
<action selector="returnToDefaultSize:" target="-1" id="Bpt-GO-UU1"/>
|
<action selector="returnToDefaultSize:" target="-1" id="Bpt-GO-UU1"/>
|
||||||
</connections>
|
</connections>
|
||||||
</menuItem>
|
</menuItem>
|
||||||
<menuItem isSeparatorItem="YES" id="Cm3-gn-vtj"/>
|
|
||||||
<menuItem title="Float on Top" id="uRj-7z-1Nh">
|
|
||||||
<modifierMask key="keyEquivalentModifierMask"/>
|
|
||||||
<connections>
|
|
||||||
<action selector="floatOnTop:" target="bbz-4X-AYv" id="N58-PO-7pj"/>
|
|
||||||
</connections>
|
|
||||||
</menuItem>
|
|
||||||
<menuItem title="Use as Default" id="TrB-O8-g8H">
|
|
||||||
<modifierMask key="keyEquivalentModifierMask"/>
|
|
||||||
<connections>
|
|
||||||
<action selector="useAsDefault:" target="bbz-4X-AYv" id="RHA-Nl-L2U"/>
|
|
||||||
</connections>
|
|
||||||
</menuItem>
|
|
||||||
<menuItem isSeparatorItem="YES" id="CpM-rI-Sc1"/>
|
<menuItem isSeparatorItem="YES" id="CpM-rI-Sc1"/>
|
||||||
<menuItem title="Bring All to Front" id="LE2-aR-0XJ">
|
<menuItem title="Bring All to Front" id="LE2-aR-0XJ">
|
||||||
<modifierMask key="keyEquivalentModifierMask"/>
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
@@ -2,32 +2,13 @@ import AppKit
|
|||||||
import Cocoa
|
import Cocoa
|
||||||
import GhosttyKit
|
import GhosttyKit
|
||||||
|
|
||||||
// Initialize Ghostty global state. We do this once right away because the
|
// We put the GHOSTTY_MAC_APP env var into the Info.plist to detect
|
||||||
// CLI APIs require it and it lets us ensure it is done immediately for the
|
// whether we launch from the app or not. A user can fake this if
|
||||||
// rest of the app.
|
// they want but they're doing so at their own detriment...
|
||||||
if ghostty_init(UInt(CommandLine.argc), CommandLine.unsafeArgv) != GHOSTTY_SUCCESS {
|
let process = ProcessInfo.processInfo
|
||||||
Ghostty.logger.critical("ghostty_init failed")
|
if ((process.environment["GHOSTTY_MAC_APP"] ?? "") == "") {
|
||||||
|
ghostty_cli_main(UInt(CommandLine.argc), CommandLine.unsafeArgv)
|
||||||
// We also write to stderr if this is executed from the CLI or zig run
|
exit(1)
|
||||||
switch Ghostty.launchSource {
|
|
||||||
case .cli, .zig_run:
|
|
||||||
let stderrHandle = FileHandle.standardError
|
|
||||||
stderrHandle.write(
|
|
||||||
"Ghostty failed to initialize! If you're executing Ghostty from the command line\n" +
|
|
||||||
"then this is usually because an invalid action or multiple actions were specified.\n" +
|
|
||||||
"Actions start with the `+` character.\n\n" +
|
|
||||||
"View all available actions by running `ghostty +help`.\n")
|
|
||||||
exit(1)
|
|
||||||
|
|
||||||
case .app:
|
|
||||||
// For the app we exit immediately. We should handle this case more
|
|
||||||
// gracefully in the future.
|
|
||||||
exit(1)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// This will run the CLI action and exit if one was specified. A CLI
|
|
||||||
// action is a command starting with a `+`, such as `ghostty +boo`.
|
|
||||||
ghostty_cli_try_action();
|
|
||||||
|
|
||||||
_ = NSApplicationMain(CommandLine.argc, CommandLine.unsafeArgv)
|
_ = NSApplicationMain(CommandLine.argc, CommandLine.unsafeArgv)
|
||||||
|
@@ -1,35 +0,0 @@
|
|||||||
import AppKit
|
|
||||||
import AppIntents
|
|
||||||
import GhosttyKit
|
|
||||||
|
|
||||||
struct CloseTerminalIntent: AppIntent {
|
|
||||||
static var title: LocalizedStringResource = "Close Terminal"
|
|
||||||
static var description = IntentDescription("Close an existing terminal.")
|
|
||||||
|
|
||||||
@Parameter(
|
|
||||||
title: "Terminal",
|
|
||||||
description: "The terminal to close.",
|
|
||||||
)
|
|
||||||
var terminal: TerminalEntity
|
|
||||||
|
|
||||||
@available(macOS 26.0, *)
|
|
||||||
static var supportedModes: IntentModes = .background
|
|
||||||
|
|
||||||
@MainActor
|
|
||||||
func perform() async throws -> some IntentResult {
|
|
||||||
guard await requestIntentPermission() else {
|
|
||||||
throw GhosttyIntentError.permissionDenied
|
|
||||||
}
|
|
||||||
|
|
||||||
guard let surfaceView = terminal.surfaceView else {
|
|
||||||
throw GhosttyIntentError.surfaceNotFound
|
|
||||||
}
|
|
||||||
|
|
||||||
guard let controller = surfaceView.window?.windowController as? BaseTerminalController else {
|
|
||||||
return .result()
|
|
||||||
}
|
|
||||||
|
|
||||||
controller.closeSurface(surfaceView, withConfirmation: false)
|
|
||||||
return .result()
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,38 +0,0 @@
|
|||||||
import AppKit
|
|
||||||
import AppIntents
|
|
||||||
|
|
||||||
/// App intent that invokes a command palette entry.
|
|
||||||
@available(macOS 14.0, *)
|
|
||||||
struct CommandPaletteIntent: AppIntent {
|
|
||||||
static var title: LocalizedStringResource = "Invoke Command Palette Action"
|
|
||||||
|
|
||||||
@Parameter(
|
|
||||||
title: "Terminal",
|
|
||||||
description: "The terminal to base available commands from."
|
|
||||||
)
|
|
||||||
var terminal: TerminalEntity
|
|
||||||
|
|
||||||
@Parameter(
|
|
||||||
title: "Command",
|
|
||||||
description: "The command to invoke.",
|
|
||||||
optionsProvider: CommandQuery()
|
|
||||||
)
|
|
||||||
var command: CommandEntity
|
|
||||||
|
|
||||||
@available(macOS 26.0, *)
|
|
||||||
static var supportedModes: IntentModes = .background
|
|
||||||
|
|
||||||
@MainActor
|
|
||||||
func perform() async throws -> some IntentResult & ReturnsValue<Bool> {
|
|
||||||
guard await requestIntentPermission() else {
|
|
||||||
throw GhosttyIntentError.permissionDenied
|
|
||||||
}
|
|
||||||
|
|
||||||
guard let surface = terminal.surfaceModel else {
|
|
||||||
throw GhosttyIntentError.surfaceNotFound
|
|
||||||
}
|
|
||||||
|
|
||||||
let performed = surface.perform(action: command.action)
|
|
||||||
return .result(value: performed)
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,128 +0,0 @@
|
|||||||
import AppIntents
|
|
||||||
|
|
||||||
// MARK: AppEntity
|
|
||||||
|
|
||||||
@available(macOS 14.0, *)
|
|
||||||
struct CommandEntity: AppEntity {
|
|
||||||
let id: ID
|
|
||||||
|
|
||||||
// Note: for macOS 26 we can move all the properties to @ComputedProperty.
|
|
||||||
|
|
||||||
@Property(title: "Title")
|
|
||||||
var title: String
|
|
||||||
|
|
||||||
@Property(title: "Description")
|
|
||||||
var description: String
|
|
||||||
|
|
||||||
@Property(title: "Action")
|
|
||||||
var action: String
|
|
||||||
|
|
||||||
/// The underlying data model
|
|
||||||
let command: Ghostty.Command
|
|
||||||
|
|
||||||
/// A command identifier is a composite key based on the terminal and action.
|
|
||||||
struct ID: Hashable {
|
|
||||||
let terminalId: TerminalEntity.ID
|
|
||||||
let actionKey: String
|
|
||||||
|
|
||||||
init(terminalId: TerminalEntity.ID, actionKey: String) {
|
|
||||||
self.terminalId = terminalId
|
|
||||||
self.actionKey = actionKey
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static var typeDisplayRepresentation: TypeDisplayRepresentation {
|
|
||||||
TypeDisplayRepresentation(name: "Command Palette Command")
|
|
||||||
}
|
|
||||||
|
|
||||||
var displayRepresentation: DisplayRepresentation {
|
|
||||||
DisplayRepresentation(
|
|
||||||
title: LocalizedStringResource(stringLiteral: command.title),
|
|
||||||
subtitle: LocalizedStringResource(stringLiteral: command.description),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
static var defaultQuery = CommandQuery()
|
|
||||||
|
|
||||||
init(_ command: Ghostty.Command, for terminal: TerminalEntity) {
|
|
||||||
self.id = .init(terminalId: terminal.id, actionKey: command.actionKey)
|
|
||||||
self.command = command
|
|
||||||
self.title = command.title
|
|
||||||
self.description = command.description
|
|
||||||
self.action = command.action
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@available(macOS 14.0, *)
|
|
||||||
extension CommandEntity.ID: RawRepresentable {
|
|
||||||
var rawValue: String {
|
|
||||||
return "\(terminalId):\(actionKey)"
|
|
||||||
}
|
|
||||||
|
|
||||||
init?(rawValue: String) {
|
|
||||||
let components = rawValue.split(separator: ":", maxSplits: 1)
|
|
||||||
guard components.count == 2 else { return nil }
|
|
||||||
|
|
||||||
guard let terminalId = TerminalEntity.ID(uuidString: String(components[0])) else {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
self.terminalId = terminalId
|
|
||||||
self.actionKey = String(components[1])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Required by AppEntity
|
|
||||||
@available(macOS 14.0, *)
|
|
||||||
extension CommandEntity.ID: EntityIdentifierConvertible {
|
|
||||||
static func entityIdentifier(for entityIdentifierString: String) -> CommandEntity.ID? {
|
|
||||||
.init(rawValue: entityIdentifierString)
|
|
||||||
}
|
|
||||||
|
|
||||||
var entityIdentifierString: String {
|
|
||||||
rawValue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: EntityQuery
|
|
||||||
|
|
||||||
@available(macOS 14.0, *)
|
|
||||||
struct CommandQuery: EntityQuery {
|
|
||||||
// Inject our terminal parameter from our command palette intent.
|
|
||||||
@IntentParameterDependency<CommandPaletteIntent>(\.$terminal)
|
|
||||||
var commandPaletteIntent
|
|
||||||
|
|
||||||
@MainActor
|
|
||||||
func entities(for identifiers: [CommandEntity.ID]) async throws -> [CommandEntity] {
|
|
||||||
// Extract unique terminal IDs to avoid fetching duplicates
|
|
||||||
let terminalIds = Set(identifiers.map(\.terminalId))
|
|
||||||
let terminals = try await TerminalEntity.defaultQuery.entities(for: Array(terminalIds))
|
|
||||||
|
|
||||||
// Build a cache of terminals and their available commands
|
|
||||||
// This avoids repeated command fetching for the same terminal
|
|
||||||
typealias Tuple = (terminal: TerminalEntity, commands: [Ghostty.Command])
|
|
||||||
let commandMap: [TerminalEntity.ID: Tuple] =
|
|
||||||
terminals.reduce(into: [:]) { result, terminal in
|
|
||||||
guard let commands = try? terminal.surfaceModel?.commands() else { return }
|
|
||||||
result[terminal.id] = (terminal: terminal, commands: commands)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Map each identifier to its corresponding CommandEntity. If a command doesn't
|
|
||||||
// exist it maps to nil and is removed via compactMap.
|
|
||||||
return identifiers.compactMap { id in
|
|
||||||
guard let (terminal, commands) = commandMap[id.terminalId],
|
|
||||||
let command = commands.first(where: { $0.actionKey == id.actionKey }) else {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return CommandEntity(command, for: terminal)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@MainActor
|
|
||||||
func suggestedEntities() async throws -> [CommandEntity] {
|
|
||||||
guard let terminal = commandPaletteIntent?.terminal,
|
|
||||||
let surface = terminal.surfaceModel else { return [] }
|
|
||||||
return try surface.commands().map { CommandEntity($0, for: terminal) }
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,121 +0,0 @@
|
|||||||
import AppKit
|
|
||||||
import AppIntents
|
|
||||||
import SwiftUI
|
|
||||||
|
|
||||||
struct TerminalEntity: AppEntity {
|
|
||||||
let id: UUID
|
|
||||||
|
|
||||||
@Property(title: "Title")
|
|
||||||
var title: String
|
|
||||||
|
|
||||||
@Property(title: "Working Directory")
|
|
||||||
var workingDirectory: String?
|
|
||||||
|
|
||||||
@Property(title: "Kind")
|
|
||||||
var kind: Kind
|
|
||||||
|
|
||||||
var screenshot: NSImage?
|
|
||||||
|
|
||||||
static var typeDisplayRepresentation: TypeDisplayRepresentation {
|
|
||||||
TypeDisplayRepresentation(name: "Terminal")
|
|
||||||
}
|
|
||||||
|
|
||||||
@MainActor
|
|
||||||
var displayRepresentation: DisplayRepresentation {
|
|
||||||
var rep = DisplayRepresentation(title: "\(title)")
|
|
||||||
if let screenshot,
|
|
||||||
let data = screenshot.tiffRepresentation {
|
|
||||||
rep.image = .init(data: data)
|
|
||||||
}
|
|
||||||
|
|
||||||
return rep
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Returns the view associated with this entity. This may no longer exist.
|
|
||||||
@MainActor
|
|
||||||
var surfaceView: Ghostty.SurfaceView? {
|
|
||||||
Self.defaultQuery.all.first { $0.uuid == self.id }
|
|
||||||
}
|
|
||||||
|
|
||||||
@MainActor
|
|
||||||
var surfaceModel: Ghostty.Surface? {
|
|
||||||
surfaceView?.surfaceModel
|
|
||||||
}
|
|
||||||
|
|
||||||
static var defaultQuery = TerminalQuery()
|
|
||||||
|
|
||||||
@MainActor
|
|
||||||
init(_ view: Ghostty.SurfaceView) {
|
|
||||||
self.id = view.uuid
|
|
||||||
self.title = view.title
|
|
||||||
self.workingDirectory = view.pwd
|
|
||||||
if let nsImage = ImageRenderer(content: view.screenshot()).nsImage {
|
|
||||||
self.screenshot = nsImage
|
|
||||||
}
|
|
||||||
|
|
||||||
// Determine the kind based on the window controller type
|
|
||||||
if view.window?.windowController is QuickTerminalController {
|
|
||||||
self.kind = .quick
|
|
||||||
} else {
|
|
||||||
self.kind = .normal
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
extension TerminalEntity {
|
|
||||||
enum Kind: String, AppEnum {
|
|
||||||
case normal
|
|
||||||
case quick
|
|
||||||
|
|
||||||
static var typeDisplayRepresentation = TypeDisplayRepresentation(name: "Terminal Kind")
|
|
||||||
|
|
||||||
static var caseDisplayRepresentations: [Self: DisplayRepresentation] = [
|
|
||||||
.normal: .init(title: "Normal"),
|
|
||||||
.quick: .init(title: "Quick")
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
struct TerminalQuery: EntityStringQuery, EnumerableEntityQuery {
|
|
||||||
@MainActor
|
|
||||||
func entities(for identifiers: [TerminalEntity.ID]) async throws -> [TerminalEntity] {
|
|
||||||
return all.filter {
|
|
||||||
identifiers.contains($0.uuid)
|
|
||||||
}.map {
|
|
||||||
TerminalEntity($0)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@MainActor
|
|
||||||
func entities(matching string: String) async throws -> [TerminalEntity] {
|
|
||||||
return all.filter {
|
|
||||||
$0.title.localizedCaseInsensitiveContains(string)
|
|
||||||
}.map {
|
|
||||||
TerminalEntity($0)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@MainActor
|
|
||||||
func allEntities() async throws -> [TerminalEntity] {
|
|
||||||
return all.map { TerminalEntity($0) }
|
|
||||||
}
|
|
||||||
|
|
||||||
@MainActor
|
|
||||||
func suggestedEntities() async throws -> [TerminalEntity] {
|
|
||||||
return try await allEntities()
|
|
||||||
}
|
|
||||||
|
|
||||||
@MainActor
|
|
||||||
var all: [Ghostty.SurfaceView] {
|
|
||||||
// Find all of our terminal windows. This will include the quick terminal
|
|
||||||
// but only if it was previously opened.
|
|
||||||
let controllers = NSApp.windows.compactMap {
|
|
||||||
$0.windowController as? BaseTerminalController
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get all our surfaces
|
|
||||||
return controllers.flatMap {
|
|
||||||
$0.surfaceTree.root?.leaves() ?? []
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,69 +0,0 @@
|
|||||||
import AppKit
|
|
||||||
import AppIntents
|
|
||||||
|
|
||||||
/// App intent that retrieves details about a specific terminal.
|
|
||||||
struct GetTerminalDetailsIntent: AppIntent {
|
|
||||||
static var title: LocalizedStringResource = "Get Details of Terminal"
|
|
||||||
|
|
||||||
@Parameter(
|
|
||||||
title: "Detail",
|
|
||||||
description: "The detail to extract about a terminal."
|
|
||||||
)
|
|
||||||
var detail: TerminalDetail
|
|
||||||
|
|
||||||
@Parameter(
|
|
||||||
title: "Terminal",
|
|
||||||
description: "The terminal to extract information about."
|
|
||||||
)
|
|
||||||
var terminal: TerminalEntity
|
|
||||||
|
|
||||||
@available(macOS 26.0, *)
|
|
||||||
static var supportedModes: IntentModes = .background
|
|
||||||
|
|
||||||
static var parameterSummary: some ParameterSummary {
|
|
||||||
Summary("Get \(\.$detail) from \(\.$terminal)")
|
|
||||||
}
|
|
||||||
|
|
||||||
@MainActor
|
|
||||||
func perform() async throws -> some IntentResult & ReturnsValue<String?> {
|
|
||||||
guard await requestIntentPermission() else {
|
|
||||||
throw GhosttyIntentError.permissionDenied
|
|
||||||
}
|
|
||||||
|
|
||||||
switch detail {
|
|
||||||
case .title: return .result(value: terminal.title)
|
|
||||||
case .workingDirectory: return .result(value: terminal.workingDirectory)
|
|
||||||
case .allContents:
|
|
||||||
guard let view = terminal.surfaceView else { throw GhosttyIntentError.surfaceNotFound }
|
|
||||||
return .result(value: view.cachedScreenContents.get())
|
|
||||||
case .selectedText:
|
|
||||||
guard let view = terminal.surfaceView else { throw GhosttyIntentError.surfaceNotFound }
|
|
||||||
return .result(value: view.accessibilitySelectedText())
|
|
||||||
case .visibleText:
|
|
||||||
guard let view = terminal.surfaceView else { throw GhosttyIntentError.surfaceNotFound }
|
|
||||||
return .result(value: view.cachedVisibleContents.get())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: TerminalDetail
|
|
||||||
|
|
||||||
enum TerminalDetail: String {
|
|
||||||
case title
|
|
||||||
case workingDirectory
|
|
||||||
case allContents
|
|
||||||
case selectedText
|
|
||||||
case visibleText
|
|
||||||
}
|
|
||||||
|
|
||||||
extension TerminalDetail: AppEnum {
|
|
||||||
static var typeDisplayRepresentation = TypeDisplayRepresentation(name: "Terminal Detail")
|
|
||||||
|
|
||||||
static var caseDisplayRepresentations: [Self: DisplayRepresentation] = [
|
|
||||||
.title: .init(title: "Title"),
|
|
||||||
.workingDirectory: .init(title: "Working Directory"),
|
|
||||||
.allContents: .init(title: "Full Contents"),
|
|
||||||
.selectedText: .init(title: "Selected Text"),
|
|
||||||
.visibleText: .init(title: "Visible Text"),
|
|
||||||
]
|
|
||||||
}
|
|
@@ -1,13 +0,0 @@
|
|||||||
enum GhosttyIntentError: Error, CustomLocalizedStringResourceConvertible {
|
|
||||||
case appUnavailable
|
|
||||||
case surfaceNotFound
|
|
||||||
case permissionDenied
|
|
||||||
|
|
||||||
var localizedStringResource: LocalizedStringResource {
|
|
||||||
switch self {
|
|
||||||
case .appUnavailable: "The Ghostty app isn't properly initialized."
|
|
||||||
case .surfaceNotFound: "The terminal no longer exists."
|
|
||||||
case .permissionDenied: "Ghostty doesn't allow Shortcuts."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,317 +0,0 @@
|
|||||||
import AppKit
|
|
||||||
import AppIntents
|
|
||||||
|
|
||||||
/// App intent to input text in a terminal.
|
|
||||||
struct InputTextIntent: AppIntent {
|
|
||||||
static var title: LocalizedStringResource = "Input Text to Terminal"
|
|
||||||
|
|
||||||
@Parameter(
|
|
||||||
title: "Text",
|
|
||||||
description: "The text to input to the terminal. The text will be inputted as if it was pasted.",
|
|
||||||
inputOptions: String.IntentInputOptions(
|
|
||||||
capitalizationType: .none,
|
|
||||||
multiline: true,
|
|
||||||
autocorrect: false,
|
|
||||||
smartQuotes: false,
|
|
||||||
smartDashes: false
|
|
||||||
)
|
|
||||||
)
|
|
||||||
var text: String
|
|
||||||
|
|
||||||
@Parameter(
|
|
||||||
title: "Terminal",
|
|
||||||
description: "The terminal to scope this action to."
|
|
||||||
)
|
|
||||||
var terminal: TerminalEntity
|
|
||||||
|
|
||||||
@available(macOS 26.0, *)
|
|
||||||
static var supportedModes: IntentModes = [.background, .foreground]
|
|
||||||
|
|
||||||
@MainActor
|
|
||||||
func perform() async throws -> some IntentResult {
|
|
||||||
guard await requestIntentPermission() else {
|
|
||||||
throw GhosttyIntentError.permissionDenied
|
|
||||||
}
|
|
||||||
|
|
||||||
guard let surface = terminal.surfaceModel else {
|
|
||||||
throw GhosttyIntentError.surfaceNotFound
|
|
||||||
}
|
|
||||||
|
|
||||||
surface.sendText(text)
|
|
||||||
return .result()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// App intent to trigger a keyboard event.
|
|
||||||
struct KeyEventIntent: AppIntent {
|
|
||||||
static var title: LocalizedStringResource = "Send Keyboard Event to Terminal"
|
|
||||||
static var description = IntentDescription("Simulate a keyboard event. This will not handle text encoding; use the 'Input Text' action for that.")
|
|
||||||
|
|
||||||
@Parameter(
|
|
||||||
title: "Key",
|
|
||||||
description: "The key to send to the terminal.",
|
|
||||||
default: .enter
|
|
||||||
)
|
|
||||||
var key: Ghostty.Input.Key
|
|
||||||
|
|
||||||
@Parameter(
|
|
||||||
title: "Modifier(s)",
|
|
||||||
description: "The modifiers to send with the key event.",
|
|
||||||
default: []
|
|
||||||
)
|
|
||||||
var mods: [KeyEventMods]
|
|
||||||
|
|
||||||
@Parameter(
|
|
||||||
title: "Event Type",
|
|
||||||
description: "A key press or release.",
|
|
||||||
default: .press
|
|
||||||
)
|
|
||||||
var action: Ghostty.Input.Action
|
|
||||||
|
|
||||||
@Parameter(
|
|
||||||
title: "Terminal",
|
|
||||||
description: "The terminal to scope this action to."
|
|
||||||
)
|
|
||||||
var terminal: TerminalEntity
|
|
||||||
|
|
||||||
@available(macOS 26.0, *)
|
|
||||||
static var supportedModes: IntentModes = [.background, .foreground]
|
|
||||||
|
|
||||||
@MainActor
|
|
||||||
func perform() async throws -> some IntentResult {
|
|
||||||
guard await requestIntentPermission() else {
|
|
||||||
throw GhosttyIntentError.permissionDenied
|
|
||||||
}
|
|
||||||
|
|
||||||
guard let surface = terminal.surfaceModel else {
|
|
||||||
throw GhosttyIntentError.surfaceNotFound
|
|
||||||
}
|
|
||||||
|
|
||||||
// Convert KeyEventMods array to Ghostty.Input.Mods
|
|
||||||
let ghosttyMods = mods.reduce(Ghostty.Input.Mods()) { result, mod in
|
|
||||||
result.union(mod.ghosttyMod)
|
|
||||||
}
|
|
||||||
|
|
||||||
let keyEvent = Ghostty.Input.KeyEvent(
|
|
||||||
key: key,
|
|
||||||
action: action,
|
|
||||||
mods: ghosttyMods
|
|
||||||
)
|
|
||||||
surface.sendKeyEvent(keyEvent)
|
|
||||||
|
|
||||||
return .result()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: MouseButtonIntent
|
|
||||||
|
|
||||||
/// App intent to trigger a mouse button event.
|
|
||||||
struct MouseButtonIntent: AppIntent {
|
|
||||||
static var title: LocalizedStringResource = "Send Mouse Button Event to Terminal"
|
|
||||||
|
|
||||||
@Parameter(
|
|
||||||
title: "Button",
|
|
||||||
description: "The mouse button to press or release.",
|
|
||||||
default: .left
|
|
||||||
)
|
|
||||||
var button: Ghostty.Input.MouseButton
|
|
||||||
|
|
||||||
@Parameter(
|
|
||||||
title: "Action",
|
|
||||||
description: "Whether to press or release the button.",
|
|
||||||
default: .press
|
|
||||||
)
|
|
||||||
var action: Ghostty.Input.MouseState
|
|
||||||
|
|
||||||
@Parameter(
|
|
||||||
title: "Modifier(s)",
|
|
||||||
description: "The modifiers to send with the mouse event.",
|
|
||||||
default: []
|
|
||||||
)
|
|
||||||
var mods: [KeyEventMods]
|
|
||||||
|
|
||||||
@Parameter(
|
|
||||||
title: "Terminal",
|
|
||||||
description: "The terminal to scope this action to."
|
|
||||||
)
|
|
||||||
var terminal: TerminalEntity
|
|
||||||
|
|
||||||
@available(macOS 26.0, *)
|
|
||||||
static var supportedModes: IntentModes = [.background, .foreground]
|
|
||||||
|
|
||||||
@MainActor
|
|
||||||
func perform() async throws -> some IntentResult {
|
|
||||||
guard await requestIntentPermission() else {
|
|
||||||
throw GhosttyIntentError.permissionDenied
|
|
||||||
}
|
|
||||||
|
|
||||||
guard let surface = terminal.surfaceModel else {
|
|
||||||
throw GhosttyIntentError.surfaceNotFound
|
|
||||||
}
|
|
||||||
|
|
||||||
// Convert KeyEventMods array to Ghostty.Input.Mods
|
|
||||||
let ghosttyMods = mods.reduce(Ghostty.Input.Mods()) { result, mod in
|
|
||||||
result.union(mod.ghosttyMod)
|
|
||||||
}
|
|
||||||
|
|
||||||
let mouseEvent = Ghostty.Input.MouseButtonEvent(
|
|
||||||
action: action,
|
|
||||||
button: button,
|
|
||||||
mods: ghosttyMods
|
|
||||||
)
|
|
||||||
surface.sendMouseButton(mouseEvent)
|
|
||||||
|
|
||||||
return .result()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// App intent to send a mouse position event.
|
|
||||||
struct MousePosIntent: AppIntent {
|
|
||||||
static var title: LocalizedStringResource = "Send Mouse Position Event to Terminal"
|
|
||||||
static var description = IntentDescription("Send a mouse position event to the terminal. This reports the cursor position for mouse tracking.")
|
|
||||||
|
|
||||||
@Parameter(
|
|
||||||
title: "X Position",
|
|
||||||
description: "The horizontal position of the mouse cursor in pixels.",
|
|
||||||
default: 0
|
|
||||||
)
|
|
||||||
var x: Double
|
|
||||||
|
|
||||||
@Parameter(
|
|
||||||
title: "Y Position",
|
|
||||||
description: "The vertical position of the mouse cursor in pixels.",
|
|
||||||
default: 0
|
|
||||||
)
|
|
||||||
var y: Double
|
|
||||||
|
|
||||||
@Parameter(
|
|
||||||
title: "Modifier(s)",
|
|
||||||
description: "The modifiers to send with the mouse position event.",
|
|
||||||
default: []
|
|
||||||
)
|
|
||||||
var mods: [KeyEventMods]
|
|
||||||
|
|
||||||
@Parameter(
|
|
||||||
title: "Terminal",
|
|
||||||
description: "The terminal to scope this action to."
|
|
||||||
)
|
|
||||||
var terminal: TerminalEntity
|
|
||||||
|
|
||||||
@available(macOS 26.0, *)
|
|
||||||
static var supportedModes: IntentModes = [.background, .foreground]
|
|
||||||
|
|
||||||
@MainActor
|
|
||||||
func perform() async throws -> some IntentResult {
|
|
||||||
guard await requestIntentPermission() else {
|
|
||||||
throw GhosttyIntentError.permissionDenied
|
|
||||||
}
|
|
||||||
|
|
||||||
guard let surface = terminal.surfaceModel else {
|
|
||||||
throw GhosttyIntentError.surfaceNotFound
|
|
||||||
}
|
|
||||||
|
|
||||||
// Convert KeyEventMods array to Ghostty.Input.Mods
|
|
||||||
let ghosttyMods = mods.reduce(Ghostty.Input.Mods()) { result, mod in
|
|
||||||
result.union(mod.ghosttyMod)
|
|
||||||
}
|
|
||||||
|
|
||||||
let mousePosEvent = Ghostty.Input.MousePosEvent(
|
|
||||||
x: x,
|
|
||||||
y: y,
|
|
||||||
mods: ghosttyMods
|
|
||||||
)
|
|
||||||
surface.sendMousePos(mousePosEvent)
|
|
||||||
|
|
||||||
return .result()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// App intent to send a mouse scroll event.
|
|
||||||
struct MouseScrollIntent: AppIntent {
|
|
||||||
static var title: LocalizedStringResource = "Send Mouse Scroll Event to Terminal"
|
|
||||||
static var description = IntentDescription("Send a mouse scroll event to the terminal with configurable precision and momentum.")
|
|
||||||
|
|
||||||
@Parameter(
|
|
||||||
title: "X Scroll Delta",
|
|
||||||
description: "The horizontal scroll amount.",
|
|
||||||
default: 0
|
|
||||||
)
|
|
||||||
var x: Double
|
|
||||||
|
|
||||||
@Parameter(
|
|
||||||
title: "Y Scroll Delta",
|
|
||||||
description: "The vertical scroll amount.",
|
|
||||||
default: 0
|
|
||||||
)
|
|
||||||
var y: Double
|
|
||||||
|
|
||||||
@Parameter(
|
|
||||||
title: "High Precision",
|
|
||||||
description: "Whether this is a high-precision scroll event (e.g., from trackpad).",
|
|
||||||
default: false
|
|
||||||
)
|
|
||||||
var precision: Bool
|
|
||||||
|
|
||||||
@Parameter(
|
|
||||||
title: "Momentum Phase",
|
|
||||||
description: "The momentum phase for inertial scrolling.",
|
|
||||||
default: Ghostty.Input.Momentum.none
|
|
||||||
)
|
|
||||||
var momentum: Ghostty.Input.Momentum
|
|
||||||
|
|
||||||
@Parameter(
|
|
||||||
title: "Terminal",
|
|
||||||
description: "The terminal to scope this action to."
|
|
||||||
)
|
|
||||||
var terminal: TerminalEntity
|
|
||||||
|
|
||||||
@available(macOS 26.0, *)
|
|
||||||
static var supportedModes: IntentModes = [.background, .foreground]
|
|
||||||
|
|
||||||
@MainActor
|
|
||||||
func perform() async throws -> some IntentResult {
|
|
||||||
guard await requestIntentPermission() else {
|
|
||||||
throw GhosttyIntentError.permissionDenied
|
|
||||||
}
|
|
||||||
|
|
||||||
guard let surface = terminal.surfaceModel else {
|
|
||||||
throw GhosttyIntentError.surfaceNotFound
|
|
||||||
}
|
|
||||||
|
|
||||||
let scrollEvent = Ghostty.Input.MouseScrollEvent(
|
|
||||||
x: x,
|
|
||||||
y: y,
|
|
||||||
mods: .init(precision: precision, momentum: momentum)
|
|
||||||
)
|
|
||||||
surface.sendMouseScroll(scrollEvent)
|
|
||||||
|
|
||||||
return .result()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: Mods
|
|
||||||
|
|
||||||
enum KeyEventMods: String, AppEnum, CaseIterable {
|
|
||||||
case shift
|
|
||||||
case control
|
|
||||||
case option
|
|
||||||
case command
|
|
||||||
|
|
||||||
static var typeDisplayRepresentation = TypeDisplayRepresentation(name: "Modifier Key")
|
|
||||||
|
|
||||||
static var caseDisplayRepresentations: [KeyEventMods : DisplayRepresentation] = [
|
|
||||||
.shift: "Shift",
|
|
||||||
.control: "Control",
|
|
||||||
.option: "Option",
|
|
||||||
.command: "Command"
|
|
||||||
]
|
|
||||||
|
|
||||||
var ghosttyMod: Ghostty.Input.Mods {
|
|
||||||
switch self {
|
|
||||||
case .shift: .shift
|
|
||||||
case .control: .ctrl
|
|
||||||
case .option: .alt
|
|
||||||
case .command: .super
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,57 +0,0 @@
|
|||||||
import AppKit
|
|
||||||
|
|
||||||
/// Requests permission for Shortcuts app to interact with Ghostty
|
|
||||||
///
|
|
||||||
/// This function displays a permission dialog asking the user to allow Shortcuts
|
|
||||||
/// to interact with Ghostty. The permission is automatically cached for 10 minutes
|
|
||||||
/// if the user selects "Allow", meaning subsequent intent calls won't show the dialog
|
|
||||||
/// again during that time period.
|
|
||||||
///
|
|
||||||
/// The permission uses a shared UserDefaults key across all intents, so granting
|
|
||||||
/// permission for one intent allows all Ghostty intents to execute without additional
|
|
||||||
/// prompts for the duration of the cache period.
|
|
||||||
///
|
|
||||||
/// - Returns: `true` if permission is granted, `false` if denied
|
|
||||||
///
|
|
||||||
/// ## Usage
|
|
||||||
/// Add this check at the beginning of any App Intent's `perform()` method:
|
|
||||||
/// ```swift
|
|
||||||
/// @MainActor
|
|
||||||
/// func perform() async throws -> some IntentResult {
|
|
||||||
/// guard await requestIntentPermission() else {
|
|
||||||
/// throw GhosttyIntentError.permissionDenied
|
|
||||||
/// }
|
|
||||||
/// // ... continue with intent implementation
|
|
||||||
/// }
|
|
||||||
/// ```
|
|
||||||
func requestIntentPermission() async -> Bool {
|
|
||||||
await withCheckedContinuation { continuation in
|
|
||||||
Task { @MainActor in
|
|
||||||
if let delegate = NSApp.delegate as? AppDelegate {
|
|
||||||
switch (delegate.ghostty.config.macosShortcuts) {
|
|
||||||
case .allow:
|
|
||||||
continuation.resume(returning: true)
|
|
||||||
return
|
|
||||||
|
|
||||||
case .deny:
|
|
||||||
continuation.resume(returning: false)
|
|
||||||
return
|
|
||||||
|
|
||||||
case .ask:
|
|
||||||
// Continue with the permission dialog
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
PermissionRequest.show(
|
|
||||||
"com.mitchellh.ghostty.shortcutsPermission",
|
|
||||||
message: "Allow Shortcuts to interact with Ghostty?",
|
|
||||||
allowDuration: .forever,
|
|
||||||
rememberDuration: nil,
|
|
||||||
) { response in
|
|
||||||
continuation.resume(returning: response)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,35 +0,0 @@
|
|||||||
import AppKit
|
|
||||||
import AppIntents
|
|
||||||
|
|
||||||
struct KeybindIntent: AppIntent {
|
|
||||||
static var title: LocalizedStringResource = "Invoke a Keybind Action"
|
|
||||||
|
|
||||||
@Parameter(
|
|
||||||
title: "Terminal",
|
|
||||||
description: "The terminal to invoke the action on."
|
|
||||||
)
|
|
||||||
var terminal: TerminalEntity
|
|
||||||
|
|
||||||
@Parameter(
|
|
||||||
title: "Action",
|
|
||||||
description: "The keybind action to invoke. This can be any valid keybind action you could put in a configuration file."
|
|
||||||
)
|
|
||||||
var action: String
|
|
||||||
|
|
||||||
@available(macOS 26.0, *)
|
|
||||||
static var supportedModes: IntentModes = [.background, .foreground]
|
|
||||||
|
|
||||||
@MainActor
|
|
||||||
func perform() async throws -> some IntentResult & ReturnsValue<Bool> {
|
|
||||||
guard await requestIntentPermission() else {
|
|
||||||
throw GhosttyIntentError.permissionDenied
|
|
||||||
}
|
|
||||||
|
|
||||||
guard let surface = terminal.surfaceModel else {
|
|
||||||
throw GhosttyIntentError.surfaceNotFound
|
|
||||||
}
|
|
||||||
|
|
||||||
let performed = surface.perform(action: action)
|
|
||||||
return .result(value: performed)
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,168 +0,0 @@
|
|||||||
import AppKit
|
|
||||||
import AppIntents
|
|
||||||
import GhosttyKit
|
|
||||||
|
|
||||||
/// App intent that allows creating a new terminal window or tab.
|
|
||||||
///
|
|
||||||
/// This requires macOS 15 or greater because we use features of macOS 15 here.
|
|
||||||
@available(macOS 15.0, *)
|
|
||||||
struct NewTerminalIntent: AppIntent {
|
|
||||||
static var title: LocalizedStringResource = "New Terminal"
|
|
||||||
static var description = IntentDescription("Create a new terminal.")
|
|
||||||
|
|
||||||
@Parameter(
|
|
||||||
title: "Location",
|
|
||||||
description: "The location that the terminal should be created.",
|
|
||||||
default: .window
|
|
||||||
)
|
|
||||||
var location: NewTerminalLocation
|
|
||||||
|
|
||||||
@Parameter(
|
|
||||||
title: "Command",
|
|
||||||
description: "Command to execute within your configured shell.",
|
|
||||||
)
|
|
||||||
var command: String?
|
|
||||||
|
|
||||||
@Parameter(
|
|
||||||
title: "Working Directory",
|
|
||||||
description: "The working directory to open in the terminal.",
|
|
||||||
supportedContentTypes: [.folder]
|
|
||||||
)
|
|
||||||
var workingDirectory: IntentFile?
|
|
||||||
|
|
||||||
@Parameter(
|
|
||||||
title: "Environment Variables",
|
|
||||||
description: "Environment variables in `KEY=VALUE` format.",
|
|
||||||
default: []
|
|
||||||
)
|
|
||||||
var env: [String]
|
|
||||||
|
|
||||||
@Parameter(
|
|
||||||
title: "Parent Terminal",
|
|
||||||
description: "The terminal to inherit the base configuration from."
|
|
||||||
)
|
|
||||||
var parent: TerminalEntity?
|
|
||||||
|
|
||||||
@available(macOS 26.0, *)
|
|
||||||
static var supportedModes: IntentModes = .foreground(.immediate)
|
|
||||||
|
|
||||||
@available(macOS, obsoleted: 26.0, message: "Replaced by supportedModes")
|
|
||||||
static var openAppWhenRun = true
|
|
||||||
|
|
||||||
@MainActor
|
|
||||||
func perform() async throws -> some IntentResult & ReturnsValue<TerminalEntity?> {
|
|
||||||
guard await requestIntentPermission() else {
|
|
||||||
throw GhosttyIntentError.permissionDenied
|
|
||||||
}
|
|
||||||
guard let appDelegate = NSApp.delegate as? AppDelegate else {
|
|
||||||
throw GhosttyIntentError.appUnavailable
|
|
||||||
}
|
|
||||||
let ghostty = appDelegate.ghostty
|
|
||||||
|
|
||||||
var config = Ghostty.SurfaceConfiguration()
|
|
||||||
|
|
||||||
// We don't run command as "command" and instead use "initialInput" so
|
|
||||||
// that we can get all the login scripts to setup things like PATH.
|
|
||||||
if let command {
|
|
||||||
config.initialInput = "\(command); exit\n"
|
|
||||||
}
|
|
||||||
|
|
||||||
// If we were given a working directory then open that directory
|
|
||||||
if let url = workingDirectory?.fileURL {
|
|
||||||
let dir = url.hasDirectoryPath ? url : url.deletingLastPathComponent()
|
|
||||||
config.workingDirectory = dir.path(percentEncoded: false)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Parse environment variables from KEY=VALUE format
|
|
||||||
for envVar in env {
|
|
||||||
if let separatorIndex = envVar.firstIndex(of: "=") {
|
|
||||||
let key = String(envVar[..<separatorIndex])
|
|
||||||
let value = String(envVar[envVar.index(after: separatorIndex)...])
|
|
||||||
config.environmentVariables[key] = value
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Determine if we have a parent and get it
|
|
||||||
let parent: Ghostty.SurfaceView?
|
|
||||||
if let parentParam = self.parent {
|
|
||||||
guard let view = parentParam.surfaceView else {
|
|
||||||
throw GhosttyIntentError.surfaceNotFound
|
|
||||||
}
|
|
||||||
|
|
||||||
parent = view
|
|
||||||
} else if let preferred = TerminalController.preferredParent {
|
|
||||||
parent = preferred.focusedSurface ?? preferred.surfaceTree.root?.leftmostLeaf()
|
|
||||||
} else {
|
|
||||||
parent = nil
|
|
||||||
}
|
|
||||||
|
|
||||||
switch location {
|
|
||||||
case .window:
|
|
||||||
let newController = TerminalController.newWindow(
|
|
||||||
ghostty,
|
|
||||||
withBaseConfig: config,
|
|
||||||
withParent: parent?.window)
|
|
||||||
if let view = newController.surfaceTree.root?.leftmostLeaf() {
|
|
||||||
return .result(value: TerminalEntity(view))
|
|
||||||
}
|
|
||||||
|
|
||||||
case .tab:
|
|
||||||
let newController = TerminalController.newTab(
|
|
||||||
ghostty,
|
|
||||||
from: parent?.window,
|
|
||||||
withBaseConfig: config)
|
|
||||||
if let view = newController?.surfaceTree.root?.leftmostLeaf() {
|
|
||||||
return .result(value: TerminalEntity(view))
|
|
||||||
}
|
|
||||||
|
|
||||||
case .splitLeft, .splitRight, .splitUp, .splitDown:
|
|
||||||
guard let parent,
|
|
||||||
let controller = parent.window?.windowController as? BaseTerminalController else {
|
|
||||||
throw GhosttyIntentError.surfaceNotFound
|
|
||||||
}
|
|
||||||
|
|
||||||
if let view = controller.newSplit(
|
|
||||||
at: parent,
|
|
||||||
direction: location.splitDirection!
|
|
||||||
) {
|
|
||||||
return .result(value: TerminalEntity(view))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return .result(value: .none)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: NewTerminalLocation
|
|
||||||
|
|
||||||
enum NewTerminalLocation: String {
|
|
||||||
case tab
|
|
||||||
case window
|
|
||||||
case splitLeft = "split:left"
|
|
||||||
case splitRight = "split:right"
|
|
||||||
case splitUp = "split:up"
|
|
||||||
case splitDown = "split:down"
|
|
||||||
|
|
||||||
var splitDirection: SplitTree<Ghostty.SurfaceView>.NewDirection? {
|
|
||||||
switch self {
|
|
||||||
case .splitLeft: return .left
|
|
||||||
case .splitRight: return .right
|
|
||||||
case .splitUp: return .up
|
|
||||||
case .splitDown: return .down
|
|
||||||
default: return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
extension NewTerminalLocation: AppEnum {
|
|
||||||
static var typeDisplayRepresentation = TypeDisplayRepresentation(name: "Terminal Location")
|
|
||||||
|
|
||||||
static var caseDisplayRepresentations: [Self: DisplayRepresentation] = [
|
|
||||||
.tab: .init(title: "Tab"),
|
|
||||||
.window: .init(title: "Window"),
|
|
||||||
.splitLeft: .init(title: "Split Left"),
|
|
||||||
.splitRight: .init(title: "Split Right"),
|
|
||||||
.splitUp: .init(title: "Split Up"),
|
|
||||||
.splitDown: .init(title: "Split Down"),
|
|
||||||
]
|
|
||||||
}
|
|