Closes #5744 

This gets Ghostty onto Zig 0.14. The goal of this PR is to focus only on
Zig 0.14 _compatibility_. I plan to open a number of subsequent issues
for future improvements I'd like to tackle, as noted in #5744.

I did run some basic benchmarks on a Zig 0.13 vs 0.14 build and didn't
notice any statistically significant changes. All our scrolling
benchmarks on vtebench got consistently 1 or 2ms faster but that may
just be noise. The good news is nothing got consistently slower (nothing
got slower at all on any runs!).

The Git history here is kind of nasty, I'm going to squash it.
pull/6701/head
Mitchell Hashimoto 2025-03-13 09:36:09 -07:00 committed by GitHub
commit aeada3f1a8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
167 changed files with 946 additions and 871 deletions

View File

@ -686,4 +686,4 @@ jobs:
file: src/build/docker/debian/Dockerfile file: src/build/docker/debian/Dockerfile
build-args: | build-args: |
DISTRO_VERSION=12 DISTRO_VERSION=12
ZIG_VERSION=0.13.0 ZIG_VERSION=0.14.0

View File

@ -48,7 +48,7 @@ To find the version of Zig required to build Ghostty, check the `required_zig`
constant in `build.zig`. You don't need to know Zig to extract this information. constant in `build.zig`. You don't need to know Zig to extract this information.
This version will always be an official released version of Zig. This version will always be an official released version of Zig.
For example, at the time of writing this document, Ghostty requires Zig 0.13.0. For example, at the time of writing this document, Ghostty requires Zig 0.14.0.
## Building Ghostty ## Building Ghostty

View File

@ -3,7 +3,7 @@ const builtin = @import("builtin");
const buildpkg = @import("src/build/main.zig"); const buildpkg = @import("src/build/main.zig");
comptime { comptime {
buildpkg.requireZig("0.13.0"); buildpkg.requireZig("0.14.0");
} }
pub fn build(b: *std.Build) !void { pub fn build(b: *std.Build) !void {
@ -50,7 +50,7 @@ pub fn build(b: *std.Build) !void {
// As such, these build steps are lacking. For example, the Darwin // As such, these build steps are lacking. For example, the Darwin
// build only produces an xcframework. // build only produces an xcframework.
if (config.app_runtime == .none) { if (config.app_runtime == .none) {
if (config.target.result.isDarwin()) darwin: { if (config.target.result.os.tag.isDarwin()) darwin: {
if (!config.emit_xcframework) break :darwin; if (!config.emit_xcframework) break :darwin;
// Build the xcframework // Build the xcframework

View File

@ -1,59 +1,61 @@
.{ .{
.name = "ghostty", .name = .ghostty,
.version = "1.1.3", .version = "1.1.3",
.paths = .{""}, .paths = .{""},
.fingerprint = 0x64407a2a0b4147e5,
.dependencies = .{ .dependencies = .{
// Zig libs // Zig libs
.libxev = .{ .libxev = .{
// mitchellh/libxev // mitchellh/libxev
.url = "https://github.com/mitchellh/libxev/archive/8943932a668f338cb2c500f6e1a7396bacd8b55d.tar.gz", .url = "https://github.com/mitchellh/libxev/archive/3df9337a9e84450a58a2c4af434ec1a036f7b494.tar.gz",
.hash = "1220a67b584c9499154de8c96851ed8e92315452cb2027c06e2d7d07a39c6f900d1a", .hash = "libxev-0.0.0-86vtc-ziEgDbLP0vihUn1MhsxNKY4GJEga6BEr7oyHpz",
}, },
.mach_glfw = .{ .mach_glfw = .{
// mitchellh/mach-glfw // mitchellh/mach-glfw
.url = "https://deps.files.ghostty.org/mach_glfw-12206ed982e709e565d536ce930701a8c07edfd2cfdce428683f3f2a601d37696a62.tar.gz", .url = "https://github.com/mitchellh/mach-glfw/archive/d84bc11b0601cdad71035a0e9cf21572d76aa0d2.zip",
.hash = "12206ed982e709e565d536ce930701a8c07edfd2cfdce428683f3f2a601d37696a62", .hash = "mach_glfw-0.2.0-EJSQm2M9BQCiYGTd9VcKjg2DhSD7WT4kS-MfX68ORRT_",
.lazy = true, .lazy = true,
}, },
.vaxis = .{ .vaxis = .{
// rockorager/libvaxis // rockorager/libvaxis
.url = "git+https://github.com/rockorager/libvaxis#2237a7059eae99e9f132dd5acd1555e49d6c7d93", .url = "git+https://github.com/rockorager/libvaxis#1e24e0dfb509e974e1c8713bcd119d0ae032a8c7",
.hash = "1220f5aec880d4f430cc1597ede88f1530da69e39a4986080e976b0c7b919c2ebfeb", .hash = "vaxis-0.1.0-BWNV_MHyCAARemSCSwwc3sA1etNgv7ge0BCIXspX6CZv",
}, },
.z2d = .{ .z2d = .{
// vancluever/z2d // vancluever/z2d
.url = "https://deps.files.ghostty.org/z2d-12201f0d542e7541cf492a001d4d0d0155c92f58212fbcb0d224e95edeba06b5416a.tar.gz", .url = "https://github.com/vancluever/z2d/archive/1e89605a624940c310c7a1d81b46a7c5c05919e3.tar.gz",
.hash = "12201f0d542e7541cf492a001d4d0d0155c92f58212fbcb0d224e95edeba06b5416a", .hash = "z2d-0.6.0-j5P_HvLdCABu-dXpCeRM7Uk4m16vULg1980lMNCQj4_C",
}, },
.zig_objc = .{ .zig_objc = .{
// mitchellh/zig-objc // mitchellh/zig-objc
.url = "https://deps.files.ghostty.org/zig_objc-1220e17e64ef0ef561b3e4b9f3a96a2494285f2ec31c097721bf8c8677ec4415c634.tar.gz", .url = "https://github.com/mitchellh/zig-objc/archive/3ab0d37c7d6b933d6ded1b3a35b6b60f05590a98.tar.gz",
.hash = "1220e17e64ef0ef561b3e4b9f3a96a2494285f2ec31c097721bf8c8677ec4415c634", .hash = "zig_objc-0.0.0-Ir_Sp3TyAADEVRTxXlScq3t_uKAM91MYNerZkHfbD0yt",
}, },
.zig_js = .{ .zig_js = .{
// mitchellh/zig-js // mitchellh/zig-js
.url = "https://deps.files.ghostty.org/zig_js-12205a66d423259567764fa0fc60c82be35365c21aeb76c5a7dc99698401f4f6fefc.tar.gz", .url = "https://deps.files.ghostty.org/zig_js-12205a66d423259567764fa0fc60c82be35365c21aeb76c5a7dc99698401f4f6fefc.tar.gz",
.hash = "12205a66d423259567764fa0fc60c82be35365c21aeb76c5a7dc99698401f4f6fefc", .hash = "N-V-__8AAB9YCQBaZtQjJZVndk-g_GDIK-NTZcIa63bFp9yZ",
}, },
.ziglyph = .{ .ziglyph = .{
.url = "https://deps.files.ghostty.org/ziglyph-b89d43d1e3fb01b6074bc1f7fc980324b04d26a5.tar.gz", .url = "https://deps.files.ghostty.org/ziglyph-b89d43d1e3fb01b6074bc1f7fc980324b04d26a5.tar.gz",
.hash = "12207831bce7d4abce57b5a98e8f3635811cfefd160bca022eb91fe905d36a02cf25", .hash = "ziglyph-0.11.2-AAAAAHPtHwB4Mbzn1KvOV7Wpjo82NYEc_v0WC8oCLrkf",
}, },
.zig_wayland = .{ .zig_wayland = .{
// codeberg ifreund/zig-wayland // codeberg ifreund/zig-wayland
.url = "https://deps.files.ghostty.org/zig-wayland-fbfe3b4ac0b472a27b1f1a67405436c58cbee12d.tar.gz", .url = "https://codeberg.org/ifreund/zig-wayland/archive/f3c5d503e540ada8cbcb056420de240af0c094f7.tar.gz",
.hash = "12209ca054cb1919fa276e328967f10b253f7537c4136eb48f3332b0f7cf661cad38", .hash = "wayland-0.4.0-dev-lQa1kjfIAQCmhhQu3xF0KH-94-TzeMXOqfnP0-Dg6Wyy",
}, },
.zf = .{ .zf = .{
// natecraddock/zf // natecraddock/zf
.url = "https://deps.files.ghostty.org/zf-1220edc3b8d8bedbb50555947987e5e8e2f93871ca3c8e8d4cc8f1377c15b5dd35e8.tar.gz", .url = "https://github.com/natecraddock/zf/archive/03176fcf23fda543cc02a8675e92c1fe3b1ee2eb.tar.gz",
.hash = "1220edc3b8d8bedbb50555947987e5e8e2f93871ca3c8e8d4cc8f1377c15b5dd35e8", .hash = "zf-0.10.3-OIRy8bKIAACV6JaNNncXA68Nw2BUAD9JVfQdzjyoZQ-J",
}, },
.gobject = .{ .gobject = .{
// ianprime0509/zig-gobject // https://github.com/jcollie/ghostty-gobject based on zig_gobject
.url = "https://deps.files.ghostty.org/gobject-12208d70ee791d7ef7e16e1c3c9c1127b57f1ed066a24f87d57fc9f730c5dc394b9d.tar.zst", // Temporary until we generate them at build time automatically.
.hash = "12208d70ee791d7ef7e16e1c3c9c1127b57f1ed066a24f87d57fc9f730c5dc394b9d", .url = "https://github.com/jcollie/ghostty-gobject/releases/download/0.14.0-2025-03-11-16-1/ghostty-gobject-0.14.0-2025-03-11-16-1.tar.gz",
.hash = "gobject-0.2.0-Skun7H6DlQDWCiNQtdE5TXYcCvx7MyjW01OQe5M_n_jV",
}, },
// C libs // C libs
@ -81,22 +83,22 @@
// Wayland // Wayland
.wayland = .{ .wayland = .{
.url = "https://deps.files.ghostty.org/wayland-9cb3d7aa9dc995ffafdbdef7ab86a949d0fb0e7d.tar.gz", .url = "https://deps.files.ghostty.org/wayland-9cb3d7aa9dc995ffafdbdef7ab86a949d0fb0e7d.tar.gz",
.hash = "12202cdac858abc52413a6c6711d5026d2d3c8e13f95ca2c327eade0736298bb021f", .hash = "N-V-__8AAKrHGAAs2shYq8UkE6bGcR1QJtLTyOE_lcosMn6t",
}, },
.wayland_protocols = .{ .wayland_protocols = .{
.url = "https://deps.files.ghostty.org/wayland-protocols-258d8f88f2c8c25a830c6316f87d23ce1a0f12d9.tar.gz", .url = "https://deps.files.ghostty.org/wayland-protocols-258d8f88f2c8c25a830c6316f87d23ce1a0f12d9.tar.gz",
.hash = "12201a57c6ce0001aa034fa80fba3e1cd2253c560a45748f4f4dd21ff23b491cddef", .hash = "N-V-__8AAKw-DAAaV8bOAAGqA0-oD7o-HNIlPFYKRXSPT03S",
}, },
.plasma_wayland_protocols = .{ .plasma_wayland_protocols = .{
.url = "https://deps.files.ghostty.org/plasma_wayland_protocols-12207e0851c12acdeee0991e893e0132fc87bb763969a585dc16ecca33e88334c566.tar.gz", .url = "https://deps.files.ghostty.org/plasma_wayland_protocols-12207e0851c12acdeee0991e893e0132fc87bb763969a585dc16ecca33e88334c566.tar.gz",
.hash = "12207e0851c12acdeee0991e893e0132fc87bb763969a585dc16ecca33e88334c566", .hash = "N-V-__8AAKYZBAB-CFHBKs3u4JkeiT4BMvyHu3Y5aaWF3Bbs",
}, },
// 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/e21d5ffd19605741d0e3e19d7c5a8c6c25648673.tar.gz", .url = "https://github.com/mbadolato/iTerm2-Color-Schemes/archive/e21d5ffd19605741d0e3e19d7c5a8c6c25648673.tar.gz",
.hash = "122071ad56fd984afb4f94d441b6ea3e21f1741a0e026b02860d9a46110fac2cd109", .hash = "N-V-__8AAABBKARxrVb9mEr7T5TUQbbqPiHxdBoOAmsChg2a",
}, },
}, },
} }

158
build.zig.zon.nix generated
View File

@ -5,7 +5,7 @@
fetchurl, fetchurl,
fetchgit, fetchgit,
runCommandLocal, runCommandLocal,
zig_0_13, zig_0_14,
name ? "zig-packages", name ? "zig-packages",
}: }:
with builtins; with builtins;
@ -16,7 +16,7 @@ with lib; let
}: }:
runCommandLocal name runCommandLocal name
{ {
nativeBuildInputs = [zig_0_13]; nativeBuildInputs = [zig_0_14];
} }
'' ''
hash="$(zig fetch --global-cache-dir "$TMPDIR" ${artifact})" hash="$(zig fetch --global-cache-dir "$TMPDIR" ${artifact})"
@ -84,103 +84,103 @@ with lib; let
in in
linkFarm name [ linkFarm name [
{ {
name = "1220a67b584c9499154de8c96851ed8e92315452cb2027c06e2d7d07a39c6f900d1a"; name = "libxev-0.0.0-86vtc-ziEgDbLP0vihUn1MhsxNKY4GJEga6BEr7oyHpz";
path = fetchZigArtifact { path = fetchZigArtifact {
name = "libxev"; name = "libxev";
url = "https://github.com/mitchellh/libxev/archive/8943932a668f338cb2c500f6e1a7396bacd8b55d.tar.gz"; url = "https://github.com/mitchellh/libxev/archive/3df9337a9e84450a58a2c4af434ec1a036f7b494.tar.gz";
hash = "sha256-TGooUoby2J8PyzbdKHwdEXnu7f2g4T2/TUHj/ktBsN4="; hash = "sha256-oKZqA9d79jHnp/HsqJWQE33Ffn5Ee5G4VnlQepQuY4o=";
}; };
} }
{ {
name = "12206ed982e709e565d536ce930701a8c07edfd2cfdce428683f3f2a601d37696a62"; name = "mach_glfw-0.2.0-EJSQm2M9BQCiYGTd9VcKjg2DhSD7WT4kS-MfX68ORRT_";
path = fetchZigArtifact { path = fetchZigArtifact {
name = "mach_glfw"; name = "mach_glfw";
url = "https://deps.files.ghostty.org/mach_glfw-12206ed982e709e565d536ce930701a8c07edfd2cfdce428683f3f2a601d37696a62.tar.gz"; url = "https://github.com/mitchellh/mach-glfw/archive/d84bc11b0601cdad71035a0e9cf21572d76aa0d2.zip";
hash = "sha256-HhXIvWUS8/CHWY4VXPG2ZEo+we8XOn3o5rYJCQ1n8Nk="; hash = "sha256-Sh1DvCmawdN+a2JEhNP3wTX43/i5FDlDVOIx7Um/d0U=";
}; };
} }
{ {
name = "1220736fa4ba211162c7a0e46cc8fe04d95921927688bff64ab5da7420d098a7272d"; name = "glfw-0.0.0-bOgnngiqGQCt5HJK25zx1lf9emPYDNtEuQPYmrTCdOoN";
path = fetchZigArtifact { path = fetchZigArtifact {
name = "glfw"; name = "glfw";
url = "https://github.com/mitchellh/glfw/archive/b552c6ec47326b94015feddb36058ea567b87159.tar.gz"; url = "git+https://github.com/der-teufel-programming/glfw.git#206deaa2485703ac700d0f3020a8854282aecdbb";
hash = "sha256-IeBVAOQmtyFqVxzuXPek1onuPwIamcOyYtxqKpPEQjU="; hash = "sha256-GFeN4J4ZpKvQV8Gw6fxJ+KSpzzdjIYBbO/fTZ0Ooiuk=";
}; };
} }
{ {
name = "12202adbfecdad671d585c9a5bfcbd5cdf821726779430047742ce1bf94ad67d19cb"; name = "N-V-__8AABHMqAWYuRdIlflwi8gksPnlUMQBiSxAqQAAZFms";
path = fetchZigArtifact { path = fetchZigArtifact {
name = "xcode_frameworks"; name = "xcode_frameworks";
url = "https://github.com/mitchellh/xcode-frameworks/archive/69801c154c39d7ae6129ea1ba8fe1afe00585fc8.tar.gz"; url = "https://pkg.machengine.org/xcode-frameworks/9a45f3ac977fd25dff77e58c6de1870b6808c4a7.tar.gz";
hash = "sha256-mP/I2coL57UJm/3+4Q8sPAgQwk8V4zM+S4VBBTrX2To="; hash = "sha256-jWMT0p7klpkgX9GOUNAhrR2e6Ej7MobbqT5ZxJrNQoM=";
}; };
} }
{ {
name = "122004bfd4c519dadfb8e6281a42fc34fd1aa15aea654ea8a492839046f9894fa2cf"; name = "N-V-__8AAAIGzwDju1iAEUEqIbBeI3K4JhQ0vBdNzmETnIRQ";
path = fetchZigArtifact { path = fetchZigArtifact {
name = "vulkan_headers"; name = "vulkan_headers";
url = "https://github.com/mitchellh/vulkan-headers/archive/04c8a0389d5a0236a96312988017cd4ce27d8041.tar.gz"; url = "https://pkg.machengine.org/vulkan-headers/53e3ee66a78b97075863135b429956f225b149a5.tar.gz";
hash = "sha256-K+zrRudgHFukOM6En1StRYRMNYkeRk+qHTXvrXaG+FU="; hash = "sha256-kXOn43ntsvxnufobQO0xfzg1cg0R97BmFOU3WRqFsH0=";
}; };
} }
{ {
name = "1220b3164434d2ec9db146a40bf3a30f490590d68fa8529776a3138074f0da2c11ca"; name = "N-V-__8AAJfbCQBWPD1WA6AuYSk8LAIj4Bo_KY-2Br8NEIKT";
path = fetchZigArtifact { path = fetchZigArtifact {
name = "wayland_headers"; name = "wayland_headers";
url = "https://github.com/mitchellh/wayland-headers/archive/5f991515a29f994d87b908115a2ab0b899474bd1.tar.gz"; url = "https://pkg.machengine.org/wayland-headers/7c53e7483c3cfb5c6780ae542c9f5cfa712a826a.tar.gz";
hash = "sha256-uFilLZinKkZt6RdVTV3lUmJpzpswDdFva22FvwU/XQI="; hash = "sha256-uGIvMyp+xR1jQXTDr6RqYl40Ukiw9l3fW1t6XpYztPY=";
}; };
} }
{ {
name = "122089c326186c84aa2fd034b16abc38f3ebf4862d9ae106dc1847ac44f557b36465"; name = "N-V-__8AACbnQQDnnaLV79Xp3YtkU_g6nseVNOLiA7MzF2a4";
path = fetchZigArtifact { path = fetchZigArtifact {
name = "x11_headers"; name = "x11_headers";
url = "https://github.com/mitchellh/x11-headers/archive/2ffbd62d82ff73ec929dd8de802bc95effa0ef88.tar.gz"; url = "https://pkg.machengine.org/x11-headers/29aefb525d5c08b05b0351e34b1623854a138c21.tar.gz";
hash = "sha256-EhV2bmTY/OMYN1wEul35gD0hQgS/Al262jO3pVr0O+c="; hash = "sha256-UsbWkOmedS4ygY9C1g7OiPVnTcXzfGKdXImmztYAAiI=";
}; };
} }
{ {
name = "1220f5aec880d4f430cc1597ede88f1530da69e39a4986080e976b0c7b919c2ebfeb"; name = "vaxis-0.1.0-BWNV_MHyCAARemSCSwwc3sA1etNgv7ge0BCIXspX6CZv";
path = fetchZigArtifact { path = fetchZigArtifact {
name = "vaxis"; name = "vaxis";
url = "git+https://github.com/rockorager/libvaxis#2237a7059eae99e9f132dd5acd1555e49d6c7d93"; url = "git+https://github.com/rockorager/libvaxis#1e24e0dfb509e974e1c8713bcd119d0ae032a8c7";
hash = "sha256-ZzLNJOsXzyBhkdUhbET30RoU2T9xKYsBUQz2NAjK/G8="; hash = "sha256-6p9aSklLTPV9epzGkXBg5SQfjxfTT+/SYLFPiM04VF0=";
}; };
} }
{ {
name = "1220dd654ef941fc76fd96f9ec6adadf83f69b9887a0d3f4ee5ac0a1a3e11be35cf5"; name = "zigimg-0.1.0-lly-O-NTEABwkjg9_WM4uLQr_TtL-7jp375PsZJyugGN";
path = fetchZigArtifact { path = fetchZigArtifact {
name = "zigimg"; name = "zigimg";
url = "git+https://github.com/zigimg/zigimg#3a667bdb3d7f0955a5a51c8468eac83210c1439e"; url = "git+https://github.com/TUSF/zigimg#5102e09be233d372e9e05f4cb2ffbefba30bc1c0";
hash = "sha256-oLf3YH3yeg4ikVO/GahMCDRMTU31AHkfSnF4rt7xTKo="; hash = "sha256-0HYK5A8Jlx1WD1hdU07r+m2AXl6UuazFiZd7P3uh/wY=";
}; };
} }
{ {
name = "122055beff332830a391e9895c044d33b15ea21063779557024b46169fb1984c6e40"; name = "zg-0.13.4-AAAAAGiZ7QLz4pvECFa_wG4O4TP4FLABHHbemH2KakWM";
path = fetchZigArtifact { path = fetchZigArtifact {
name = "zg"; name = "zg";
url = "https://codeberg.org/atman/zg/archive/v0.13.2.tar.gz"; url = "git+https://codeberg.org/atman/zg#4a002763419a34d61dcbb1f415821b83b9bf8ddc";
hash = "sha256-2x9hT7bYq9KJYWLVOf21a+QvTG/F7HWT+YK15IMRzNY="; hash = "sha256-fo3l6cjkrr/godElTGnQzalBsasN7J73IDIRmw7v1gA=";
}; };
} }
{ {
name = "12201f0d542e7541cf492a001d4d0d0155c92f58212fbcb0d224e95edeba06b5416a"; name = "z2d-0.6.0-j5P_HvLdCABu-dXpCeRM7Uk4m16vULg1980lMNCQj4_C";
path = fetchZigArtifact { path = fetchZigArtifact {
name = "z2d"; name = "z2d";
url = "https://deps.files.ghostty.org/z2d-12201f0d542e7541cf492a001d4d0d0155c92f58212fbcb0d224e95edeba06b5416a.tar.gz"; url = "https://github.com/vancluever/z2d/archive/1e89605a624940c310c7a1d81b46a7c5c05919e3.tar.gz";
hash = "sha256-P0UJ54RO/vVyDa+UkBl+QEOjzoMMEFSOTexQP/uBXfc="; hash = "sha256-PEKVSUZ6teRbDyhFPWSiuBSe40pgr0kVRivIY8Cn8HQ=";
}; };
} }
{ {
name = "1220e17e64ef0ef561b3e4b9f3a96a2494285f2ec31c097721bf8c8677ec4415c634"; name = "zig_objc-0.0.0-Ir_Sp3TyAADEVRTxXlScq3t_uKAM91MYNerZkHfbD0yt";
path = fetchZigArtifact { path = fetchZigArtifact {
name = "zig_objc"; name = "zig_objc";
url = "https://deps.files.ghostty.org/zig_objc-1220e17e64ef0ef561b3e4b9f3a96a2494285f2ec31c097721bf8c8677ec4415c634.tar.gz"; url = "https://github.com/mitchellh/zig-objc/archive/3ab0d37c7d6b933d6ded1b3a35b6b60f05590a98.tar.gz";
hash = "sha256-H+HIbh2T23uzrsg9/1/vl9Ir1HCAa2pzeTx6zktJH9Q="; hash = "sha256-zn1tR6xhSmDla4UJ3t+Gni4Ni3R8deSK3tEe7DGzNXw=";
}; };
} }
{ {
name = "12205a66d423259567764fa0fc60c82be35365c21aeb76c5a7dc99698401f4f6fefc"; name = "N-V-__8AAB9YCQBaZtQjJZVndk-g_GDIK-NTZcIa63bFp9yZ";
path = fetchZigArtifact { path = fetchZigArtifact {
name = "zig_js"; name = "zig_js";
url = "https://deps.files.ghostty.org/zig_js-12205a66d423259567764fa0fc60c82be35365c21aeb76c5a7dc99698401f4f6fefc.tar.gz"; url = "https://deps.files.ghostty.org/zig_js-12205a66d423259567764fa0fc60c82be35365c21aeb76c5a7dc99698401f4f6fefc.tar.gz";
@ -188,7 +188,7 @@ in
}; };
} }
{ {
name = "12207831bce7d4abce57b5a98e8f3635811cfefd160bca022eb91fe905d36a02cf25"; name = "ziglyph-0.11.2-AAAAAHPtHwB4Mbzn1KvOV7Wpjo82NYEc_v0WC8oCLrkf";
path = fetchZigArtifact { path = fetchZigArtifact {
name = "ziglyph"; name = "ziglyph";
url = "https://deps.files.ghostty.org/ziglyph-b89d43d1e3fb01b6074bc1f7fc980324b04d26a5.tar.gz"; url = "https://deps.files.ghostty.org/ziglyph-b89d43d1e3fb01b6074bc1f7fc980324b04d26a5.tar.gz";
@ -196,39 +196,39 @@ in
}; };
} }
{ {
name = "12209ca054cb1919fa276e328967f10b253f7537c4136eb48f3332b0f7cf661cad38"; name = "wayland-0.4.0-dev-lQa1kjfIAQCmhhQu3xF0KH-94-TzeMXOqfnP0-Dg6Wyy";
path = fetchZigArtifact { path = fetchZigArtifact {
name = "zig_wayland"; name = "zig_wayland";
url = "https://deps.files.ghostty.org/zig-wayland-fbfe3b4ac0b472a27b1f1a67405436c58cbee12d.tar.gz"; url = "https://codeberg.org/ifreund/zig-wayland/archive/f3c5d503e540ada8cbcb056420de240af0c094f7.tar.gz";
hash = "sha256-RtAystqK/GRYIquTK1KfD7rRSCrfuzAvCD1Z9DE1ldc="; hash = "sha256-E77GZ15APYbbO1WzmuJi8eG9/iQFbc2CgkNBxjCLUhk=";
}; };
} }
{ {
name = "1220edc3b8d8bedbb50555947987e5e8e2f93871ca3c8e8d4cc8f1377c15b5dd35e8"; name = "zf-0.10.3-OIRy8bKIAACV6JaNNncXA68Nw2BUAD9JVfQdzjyoZQ-J";
path = fetchZigArtifact { path = fetchZigArtifact {
name = "zf"; name = "zf";
url = "https://deps.files.ghostty.org/zf-1220edc3b8d8bedbb50555947987e5e8e2f93871ca3c8e8d4cc8f1377c15b5dd35e8.tar.gz"; url = "https://github.com/natecraddock/zf/archive/03176fcf23fda543cc02a8675e92c1fe3b1ee2eb.tar.gz";
hash = "sha256-/oLryY3VQfjbtQi+UP+n6FJTVA/YxIetjO+6Ovrh6/E="; hash = "sha256-HqS2NFUuTQkltFsQlZz4HYHgfhEUEkZY83NnCW2x5Sg=";
}; };
} }
{ {
name = "1220c72c1697dd9008461ead702997a15d8a1c5810247f02e7983b9f74c6c6e4c087"; name = "vaxis-0.1.0-BWNV_K3yCACrTy3A5cbZElLyICx5a2O2EzPxmgVRcbKJ";
path = fetchZigArtifact { path = fetchZigArtifact {
name = "vaxis"; name = "vaxis";
url = "git+https://github.com/rockorager/libvaxis/?ref=main#dc0a228a5544988d4a920cfb40be9cd28db41423"; url = "git+https://github.com/rockorager/libvaxis/?ref=main#6a37605dde55898dcca4769dd3eb1e333959c209";
hash = "sha256-QWN4jOrA91KlbqmeEHHJ4HTnCC9nmfxt8DHUXJpAzLI="; hash = "sha256-5DW2V2bVsHtSw7UMGvJ+P0FpXIf5kTNjrq2SMqU6FIk=";
}; };
} }
{ {
name = "12208d70ee791d7ef7e16e1c3c9c1127b57f1ed066a24f87d57fc9f730c5dc394b9d"; name = "gobject-0.2.0-Skun7H6DlQDWCiNQtdE5TXYcCvx7MyjW01OQe5M_n_jV";
path = fetchZigArtifact { path = fetchZigArtifact {
name = "gobject"; name = "gobject";
url = "https://deps.files.ghostty.org/gobject-12208d70ee791d7ef7e16e1c3c9c1127b57f1ed066a24f87d57fc9f730c5dc394b9d.tar.zst"; url = "https://github.com/jcollie/ghostty-gobject/releases/download/0.14.0-2025-03-11-16-1/ghostty-gobject-0.14.0-2025-03-11-16-1.tar.gz";
hash = "sha256-UU97kNv/bZzQPKz1djhEDLapLguvfBpFfWVb6FthtcI="; hash = "sha256-eMmS9oysZheHwSCCvmOUSDJmP9zN7cAr6qqDIbz6EmY=";
}; };
} }
{ {
name = "12202cdac858abc52413a6c6711d5026d2d3c8e13f95ca2c327eade0736298bb021f"; name = "N-V-__8AAKrHGAAs2shYq8UkE6bGcR1QJtLTyOE_lcosMn6t";
path = fetchZigArtifact { path = fetchZigArtifact {
name = "wayland"; name = "wayland";
url = "https://deps.files.ghostty.org/wayland-9cb3d7aa9dc995ffafdbdef7ab86a949d0fb0e7d.tar.gz"; url = "https://deps.files.ghostty.org/wayland-9cb3d7aa9dc995ffafdbdef7ab86a949d0fb0e7d.tar.gz";
@ -236,7 +236,7 @@ in
}; };
} }
{ {
name = "12201a57c6ce0001aa034fa80fba3e1cd2253c560a45748f4f4dd21ff23b491cddef"; name = "N-V-__8AAKw-DAAaV8bOAAGqA0-oD7o-HNIlPFYKRXSPT03S";
path = fetchZigArtifact { path = fetchZigArtifact {
name = "wayland_protocols"; name = "wayland_protocols";
url = "https://deps.files.ghostty.org/wayland-protocols-258d8f88f2c8c25a830c6316f87d23ce1a0f12d9.tar.gz"; url = "https://deps.files.ghostty.org/wayland-protocols-258d8f88f2c8c25a830c6316f87d23ce1a0f12d9.tar.gz";
@ -244,7 +244,7 @@ in
}; };
} }
{ {
name = "12207e0851c12acdeee0991e893e0132fc87bb763969a585dc16ecca33e88334c566"; name = "N-V-__8AAKYZBAB-CFHBKs3u4JkeiT4BMvyHu3Y5aaWF3Bbs";
path = fetchZigArtifact { path = fetchZigArtifact {
name = "plasma_wayland_protocols"; name = "plasma_wayland_protocols";
url = "https://deps.files.ghostty.org/plasma_wayland_protocols-12207e0851c12acdeee0991e893e0132fc87bb763969a585dc16ecca33e88334c566.tar.gz"; url = "https://deps.files.ghostty.org/plasma_wayland_protocols-12207e0851c12acdeee0991e893e0132fc87bb763969a585dc16ecca33e88334c566.tar.gz";
@ -252,7 +252,7 @@ in
}; };
} }
{ {
name = "122071ad56fd984afb4f94d441b6ea3e21f1741a0e026b02860d9a46110fac2cd109"; name = "N-V-__8AAABBKARxrVb9mEr7T5TUQbbqPiHxdBoOAmsChg2a";
path = fetchZigArtifact { path = fetchZigArtifact {
name = "iterm2_themes"; name = "iterm2_themes";
url = "https://github.com/mbadolato/iTerm2-Color-Schemes/archive/e21d5ffd19605741d0e3e19d7c5a8c6c25648673.tar.gz"; url = "https://github.com/mbadolato/iTerm2-Color-Schemes/archive/e21d5ffd19605741d0e3e19d7c5a8c6c25648673.tar.gz";
@ -260,7 +260,7 @@ in
}; };
} }
{ {
name = "1220bc6b9daceaf7c8c60f3c3998058045ba0c5c5f48ae255ff97776d9cd8bfc6402"; name = "N-V-__8AAH0GaQC8a52s6vfIxg88OZgFgEW6DFxfSK4lX_l3";
path = fetchZigArtifact { path = fetchZigArtifact {
name = "imgui"; name = "imgui";
url = "https://deps.files.ghostty.org/imgui-1220bc6b9daceaf7c8c60f3c3998058045ba0c5c5f48ae255ff97776d9cd8bfc6402.tar.gz"; url = "https://deps.files.ghostty.org/imgui-1220bc6b9daceaf7c8c60f3c3998058045ba0c5c5f48ae255ff97776d9cd8bfc6402.tar.gz";
@ -268,7 +268,7 @@ in
}; };
} }
{ {
name = "1220b81f6ecfb3fd222f76cf9106fecfa6554ab07ec7fdc4124b9bb063ae2adf969d"; name = "N-V-__8AAKLKpwC4H27Ps_0iL3bPkQb-z6ZVSrB-x_3EEkub";
path = fetchZigArtifact { path = fetchZigArtifact {
name = "freetype"; name = "freetype";
url = "https://deps.files.ghostty.org/freetype-1220b81f6ecfb3fd222f76cf9106fecfa6554ab07ec7fdc4124b9bb063ae2adf969d.tar.gz"; url = "https://deps.files.ghostty.org/freetype-1220b81f6ecfb3fd222f76cf9106fecfa6554ab07ec7fdc4124b9bb063ae2adf969d.tar.gz";
@ -276,7 +276,7 @@ in
}; };
} }
{ {
name = "1220aa013f0c83da3fb64ea6d327f9173fa008d10e28bc9349eac3463457723b1c66"; name = "N-V-__8AAJrvXQCqAT8Mg9o_tk6m0yf5Fz-gCNEOKLyTSerD";
path = fetchZigArtifact { path = fetchZigArtifact {
name = "libpng"; name = "libpng";
url = "https://deps.files.ghostty.org/libpng-1220aa013f0c83da3fb64ea6d327f9173fa008d10e28bc9349eac3463457723b1c66.tar.gz"; url = "https://deps.files.ghostty.org/libpng-1220aa013f0c83da3fb64ea6d327f9173fa008d10e28bc9349eac3463457723b1c66.tar.gz";
@ -284,7 +284,7 @@ in
}; };
} }
{ {
name = "1220fed0c74e1019b3ee29edae2051788b080cd96e90d56836eea857b0b966742efb"; name = "N-V-__8AAB0eQwD-0MdOEBmz7intriBReIsIDNlukNVoNu6o";
path = fetchZigArtifact { path = fetchZigArtifact {
name = "zlib"; name = "zlib";
url = "https://deps.files.ghostty.org/zlib-1220fed0c74e1019b3ee29edae2051788b080cd96e90d56836eea857b0b966742efb.tar.gz"; url = "https://deps.files.ghostty.org/zlib-1220fed0c74e1019b3ee29edae2051788b080cd96e90d56836eea857b0b966742efb.tar.gz";
@ -292,7 +292,7 @@ in
}; };
} }
{ {
name = "12201149afb3326c56c05bb0a577f54f76ac20deece63aa2f5cd6ff31a4fa4fcb3b7"; name = "N-V-__8AAIrfdwARSa-zMmxWwFuwpXf1T3asIN7s5jqi9c1v";
path = fetchZigArtifact { path = fetchZigArtifact {
name = "fontconfig"; name = "fontconfig";
url = "https://deps.files.ghostty.org/fontconfig-2.14.2.tar.gz"; url = "https://deps.files.ghostty.org/fontconfig-2.14.2.tar.gz";
@ -300,23 +300,23 @@ in
}; };
} }
{ {
name = "122032442d95c3b428ae8e526017fad881e7dc78eab4d558e9a58a80bfbd65a64f7d"; name = "N-V-__8AAG3RoQEyRC2Vw7Qoro5SYBf62IHn3HjqtNVY6aWK";
path = fetchZigArtifact { path = fetchZigArtifact {
name = "libxml2"; name = "libxml2";
url = "https://github.com/GNOME/libxml2/archive/refs/tags/v2.11.5.tar.gz"; url = "https://deps.files.ghostty.org/libxml2-2.11.5.tar.gz";
hash = "sha256-bCgFni4+60K1tLFkieORamNGwQladP7jvGXNxdiaYhU="; hash = "sha256-bCgFni4+60K1tLFkieORamNGwQladP7jvGXNxdiaYhU=";
}; };
} }
{ {
name = "12203eff4829ad8afdd828eb323d48e5ba8dbb44d224e9e314d4ab1533c2bec20f4b"; name = "N-V-__8AALiNBAA-_0gprYr92CjrMj1I5bqNu0TSJOnjFNSr";
path = fetchZigArtifact { path = fetchZigArtifact {
name = "gtk4_layer_shell"; name = "gtk4_layer_shell";
url = "https://github.com/wmww/gtk4-layer-shell/archive/refs/tags/v1.1.0.tar.gz"; url = "https://deps.files.ghostty.org/gtk4-layer-shell-1.1.0.tar.gz";
hash = "sha256-mChCgSYKXu9bT2OlXxbEv2p4ihAgptsDfssPcfozaYg="; hash = "sha256-mChCgSYKXu9bT2OlXxbEv2p4ihAgptsDfssPcfozaYg=";
}; };
} }
{ {
name = "1220b8588f106c996af10249bfa092c6fb2f35fbacb1505ef477a0b04a7dd1063122"; name = "N-V-__8AAKa0rgW4WI8QbJlq8QJJv6CSxvsvNfussVBe9Heg";
path = fetchZigArtifact { path = fetchZigArtifact {
name = "harfbuzz"; name = "harfbuzz";
url = "https://deps.files.ghostty.org/harfbuzz-1220b8588f106c996af10249bfa092c6fb2f35fbacb1505ef477a0b04a7dd1063122.tar.gz"; url = "https://deps.files.ghostty.org/harfbuzz-1220b8588f106c996af10249bfa092c6fb2f35fbacb1505ef477a0b04a7dd1063122.tar.gz";
@ -324,15 +324,15 @@ in
}; };
} }
{ {
name = "12205c83b8311a24b1d5ae6d21640df04f4b0726e314337c043cde1432758cbe165b"; name = "N-V-__8AAGmZhABbsPJLfbqrh6JTHsXhY6qCaLAQyx25e0XE";
path = fetchZigArtifact { path = fetchZigArtifact {
name = "highway"; name = "highway";
url = "https://deps.files.ghostty.org/highway-12205c83b8311a24b1d5ae6d21640df04f4b0726e314337c043cde1432758cbe165b.tar.gz"; url = "https://deps.files.ghostty.org/highway-66486a10623fa0d72fe91260f96c892e41aceb06.tar.gz";
hash = "sha256-NUqLRTm1iOcLmOxwhEJz4/J0EwLEw3e8xOgbPRhm98k="; hash = "sha256-h9T4iT704I8iSXNgj/6/lCaKgTgLp5wS6IQZaMgKohI=";
}; };
} }
{ {
name = "1220f870c853529233ea64a108acaaa81f8d06d7ff4b66c76930be7d78d508aff7a2"; name = "N-V-__8AADcZkgn4cMhTUpIz6mShCKyqqB-NBtf_S2bHaTC-";
path = fetchZigArtifact { path = fetchZigArtifact {
name = "gettext"; name = "gettext";
url = "https://deps.files.ghostty.org/gettext-0.24.tar.gz"; url = "https://deps.files.ghostty.org/gettext-0.24.tar.gz";
@ -340,7 +340,7 @@ in
}; };
} }
{ {
name = "1220c15e72eadd0d9085a8af134904d9a0f5dfcbed5f606ad60edc60ebeccd9706bb"; name = "N-V-__8AAHjwMQDBXnLq3Q2QhaivE0kE2aD138vtX2Bq1g7c";
path = fetchZigArtifact { path = fetchZigArtifact {
name = "oniguruma"; name = "oniguruma";
url = "https://deps.files.ghostty.org/oniguruma-1220c15e72eadd0d9085a8af134904d9a0f5dfcbed5f606ad60edc60ebeccd9706bb.tar.gz"; url = "https://deps.files.ghostty.org/oniguruma-1220c15e72eadd0d9085a8af134904d9a0f5dfcbed5f606ad60edc60ebeccd9706bb.tar.gz";
@ -348,7 +348,7 @@ in
}; };
} }
{ {
name = "1220446be831adcca918167647c06c7b825849fa3fba5f22da394667974537a9c77e"; name = "N-V-__8AAPlZGwBEa-gxrcypGBZ2R8Bse4JYSfo_ul8i2jlG";
path = fetchZigArtifact { path = fetchZigArtifact {
name = "sentry"; name = "sentry";
url = "https://deps.files.ghostty.org/sentry-1220446be831adcca918167647c06c7b825849fa3fba5f22da394667974537a9c77e.tar.gz"; url = "https://deps.files.ghostty.org/sentry-1220446be831adcca918167647c06c7b825849fa3fba5f22da394667974537a9c77e.tar.gz";
@ -356,15 +356,15 @@ in
}; };
} }
{ {
name = "12207fd37bb8251919c112dcdd8f616a491857b34a451f7e4486490077206dc2a1ea"; name = "N-V-__8AALw2uwF_03u4JRkZwRLc3Y9hakkYV7NKRR9-RIZJ";
path = fetchZigArtifact { path = fetchZigArtifact {
name = "breakpad"; name = "breakpad";
url = "https://github.com/getsentry/breakpad/archive/b99f444ba5f6b98cac261cbb391d8766b34a5918.tar.gz"; url = "https://deps.files.ghostty.org/breakpad-b99f444ba5f6b98cac261cbb391d8766b34a5918.tar.gz";
hash = "sha256-bMqYlD0amQdmzvYQd8Ca/1k4Bj/heh7+EijlQSttatk="; hash = "sha256-bMqYlD0amQdmzvYQd8Ca/1k4Bj/heh7+EijlQSttatk=";
}; };
} }
{ {
name = "1220d4d18426ca72fc2b7e56ce47273149815501d0d2395c2a98c726b31ba931e641"; name = "N-V-__8AAHffAgDU0YQmynL8K35WzkcnMUmBVQHQ0jlcKpjH";
path = fetchZigArtifact { path = fetchZigArtifact {
name = "utfcpp"; name = "utfcpp";
url = "https://deps.files.ghostty.org/utfcpp-1220d4d18426ca72fc2b7e56ce47273149815501d0d2395c2a98c726b31ba931e641.tar.gz"; url = "https://deps.files.ghostty.org/utfcpp-1220d4d18426ca72fc2b7e56ce47273149815501d0d2395c2a98c726b31ba931e641.tar.gz";
@ -372,7 +372,7 @@ in
}; };
} }
{ {
name = "122037b39d577ec2db3fd7b2130e7b69ef6cc1807d68607a7c232c958315d381b5cd"; name = "N-V-__8AAAzZywE3s51XfsLbP9eyEw57ae9swYB9aGB6fCMs";
path = fetchZigArtifact { path = fetchZigArtifact {
name = "wuffs"; name = "wuffs";
url = "https://deps.files.ghostty.org/wuffs-122037b39d577ec2db3fd7b2130e7b69ef6cc1807d68607a7c232c958315d381b5cd.tar.gz"; url = "https://deps.files.ghostty.org/wuffs-122037b39d577ec2db3fd7b2130e7b69ef6cc1807d68607a7c232c958315d381b5cd.tar.gz";
@ -380,7 +380,7 @@ in
}; };
} }
{ {
name = "12207ff340169c7d40c570b4b6a97db614fe47e0d83b5801a932dcd44917424c8806"; name = "N-V-__8AADYiAAB_80AWnH1AxXC0tql9thT-R-DYO1gBqTLc";
path = fetchZigArtifact { path = fetchZigArtifact {
name = "pixels"; name = "pixels";
url = "https://deps.files.ghostty.org/pixels-12207ff340169c7d40c570b4b6a97db614fe47e0d83b5801a932dcd44917424c8806.tar.gz"; url = "https://deps.files.ghostty.org/pixels-12207ff340169c7d40c570b4b6a97db614fe47e0d83b5801a932dcd44917424c8806.tar.gz";
@ -388,7 +388,7 @@ in
}; };
} }
{ {
name = "12201278a1a05c0ce0b6eb6026c65cd3e9247aa041b1c260324bf29cee559dd23ba1"; name = "N-V-__8AABzkUgISeKGgXAzgtutgJsZc0-kkeqBBscJgMkvy";
path = fetchZigArtifact { path = fetchZigArtifact {
name = "glslang"; name = "glslang";
url = "https://deps.files.ghostty.org/glslang-12201278a1a05c0ce0b6eb6026c65cd3e9247aa041b1c260324bf29cee559dd23ba1.tar.gz"; url = "https://deps.files.ghostty.org/glslang-12201278a1a05c0ce0b6eb6026c65cd3e9247aa041b1c260324bf29cee559dd23ba1.tar.gz";
@ -396,7 +396,7 @@ in
}; };
} }
{ {
name = "1220fb3b5586e8be67bc3feb34cbe749cf42a60d628d2953632c2f8141302748c8da"; name = "N-V-__8AANb6pwD7O1WG6L5nvD_rNMvnSc9Cpg1ijSlTYywv";
path = fetchZigArtifact { path = fetchZigArtifact {
name = "spirv_cross"; name = "spirv_cross";
url = "https://deps.files.ghostty.org/spirv_cross-1220fb3b5586e8be67bc3feb34cbe749cf42a60d628d2953632c2f8141302748c8da.tar.gz"; url = "https://deps.files.ghostty.org/spirv_cross-1220fb3b5586e8be67bc3feb34cbe749cf42a60d628d2953632c2f8141302748c8da.tar.gz";

40
build.zig.zon.txt generated
View File

@ -1,17 +1,20 @@
git+https://github.com/rockorager/libvaxis#2237a7059eae99e9f132dd5acd1555e49d6c7d93 git+https://codeberg.org/atman/zg#4a002763419a34d61dcbb1f415821b83b9bf8ddc
git+https://github.com/rockorager/libvaxis/?ref=main#dc0a228a5544988d4a920cfb40be9cd28db41423 git+https://github.com/TUSF/zigimg#5102e09be233d372e9e05f4cb2ffbefba30bc1c0
git+https://github.com/zigimg/zigimg#3a667bdb3d7f0955a5a51c8468eac83210c1439e git+https://github.com/der-teufel-programming/glfw.git#206deaa2485703ac700d0f3020a8854282aecdbb
https://codeberg.org/atman/zg/archive/v0.13.2.tar.gz git+https://github.com/rockorager/libvaxis#1e24e0dfb509e974e1c8713bcd119d0ae032a8c7
git+https://github.com/rockorager/libvaxis/?ref=main#6a37605dde55898dcca4769dd3eb1e333959c209
https://codeberg.org/ifreund/zig-wayland/archive/f3c5d503e540ada8cbcb056420de240af0c094f7.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
https://deps.files.ghostty.org/gettext-0.24.tar.gz https://deps.files.ghostty.org/gettext-0.24.tar.gz
https://deps.files.ghostty.org/glslang-12201278a1a05c0ce0b6eb6026c65cd3e9247aa041b1c260324bf29cee559dd23ba1.tar.gz https://deps.files.ghostty.org/glslang-12201278a1a05c0ce0b6eb6026c65cd3e9247aa041b1c260324bf29cee559dd23ba1.tar.gz
https://deps.files.ghostty.org/gobject-12208d70ee791d7ef7e16e1c3c9c1127b57f1ed066a24f87d57fc9f730c5dc394b9d.tar.zst https://deps.files.ghostty.org/gtk4-layer-shell-1.1.0.tar.gz
https://deps.files.ghostty.org/harfbuzz-1220b8588f106c996af10249bfa092c6fb2f35fbacb1505ef477a0b04a7dd1063122.tar.gz https://deps.files.ghostty.org/harfbuzz-1220b8588f106c996af10249bfa092c6fb2f35fbacb1505ef477a0b04a7dd1063122.tar.gz
https://deps.files.ghostty.org/highway-12205c83b8311a24b1d5ae6d21640df04f4b0726e314337c043cde1432758cbe165b.tar.gz https://deps.files.ghostty.org/highway-66486a10623fa0d72fe91260f96c892e41aceb06.tar.gz
https://deps.files.ghostty.org/imgui-1220bc6b9daceaf7c8c60f3c3998058045ba0c5c5f48ae255ff97776d9cd8bfc6402.tar.gz https://deps.files.ghostty.org/imgui-1220bc6b9daceaf7c8c60f3c3998058045ba0c5c5f48ae255ff97776d9cd8bfc6402.tar.gz
https://deps.files.ghostty.org/libpng-1220aa013f0c83da3fb64ea6d327f9173fa008d10e28bc9349eac3463457723b1c66.tar.gz https://deps.files.ghostty.org/libpng-1220aa013f0c83da3fb64ea6d327f9173fa008d10e28bc9349eac3463457723b1c66.tar.gz
https://deps.files.ghostty.org/mach_glfw-12206ed982e709e565d536ce930701a8c07edfd2cfdce428683f3f2a601d37696a62.tar.gz https://deps.files.ghostty.org/libxml2-2.11.5.tar.gz
https://deps.files.ghostty.org/oniguruma-1220c15e72eadd0d9085a8af134904d9a0f5dfcbed5f606ad60edc60ebeccd9706bb.tar.gz https://deps.files.ghostty.org/oniguruma-1220c15e72eadd0d9085a8af134904d9a0f5dfcbed5f606ad60edc60ebeccd9706bb.tar.gz
https://deps.files.ghostty.org/pixels-12207ff340169c7d40c570b4b6a97db614fe47e0d83b5801a932dcd44917424c8806.tar.gz https://deps.files.ghostty.org/pixels-12207ff340169c7d40c570b4b6a97db614fe47e0d83b5801a932dcd44917424c8806.tar.gz
https://deps.files.ghostty.org/plasma_wayland_protocols-12207e0851c12acdeee0991e893e0132fc87bb763969a585dc16ecca33e88334c566.tar.gz https://deps.files.ghostty.org/plasma_wayland_protocols-12207e0851c12acdeee0991e893e0132fc87bb763969a585dc16ecca33e88334c566.tar.gz
@ -21,20 +24,17 @@ https://deps.files.ghostty.org/utfcpp-1220d4d18426ca72fc2b7e56ce47273149815501d0
https://deps.files.ghostty.org/wayland-9cb3d7aa9dc995ffafdbdef7ab86a949d0fb0e7d.tar.gz https://deps.files.ghostty.org/wayland-9cb3d7aa9dc995ffafdbdef7ab86a949d0fb0e7d.tar.gz
https://deps.files.ghostty.org/wayland-protocols-258d8f88f2c8c25a830c6316f87d23ce1a0f12d9.tar.gz https://deps.files.ghostty.org/wayland-protocols-258d8f88f2c8c25a830c6316f87d23ce1a0f12d9.tar.gz
https://deps.files.ghostty.org/wuffs-122037b39d577ec2db3fd7b2130e7b69ef6cc1807d68607a7c232c958315d381b5cd.tar.gz https://deps.files.ghostty.org/wuffs-122037b39d577ec2db3fd7b2130e7b69ef6cc1807d68607a7c232c958315d381b5cd.tar.gz
https://deps.files.ghostty.org/z2d-12201f0d542e7541cf492a001d4d0d0155c92f58212fbcb0d224e95edeba06b5416a.tar.gz
https://deps.files.ghostty.org/zf-1220edc3b8d8bedbb50555947987e5e8e2f93871ca3c8e8d4cc8f1377c15b5dd35e8.tar.gz
https://deps.files.ghostty.org/zig-wayland-fbfe3b4ac0b472a27b1f1a67405436c58cbee12d.tar.gz
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/zig_objc-1220e17e64ef0ef561b3e4b9f3a96a2494285f2ec31c097721bf8c8677ec4415c634.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/GNOME/libxml2/archive/refs/tags/v2.11.5.tar.gz https://github.com/jcollie/ghostty-gobject/releases/download/0.14.0-2025-03-11-16-1/ghostty-gobject-0.14.0-2025-03-11-16-1.tar.gz
https://github.com/getsentry/breakpad/archive/b99f444ba5f6b98cac261cbb391d8766b34a5918.tar.gz
https://github.com/mbadolato/iTerm2-Color-Schemes/archive/e21d5ffd19605741d0e3e19d7c5a8c6c25648673.tar.gz https://github.com/mbadolato/iTerm2-Color-Schemes/archive/e21d5ffd19605741d0e3e19d7c5a8c6c25648673.tar.gz
https://github.com/mitchellh/glfw/archive/b552c6ec47326b94015feddb36058ea567b87159.tar.gz https://github.com/mitchellh/libxev/archive/3df9337a9e84450a58a2c4af434ec1a036f7b494.tar.gz
https://github.com/mitchellh/libxev/archive/8943932a668f338cb2c500f6e1a7396bacd8b55d.tar.gz https://github.com/mitchellh/mach-glfw/archive/d84bc11b0601cdad71035a0e9cf21572d76aa0d2.zip
https://github.com/mitchellh/vulkan-headers/archive/04c8a0389d5a0236a96312988017cd4ce27d8041.tar.gz https://github.com/mitchellh/zig-objc/archive/3ab0d37c7d6b933d6ded1b3a35b6b60f05590a98.tar.gz
https://github.com/mitchellh/wayland-headers/archive/5f991515a29f994d87b908115a2ab0b899474bd1.tar.gz https://github.com/natecraddock/zf/archive/03176fcf23fda543cc02a8675e92c1fe3b1ee2eb.tar.gz
https://github.com/mitchellh/x11-headers/archive/2ffbd62d82ff73ec929dd8de802bc95effa0ef88.tar.gz https://github.com/vancluever/z2d/archive/1e89605a624940c310c7a1d81b46a7c5c05919e3.tar.gz
https://github.com/mitchellh/xcode-frameworks/archive/69801c154c39d7ae6129ea1ba8fe1afe00585fc8.tar.gz https://pkg.machengine.org/vulkan-headers/53e3ee66a78b97075863135b429956f225b149a5.tar.gz
https://github.com/wmww/gtk4-layer-shell/archive/refs/tags/v1.1.0.tar.gz https://pkg.machengine.org/wayland-headers/7c53e7483c3cfb5c6780ae542c9f5cfa712a826a.tar.gz
https://pkg.machengine.org/x11-headers/29aefb525d5c08b05b0351e34b1623854a138c21.tar.gz
https://pkg.machengine.org/xcode-frameworks/9a45f3ac977fd25dff77e58c6de1870b6808c4a7.tar.gz

154
build.zig.zon2json-lock generated
View File

@ -1,200 +1,200 @@
{ {
"1220a67b584c9499154de8c96851ed8e92315452cb2027c06e2d7d07a39c6f900d1a": { "libxev-0.0.0-86vtc-ziEgDbLP0vihUn1MhsxNKY4GJEga6BEr7oyHpz": {
"name": "libxev", "name": "libxev",
"url": "https://github.com/mitchellh/libxev/archive/8943932a668f338cb2c500f6e1a7396bacd8b55d.tar.gz", "url": "https://github.com/mitchellh/libxev/archive/3df9337a9e84450a58a2c4af434ec1a036f7b494.tar.gz",
"hash": "sha256-TGooUoby2J8PyzbdKHwdEXnu7f2g4T2/TUHj/ktBsN4=" "hash": "sha256-oKZqA9d79jHnp/HsqJWQE33Ffn5Ee5G4VnlQepQuY4o="
}, },
"12206ed982e709e565d536ce930701a8c07edfd2cfdce428683f3f2a601d37696a62": { "mach_glfw-0.2.0-EJSQm2M9BQCiYGTd9VcKjg2DhSD7WT4kS-MfX68ORRT_": {
"name": "mach_glfw", "name": "mach_glfw",
"url": "https://deps.files.ghostty.org/mach_glfw-12206ed982e709e565d536ce930701a8c07edfd2cfdce428683f3f2a601d37696a62.tar.gz", "url": "https://github.com/mitchellh/mach-glfw/archive/d84bc11b0601cdad71035a0e9cf21572d76aa0d2.zip",
"hash": "sha256-HhXIvWUS8/CHWY4VXPG2ZEo+we8XOn3o5rYJCQ1n8Nk=" "hash": "sha256-Sh1DvCmawdN+a2JEhNP3wTX43/i5FDlDVOIx7Um/d0U="
}, },
"1220736fa4ba211162c7a0e46cc8fe04d95921927688bff64ab5da7420d098a7272d": { "glfw-0.0.0-bOgnngiqGQCt5HJK25zx1lf9emPYDNtEuQPYmrTCdOoN": {
"name": "glfw", "name": "glfw",
"url": "https://github.com/mitchellh/glfw/archive/b552c6ec47326b94015feddb36058ea567b87159.tar.gz", "url": "git+https://github.com/der-teufel-programming/glfw.git#206deaa2485703ac700d0f3020a8854282aecdbb",
"hash": "sha256-IeBVAOQmtyFqVxzuXPek1onuPwIamcOyYtxqKpPEQjU=" "hash": "sha256-GFeN4J4ZpKvQV8Gw6fxJ+KSpzzdjIYBbO/fTZ0Ooiuk="
}, },
"12202adbfecdad671d585c9a5bfcbd5cdf821726779430047742ce1bf94ad67d19cb": { "N-V-__8AABHMqAWYuRdIlflwi8gksPnlUMQBiSxAqQAAZFms": {
"name": "xcode_frameworks", "name": "xcode_frameworks",
"url": "https://github.com/mitchellh/xcode-frameworks/archive/69801c154c39d7ae6129ea1ba8fe1afe00585fc8.tar.gz", "url": "https://pkg.machengine.org/xcode-frameworks/9a45f3ac977fd25dff77e58c6de1870b6808c4a7.tar.gz",
"hash": "sha256-mP/I2coL57UJm/3+4Q8sPAgQwk8V4zM+S4VBBTrX2To=" "hash": "sha256-jWMT0p7klpkgX9GOUNAhrR2e6Ej7MobbqT5ZxJrNQoM="
}, },
"122004bfd4c519dadfb8e6281a42fc34fd1aa15aea654ea8a492839046f9894fa2cf": { "N-V-__8AAAIGzwDju1iAEUEqIbBeI3K4JhQ0vBdNzmETnIRQ": {
"name": "vulkan_headers", "name": "vulkan_headers",
"url": "https://github.com/mitchellh/vulkan-headers/archive/04c8a0389d5a0236a96312988017cd4ce27d8041.tar.gz", "url": "https://pkg.machengine.org/vulkan-headers/53e3ee66a78b97075863135b429956f225b149a5.tar.gz",
"hash": "sha256-K+zrRudgHFukOM6En1StRYRMNYkeRk+qHTXvrXaG+FU=" "hash": "sha256-kXOn43ntsvxnufobQO0xfzg1cg0R97BmFOU3WRqFsH0="
}, },
"1220b3164434d2ec9db146a40bf3a30f490590d68fa8529776a3138074f0da2c11ca": { "N-V-__8AAJfbCQBWPD1WA6AuYSk8LAIj4Bo_KY-2Br8NEIKT": {
"name": "wayland_headers", "name": "wayland_headers",
"url": "https://github.com/mitchellh/wayland-headers/archive/5f991515a29f994d87b908115a2ab0b899474bd1.tar.gz", "url": "https://pkg.machengine.org/wayland-headers/7c53e7483c3cfb5c6780ae542c9f5cfa712a826a.tar.gz",
"hash": "sha256-uFilLZinKkZt6RdVTV3lUmJpzpswDdFva22FvwU/XQI=" "hash": "sha256-uGIvMyp+xR1jQXTDr6RqYl40Ukiw9l3fW1t6XpYztPY="
}, },
"122089c326186c84aa2fd034b16abc38f3ebf4862d9ae106dc1847ac44f557b36465": { "N-V-__8AACbnQQDnnaLV79Xp3YtkU_g6nseVNOLiA7MzF2a4": {
"name": "x11_headers", "name": "x11_headers",
"url": "https://github.com/mitchellh/x11-headers/archive/2ffbd62d82ff73ec929dd8de802bc95effa0ef88.tar.gz", "url": "https://pkg.machengine.org/x11-headers/29aefb525d5c08b05b0351e34b1623854a138c21.tar.gz",
"hash": "sha256-EhV2bmTY/OMYN1wEul35gD0hQgS/Al262jO3pVr0O+c=" "hash": "sha256-UsbWkOmedS4ygY9C1g7OiPVnTcXzfGKdXImmztYAAiI="
}, },
"1220f5aec880d4f430cc1597ede88f1530da69e39a4986080e976b0c7b919c2ebfeb": { "vaxis-0.1.0-BWNV_MHyCAARemSCSwwc3sA1etNgv7ge0BCIXspX6CZv": {
"name": "vaxis", "name": "vaxis",
"url": "git+https://github.com/rockorager/libvaxis#2237a7059eae99e9f132dd5acd1555e49d6c7d93", "url": "git+https://github.com/rockorager/libvaxis#1e24e0dfb509e974e1c8713bcd119d0ae032a8c7",
"hash": "sha256-ZzLNJOsXzyBhkdUhbET30RoU2T9xKYsBUQz2NAjK/G8=" "hash": "sha256-6p9aSklLTPV9epzGkXBg5SQfjxfTT+/SYLFPiM04VF0="
}, },
"1220dd654ef941fc76fd96f9ec6adadf83f69b9887a0d3f4ee5ac0a1a3e11be35cf5": { "zigimg-0.1.0-lly-O-NTEABwkjg9_WM4uLQr_TtL-7jp375PsZJyugGN": {
"name": "zigimg", "name": "zigimg",
"url": "git+https://github.com/zigimg/zigimg#3a667bdb3d7f0955a5a51c8468eac83210c1439e", "url": "git+https://github.com/TUSF/zigimg#5102e09be233d372e9e05f4cb2ffbefba30bc1c0",
"hash": "sha256-oLf3YH3yeg4ikVO/GahMCDRMTU31AHkfSnF4rt7xTKo=" "hash": "sha256-0HYK5A8Jlx1WD1hdU07r+m2AXl6UuazFiZd7P3uh/wY="
}, },
"122055beff332830a391e9895c044d33b15ea21063779557024b46169fb1984c6e40": { "zg-0.13.4-AAAAAGiZ7QLz4pvECFa_wG4O4TP4FLABHHbemH2KakWM": {
"name": "zg", "name": "zg",
"url": "https://codeberg.org/atman/zg/archive/v0.13.2.tar.gz", "url": "git+https://codeberg.org/atman/zg#4a002763419a34d61dcbb1f415821b83b9bf8ddc",
"hash": "sha256-2x9hT7bYq9KJYWLVOf21a+QvTG/F7HWT+YK15IMRzNY=" "hash": "sha256-fo3l6cjkrr/godElTGnQzalBsasN7J73IDIRmw7v1gA="
}, },
"12201f0d542e7541cf492a001d4d0d0155c92f58212fbcb0d224e95edeba06b5416a": { "z2d-0.6.0-j5P_HvLdCABu-dXpCeRM7Uk4m16vULg1980lMNCQj4_C": {
"name": "z2d", "name": "z2d",
"url": "https://deps.files.ghostty.org/z2d-12201f0d542e7541cf492a001d4d0d0155c92f58212fbcb0d224e95edeba06b5416a.tar.gz", "url": "https://github.com/vancluever/z2d/archive/1e89605a624940c310c7a1d81b46a7c5c05919e3.tar.gz",
"hash": "sha256-P0UJ54RO/vVyDa+UkBl+QEOjzoMMEFSOTexQP/uBXfc=" "hash": "sha256-PEKVSUZ6teRbDyhFPWSiuBSe40pgr0kVRivIY8Cn8HQ="
}, },
"1220e17e64ef0ef561b3e4b9f3a96a2494285f2ec31c097721bf8c8677ec4415c634": { "zig_objc-0.0.0-Ir_Sp3TyAADEVRTxXlScq3t_uKAM91MYNerZkHfbD0yt": {
"name": "zig_objc", "name": "zig_objc",
"url": "https://deps.files.ghostty.org/zig_objc-1220e17e64ef0ef561b3e4b9f3a96a2494285f2ec31c097721bf8c8677ec4415c634.tar.gz", "url": "https://github.com/mitchellh/zig-objc/archive/3ab0d37c7d6b933d6ded1b3a35b6b60f05590a98.tar.gz",
"hash": "sha256-H+HIbh2T23uzrsg9/1/vl9Ir1HCAa2pzeTx6zktJH9Q=" "hash": "sha256-zn1tR6xhSmDla4UJ3t+Gni4Ni3R8deSK3tEe7DGzNXw="
}, },
"12205a66d423259567764fa0fc60c82be35365c21aeb76c5a7dc99698401f4f6fefc": { "N-V-__8AAB9YCQBaZtQjJZVndk-g_GDIK-NTZcIa63bFp9yZ": {
"name": "zig_js", "name": "zig_js",
"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="
}, },
"12207831bce7d4abce57b5a98e8f3635811cfefd160bca022eb91fe905d36a02cf25": { "ziglyph-0.11.2-AAAAAHPtHwB4Mbzn1KvOV7Wpjo82NYEc_v0WC8oCLrkf": {
"name": "ziglyph", "name": "ziglyph",
"url": "https://deps.files.ghostty.org/ziglyph-b89d43d1e3fb01b6074bc1f7fc980324b04d26a5.tar.gz", "url": "https://deps.files.ghostty.org/ziglyph-b89d43d1e3fb01b6074bc1f7fc980324b04d26a5.tar.gz",
"hash": "sha256-cse98+Ft8QUjX+P88yyYfaxJOJGQ9M7Ymw7jFxDz89k=" "hash": "sha256-cse98+Ft8QUjX+P88yyYfaxJOJGQ9M7Ymw7jFxDz89k="
}, },
"12209ca054cb1919fa276e328967f10b253f7537c4136eb48f3332b0f7cf661cad38": { "wayland-0.4.0-dev-lQa1kjfIAQCmhhQu3xF0KH-94-TzeMXOqfnP0-Dg6Wyy": {
"name": "zig_wayland", "name": "zig_wayland",
"url": "https://deps.files.ghostty.org/zig-wayland-fbfe3b4ac0b472a27b1f1a67405436c58cbee12d.tar.gz", "url": "https://codeberg.org/ifreund/zig-wayland/archive/f3c5d503e540ada8cbcb056420de240af0c094f7.tar.gz",
"hash": "sha256-RtAystqK/GRYIquTK1KfD7rRSCrfuzAvCD1Z9DE1ldc=" "hash": "sha256-E77GZ15APYbbO1WzmuJi8eG9/iQFbc2CgkNBxjCLUhk="
}, },
"1220edc3b8d8bedbb50555947987e5e8e2f93871ca3c8e8d4cc8f1377c15b5dd35e8": { "zf-0.10.3-OIRy8bKIAACV6JaNNncXA68Nw2BUAD9JVfQdzjyoZQ-J": {
"name": "zf", "name": "zf",
"url": "https://deps.files.ghostty.org/zf-1220edc3b8d8bedbb50555947987e5e8e2f93871ca3c8e8d4cc8f1377c15b5dd35e8.tar.gz", "url": "https://github.com/natecraddock/zf/archive/03176fcf23fda543cc02a8675e92c1fe3b1ee2eb.tar.gz",
"hash": "sha256-/oLryY3VQfjbtQi+UP+n6FJTVA/YxIetjO+6Ovrh6/E=" "hash": "sha256-HqS2NFUuTQkltFsQlZz4HYHgfhEUEkZY83NnCW2x5Sg="
}, },
"1220c72c1697dd9008461ead702997a15d8a1c5810247f02e7983b9f74c6c6e4c087": { "vaxis-0.1.0-BWNV_K3yCACrTy3A5cbZElLyICx5a2O2EzPxmgVRcbKJ": {
"name": "vaxis", "name": "vaxis",
"url": "git+https://github.com/rockorager/libvaxis/?ref=main#dc0a228a5544988d4a920cfb40be9cd28db41423", "url": "git+https://github.com/rockorager/libvaxis/?ref=main#6a37605dde55898dcca4769dd3eb1e333959c209",
"hash": "sha256-QWN4jOrA91KlbqmeEHHJ4HTnCC9nmfxt8DHUXJpAzLI=" "hash": "sha256-5DW2V2bVsHtSw7UMGvJ+P0FpXIf5kTNjrq2SMqU6FIk="
}, },
"12208d70ee791d7ef7e16e1c3c9c1127b57f1ed066a24f87d57fc9f730c5dc394b9d": { "gobject-0.2.0-Skun7H6DlQDWCiNQtdE5TXYcCvx7MyjW01OQe5M_n_jV": {
"name": "gobject", "name": "gobject",
"url": "https://deps.files.ghostty.org/gobject-12208d70ee791d7ef7e16e1c3c9c1127b57f1ed066a24f87d57fc9f730c5dc394b9d.tar.zst", "url": "https://github.com/jcollie/ghostty-gobject/releases/download/0.14.0-2025-03-11-16-1/ghostty-gobject-0.14.0-2025-03-11-16-1.tar.gz",
"hash": "sha256-UU97kNv/bZzQPKz1djhEDLapLguvfBpFfWVb6FthtcI=" "hash": "sha256-eMmS9oysZheHwSCCvmOUSDJmP9zN7cAr6qqDIbz6EmY="
}, },
"12202cdac858abc52413a6c6711d5026d2d3c8e13f95ca2c327eade0736298bb021f": { "N-V-__8AAKrHGAAs2shYq8UkE6bGcR1QJtLTyOE_lcosMn6t": {
"name": "wayland", "name": "wayland",
"url": "https://deps.files.ghostty.org/wayland-9cb3d7aa9dc995ffafdbdef7ab86a949d0fb0e7d.tar.gz", "url": "https://deps.files.ghostty.org/wayland-9cb3d7aa9dc995ffafdbdef7ab86a949d0fb0e7d.tar.gz",
"hash": "sha256-6kGR1o5DdnflHzqs3ieCmBAUTpMdOXoyfcYDXiw5xQ0=" "hash": "sha256-6kGR1o5DdnflHzqs3ieCmBAUTpMdOXoyfcYDXiw5xQ0="
}, },
"12201a57c6ce0001aa034fa80fba3e1cd2253c560a45748f4f4dd21ff23b491cddef": { "N-V-__8AAKw-DAAaV8bOAAGqA0-oD7o-HNIlPFYKRXSPT03S": {
"name": "wayland_protocols", "name": "wayland_protocols",
"url": "https://deps.files.ghostty.org/wayland-protocols-258d8f88f2c8c25a830c6316f87d23ce1a0f12d9.tar.gz", "url": "https://deps.files.ghostty.org/wayland-protocols-258d8f88f2c8c25a830c6316f87d23ce1a0f12d9.tar.gz",
"hash": "sha256-XO3K3egbdeYPI+XoO13SuOtO+5+Peb16NH0UiusFMPg=" "hash": "sha256-XO3K3egbdeYPI+XoO13SuOtO+5+Peb16NH0UiusFMPg="
}, },
"12207e0851c12acdeee0991e893e0132fc87bb763969a585dc16ecca33e88334c566": { "N-V-__8AAKYZBAB-CFHBKs3u4JkeiT4BMvyHu3Y5aaWF3Bbs": {
"name": "plasma_wayland_protocols", "name": "plasma_wayland_protocols",
"url": "https://deps.files.ghostty.org/plasma_wayland_protocols-12207e0851c12acdeee0991e893e0132fc87bb763969a585dc16ecca33e88334c566.tar.gz", "url": "https://deps.files.ghostty.org/plasma_wayland_protocols-12207e0851c12acdeee0991e893e0132fc87bb763969a585dc16ecca33e88334c566.tar.gz",
"hash": "sha256-XFi6IUrNjmvKNCbcCLAixGqN2Zeymhs+KLrfccIN9EE=" "hash": "sha256-XFi6IUrNjmvKNCbcCLAixGqN2Zeymhs+KLrfccIN9EE="
}, },
"122071ad56fd984afb4f94d441b6ea3e21f1741a0e026b02860d9a46110fac2cd109": { "N-V-__8AAABBKARxrVb9mEr7T5TUQbbqPiHxdBoOAmsChg2a": {
"name": "iterm2_themes", "name": "iterm2_themes",
"url": "https://github.com/mbadolato/iTerm2-Color-Schemes/archive/e21d5ffd19605741d0e3e19d7c5a8c6c25648673.tar.gz", "url": "https://github.com/mbadolato/iTerm2-Color-Schemes/archive/e21d5ffd19605741d0e3e19d7c5a8c6c25648673.tar.gz",
"hash": "sha256-pyoGlKOWdZVbjGoxPP+CZ6zwil8O12gMOlzX0BJEfAc=" "hash": "sha256-pyoGlKOWdZVbjGoxPP+CZ6zwil8O12gMOlzX0BJEfAc="
}, },
"1220bc6b9daceaf7c8c60f3c3998058045ba0c5c5f48ae255ff97776d9cd8bfc6402": { "N-V-__8AAH0GaQC8a52s6vfIxg88OZgFgEW6DFxfSK4lX_l3": {
"name": "imgui", "name": "imgui",
"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="
}, },
"1220b81f6ecfb3fd222f76cf9106fecfa6554ab07ec7fdc4124b9bb063ae2adf969d": { "N-V-__8AAKLKpwC4H27Ps_0iL3bPkQb-z6ZVSrB-x_3EEkub": {
"name": "freetype", "name": "freetype",
"url": "https://deps.files.ghostty.org/freetype-1220b81f6ecfb3fd222f76cf9106fecfa6554ab07ec7fdc4124b9bb063ae2adf969d.tar.gz", "url": "https://deps.files.ghostty.org/freetype-1220b81f6ecfb3fd222f76cf9106fecfa6554ab07ec7fdc4124b9bb063ae2adf969d.tar.gz",
"hash": "sha256-QnIB9dUVFnDQXB9bRb713aHy592XHvVPD+qqf/0quQw=" "hash": "sha256-QnIB9dUVFnDQXB9bRb713aHy592XHvVPD+qqf/0quQw="
}, },
"1220aa013f0c83da3fb64ea6d327f9173fa008d10e28bc9349eac3463457723b1c66": { "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="
}, },
"1220fed0c74e1019b3ee29edae2051788b080cd96e90d56836eea857b0b966742efb": { "N-V-__8AAB0eQwD-0MdOEBmz7intriBReIsIDNlukNVoNu6o": {
"name": "zlib", "name": "zlib",
"url": "https://deps.files.ghostty.org/zlib-1220fed0c74e1019b3ee29edae2051788b080cd96e90d56836eea857b0b966742efb.tar.gz", "url": "https://deps.files.ghostty.org/zlib-1220fed0c74e1019b3ee29edae2051788b080cd96e90d56836eea857b0b966742efb.tar.gz",
"hash": "sha256-F+iIY/NgBnKrSRgvIXKBtvxNPHYr3jYZNeQ2qVIU0Fw=" "hash": "sha256-F+iIY/NgBnKrSRgvIXKBtvxNPHYr3jYZNeQ2qVIU0Fw="
}, },
"12201149afb3326c56c05bb0a577f54f76ac20deece63aa2f5cd6ff31a4fa4fcb3b7": { "N-V-__8AAIrfdwARSa-zMmxWwFuwpXf1T3asIN7s5jqi9c1v": {
"name": "fontconfig", "name": "fontconfig",
"url": "https://deps.files.ghostty.org/fontconfig-2.14.2.tar.gz", "url": "https://deps.files.ghostty.org/fontconfig-2.14.2.tar.gz",
"hash": "sha256-O6LdkhWHGKzsXKrxpxYEO1qgVcJ7CB2RSvPMtA3OilU=" "hash": "sha256-O6LdkhWHGKzsXKrxpxYEO1qgVcJ7CB2RSvPMtA3OilU="
}, },
"122032442d95c3b428ae8e526017fad881e7dc78eab4d558e9a58a80bfbd65a64f7d": { "N-V-__8AAG3RoQEyRC2Vw7Qoro5SYBf62IHn3HjqtNVY6aWK": {
"name": "libxml2", "name": "libxml2",
"url": "https://github.com/GNOME/libxml2/archive/refs/tags/v2.11.5.tar.gz", "url": "https://deps.files.ghostty.org/libxml2-2.11.5.tar.gz",
"hash": "sha256-bCgFni4+60K1tLFkieORamNGwQladP7jvGXNxdiaYhU=" "hash": "sha256-bCgFni4+60K1tLFkieORamNGwQladP7jvGXNxdiaYhU="
}, },
"12203eff4829ad8afdd828eb323d48e5ba8dbb44d224e9e314d4ab1533c2bec20f4b": { "N-V-__8AALiNBAA-_0gprYr92CjrMj1I5bqNu0TSJOnjFNSr": {
"name": "gtk4_layer_shell", "name": "gtk4_layer_shell",
"url": "https://github.com/wmww/gtk4-layer-shell/archive/refs/tags/v1.1.0.tar.gz", "url": "https://deps.files.ghostty.org/gtk4-layer-shell-1.1.0.tar.gz",
"hash": "sha256-mChCgSYKXu9bT2OlXxbEv2p4ihAgptsDfssPcfozaYg=" "hash": "sha256-mChCgSYKXu9bT2OlXxbEv2p4ihAgptsDfssPcfozaYg="
}, },
"1220b8588f106c996af10249bfa092c6fb2f35fbacb1505ef477a0b04a7dd1063122": { "N-V-__8AAKa0rgW4WI8QbJlq8QJJv6CSxvsvNfussVBe9Heg": {
"name": "harfbuzz", "name": "harfbuzz",
"url": "https://deps.files.ghostty.org/harfbuzz-1220b8588f106c996af10249bfa092c6fb2f35fbacb1505ef477a0b04a7dd1063122.tar.gz", "url": "https://deps.files.ghostty.org/harfbuzz-1220b8588f106c996af10249bfa092c6fb2f35fbacb1505ef477a0b04a7dd1063122.tar.gz",
"hash": "sha256-nxygiYE7BZRK0c6MfgGCEwJtNdybq0gKIeuHaDg5ZVY=" "hash": "sha256-nxygiYE7BZRK0c6MfgGCEwJtNdybq0gKIeuHaDg5ZVY="
}, },
"12205c83b8311a24b1d5ae6d21640df04f4b0726e314337c043cde1432758cbe165b": { "N-V-__8AAGmZhABbsPJLfbqrh6JTHsXhY6qCaLAQyx25e0XE": {
"name": "highway", "name": "highway",
"url": "https://deps.files.ghostty.org/highway-12205c83b8311a24b1d5ae6d21640df04f4b0726e314337c043cde1432758cbe165b.tar.gz", "url": "https://deps.files.ghostty.org/highway-66486a10623fa0d72fe91260f96c892e41aceb06.tar.gz",
"hash": "sha256-NUqLRTm1iOcLmOxwhEJz4/J0EwLEw3e8xOgbPRhm98k=" "hash": "sha256-h9T4iT704I8iSXNgj/6/lCaKgTgLp5wS6IQZaMgKohI="
}, },
"1220f870c853529233ea64a108acaaa81f8d06d7ff4b66c76930be7d78d508aff7a2": { "N-V-__8AADcZkgn4cMhTUpIz6mShCKyqqB-NBtf_S2bHaTC-": {
"name": "gettext", "name": "gettext",
"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="
}, },
"1220c15e72eadd0d9085a8af134904d9a0f5dfcbed5f606ad60edc60ebeccd9706bb": { "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",
"hash": "sha256-ABqhIC54RI9MC/GkjHblVodrNvFtks4yB+zP1h2Z8qA=" "hash": "sha256-ABqhIC54RI9MC/GkjHblVodrNvFtks4yB+zP1h2Z8qA="
}, },
"1220446be831adcca918167647c06c7b825849fa3fba5f22da394667974537a9c77e": { "N-V-__8AAPlZGwBEa-gxrcypGBZ2R8Bse4JYSfo_ul8i2jlG": {
"name": "sentry", "name": "sentry",
"url": "https://deps.files.ghostty.org/sentry-1220446be831adcca918167647c06c7b825849fa3fba5f22da394667974537a9c77e.tar.gz", "url": "https://deps.files.ghostty.org/sentry-1220446be831adcca918167647c06c7b825849fa3fba5f22da394667974537a9c77e.tar.gz",
"hash": "sha256-KsZJfMjWGo0xCT5HrduMmyxFsWsHBbszSoNbZCPDGN8=" "hash": "sha256-KsZJfMjWGo0xCT5HrduMmyxFsWsHBbszSoNbZCPDGN8="
}, },
"12207fd37bb8251919c112dcdd8f616a491857b34a451f7e4486490077206dc2a1ea": { "N-V-__8AALw2uwF_03u4JRkZwRLc3Y9hakkYV7NKRR9-RIZJ": {
"name": "breakpad", "name": "breakpad",
"url": "https://github.com/getsentry/breakpad/archive/b99f444ba5f6b98cac261cbb391d8766b34a5918.tar.gz", "url": "https://deps.files.ghostty.org/breakpad-b99f444ba5f6b98cac261cbb391d8766b34a5918.tar.gz",
"hash": "sha256-bMqYlD0amQdmzvYQd8Ca/1k4Bj/heh7+EijlQSttatk=" "hash": "sha256-bMqYlD0amQdmzvYQd8Ca/1k4Bj/heh7+EijlQSttatk="
}, },
"1220d4d18426ca72fc2b7e56ce47273149815501d0d2395c2a98c726b31ba931e641": { "N-V-__8AAHffAgDU0YQmynL8K35WzkcnMUmBVQHQ0jlcKpjH": {
"name": "utfcpp", "name": "utfcpp",
"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="
}, },
"122037b39d577ec2db3fd7b2130e7b69ef6cc1807d68607a7c232c958315d381b5cd": { "N-V-__8AAAzZywE3s51XfsLbP9eyEw57ae9swYB9aGB6fCMs": {
"name": "wuffs", "name": "wuffs",
"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="
}, },
"12207ff340169c7d40c570b4b6a97db614fe47e0d83b5801a932dcd44917424c8806": { "N-V-__8AADYiAAB_80AWnH1AxXC0tql9thT-R-DYO1gBqTLc": {
"name": "pixels", "name": "pixels",
"url": "https://deps.files.ghostty.org/pixels-12207ff340169c7d40c570b4b6a97db614fe47e0d83b5801a932dcd44917424c8806.tar.gz", "url": "https://deps.files.ghostty.org/pixels-12207ff340169c7d40c570b4b6a97db614fe47e0d83b5801a932dcd44917424c8806.tar.gz",
"hash": "sha256-Veg7FtCRCCUCvxSb9FfzH0IJLFmCZQ4/+657SIcb8Ro=" "hash": "sha256-Veg7FtCRCCUCvxSb9FfzH0IJLFmCZQ4/+657SIcb8Ro="
}, },
"12201278a1a05c0ce0b6eb6026c65cd3e9247aa041b1c260324bf29cee559dd23ba1": { "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="
}, },
"1220fb3b5586e8be67bc3feb34cbe749cf42a60d628d2953632c2f8141302748c8da": { "N-V-__8AANb6pwD7O1WG6L5nvD_rNMvnSc9Cpg1ijSlTYywv": {
"name": "spirv_cross", "name": "spirv_cross",
"url": "https://deps.files.ghostty.org/spirv_cross-1220fb3b5586e8be67bc3feb34cbe749cf42a60d628d2953632c2f8141302748c8da.tar.gz", "url": "https://deps.files.ghostty.org/spirv_cross-1220fb3b5586e8be67bc3feb34cbe749cf42a60d628d2953632c2f8141302748c8da.tar.gz",
"hash": "sha256-tStvz8Ref6abHwahNiwVVHNETizAmZVVaxVsU7pmV+M=" "hash": "sha256-tStvz8Ref6abHwahNiwVVHNETizAmZVVaxVsU7pmV+M="

View File

@ -52,11 +52,11 @@
}, },
"nixpkgs-unstable": { "nixpkgs-unstable": {
"locked": { "locked": {
"lastModified": 1738136902, "lastModified": 1741708242,
"narHash": "sha256-pUvLijVGARw4u793APze3j6mU1Zwdtz7hGkGGkD87qw=", "narHash": "sha256-cNRqdQD4sZpN7JLqxVOze4+WsWTmv2DGH0wNCOVwrWc=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "9a5db3142ce450045840cc8d832b13b8a2018e0c", "rev": "b62d2a95c72fb068aecd374a7262b37ed92df82b",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -102,11 +102,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1738239110, "lastModified": 1741702955,
"narHash": "sha256-Y5i9mQ++dyIQr+zEPNy+KIbc5wjPmfllBrag3cHZgcE=", "narHash": "sha256-Emk3VnNByigCBlBN34IH2cMrsUqIhdex02uw9TSDsN0=",
"owner": "mitchellh", "owner": "mitchellh",
"repo": "zig-overlay", "repo": "zig-overlay",
"rev": "1a8fb6f3a04724519436355564b95fce5e272504", "rev": "1152ce759114a94134081270affd970ae1b957ed",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -121,20 +121,20 @@
"flake-utils" "flake-utils"
], ],
"nixpkgs": [ "nixpkgs": [
"nixpkgs-stable" "nixpkgs-unstable"
] ]
}, },
"locked": { "locked": {
"lastModified": 1741368279, "lastModified": 1741816255,
"narHash": "sha256-WTaC8HmnIq6O71iK0g9as404BbmS+YyEP5qS85m2JBY=", "narHash": "sha256-SJQMnm1vwXy8Td2qp/omjybn+4xZ/MDdZHeK6aa2nb0=",
"owner": "jcollie", "owner": "jcollie",
"repo": "zig2nix", "repo": "zig2nix",
"rev": "672971b5b6911de21446ad4fc76dee677922eda0", "rev": "c2a24405298373123e12ca81805e436da648aaf5",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "jcollie", "owner": "jcollie",
"ref": "672971b5b6911de21446ad4fc76dee677922eda0", "ref": "c2a24405298373123e12ca81805e436da648aaf5",
"repo": "zig2nix", "repo": "zig2nix",
"type": "github" "type": "github"
} }

View File

@ -26,9 +26,9 @@
}; };
zig2nix = { zig2nix = {
url = "github:jcollie/zig2nix?ref=672971b5b6911de21446ad4fc76dee677922eda0"; url = "github:jcollie/zig2nix?ref=c2a24405298373123e12ca81805e436da648aaf5";
inputs = { inputs = {
nixpkgs.follows = "nixpkgs-stable"; nixpkgs.follows = "nixpkgs-unstable";
flake-utils.follows = "flake-utils"; flake-utils.follows = "flake-utils";
}; };
}; };
@ -49,7 +49,7 @@
pkgs-unstable = nixpkgs-unstable.legacyPackages.${system}; pkgs-unstable = nixpkgs-unstable.legacyPackages.${system};
in { in {
devShell.${system} = pkgs-stable.callPackage ./nix/devShell.nix { devShell.${system} = pkgs-stable.callPackage ./nix/devShell.nix {
zig = zig.packages.${system}."0.13.0"; zig = zig.packages.${system}."0.14.0";
wraptest = pkgs-stable.callPackage ./nix/wraptest.nix {}; wraptest = pkgs-stable.callPackage ./nix/wraptest.nix {};
zig2nix = zig2nix; zig2nix = zig2nix;
}; };
@ -61,10 +61,10 @@
revision = self.shortRev or self.dirtyShortRev or "dirty"; revision = self.shortRev or self.dirtyShortRev or "dirty";
}; };
in rec { in rec {
deps = pkgs-stable.callPackage ./build.zig.zon.nix {}; deps = pkgs-unstable.callPackage ./build.zig.zon.nix {};
ghostty-debug = pkgs-stable.callPackage ./nix/package.nix (mkArgs "Debug"); ghostty-debug = pkgs-unstable.callPackage ./nix/package.nix (mkArgs "Debug");
ghostty-releasesafe = pkgs-stable.callPackage ./nix/package.nix (mkArgs "ReleaseSafe"); ghostty-releasesafe = pkgs-unstable.callPackage ./nix/package.nix (mkArgs "ReleaseSafe");
ghostty-releasefast = pkgs-stable.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;
@ -77,14 +77,14 @@
module: let module: let
vm = import ./nix/vm/create.nix { vm = import ./nix/vm/create.nix {
inherit system module; inherit system module;
nixpkgs = nixpkgs-stable; nixpkgs = nixpkgs-unstable;
overlay = self.overlays.debug; overlay = self.overlays.debug;
}; };
program = pkgs-stable.writeShellScript "run-ghostty-vm" '' program = pkgs-unstable.writeShellScript "run-ghostty-vm" ''
SHARED_DIR=$(pwd) SHARED_DIR=$(pwd)
export SHARED_DIR export SHARED_DIR
${pkgs-stable.lib.getExe vm.config.system.build.vm} "$@" ${pkgs-unstable.lib.getExe vm.config.system.build.vm} "$@"
''; '';
in { in {
type = "app"; type = "app";

View File

@ -70,7 +70,7 @@ elif [ "$1" != "--update" ]; then
help help
exit 1 exit 1
else else
jq -r '.[] .url' "$BUILD_ZIG_ZON_LOCK" | sort > "$BUILD_ZIG_ZON_TXT" jq -r '.[] .url' "$BUILD_ZIG_ZON_LOCK" | LANG=C sort > "$BUILD_ZIG_ZON_TXT"
mv "$WORK_DIR/build.zig.zon.nix" "$BUILD_ZIG_ZON_NIX" mv "$WORK_DIR/build.zig.zon.nix" "$BUILD_ZIG_ZON_NIX"
echo -e "\nOK: build.zig.zon.nix updated." echo -e "\nOK: build.zig.zon.nix updated."
exit 0 exit 0

View File

@ -200,5 +200,9 @@ in
# and we need iOS too. # and we need iOS too.
unset SDKROOT unset SDKROOT
unset DEVELOPER_DIR unset DEVELOPER_DIR
# We need to remove "xcrun" from the PATH. It is injected by
# some dependency but we need to rely on system Xcode tools
export PATH=$(echo "$PATH" | awk -v RS=: -v ORS=: '$0 !~ /xcrun/ || $0 == "/usr/bin" {print}' | sed 's/:$//')
''); '');
} }

View File

@ -24,7 +24,7 @@
git, git,
ncurses, ncurses,
pkg-config, pkg-config,
zig_0_13, zig_0_14,
pandoc, pandoc,
revision ? "dirty", revision ? "dirty",
optimize ? "Debug", optimize ? "Debug",
@ -45,7 +45,7 @@
# https://github.com/ziglang/zig/issues/14281#issuecomment-1624220653 is # https://github.com/ziglang/zig/issues/14281#issuecomment-1624220653 is
# ultimately acted on and has made its way to a nixpkgs implementation, this # ultimately acted on and has made its way to a nixpkgs implementation, this
# can probably be removed in favor of that. # can probably be removed in favor of that.
zig_hook = zig_0_13.hook.overrideAttrs { zig_hook = zig_0_14.hook.overrideAttrs {
zig_default_flags = "-Dcpu=baseline -Doptimize=${optimize} --color off"; zig_default_flags = "-Dcpu=baseline -Doptimize=${optimize} --color off";
}; };
in in

View File

@ -1,5 +1,7 @@
.{ .{
.name = "apple-sdk", .name = .apple_sdk,
.version = "0.1.0", .version = "0.1.0",
.dependencies = .{}, .dependencies = .{},
.fingerprint = 0xdde52860f7c464d2,
.paths = .{""},
} }

View File

@ -14,9 +14,9 @@ pub fn build(b: *std.Build) !void {
lib.linkLibCpp(); lib.linkLibCpp();
lib.addIncludePath(upstream.path("src")); lib.addIncludePath(upstream.path("src"));
lib.addIncludePath(b.path("vendor")); lib.addIncludePath(b.path("vendor"));
if (target.result.isDarwin()) { if (target.result.os.tag.isDarwin()) {
const apple_sdk = @import("apple_sdk"); const apple_sdk = @import("apple_sdk");
try apple_sdk.addPaths(b, &lib.root_module); try apple_sdk.addPaths(b, lib.root_module);
} }
var flags = std.ArrayList([]const u8).init(b.allocator); var flags = std.ArrayList([]const u8).init(b.allocator);
@ -29,7 +29,7 @@ pub fn build(b: *std.Build) !void {
.flags = flags.items, .flags = flags.items,
}); });
if (target.result.isDarwin()) { if (target.result.os.tag.isDarwin()) {
lib.addCSourceFiles(.{ lib.addCSourceFiles(.{
.root = upstream.path(""), .root = upstream.path(""),
.files = common_apple, .files = common_apple,

View File

@ -1,11 +1,12 @@
.{ .{
.name = "breakpad", .name = .breakpad,
.version = "0.1.0", .version = "0.1.0",
.fingerprint = 0xfe9f9e4c76d5f962,
.paths = .{""}, .paths = .{""},
.dependencies = .{ .dependencies = .{
.breakpad = .{ .breakpad = .{
.url = "https://github.com/getsentry/breakpad/archive/b99f444ba5f6b98cac261cbb391d8766b34a5918.tar.gz", .url = "https://deps.files.ghostty.org/breakpad-b99f444ba5f6b98cac261cbb391d8766b34a5918.tar.gz",
.hash = "12207fd37bb8251919c112dcdd8f616a491857b34a451f7e4486490077206dc2a1ea", .hash = "N-V-__8AALw2uwF_03u4JRkZwRLc3Y9hakkYV7NKRR9-RIZJ",
}, },
.apple_sdk = .{ .path = "../apple-sdk" }, .apple_sdk = .{ .path = "../apple-sdk" },

View File

@ -76,9 +76,9 @@ pub fn build(b: *std.Build) !void {
.flags = flags.items, .flags = flags.items,
}); });
if (target.result.isDarwin()) { if (target.result.os.tag.isDarwin()) {
if (!target.query.isNative()) { if (!target.query.isNative()) {
try @import("apple_sdk").addPaths(b, &lib.root_module); try @import("apple_sdk").addPaths(b, lib.root_module);
try @import("apple_sdk").addPaths(b, module); try @import("apple_sdk").addPaths(b, module);
} }
lib.addCSourceFile(.{ lib.addCSourceFile(.{

View File

@ -1,6 +1,7 @@
.{ .{
.name = "cimgui", .name = .cimgui,
.version = "1.90.6", // -docking branch .version = "1.90.6", // -docking branch
.fingerprint = 0x49726f5f8acbc90d,
.paths = .{""}, .paths = .{""},
.dependencies = .{ .dependencies = .{
// This should be kept in sync with the submodule in the cimgui source // This should be kept in sync with the submodule in the cimgui source
@ -8,7 +9,7 @@
.imgui = .{ .imgui = .{
// ocornut/imgui // ocornut/imgui
.url = "https://deps.files.ghostty.org/imgui-1220bc6b9daceaf7c8c60f3c3998058045ba0c5c5f48ae255ff97776d9cd8bfc6402.tar.gz", .url = "https://deps.files.ghostty.org/imgui-1220bc6b9daceaf7c8c60f3c3998058045ba0c5c5f48ae255ff97776d9cd8bfc6402.tar.gz",
.hash = "1220bc6b9daceaf7c8c60f3c3998058045ba0c5c5f48ae255ff97776d9cd8bfc6402", .hash = "N-V-__8AAH0GaQC8a52s6vfIxg88OZgFgEW6DFxfSK4lX_l3",
}, },
.apple_sdk = .{ .path = "../apple-sdk" }, .apple_sdk = .{ .path = "../apple-sdk" },

View File

@ -1,10 +1,12 @@
.{ .{
.name = "fontconfig", .name = .fontconfig,
.version = "2.14.2", .version = "2.14.2",
.fingerprint = 0x4a79a5a40c6d6d8,
.paths = .{""},
.dependencies = .{ .dependencies = .{
.fontconfig = .{ .fontconfig = .{
.url = "https://deps.files.ghostty.org/fontconfig-2.14.2.tar.gz", .url = "https://deps.files.ghostty.org/fontconfig-2.14.2.tar.gz",
.hash = "12201149afb3326c56c05bb0a577f54f76ac20deece63aa2f5cd6ff31a4fa4fcb3b7", .hash = "N-V-__8AAIrfdwARSa-zMmxWwFuwpXf1T3asIN7s5jqi9c1v",
}, },
.freetype = .{ .path = "../freetype" }, .freetype = .{ .path = "../freetype" },

View File

@ -84,7 +84,7 @@ pub const Property = enum {
pub fn cval(self: Property) [:0]const u8 { pub fn cval(self: Property) [:0]const u8 {
@setEvalBranchQuota(10_000); @setEvalBranchQuota(10_000);
inline for (@typeInfo(Property).Enum.fields) |field| { inline for (@typeInfo(Property).@"enum".fields) |field| {
if (self == @field(Property, field.name)) { if (self == @field(Property, field.name)) {
// Build our string in a comptime context so it is a binary // Build our string in a comptime context so it is a binary
// constant and not stack allocated. // constant and not stack allocated.

View File

@ -69,9 +69,9 @@ fn buildLib(b: *std.Build, module: *std.Build.Module, options: anytype) !*std.Bu
}); });
lib.linkLibC(); lib.linkLibC();
lib.addIncludePath(upstream.path("include")); lib.addIncludePath(upstream.path("include"));
if (target.result.isDarwin()) { if (target.result.os.tag.isDarwin()) {
const apple_sdk = @import("apple_sdk"); const apple_sdk = @import("apple_sdk");
try apple_sdk.addPaths(b, &lib.root_module); try apple_sdk.addPaths(b, lib.root_module);
} }
module.addIncludePath(upstream.path("include")); module.addIncludePath(upstream.path("include"));

View File

@ -1,12 +1,13 @@
.{ .{
.name = "freetype", .name = .freetype,
.version = "2.13.2", .version = "2.13.2",
.fingerprint = 0xac2059b6f7bbfe0a,
.paths = .{""}, .paths = .{""},
.dependencies = .{ .dependencies = .{
// freetype/freetype // freetype/freetype
.freetype = .{ .freetype = .{
.url = "https://deps.files.ghostty.org/freetype-1220b81f6ecfb3fd222f76cf9106fecfa6554ab07ec7fdc4124b9bb063ae2adf969d.tar.gz", .url = "https://deps.files.ghostty.org/freetype-1220b81f6ecfb3fd222f76cf9106fecfa6554ab07ec7fdc4124b9bb063ae2adf969d.tar.gz",
.hash = "1220b81f6ecfb3fd222f76cf9106fecfa6554ab07ec7fdc4124b9bb063ae2adf969d", .hash = "N-V-__8AAKLKpwC4H27Ps_0iL3bPkQb-z6ZVSrB-x_3EEkub",
}, },
.apple_sdk = .{ .path = "../apple-sdk" }, .apple_sdk = .{ .path = "../apple-sdk" },

View File

@ -16,7 +16,7 @@ pub fn build(b: *std.Build) !void {
module.addIncludePath(upstream.path("")); module.addIncludePath(upstream.path(""));
module.addIncludePath(b.path("override")); module.addIncludePath(b.path("override"));
if (target.result.isDarwin()) { if (target.result.os.tag.isDarwin()) {
const apple_sdk = @import("apple_sdk"); const apple_sdk = @import("apple_sdk");
try apple_sdk.addPaths(b, module); try apple_sdk.addPaths(b, module);
} }
@ -53,9 +53,9 @@ fn buildGlslang(
lib.linkLibCpp(); lib.linkLibCpp();
lib.addIncludePath(upstream.path("")); lib.addIncludePath(upstream.path(""));
lib.addIncludePath(b.path("override")); lib.addIncludePath(b.path("override"));
if (target.result.isDarwin()) { if (target.result.os.tag.isDarwin()) {
const apple_sdk = @import("apple_sdk"); const apple_sdk = @import("apple_sdk");
try apple_sdk.addPaths(b, &lib.root_module); try apple_sdk.addPaths(b, lib.root_module);
} }
var flags = std.ArrayList([]const u8).init(b.allocator); var flags = std.ArrayList([]const u8).init(b.allocator);

View File

@ -1,12 +1,13 @@
.{ .{
.name = "glslang", .name = .glslang,
.version = "14.2.0", .version = "14.2.0",
.fingerprint = 0x274a35558e2e504,
.paths = .{""}, .paths = .{""},
.dependencies = .{ .dependencies = .{
// KhronosGroup/glslang // KhronosGroup/glslang
.glslang = .{ .glslang = .{
.url = "https://deps.files.ghostty.org/glslang-12201278a1a05c0ce0b6eb6026c65cd3e9247aa041b1c260324bf29cee559dd23ba1.tar.gz", .url = "https://deps.files.ghostty.org/glslang-12201278a1a05c0ce0b6eb6026c65cd3e9247aa041b1c260324bf29cee559dd23ba1.tar.gz",
.hash = "12201278a1a05c0ce0b6eb6026c65cd3e9247aa041b1c260324bf29cee559dd23ba1", .hash = "N-V-__8AABzkUgISeKGgXAzgtutgJsZc0-kkeqBBscJgMkvy",
}, },
.apple_sdk = .{ .path = "../apple-sdk" }, .apple_sdk = .{ .path = "../apple-sdk" },

View File

@ -111,6 +111,16 @@ fn buildLib(b: *std.Build, module: *std.Build.Module, options: anytype) !*std.Bu
b.fmt("-DGTK_LAYER_SHELL_MAJOR={}", .{version.major}), b.fmt("-DGTK_LAYER_SHELL_MAJOR={}", .{version.major}),
b.fmt("-DGTK_LAYER_SHELL_MINOR={}", .{version.minor}), b.fmt("-DGTK_LAYER_SHELL_MINOR={}", .{version.minor}),
b.fmt("-DGTK_LAYER_SHELL_MICRO={}", .{version.patch}), b.fmt("-DGTK_LAYER_SHELL_MICRO={}", .{version.patch}),
// Zig 0.14 regression: this is required because building with
// ubsan results in unknown symbols. Bundling the ubsan/compiler
// RT doesn't help. I'm not sure what the root cause is but I
// suspect its related to this:
// https://github.com/ziglang/zig/issues/23052
//
// We can remove this in the future for Zig updates and see
// if our binaries run in debug on NixOS.
"-fno-sanitize=undefined",
}, },
}); });

View File

@ -1,15 +1,16 @@
.{ .{
.name = "gtk4-layer-shell", .name = .gtk4_layer_shell,
.version = "1.1.0", .version = "1.1.0",
.fingerprint = 0x4b96f9483c6feeb1,
.paths = .{""}, .paths = .{""},
.dependencies = .{ .dependencies = .{
.gtk4_layer_shell = .{ .gtk4_layer_shell = .{
.url = "https://github.com/wmww/gtk4-layer-shell/archive/refs/tags/v1.1.0.tar.gz", .url = "https://deps.files.ghostty.org/gtk4-layer-shell-1.1.0.tar.gz",
.hash = "12203eff4829ad8afdd828eb323d48e5ba8dbb44d224e9e314d4ab1533c2bec20f4b", .hash = "N-V-__8AALiNBAA-_0gprYr92CjrMj1I5bqNu0TSJOnjFNSr",
}, },
.wayland_protocols = .{ .wayland_protocols = .{
.url = "https://deps.files.ghostty.org/wayland-protocols-258d8f88f2c8c25a830c6316f87d23ce1a0f12d9.tar.gz", .url = "https://deps.files.ghostty.org/wayland-protocols-258d8f88f2c8c25a830c6316f87d23ce1a0f12d9.tar.gz",
.hash = "12201a57c6ce0001aa034fa80fba3e1cd2253c560a45748f4f4dd21ff23b491cddef", .hash = "N-V-__8AAKw-DAAaV8bOAAGqA0-oD7o-HNIlPFYKRXSPT03S",
}, },
}, },
} }

View File

@ -95,8 +95,8 @@ fn buildLib(b: *std.Build, module: *std.Build.Module, options: anytype) !*std.Bu
lib.addIncludePath(upstream.path("src")); lib.addIncludePath(upstream.path("src"));
module.addIncludePath(upstream.path("src")); module.addIncludePath(upstream.path("src"));
if (target.result.isDarwin()) { if (target.result.os.tag.isDarwin()) {
try apple_sdk.addPaths(b, &lib.root_module); try apple_sdk.addPaths(b, lib.root_module);
try apple_sdk.addPaths(b, module); try apple_sdk.addPaths(b, module);
} }

View File

@ -1,12 +1,13 @@
.{ .{
.name = "harfbuzz", .name = .harfbuzz,
.version = "8.4.0", .version = "8.4.0",
.fingerprint = 0xbd60917cd18865d8,
.paths = .{""}, .paths = .{""},
.dependencies = .{ .dependencies = .{
// harfbuzz/harfbuzz // harfbuzz/harfbuzz
.harfbuzz = .{ .harfbuzz = .{
.url = "https://deps.files.ghostty.org/harfbuzz-1220b8588f106c996af10249bfa092c6fb2f35fbacb1505ef477a0b04a7dd1063122.tar.gz", .url = "https://deps.files.ghostty.org/harfbuzz-1220b8588f106c996af10249bfa092c6fb2f35fbacb1505ef477a0b04a7dd1063122.tar.gz",
.hash = "1220b8588f106c996af10249bfa092c6fb2f35fbacb1505ef477a0b04a7dd1063122", .hash = "N-V-__8AAKa0rgW4WI8QbJlq8QJJv6CSxvsvNfussVBe9Heg",
}, },
.freetype = .{ .path = "../freetype" }, .freetype = .{ .path = "../freetype" },

View File

@ -21,9 +21,9 @@ pub fn build(b: *std.Build) !void {
lib.addIncludePath(upstream.path("")); lib.addIncludePath(upstream.path(""));
module.addIncludePath(upstream.path("")); module.addIncludePath(upstream.path(""));
if (target.result.isDarwin()) { if (target.result.os.tag.isDarwin()) {
const apple_sdk = @import("apple_sdk"); const apple_sdk = @import("apple_sdk");
try apple_sdk.addPaths(b, &lib.root_module); try apple_sdk.addPaths(b, lib.root_module);
try apple_sdk.addPaths(b, module); try apple_sdk.addPaths(b, module);
} }
@ -76,6 +76,7 @@ pub fn build(b: *std.Build) !void {
.root = upstream.path(""), .root = upstream.path(""),
.flags = flags.items, .flags = flags.items,
.files = &.{ .files = &.{
"hwy/abort.cc",
"hwy/aligned_allocator.cc", "hwy/aligned_allocator.cc",
"hwy/nanobenchmark.cc", "hwy/nanobenchmark.cc",
"hwy/per_target.cc", "hwy/per_target.cc",

View File

@ -1,12 +1,13 @@
.{ .{
.name = "highway", .name = .highway,
.version = "1.1.0", .version = "1.2.0",
.fingerprint = 0xdbcf1a7425023274,
.paths = .{""}, .paths = .{""},
.dependencies = .{ .dependencies = .{
// google/highway // google/highway
.highway = .{ .highway = .{
.url = "https://deps.files.ghostty.org/highway-12205c83b8311a24b1d5ae6d21640df04f4b0726e314337c043cde1432758cbe165b.tar.gz", .url = "https://deps.files.ghostty.org/highway-66486a10623fa0d72fe91260f96c892e41aceb06.tar.gz",
.hash = "12205c83b8311a24b1d5ae6d21640df04f4b0726e314337c043cde1432758cbe165b", .hash = "N-V-__8AAGmZhABbsPJLfbqrh6JTHsXhY6qCaLAQyx25e0XE",
}, },
.apple_sdk = .{ .path = "../apple-sdk" }, .apple_sdk = .{ .path = "../apple-sdk" },

View File

@ -42,9 +42,9 @@ pub fn build(b: *std.Build) !void {
lib.addIncludePath(upstream.path("gettext-runtime/intl")); lib.addIncludePath(upstream.path("gettext-runtime/intl"));
lib.addIncludePath(upstream.path("gettext-runtime/intl/gnulib-lib")); lib.addIncludePath(upstream.path("gettext-runtime/intl/gnulib-lib"));
if (target.result.isDarwin()) { if (target.result.os.tag.isDarwin()) {
const apple_sdk = @import("apple_sdk"); const apple_sdk = @import("apple_sdk");
try apple_sdk.addPaths(b, &lib.root_module); try apple_sdk.addPaths(b, lib.root_module);
} }
lib.addCSourceFiles(.{ lib.addCSourceFiles(.{

View File

@ -1,11 +1,12 @@
.{ .{
.name = "libintl", .name = .libintl,
.version = "0.24.0", .version = "0.24.0",
.fingerprint = 0x16434c723ba7278a,
.paths = .{""}, .paths = .{""},
.dependencies = .{ .dependencies = .{
.gettext = .{ .gettext = .{
.url = "https://deps.files.ghostty.org/gettext-0.24.tar.gz", .url = "https://deps.files.ghostty.org/gettext-0.24.tar.gz",
.hash = "1220f870c853529233ea64a108acaaa81f8d06d7ff4b66c76930be7d78d508aff7a2", .hash = "N-V-__8AADcZkgn4cMhTUpIz6mShCKyqqB-NBtf_S2bHaTC-",
}, },
.apple_sdk = .{ .path = "../apple-sdk" }, .apple_sdk = .{ .path = "../apple-sdk" },

View File

@ -15,9 +15,9 @@ pub fn build(b: *std.Build) !void {
if (target.result.os.tag == .linux) { if (target.result.os.tag == .linux) {
lib.linkSystemLibrary("m"); lib.linkSystemLibrary("m");
} }
if (target.result.isDarwin()) { if (target.result.os.tag.isDarwin()) {
const apple_sdk = @import("apple_sdk"); const apple_sdk = @import("apple_sdk");
try apple_sdk.addPaths(b, &lib.root_module); try apple_sdk.addPaths(b, lib.root_module);
} }
// For dynamic linking, we prefer dynamic linking and to search by // For dynamic linking, we prefer dynamic linking and to search by

View File

@ -1,12 +1,13 @@
.{ .{
.name = "libpng", .name = .libpng,
.version = "1.6.43", .version = "1.6.43",
.fingerprint = 0xb7a09eb437ca8a79,
.paths = .{""}, .paths = .{""},
.dependencies = .{ .dependencies = .{
// glennrp/libpng // glennrp/libpng
.libpng = .{ .libpng = .{
.url = "https://deps.files.ghostty.org/libpng-1220aa013f0c83da3fb64ea6d327f9173fa008d10e28bc9349eac3463457723b1c66.tar.gz", .url = "https://deps.files.ghostty.org/libpng-1220aa013f0c83da3fb64ea6d327f9173fa008d10e28bc9349eac3463457723b1c66.tar.gz",
.hash = "1220aa013f0c83da3fb64ea6d327f9173fa008d10e28bc9349eac3463457723b1c66", .hash = "N-V-__8AAJrvXQCqAT8Mg9o_tk6m0yf5Fz-gCNEOKLyTSerD",
}, },
.zlib = .{ .path = "../zlib" }, .zlib = .{ .path = "../zlib" },

View File

@ -66,7 +66,7 @@ pub fn build(b: *std.Build) !void {
// it to the `LIBXML_{field}_ENABLED` C define where field is uppercased. // it to the `LIBXML_{field}_ENABLED` C define where field is uppercased.
inline for (std.meta.fields(Options)) |field| { inline for (std.meta.fields(Options)) |field| {
const opt = b.option(bool, field.name, "Configure flag") orelse const opt = b.option(bool, field.name, "Configure flag") orelse
@as(*const bool, @ptrCast(field.default_value.?)).*; @as(*const bool, @ptrCast(field.default_value_ptr.?)).*;
if (opt) { if (opt) {
var nameBuf: [32]u8 = undefined; var nameBuf: [32]u8 = undefined;
const name = std.ascii.upperString(&nameBuf, field.name); const name = std.ascii.upperString(&nameBuf, field.name);

View File

@ -1,10 +1,12 @@
.{ .{
.name = "libxml2", .name = .libxml2,
.version = "2.11.5", .version = "2.11.5",
.fingerprint = 0xf268267b0b8b040d,
.paths = .{""},
.dependencies = .{ .dependencies = .{
.libxml2 = .{ .libxml2 = .{
.url = "https://github.com/GNOME/libxml2/archive/refs/tags/v2.11.5.tar.gz", .url = "https://deps.files.ghostty.org/libxml2-2.11.5.tar.gz",
.hash = "122032442d95c3b428ae8e526017fad881e7dc78eab4d558e9a58a80bfbd65a64f7d", .hash = "N-V-__8AAG3RoQEyRC2Vw7Qoro5SYBf62IHn3HjqtNVY6aWK",
}, },
}, },
} }

View File

@ -21,7 +21,7 @@ pub fn build(b: *std.Build) !void {
var flags = std.ArrayList([]const u8).init(b.allocator); var flags = std.ArrayList([]const u8).init(b.allocator);
defer flags.deinit(); defer flags.deinit();
lib.addCSourceFile(.{ lib.addCSourceFile(.{
.file = b.path("os/log.c"), .file = b.path("os/zig_log.c"),
.flags = flags.items, .flags = flags.items,
}); });
lib.addCSourceFile(.{ lib.addCSourceFile(.{
@ -38,7 +38,7 @@ pub fn build(b: *std.Build) !void {
module.linkFramework("Carbon", .{}); module.linkFramework("Carbon", .{});
} }
if (target.result.isDarwin()) { if (target.result.os.tag.isDarwin()) {
module.linkFramework("CoreFoundation", .{}); module.linkFramework("CoreFoundation", .{});
module.linkFramework("CoreGraphics", .{}); module.linkFramework("CoreGraphics", .{});
module.linkFramework("CoreText", .{}); module.linkFramework("CoreText", .{});
@ -46,7 +46,7 @@ pub fn build(b: *std.Build) !void {
module.linkFramework("QuartzCore", .{}); module.linkFramework("QuartzCore", .{});
if (!target.query.isNative()) { if (!target.query.isNative()) {
try apple_sdk.addPaths(b, &lib.root_module); try apple_sdk.addPaths(b, lib.root_module);
try apple_sdk.addPaths(b, module); try apple_sdk.addPaths(b, module);
} }
} }

View File

@ -68,9 +68,9 @@ fn buildLib(b: *std.Build, module: *std.Build.Module, options: anytype) !*std.Bu
lib.addIncludePath(upstream.path("src")); lib.addIncludePath(upstream.path("src"));
module.addIncludePath(upstream.path("src")); module.addIncludePath(upstream.path("src"));
if (target.result.isDarwin()) { if (target.result.os.tag.isDarwin()) {
const apple_sdk = @import("apple_sdk"); const apple_sdk = @import("apple_sdk");
try apple_sdk.addPaths(b, &lib.root_module); try apple_sdk.addPaths(b, lib.root_module);
} }
lib.addConfigHeader(b.addConfigHeader(.{ lib.addConfigHeader(b.addConfigHeader(.{
@ -88,10 +88,10 @@ fn buildLib(b: *std.Build, module: *std.Build.Module, options: anytype) !*std.Bu
.HAVE_SYS_TYPES_H = true, .HAVE_SYS_TYPES_H = true,
.HAVE_UNISTD_H = true, .HAVE_UNISTD_H = true,
.HAVE_INTTYPES_H = true, .HAVE_INTTYPES_H = true,
.SIZEOF_INT = t.c_type_byte_size(.int), .SIZEOF_INT = t.cTypeByteSize(.int),
.SIZEOF_LONG = t.c_type_byte_size(.long), .SIZEOF_LONG = t.cTypeByteSize(.long),
.SIZEOF_LONG_LONG = t.c_type_byte_size(.longlong), .SIZEOF_LONG_LONG = t.cTypeByteSize(.longlong),
.SIZEOF_VOIDP = t.ptrBitWidth() / t.c_type_bit_size(.char), .SIZEOF_VOIDP = t.ptrBitWidth() / t.cTypeBitSize(.char),
})); }));
var flags = std.ArrayList([]const u8).init(b.allocator); var flags = std.ArrayList([]const u8).init(b.allocator);

View File

@ -1,12 +1,13 @@
.{ .{
.name = "oniguruma", .name = .oniguruma,
.version = "6.9.9", .version = "6.9.9",
.fingerprint = 0xe3b537b18c5785a8,
.paths = .{""}, .paths = .{""},
.dependencies = .{ .dependencies = .{
// kkos/oniguruma // kkos/oniguruma
.oniguruma = .{ .oniguruma = .{
.url = "https://deps.files.ghostty.org/oniguruma-1220c15e72eadd0d9085a8af134904d9a0f5dfcbed5f606ad60edc60ebeccd9706bb.tar.gz", .url = "https://deps.files.ghostty.org/oniguruma-1220c15e72eadd0d9085a8af134904d9a0f5dfcbed5f606ad60edc60ebeccd9706bb.tar.gz",
.hash = "1220c15e72eadd0d9085a8af134904d9a0f5dfcbed5f606ad60edc60ebeccd9706bb", .hash = "N-V-__8AAHjwMQDBXnLq3Q2QhaivE0kE2aD138vtX2Bq1g7c",
}, },
.apple_sdk = .{ .path = "../apple-sdk" }, .apple_sdk = .{ .path = "../apple-sdk" },

View File

@ -115,12 +115,12 @@ pub const Binding = struct {
ptr: *const anyopaque, ptr: *const anyopaque,
} { } {
return switch (@typeInfo(@TypeOf(data))) { return switch (@typeInfo(@TypeOf(data))) {
.Pointer => |ptr| switch (ptr.size) { .pointer => |ptr| switch (ptr.size) {
.One => .{ .one => .{
.size = @sizeOf(ptr.child), .size = @sizeOf(ptr.child),
.ptr = data, .ptr = data,
}, },
.Slice => .{ .slice => .{
.size = @intCast(@sizeOf(ptr.child) * data.len), .size = @intCast(@sizeOf(ptr.child) * data.len),
.ptr = data.ptr, .ptr = data.ptr,
}, },

View File

@ -25,7 +25,7 @@ pub fn load(getProcAddress: anytype) !c_int {
@TypeOf(null) => c.gladLoaderLoadGLContext(&context), @TypeOf(null) => c.gladLoaderLoadGLContext(&context),
// try as-is. If this introduces a compiler error, then add a new case. // try as-is. If this introduces a compiler error, then add a new case.
else => c.gladLoadGLContext(&context, getProcAddress), else => c.gladLoadGLContext(&context, @ptrCast(getProcAddress)),
}; };
if (res == 0) return error.GLInitFailed; if (res == 0) return error.GLInitFailed;
return res; return res;

View File

@ -23,9 +23,9 @@ pub fn build(b: *std.Build) !void {
lib.linkLibC(); lib.linkLibC();
lib.addIncludePath(upstream.path("include")); lib.addIncludePath(upstream.path("include"));
lib.addIncludePath(upstream.path("src")); lib.addIncludePath(upstream.path("src"));
if (target.result.isDarwin()) { if (target.result.os.tag.isDarwin()) {
const apple_sdk = @import("apple_sdk"); const apple_sdk = @import("apple_sdk");
try apple_sdk.addPaths(b, &lib.root_module); try apple_sdk.addPaths(b, lib.root_module);
try apple_sdk.addPaths(b, module); try apple_sdk.addPaths(b, module);
} }

View File

@ -1,12 +1,13 @@
.{ .{
.name = "sentry", .name = .sentry,
.version = "0.7.8", .version = "0.7.8",
.fingerprint = 0xd177b4a12f6b3b79,
.paths = .{""}, .paths = .{""},
.dependencies = .{ .dependencies = .{
// getsentry/sentry-native // getsentry/sentry-native
.sentry = .{ .sentry = .{
.url = "https://deps.files.ghostty.org/sentry-1220446be831adcca918167647c06c7b825849fa3fba5f22da394667974537a9c77e.tar.gz", .url = "https://deps.files.ghostty.org/sentry-1220446be831adcca918167647c06c7b825849fa3fba5f22da394667974537a9c77e.tar.gz",
.hash = "1220446be831adcca918167647c06c7b825849fa3fba5f22da394667974537a9c77e", .hash = "N-V-__8AAPlZGwBEa-gxrcypGBZ2R8Bse4JYSfo_ul8i2jlG",
}, },
.apple_sdk = .{ .path = "../apple-sdk" }, .apple_sdk = .{ .path = "../apple-sdk" },

View File

@ -1,8 +1,8 @@
const std = @import("std"); const std = @import("std");
pub fn build(b: *std.Build) !void { pub fn build(b: *std.Build) !void {
const target = b.standardTargetOptions(.{});
const optimize = b.standardOptimizeOption(.{}); const optimize = b.standardOptimizeOption(.{});
const target = b.standardTargetOptions(.{});
const lib = b.addStaticLibrary(.{ const lib = b.addStaticLibrary(.{
.name = "simdutf", .name = "simdutf",
@ -12,9 +12,9 @@ pub fn build(b: *std.Build) !void {
lib.linkLibCpp(); lib.linkLibCpp();
lib.addIncludePath(b.path("vendor")); lib.addIncludePath(b.path("vendor"));
if (target.result.isDarwin()) { if (target.result.os.tag.isDarwin()) {
const apple_sdk = @import("apple_sdk"); const apple_sdk = @import("apple_sdk");
try apple_sdk.addPaths(b, &lib.root_module); try apple_sdk.addPaths(b, lib.root_module);
} }
var flags = std.ArrayList([]const u8).init(b.allocator); var flags = std.ArrayList([]const u8).init(b.allocator);

View File

@ -1,6 +1,7 @@
.{ .{
.name = "simdutf", .name = .simdutf,
.version = "5.2.8", .version = "5.2.8",
.fingerprint = 0x7494ad640528a0d,
.paths = .{""}, .paths = .{""},
.dependencies = .{ .dependencies = .{
.apple_sdk = .{ .path = "../apple-sdk" }, .apple_sdk = .{ .path = "../apple-sdk" },

View File

@ -42,9 +42,9 @@ fn buildSpirvCross(
}); });
lib.linkLibC(); lib.linkLibC();
lib.linkLibCpp(); lib.linkLibCpp();
if (target.result.isDarwin()) { if (target.result.os.tag.isDarwin()) {
const apple_sdk = @import("apple_sdk"); const apple_sdk = @import("apple_sdk");
try apple_sdk.addPaths(b, &lib.root_module); try apple_sdk.addPaths(b, lib.root_module);
} }
var flags = std.ArrayList([]const u8).init(b.allocator); var flags = std.ArrayList([]const u8).init(b.allocator);

View File

@ -1,12 +1,13 @@
.{ .{
.name = "spirv-cross", .name = .spirv_cross,
.version = "13.1.1", .version = "13.1.1",
.fingerprint = 0x7ea1d8312b06cca,
.paths = .{""}, .paths = .{""},
.dependencies = .{ .dependencies = .{
// KhronosGroup/SPIRV-Cross // KhronosGroup/SPIRV-Cross
.spirv_cross = .{ .spirv_cross = .{
.url = "https://deps.files.ghostty.org/spirv_cross-1220fb3b5586e8be67bc3feb34cbe749cf42a60d628d2953632c2f8141302748c8da.tar.gz", .url = "https://deps.files.ghostty.org/spirv_cross-1220fb3b5586e8be67bc3feb34cbe749cf42a60d628d2953632c2f8141302748c8da.tar.gz",
.hash = "1220fb3b5586e8be67bc3feb34cbe749cf42a60d628d2953632c2f8141302748c8da", .hash = "N-V-__8AANb6pwD7O1WG6L5nvD_rNMvnSc9Cpg1ijSlTYywv",
}, },
.apple_sdk = .{ .path = "../apple-sdk" }, .apple_sdk = .{ .path = "../apple-sdk" },

View File

@ -14,9 +14,9 @@ pub fn build(b: *std.Build) !void {
lib.linkLibCpp(); lib.linkLibCpp();
lib.addIncludePath(upstream.path("")); lib.addIncludePath(upstream.path(""));
if (target.result.isDarwin()) { if (target.result.os.tag.isDarwin()) {
const apple_sdk = @import("apple_sdk"); const apple_sdk = @import("apple_sdk");
try apple_sdk.addPaths(b, &lib.root_module); try apple_sdk.addPaths(b, lib.root_module);
} }
var flags = std.ArrayList([]const u8).init(b.allocator); var flags = std.ArrayList([]const u8).init(b.allocator);

View File

@ -1,12 +1,13 @@
.{ .{
.name = "utfcpp", .name = .utfcpp,
.version = "4.0.5", .version = "4.0.5",
.fingerprint = 0xcd99aeb2334ae11a,
.paths = .{""}, .paths = .{""},
.dependencies = .{ .dependencies = .{
// nemtrif/utfcpp // nemtrif/utfcpp
.utfcpp = .{ .utfcpp = .{
.url = "https://deps.files.ghostty.org/utfcpp-1220d4d18426ca72fc2b7e56ce47273149815501d0d2395c2a98c726b31ba931e641.tar.gz", .url = "https://deps.files.ghostty.org/utfcpp-1220d4d18426ca72fc2b7e56ce47273149815501d0d2395c2a98c726b31ba931e641.tar.gz",
.hash = "1220d4d18426ca72fc2b7e56ce47273149815501d0d2395c2a98c726b31ba931e641", .hash = "N-V-__8AAHffAgDU0YQmynL8K35WzkcnMUmBVQHQ0jlcKpjH",
}, },
.apple_sdk = .{ .path = "../apple-sdk" }, .apple_sdk = .{ .path = "../apple-sdk" },

View File

@ -13,7 +13,7 @@ pub fn build(b: *std.Build) !void {
.link_libc = true, .link_libc = true,
}); });
if (target.result.isDarwin()) { if (target.result.os.tag.isDarwin()) {
const apple_sdk = @import("apple_sdk"); const apple_sdk = @import("apple_sdk");
try apple_sdk.addPaths(b, module); try apple_sdk.addPaths(b, module);
} }

View File

@ -1,17 +1,18 @@
.{ .{
.name = "wuffs", .name = .wuffs,
.version = "0.0.0", .version = "0.0.0",
.fingerprint = 0x67c0c059de921c4f,
.dependencies = .{ .dependencies = .{
// google/wuffs // google/wuffs
.wuffs = .{ .wuffs = .{
.url = "https://deps.files.ghostty.org/wuffs-122037b39d577ec2db3fd7b2130e7b69ef6cc1807d68607a7c232c958315d381b5cd.tar.gz", .url = "https://deps.files.ghostty.org/wuffs-122037b39d577ec2db3fd7b2130e7b69ef6cc1807d68607a7c232c958315d381b5cd.tar.gz",
.hash = "122037b39d577ec2db3fd7b2130e7b69ef6cc1807d68607a7c232c958315d381b5cd", .hash = "N-V-__8AAAzZywE3s51XfsLbP9eyEw57ae9swYB9aGB6fCMs",
}, },
// make-github-pseudonymous-again/pixels // make-github-pseudonymous-again/pixels
.pixels = .{ .pixels = .{
.url = "https://deps.files.ghostty.org/pixels-12207ff340169c7d40c570b4b6a97db614fe47e0d83b5801a932dcd44917424c8806.tar.gz", .url = "https://deps.files.ghostty.org/pixels-12207ff340169c7d40c570b4b6a97db614fe47e0d83b5801a932dcd44917424c8806.tar.gz",
.hash = "12207ff340169c7d40c570b4b6a97db614fe47e0d83b5801a932dcd44917424c8806", .hash = "N-V-__8AADYiAAB_80AWnH1AxXC0tql9thT-R-DYO1gBqTLc",
}, },
.apple_sdk = .{ .path = "../apple-sdk" }, .apple_sdk = .{ .path = "../apple-sdk" },

View File

@ -13,9 +13,9 @@ pub fn build(b: *std.Build) !void {
}); });
lib.linkLibC(); lib.linkLibC();
lib.addIncludePath(upstream.path("")); lib.addIncludePath(upstream.path(""));
if (target.result.isDarwin()) { if (target.result.os.tag.isDarwin()) {
const apple_sdk = @import("apple_sdk"); const apple_sdk = @import("apple_sdk");
try apple_sdk.addPaths(b, &lib.root_module); try apple_sdk.addPaths(b, lib.root_module);
} }
lib.installHeadersDirectory( lib.installHeadersDirectory(

View File

@ -1,12 +1,13 @@
.{ .{
.name = "zlib", .name = .zlib,
.version = "1.3.1", .version = "1.3.1",
.fingerprint = 0x73887d3aef823f9e,
.paths = .{""}, .paths = .{""},
.dependencies = .{ .dependencies = .{
// madler/zlib // madler/zlib
.zlib = .{ .zlib = .{
.url = "https://deps.files.ghostty.org/zlib-1220fed0c74e1019b3ee29edae2051788b080cd96e90d56836eea857b0b966742efb.tar.gz", .url = "https://deps.files.ghostty.org/zlib-1220fed0c74e1019b3ee29edae2051788b080cd96e90d56836eea857b0b966742efb.tar.gz",
.hash = "1220fed0c74e1019b3ee29edae2051788b080cd96e90d56836eea857b0b966742efb", .hash = "N-V-__8AAB0eQwD-0MdOEBmz7intriBReIsIDNlukNVoNu6o",
}, },
.apple_sdk = .{ .path = "../apple-sdk" }, .apple_sdk = .{ .path = "../apple-sdk" },

View File

@ -52,7 +52,7 @@ parts:
rm -rf $CRAFT_PART_SRC/* rm -rf $CRAFT_PART_SRC/*
if [[ -n $arch ]]; then if [[ -n $arch ]]; then
curl -LO --retry-connrefused --retry 10 https://ziglang.org/download/0.13.0/zig-linux-$arch-0.13.0.tar.xz curl -LO --retry-connrefused --retry 10 https://ziglang.org/download/0.14.0/zig-linux-$arch-0.14.0.tar.xz
else else
echo "Unsupported arch" echo "Unsupported arch"
exit 1 exit 1

View File

@ -193,11 +193,11 @@ fn startPosix(self: *Command, arena: Allocator) !void {
} }
fn startWindows(self: *Command, arena: Allocator) !void { fn startWindows(self: *Command, arena: Allocator) !void {
const application_w = try std.unicode.utf8ToUtf16LeWithNull(arena, self.path); const application_w = try std.unicode.utf8ToUtf16LeAllocZ(arena, self.path);
const cwd_w = if (self.cwd) |cwd| try std.unicode.utf8ToUtf16LeWithNull(arena, cwd) else null; const cwd_w = if (self.cwd) |cwd| try std.unicode.utf8ToUtf16LeAllocZ(arena, cwd) else null;
const command_line_w = if (self.args.len > 0) b: { const command_line_w = if (self.args.len > 0) b: {
const command_line = try windowsCreateCommandLine(arena, self.args); const command_line = try windowsCreateCommandLine(arena, self.args);
break :b try std.unicode.utf8ToUtf16LeWithNull(arena, command_line); break :b try std.unicode.utf8ToUtf16LeAllocZ(arena, command_line);
} else null; } else null;
const env_w = if (self.env) |env_map| try createWindowsEnvBlock(arena, env_map) else null; const env_w = if (self.env) |env_map| try createWindowsEnvBlock(arena, env_map) else null;
@ -392,7 +392,7 @@ pub fn expandPath(alloc: Allocator, cmd: []const u8) !?[]u8 {
const PATH = switch (builtin.os.tag) { const PATH = switch (builtin.os.tag) {
.windows => blk: { .windows => blk: {
const win_path = std.process.getenvW(std.unicode.utf8ToUtf16LeStringLiteral("PATH")) orelse return null; const win_path = std.process.getenvW(std.unicode.utf8ToUtf16LeStringLiteral("PATH")) orelse return null;
const path = try std.unicode.utf16leToUtf8Alloc(alloc, win_path); const path = try std.unicode.utf16LeToUtf8Alloc(alloc, win_path);
break :blk path; break :blk path;
}, },
else => std.posix.getenvZ("PATH") orelse return null, else => std.posix.getenvZ("PATH") orelse return null,

View File

@ -24,7 +24,7 @@ const global_state = &@import("global.zig").state;
const oni = @import("oniguruma"); const oni = @import("oniguruma");
const crash = @import("crash/main.zig"); const crash = @import("crash/main.zig");
const unicode = @import("unicode/main.zig"); const unicode = @import("unicode/main.zig");
const renderer = @import("renderer.zig"); const rendererpkg = @import("renderer.zig");
const termio = @import("termio.zig"); const termio = @import("termio.zig");
const objc = @import("objc"); const objc = @import("objc");
const imgui = @import("imgui"); const imgui = @import("imgui");
@ -36,13 +36,13 @@ const configpkg = @import("config.zig");
const input = @import("input.zig"); const input = @import("input.zig");
const App = @import("App.zig"); const App = @import("App.zig");
const internal_os = @import("os/main.zig"); const internal_os = @import("os/main.zig");
const inspector = @import("inspector/main.zig"); const inspectorpkg = @import("inspector/main.zig");
const SurfaceMouse = @import("surface_mouse.zig"); const SurfaceMouse = @import("surface_mouse.zig");
const log = std.log.scoped(.surface); const log = std.log.scoped(.surface);
// The renderer implementation to use. // The renderer implementation to use.
const Renderer = renderer.Renderer; const Renderer = rendererpkg.Renderer;
/// Minimum window size in cells. This is used to prevent the window from /// Minimum window size in cells. This is used to prevent the window from
/// being resized to a size that is too small to be useful. These defaults /// being resized to a size that is too small to be useful. These defaults
@ -70,10 +70,10 @@ font_metrics: font.Metrics,
renderer: Renderer, renderer: Renderer,
/// The render state /// The render state
renderer_state: renderer.State, renderer_state: rendererpkg.State,
/// The renderer thread manager /// The renderer thread manager
renderer_thread: renderer.Thread, renderer_thread: rendererpkg.Thread,
/// The actual thread /// The actual thread
renderer_thr: std.Thread, renderer_thr: std.Thread,
@ -113,10 +113,10 @@ io_thread: termio.Thread,
io_thr: std.Thread, io_thr: std.Thread,
/// Terminal inspector /// Terminal inspector
inspector: ?*inspector.Inspector = null, inspector: ?*inspectorpkg.Inspector = null,
/// All our sizing information. /// All our sizing information.
size: renderer.Size, size: rendererpkg.Size,
/// The configuration derived from the main config. We "derive" it so that /// The configuration derived from the main config. We "derive" it so that
/// we don't have a shared pointer hanging around that we need to worry about /// we don't have a shared pointer hanging around that we need to worry about
@ -339,7 +339,7 @@ const DerivedConfig = struct {
self.arena.deinit(); self.arena.deinit();
} }
fn scaledPadding(self: *const DerivedConfig, x_dpi: f32, y_dpi: f32) renderer.Padding { fn scaledPadding(self: *const DerivedConfig, x_dpi: f32, y_dpi: f32) rendererpkg.Padding {
const padding_top: u32 = padding_top: { const padding_top: u32 = padding_top: {
const padding_top: f32 = @floatFromInt(self.window_padding_top); const padding_top: f32 = @floatFromInt(self.window_padding_top);
break :padding_top @intFromFloat(@floor(padding_top * y_dpi / 72)); break :padding_top @intFromFloat(@floor(padding_top * y_dpi / 72));
@ -431,8 +431,8 @@ pub fn init(
); );
// Build our size struct which has all the sizes we need. // Build our size struct which has all the sizes we need.
const size: renderer.Size = size: { const size: rendererpkg.Size = size: {
var size: renderer.Size = .{ var size: rendererpkg.Size = .{
.screen = screen: { .screen = screen: {
const surface_size = try rt_surface.getSize(); const surface_size = try rt_surface.getSize();
break :screen .{ break :screen .{
@ -445,7 +445,7 @@ pub fn init(
.padding = .{}, .padding = .{},
}; };
const explicit: renderer.Padding = derived_config.scaledPadding( const explicit: rendererpkg.Padding = derived_config.scaledPadding(
x_dpi, x_dpi,
y_dpi, y_dpi,
); );
@ -475,7 +475,7 @@ pub fn init(
errdefer alloc.destroy(mutex); errdefer alloc.destroy(mutex);
// Create the renderer thread // Create the renderer thread
var render_thread = try renderer.Thread.init( var render_thread = try rendererpkg.Thread.init(
alloc, alloc,
config, config,
rt_surface, rt_surface,
@ -611,7 +611,7 @@ pub fn init(
// Start our renderer thread // Start our renderer thread
self.renderer_thr = try std.Thread.spawn( self.renderer_thr = try std.Thread.spawn(
.{}, .{},
renderer.Thread.threadMain, rendererpkg.Thread.threadMain,
.{&self.renderer_thread}, .{&self.renderer_thread},
); );
self.renderer_thr.setName("renderer") catch {}; self.renderer_thr.setName("renderer") catch {};
@ -736,9 +736,9 @@ pub fn activateInspector(self: *Surface) !void {
if (self.inspector != null) return; if (self.inspector != null) return;
// Setup the inspector // Setup the inspector
const ptr = try self.alloc.create(inspector.Inspector); const ptr = try self.alloc.create(inspectorpkg.Inspector);
errdefer self.alloc.destroy(ptr); errdefer self.alloc.destroy(ptr);
ptr.* = try inspector.Inspector.init(self); ptr.* = try inspectorpkg.Inspector.init(self);
self.inspector = ptr; self.inspector = ptr;
// Put the inspector onto the render state // Put the inspector onto the render state
@ -1091,7 +1091,7 @@ fn mouseRefreshLinks(
} }
/// Called when our renderer health state changes. /// Called when our renderer health state changes.
fn updateRendererHealth(self: *Surface, health: renderer.Health) void { fn updateRendererHealth(self: *Surface, health: rendererpkg.Health) void {
log.warn("renderer health status change status={}", .{health}); log.warn("renderer health status change status={}", .{health});
_ = self.rt_app.performAction( _ = self.rt_app.performAction(
.{ .surface = self }, .{ .surface = self },
@ -1163,7 +1163,7 @@ pub fn updateConfig(
// We need to store our configs in a heap-allocated pointer so that // We need to store our configs in a heap-allocated pointer so that
// our messages aren't huge. // our messages aren't huge.
var renderer_message = try renderer.Message.initChangeConfig(self.alloc, config); var renderer_message = try rendererpkg.Message.initChangeConfig(self.alloc, config);
errdefer renderer_message.deinit(); errdefer renderer_message.deinit();
var termio_config_ptr = try self.alloc.create(termio.Termio.DerivedConfig); var termio_config_ptr = try self.alloc.create(termio.Termio.DerivedConfig);
errdefer self.alloc.destroy(termio_config_ptr); errdefer self.alloc.destroy(termio_config_ptr);
@ -1497,7 +1497,7 @@ fn setSelection(self: *Surface, sel_: ?terminal.Selection) !void {
/// Change the cell size for the terminal grid. This can happen as /// Change the cell size for the terminal grid. This can happen as
/// a result of changing the font size at runtime. /// a result of changing the font size at runtime.
fn setCellSize(self: *Surface, size: renderer.CellSize) !void { fn setCellSize(self: *Surface, size: rendererpkg.CellSize) !void {
// Update our cell size within our size struct // Update our cell size within our size struct
self.size.cell = size; self.size.cell = size;
self.balancePaddingIfNeeded(); self.balancePaddingIfNeeded();
@ -1573,7 +1573,7 @@ pub fn sizeCallback(self: *Surface, size: apprt.SurfaceSize) !void {
crash.sentry.thread_state = self.crashThreadState(); crash.sentry.thread_state = self.crashThreadState();
defer crash.sentry.thread_state = null; defer crash.sentry.thread_state = null;
const new_screen_size: renderer.ScreenSize = .{ const new_screen_size: rendererpkg.ScreenSize = .{
.width = size.width, .width = size.width,
.height = size.height, .height = size.height,
}; };
@ -1586,7 +1586,7 @@ pub fn sizeCallback(self: *Surface, size: apprt.SurfaceSize) !void {
try self.resize(new_screen_size); try self.resize(new_screen_size);
} }
fn resize(self: *Surface, size: renderer.ScreenSize) !void { fn resize(self: *Surface, size: rendererpkg.ScreenSize) !void {
// Save our screen size // Save our screen size
self.size.screen = size; self.size.screen = size;
self.balancePaddingIfNeeded(); self.balancePaddingIfNeeded();
@ -1667,7 +1667,7 @@ pub fn preeditCallback(self: *Surface, preedit_: ?[]const u8) !void {
var it = view.iterator(); var it = view.iterator();
// Allocate the codepoints slice // Allocate the codepoints slice
const Codepoint = renderer.State.Preedit.Codepoint; const Codepoint = rendererpkg.State.Preedit.Codepoint;
var codepoints: std.ArrayListUnmanaged(Codepoint) = .{}; var codepoints: std.ArrayListUnmanaged(Codepoint) = .{};
defer codepoints.deinit(self.alloc); defer codepoints.deinit(self.alloc);
while (it.nextCodepoint()) |cp| { while (it.nextCodepoint()) |cp| {
@ -1734,7 +1734,7 @@ pub fn keyCallback(
defer crash.sentry.thread_state = null; defer crash.sentry.thread_state = null;
// Setup our inspector event if we have an inspector. // Setup our inspector event if we have an inspector.
var insp_ev: ?inspector.key.Event = if (self.inspector != null) ev: { var insp_ev: ?inspectorpkg.key.Event = if (self.inspector != null) ev: {
var copy = event; var copy = event;
copy.utf8 = ""; copy.utf8 = "";
if (event.utf8.len > 0) copy.utf8 = try self.alloc.dupe(u8, event.utf8); if (event.utf8.len > 0) copy.utf8 = try self.alloc.dupe(u8, event.utf8);
@ -1898,7 +1898,7 @@ pub fn keyCallback(
fn maybeHandleBinding( fn maybeHandleBinding(
self: *Surface, self: *Surface,
event: input.KeyEvent, event: input.KeyEvent,
insp_ev: ?*inspector.key.Event, insp_ev: ?*inspectorpkg.key.Event,
) !?InputEffect { ) !?InputEffect {
switch (event.action) { switch (event.action) {
// Release events never trigger a binding but we need to check if // Release events never trigger a binding but we need to check if
@ -2106,7 +2106,7 @@ fn endKeySequence(
fn encodeKey( fn encodeKey(
self: *Surface, self: *Surface,
event: input.KeyEvent, event: input.KeyEvent,
insp_ev: ?*inspector.key.Event, insp_ev: ?*inspectorpkg.key.Event,
) !?termio.Message.WriteReq { ) !?termio.Message.WriteReq {
// Build up our encoder. Under different modes and // Build up our encoder. Under different modes and
// inputs there are many keybindings that result in no encoding // inputs there are many keybindings that result in no encoding
@ -2749,7 +2749,7 @@ fn mouseReport(
const final: u8 = if (action == .release) 'm' else 'M'; const final: u8 = if (action == .release) 'm' else 'M';
// The position has to be adjusted to the terminal space. // The position has to be adjusted to the terminal space.
const coord: renderer.Coordinate.Terminal = (renderer.Coordinate{ const coord: rendererpkg.Coordinate.Terminal = (rendererpkg.Coordinate{
.surface = .{ .surface = .{
.x = pos.x, .x = pos.x,
.y = pos.y, .y = pos.y,
@ -3819,7 +3819,7 @@ pub fn colorSchemeCallback(self: *Surface, scheme: apprt.ColorScheme) !void {
pub fn posToViewport(self: Surface, xpos: f64, ypos: f64) terminal.point.Coordinate { pub fn posToViewport(self: Surface, xpos: f64, ypos: f64) terminal.point.Coordinate {
// Get our grid cell // Get our grid cell
const coord: renderer.Coordinate = .{ .surface = .{ .x = xpos, .y = ypos } }; const coord: rendererpkg.Coordinate = .{ .surface = .{ .x = xpos, .y = ypos } };
const grid = coord.convert(.grid, self.size).grid; const grid = coord.convert(.grid, self.size).grid;
return .{ .x = grid.x, .y = grid.y }; return .{ .x = grid.x, .y = grid.y };
} }

View File

@ -291,7 +291,7 @@ pub const Action = union(Key) {
/// Sync with: ghostty_action_u /// Sync with: ghostty_action_u
pub const CValue = cvalue: { pub const CValue = cvalue: {
const key_fields = @typeInfo(Key).Enum.fields; const key_fields = @typeInfo(Key).@"enum".fields;
var union_fields: [key_fields.len]std.builtin.Type.UnionField = undefined; var union_fields: [key_fields.len]std.builtin.Type.UnionField = undefined;
for (key_fields, 0..) |field, i| { for (key_fields, 0..) |field, i| {
const action = @unionInit(Action, field.name, undefined); const action = @unionInit(Action, field.name, undefined);
@ -309,7 +309,7 @@ pub const Action = union(Key) {
}; };
} }
break :cvalue @Type(.{ .Union = .{ break :cvalue @Type(.{ .@"union" = .{
.layout = .@"extern", .layout = .@"extern",
.tag_type = Key, .tag_type = Key,
.fields = &union_fields, .fields = &union_fields,
@ -325,7 +325,7 @@ pub const Action = union(Key) {
/// Returns the value type for the given key. /// Returns the value type for the given key.
pub fn Value(comptime key: Key) type { pub fn Value(comptime key: Key) type {
inline for (@typeInfo(Action).Union.fields) |field| { inline for (@typeInfo(Action).@"union".fields) |field| {
const field_key = @field(Key, field.name); const field_key = @field(Key, field.name);
if (field_key == key) return field.type; if (field_key == key) return field.type;
} }

View File

@ -165,7 +165,7 @@ pub const App = struct {
// then we strip the alt modifier from the mods for translation. // then we strip the alt modifier from the mods for translation.
const translate_mods = translate_mods: { const translate_mods = translate_mods: {
var translate_mods = mods; var translate_mods = mods;
if ((comptime builtin.target.isDarwin()) and translate_mods.alt) { if ((comptime builtin.target.os.tag.isDarwin()) and translate_mods.alt) {
// Note: the keyboardLayout() function is not super cheap // Note: the keyboardLayout() function is not super cheap
// so we only want to run it if alt is already pressed hence // so we only want to run it if alt is already pressed hence
// the above condition. // the above condition.
@ -184,7 +184,7 @@ pub const App = struct {
// We strip super on macOS because its not used for translation // We strip super on macOS because its not used for translation
// it results in a bad translation. // it results in a bad translation.
if (comptime builtin.target.isDarwin()) { if (comptime builtin.target.os.tag.isDarwin()) {
translate_mods.super = false; translate_mods.super = false;
} }
@ -538,12 +538,12 @@ pub const Platform = union(PlatformTag) {
// If our build target for libghostty is not darwin then we do // If our build target for libghostty is not darwin then we do
// not include macos support at all. // not include macos support at all.
pub const MacOS = if (builtin.target.isDarwin()) struct { pub const MacOS = if (builtin.target.os.tag.isDarwin()) struct {
/// The view to render the surface on. /// The view to render the surface on.
nsview: objc.Object, nsview: objc.Object,
} else void; } else void;
pub const IOS = if (builtin.target.isDarwin()) struct { pub const IOS = if (builtin.target.os.tag.isDarwin()) struct {
/// The view to render the surface on. /// The view to render the surface on.
uiview: objc.Object, uiview: objc.Object,
} else void; } else void;
@ -1025,7 +1025,7 @@ pub const Surface = struct {
var env = try internal_os.getEnvMap(alloc); var env = try internal_os.getEnvMap(alloc);
errdefer env.deinit(); errdefer env.deinit();
if (comptime builtin.target.isDarwin()) { if (comptime builtin.target.os.tag.isDarwin()) {
if (env.get("__XCODE_BUILT_PRODUCTS_DIR_PATHS") != null) { if (env.get("__XCODE_BUILT_PRODUCTS_DIR_PATHS") != null) {
env.remove("__XCODE_BUILT_PRODUCTS_DIR_PATHS"); env.remove("__XCODE_BUILT_PRODUCTS_DIR_PATHS");
env.remove("__XPC_DYLD_LIBRARY_PATH"); env.remove("__XPC_DYLD_LIBRARY_PATH");
@ -1078,7 +1078,7 @@ pub const Inspector = struct {
pub fn deinit(self: Backend) void { pub fn deinit(self: Backend) void {
switch (self) { switch (self) {
.metal => if (builtin.target.isDarwin()) cimgui.ImGui_ImplMetal_Shutdown(), .metal => if (builtin.target.os.tag.isDarwin()) cimgui.ImGui_ImplMetal_Shutdown(),
} }
} }
}; };
@ -1351,7 +1351,7 @@ pub const CAPI = struct {
// Reference the conditional exports based on target platform // Reference the conditional exports based on target platform
// so they're included in the C API. // so they're included in the C API.
comptime { comptime {
if (builtin.target.isDarwin()) { if (builtin.target.os.tag.isDarwin()) {
_ = Darwin; _ = Darwin;
} }
} }

View File

@ -25,10 +25,14 @@ const Config = @import("../config.zig").Config;
// Get native API access on certain platforms so we can do more customization. // Get native API access on certain platforms so we can do more customization.
const glfwNative = glfw.Native(.{ const glfwNative = glfw.Native(.{
.cocoa = builtin.target.isDarwin(), .cocoa = builtin.target.os.tag.isDarwin(),
.x11 = builtin.os.tag == .linux, .x11 = builtin.os.tag == .linux,
}); });
/// True if darwin-specific logic is enabled
const darwin_enabled = builtin.target.os.tag.isDarwin() and
build_config.artifact == .exe;
const log = std.log.scoped(.glfw); const log = std.log.scoped(.glfw);
pub const App = struct { pub const App = struct {
@ -40,12 +44,12 @@ pub const App = struct {
quit: bool = false, quit: bool = false,
/// Mac-specific state. /// Mac-specific state.
darwin: if (Darwin.enabled) Darwin else void, darwin: if (darwin_enabled) Darwin else void,
pub const Options = struct {}; pub const Options = struct {};
pub fn init(core_app: *CoreApp, _: Options) !App { pub fn init(core_app: *CoreApp, _: Options) !App {
if (comptime builtin.target.isDarwin()) { if (comptime builtin.target.os.tag.isDarwin()) {
log.warn("WARNING WARNING WARNING: GLFW ON MAC HAS BUGS.", .{}); log.warn("WARNING WARNING WARNING: GLFW ON MAC HAS BUGS.", .{});
log.warn("You should use the AppKit-based app instead. The official download", .{}); log.warn("You should use the AppKit-based app instead. The official download", .{});
log.warn("is properly built and available from GitHub. If you're building from", .{}); log.warn("is properly built and available from GitHub. If you're building from", .{});
@ -66,8 +70,8 @@ pub const App = struct {
glfw.setErrorCallback(glfwErrorCallback); glfw.setErrorCallback(glfwErrorCallback);
// Mac-specific state. For example, on Mac we enable window tabbing. // Mac-specific state. For example, on Mac we enable window tabbing.
var darwin = if (Darwin.enabled) try Darwin.init() else {}; var darwin = if (darwin_enabled) try Darwin.init() else {};
errdefer if (Darwin.enabled) darwin.deinit(); errdefer if (darwin_enabled) darwin.deinit();
// Load our configuration // Load our configuration
var config = try Config.load(core_app.alloc); var config = try Config.load(core_app.alloc);
@ -338,7 +342,7 @@ pub const App = struct {
/// Create a new tab in the parent surface. /// Create a new tab in the parent surface.
fn newTab(self: *App, parent_: ?*CoreSurface) !void { fn newTab(self: *App, parent_: ?*CoreSurface) !void {
if (!Darwin.enabled) { if (comptime !darwin_enabled) {
log.warn("tabbing is not supported on this platform", .{}); log.warn("tabbing is not supported on this platform", .{});
return; return;
} }
@ -439,8 +443,6 @@ pub const App = struct {
/// Mac and the artifact is a standalone exe. We don't target libs because /// Mac and the artifact is a standalone exe. We don't target libs because
/// the embedded API doesn't do windowing. /// the embedded API doesn't do windowing.
const Darwin = struct { const Darwin = struct {
const enabled = builtin.target.isDarwin() and build_config.artifact == .exe;
tabbing_id: *macos.foundation.String, tabbing_id: *macos.foundation.String,
pub fn init() !Darwin { pub fn init() !Darwin {
@ -554,7 +556,7 @@ pub const Surface = struct {
} }
// On Mac, enable window tabbing // On Mac, enable window tabbing
if (App.Darwin.enabled) { if (comptime darwin_enabled) {
const NSWindowTabbingMode = enum(usize) { automatic = 0, preferred = 1, disallowed = 2 }; const NSWindowTabbingMode = enum(usize) { automatic = 0, preferred = 1, disallowed = 2 };
const nswindow = objc.Object.fromId(glfwNative.getCocoaWindow(win).?); const nswindow = objc.Object.fromId(glfwNative.getCocoaWindow(win).?);
@ -630,7 +632,7 @@ pub const Surface = struct {
// Clean up our core surface so that all the rendering and IO stop. // Clean up our core surface so that all the rendering and IO stop.
self.core_surface.deinit(); self.core_surface.deinit();
if (App.Darwin.enabled) { if (comptime darwin_enabled) {
const nswindow = objc.Object.fromId(glfwNative.getCocoaWindow(self.window).?); const nswindow = objc.Object.fromId(glfwNative.getCocoaWindow(self.window).?);
const tabgroup = nswindow.getProperty(objc.Object, "tabGroup"); const tabgroup = nswindow.getProperty(objc.Object, "tabGroup");
const windows = tabgroup.getProperty(objc.Object, "windows"); const windows = tabgroup.getProperty(objc.Object, "windows");
@ -767,7 +769,7 @@ pub const Surface = struct {
/// Set the shape of the cursor. /// Set the shape of the cursor.
fn setMouseShape(self: *Surface, shape: terminal.MouseShape) !void { fn setMouseShape(self: *Surface, shape: terminal.MouseShape) !void {
if ((comptime builtin.target.isDarwin()) and if ((comptime builtin.target.os.tag.isDarwin()) and
!internal_os.macos.isAtLeastVersion(13, 0, 0)) !internal_os.macos.isAtLeastVersion(13, 0, 0))
{ {
// We only set our cursor if we're NOT on Mac, or if we are then the // We only set our cursor if we're NOT on Mac, or if we are then the
@ -925,7 +927,7 @@ pub const Surface = struct {
// On macOS we need to also disable some modifiers because // On macOS we need to also disable some modifiers because
// alt+key consumes the alt. // alt+key consumes the alt.
if (comptime builtin.target.isDarwin()) { if (comptime builtin.target.os.tag.isDarwin()) {
// For GLFW, we say we always consume alt because // For GLFW, we say we always consume alt because
// GLFW doesn't have a way to disable the alt key. // GLFW doesn't have a way to disable the alt key.
key_event.consumed_mods.alt = true; key_event.consumed_mods.alt = true;

View File

@ -43,7 +43,7 @@ const c = @import("c.zig").c;
const version = @import("version.zig"); const version = @import("version.zig");
const inspector = @import("inspector.zig"); const inspector = @import("inspector.zig");
const key = @import("key.zig"); const key = @import("key.zig");
const winproto = @import("winproto.zig"); const winprotopkg = @import("winproto.zig");
const testing = std.testing; const testing = std.testing;
const adwaita = @import("adwaita.zig"); const adwaita = @import("adwaita.zig");
@ -58,7 +58,7 @@ app: *c.GtkApplication,
ctx: *c.GMainContext, ctx: *c.GMainContext,
/// State and logic for the underlying windowing protocol. /// State and logic for the underlying windowing protocol.
winproto: winproto.App, winproto: winprotopkg.App,
/// True if the app was launched with single instance mode. /// True if the app was launched with single instance mode.
single_instance: bool, single_instance: bool,
@ -226,7 +226,7 @@ pub fn init(core_app: *CoreApp, opts: Options) !App {
var fmt = std.io.fixedBufferStream(&buf); var fmt = std.io.fixedBufferStream(&buf);
const writer = fmt.writer(); const writer = fmt.writer();
var first: bool = true; var first: bool = true;
inline for (@typeInfo(@TypeOf(gdk_debug)).Struct.fields) |field| { inline for (@typeInfo(@TypeOf(gdk_debug)).@"struct".fields) |field| {
if (@field(gdk_debug, field.name)) { if (@field(gdk_debug, field.name)) {
if (!first) try writer.writeAll(","); if (!first) try writer.writeAll(",");
try writer.writeAll(field.name); try writer.writeAll(field.name);
@ -244,7 +244,7 @@ pub fn init(core_app: *CoreApp, opts: Options) !App {
var fmt = std.io.fixedBufferStream(&buf); var fmt = std.io.fixedBufferStream(&buf);
const writer = fmt.writer(); const writer = fmt.writer();
var first: bool = true; var first: bool = true;
inline for (@typeInfo(@TypeOf(gdk_disable)).Struct.fields) |field| { inline for (@typeInfo(@TypeOf(gdk_disable)).@"struct".fields) |field| {
if (@field(gdk_disable, field.name)) { if (@field(gdk_disable, field.name)) {
if (!first) try writer.writeAll(","); if (!first) try writer.writeAll(",");
try writer.writeAll(field.name); try writer.writeAll(field.name);
@ -401,7 +401,7 @@ pub fn init(core_app: *CoreApp, opts: Options) !App {
} }
// Setup our windowing protocol logic // Setup our windowing protocol logic
var winproto_app = try winproto.App.init( var winproto_app = try winprotopkg.App.init(
core_app.alloc, core_app.alloc,
display, display,
app_id, app_id,

View File

@ -32,7 +32,7 @@ const ClipboardConfirmationWindow = @import("ClipboardConfirmationWindow.zig");
const ResizeOverlay = @import("ResizeOverlay.zig"); const ResizeOverlay = @import("ResizeOverlay.zig");
const URLWidget = @import("URLWidget.zig"); const URLWidget = @import("URLWidget.zig");
const CloseDialog = @import("CloseDialog.zig"); const CloseDialog = @import("CloseDialog.zig");
const inspector = @import("inspector.zig"); const inspectorpkg = @import("inspector.zig");
const gtk_key = @import("key.zig"); const gtk_key = @import("key.zig");
const c = @import("c.zig").c; const c = @import("c.zig").c;
const Builder = @import("Builder.zig"); const Builder = @import("Builder.zig");
@ -290,7 +290,7 @@ size: apprt.SurfaceSize,
cursor_pos: apprt.CursorPos, cursor_pos: apprt.CursorPos,
/// Inspector state. /// Inspector state.
inspector: ?*inspector.Inspector = null, inspector: ?*inspectorpkg.Inspector = null,
/// Key input states. See gtkKeyPressed for detailed descriptions. /// Key input states. See gtkKeyPressed for detailed descriptions.
in_keyevent: IMKeyEvent = .false, in_keyevent: IMKeyEvent = .false,
@ -703,7 +703,7 @@ pub fn controlInspector(
// If we already have an inspector, we don't need to show anything. // If we already have an inspector, we don't need to show anything.
if (self.inspector != null) return; if (self.inspector != null) return;
self.inspector = inspector.Inspector.create( self.inspector = inspectorpkg.Inspector.create(
self, self,
.{ .window = {} }, .{ .window = {} },
) catch |err| { ) catch |err| {

View File

@ -34,7 +34,7 @@ const TabView = @import("TabView.zig");
const HeaderBar = @import("headerbar.zig"); const HeaderBar = @import("headerbar.zig");
const CloseDialog = @import("CloseDialog.zig"); const CloseDialog = @import("CloseDialog.zig");
const version = @import("version.zig"); const version = @import("version.zig");
const winproto = @import("winproto.zig"); const winprotopkg = @import("winproto.zig");
const log = std.log.scoped(.gtk); const log = std.log.scoped(.gtk);
@ -69,7 +69,7 @@ toast_overlay: *c.GtkWidget,
adw_tab_overview_focus_timer: ?c.guint = null, adw_tab_overview_focus_timer: ?c.guint = null,
/// State and logic for windowing protocol for a window. /// State and logic for windowing protocol for a window.
winproto: winproto.Window, winproto: winprotopkg.Window,
pub const DerivedConfig = struct { pub const DerivedConfig = struct {
background_opacity: f64, background_opacity: f64,
@ -693,7 +693,7 @@ fn gtkRealize(_: *c.GtkWindow, ud: ?*anyopaque) callconv(.C) bool {
const self = userdataSelf(ud.?); const self = userdataSelf(ud.?);
// Initialize our window protocol logic // Initialize our window protocol logic
if (winproto.Window.init( if (winprotopkg.Window.init(
self.app.core_app.alloc, self.app.core_app.alloc,
&self.app.winproto, &self.app.winproto,
self, self,

View File

@ -30,7 +30,7 @@ pub const App = union(Protocol) {
app_id: [:0]const u8, app_id: [:0]const u8,
config: *const Config, config: *const Config,
) !App { ) !App {
inline for (@typeInfo(App).Union.fields) |field| { inline for (@typeInfo(App).@"union".fields) |field| {
if (try field.type.init( if (try field.type.init(
alloc, alloc,
gdk_display, gdk_display,
@ -96,7 +96,7 @@ pub const Window = union(Protocol) {
) !Window { ) !Window {
return switch (app.*) { return switch (app.*) {
inline else => |*v, tag| { inline else => |*v, tag| {
inline for (@typeInfo(Window).Union.fields) |field| { inline for (@typeInfo(Window).@"union".fields) |field| {
if (comptime std.mem.eql( if (comptime std.mem.eql(
u8, u8,
field.name, field.name,

View File

@ -342,7 +342,7 @@ pub const Window = struct {
&actual_format_return, &actual_format_return,
&nitems_return, &nitems_return,
&bytes_after_return, &bytes_after_return,
&prop_return, @ptrCast(&prop_return),
); );
if (code != c.Success) return error.RequestFailed; if (code != c.Success) return error.RequestFailed;

View File

@ -7,7 +7,7 @@ const builtin = @import("builtin");
const apprt = @import("../apprt.zig"); const apprt = @import("../apprt.zig");
const font = @import("../font/main.zig"); const font = @import("../font/main.zig");
const renderer = @import("../renderer.zig"); const rendererpkg = @import("../renderer.zig");
const Command = @import("../Command.zig"); const Command = @import("../Command.zig");
const WasmTarget = @import("../os/wasm/target.zig").Target; const WasmTarget = @import("../os/wasm/target.zig").Target;
@ -28,7 +28,7 @@ wasm_target: WasmTarget,
/// Comptime interfaces /// Comptime interfaces
app_runtime: apprt.Runtime = .none, app_runtime: apprt.Runtime = .none,
renderer: renderer.Impl = .opengl, renderer: rendererpkg.Impl = .opengl,
font_backend: font.Backend = .freetype, font_backend: font.Backend = .freetype,
/// Feature flags /// Feature flags
@ -69,7 +69,9 @@ pub fn init(b: *std.Build) !Config {
// If we're building for macOS and we're on macOS, we need to // If we're building for macOS and we're on macOS, we need to
// use a generic target to workaround compilation issues. // use a generic target to workaround compilation issues.
if (result.result.os.tag == .macos and builtin.target.isDarwin()) { if (result.result.os.tag == .macos and
builtin.target.os.tag.isDarwin())
{
result = genericMacOSTarget(b, null); result = genericMacOSTarget(b, null);
} }
@ -122,10 +124,10 @@ pub fn init(b: *std.Build) !Config {
) orelse apprt.Runtime.default(target.result); ) orelse apprt.Runtime.default(target.result);
config.renderer = b.option( config.renderer = b.option(
renderer.Impl, rendererpkg.Impl,
"renderer", "renderer",
"The app runtime to use. Not all values supported on all platforms.", "The app runtime to use. Not all values supported on all platforms.",
) orelse renderer.Impl.default(target.result, wasm_target); ) orelse rendererpkg.Impl.default(target.result, wasm_target);
//--------------------------------------------------------------- //---------------------------------------------------------------
// Feature Flags // Feature Flags
@ -331,7 +333,7 @@ pub fn init(b: *std.Build) !Config {
bool, bool,
"emit-xcframework", "emit-xcframework",
"Build and install the xcframework for the macOS library.", "Build and install the xcframework for the macOS library.",
) orelse builtin.target.isDarwin() and ) orelse builtin.target.os.tag.isDarwin() and
target.result.os.tag == .macos and target.result.os.tag == .macos and
config.app_runtime == .none and config.app_runtime == .none and
(!config.emit_bench and (!config.emit_bench and
@ -366,7 +368,7 @@ pub fn init(b: *std.Build) !Config {
.{ .{
// If we're not on darwin we want to use whatever the // If we're not on darwin we want to use whatever the
// default is via the system package mode // default is via the system package mode
.default = if (target.result.isDarwin()) false else null, .default = if (target.result.os.tag.isDarwin()) false else null,
}, },
); );
} }
@ -395,7 +397,7 @@ pub fn addOptions(self: *const Config, step: *std.Build.Step.Options) !void {
step.addOption(bool, "sentry", self.sentry); step.addOption(bool, "sentry", self.sentry);
step.addOption(apprt.Runtime, "app_runtime", self.app_runtime); step.addOption(apprt.Runtime, "app_runtime", self.app_runtime);
step.addOption(font.Backend, "font_backend", self.font_backend); step.addOption(font.Backend, "font_backend", self.font_backend);
step.addOption(renderer.Impl, "renderer", self.renderer); step.addOption(rendererpkg.Impl, "renderer", self.renderer);
step.addOption(ExeEntrypoint, "exe_entrypoint", self.exe_entrypoint); step.addOption(ExeEntrypoint, "exe_entrypoint", self.exe_entrypoint);
step.addOption(WasmTarget, "wasm_target", self.wasm_target); step.addOption(WasmTarget, "wasm_target", self.wasm_target);
step.addOption(bool, "wasm_shared", self.wasm_shared); step.addOption(bool, "wasm_shared", self.wasm_shared);
@ -436,7 +438,7 @@ pub fn fromOptions() Config {
.flatpak = options.flatpak, .flatpak = options.flatpak,
.app_runtime = std.meta.stringToEnum(apprt.Runtime, @tagName(options.app_runtime)).?, .app_runtime = std.meta.stringToEnum(apprt.Runtime, @tagName(options.app_runtime)).?,
.font_backend = std.meta.stringToEnum(font.Backend, @tagName(options.font_backend)).?, .font_backend = std.meta.stringToEnum(font.Backend, @tagName(options.font_backend)).?,
.renderer = std.meta.stringToEnum(renderer.Impl, @tagName(options.renderer)).?, .renderer = std.meta.stringToEnum(rendererpkg.Impl, @tagName(options.renderer)).?,
.exe_entrypoint = std.meta.stringToEnum(ExeEntrypoint, @tagName(options.exe_entrypoint)).?, .exe_entrypoint = std.meta.stringToEnum(ExeEntrypoint, @tagName(options.exe_entrypoint)).?,
.wasm_target = std.meta.stringToEnum(WasmTarget, @tagName(options.wasm_target)).?, .wasm_target = std.meta.stringToEnum(WasmTarget, @tagName(options.wasm_target)).?,
.wasm_shared = options.wasm_shared, .wasm_shared = options.wasm_shared,

View File

@ -27,7 +27,7 @@ pub fn init(
const generate_markdown = b.addExecutable(.{ const generate_markdown = b.addExecutable(.{
.name = "mdgen_" ++ manpage.name ++ "_" ++ manpage.section, .name = "mdgen_" ++ manpage.name ++ "_" ++ manpage.section,
.root_source_file = b.path("src/main.zig"), .root_source_file = b.path("src/main.zig"),
.target = b.host, .target = b.graph.host,
}); });
deps.help_strings.addImport(generate_markdown); deps.help_strings.addImport(generate_markdown);

View File

@ -99,7 +99,7 @@ fn checkNixShell(exe: *std.Build.Step.Compile, cfg: *const Config) !void {
\\ \\
\\ nix develop -c zig build \\ nix develop -c zig build
\\ \\
++ ++
"\x1b[0m", "\x1b[0m",
.{}, .{},
); );

View File

@ -16,7 +16,7 @@ pub fn init(b: *std.Build) !GhosttyFrameData {
const exe = b.addExecutable(.{ const exe = b.addExecutable(.{
.name = "framegen", .name = "framegen",
.root_source_file = b.path("src/build/framegen/main.zig"), .root_source_file = b.path("src/build/framegen/main.zig"),
.target = b.host, .target = b.graph.host,
}); });
const run = b.addRunArtifact(exe); const run = b.addRunArtifact(exe);

View File

@ -97,8 +97,8 @@ fn createUpdateStep(b: *std.Build) !*std.Build.Step {
} }
} }
const wf = b.addWriteFiles(); const usf = b.addUpdateSourceFiles();
wf.addCopyFileToSource( usf.addCopyFileToSource(
xgettext.captureStdOut(), xgettext.captureStdOut(),
"po/" ++ domain ++ ".pot", "po/" ++ domain ++ ".pot",
); );
@ -107,8 +107,8 @@ fn createUpdateStep(b: *std.Build) !*std.Build.Step {
const msgmerge = b.addSystemCommand(&.{ "msgmerge", "-q" }); const msgmerge = b.addSystemCommand(&.{ "msgmerge", "-q" });
msgmerge.addFileArg(b.path("po/" ++ locale ++ ".po")); msgmerge.addFileArg(b.path("po/" ++ locale ++ ".po"));
msgmerge.addFileArg(xgettext.captureStdOut()); msgmerge.addFileArg(xgettext.captureStdOut());
wf.addCopyFileToSource(msgmerge.captureStdOut(), "po/" ++ locale ++ ".po"); usf.addCopyFileToSource(msgmerge.captureStdOut(), "po/" ++ locale ++ ".po");
} }
return &wf.step; return &usf.step;
} }

View File

@ -22,15 +22,19 @@ pub fn initStatic(
.target = deps.config.target, .target = deps.config.target,
.optimize = deps.config.optimize, .optimize = deps.config.optimize,
}); });
lib.bundle_compiler_rt = true;
lib.linkLibC(); lib.linkLibC();
// These must be bundled since we're compiling into a static lib.
// Otherwise, you get undefined symbol errors.
lib.bundle_compiler_rt = true;
lib.bundle_ubsan_rt = true;
// Add our dependencies. Get the list of all static deps so we can // Add our dependencies. Get the list of all static deps so we can
// build a combined archive if necessary. // build a combined archive if necessary.
var lib_list = try deps.add(lib); var lib_list = try deps.add(lib);
try lib_list.append(lib.getEmittedBin()); try lib_list.append(lib.getEmittedBin());
if (!deps.config.target.result.isDarwin()) return .{ if (!deps.config.target.result.os.tag.isDarwin()) return .{
.step = &lib.step, .step = &lib.step,
.output = lib.getEmittedBin(), .output = lib.getEmittedBin(),
}; };

View File

@ -19,7 +19,7 @@ pub fn init(
const webgen_config = b.addExecutable(.{ const webgen_config = b.addExecutable(.{
.name = "webgen_config", .name = "webgen_config",
.root_source_file = b.path("src/main.zig"), .root_source_file = b.path("src/main.zig"),
.target = b.host, .target = b.graph.host,
}); });
deps.help_strings.addImport(webgen_config); deps.help_strings.addImport(webgen_config);
@ -48,7 +48,7 @@ pub fn init(
const webgen_actions = b.addExecutable(.{ const webgen_actions = b.addExecutable(.{
.name = "webgen_actions", .name = "webgen_actions",
.root_source_file = b.path("src/main.zig"), .root_source_file = b.path("src/main.zig"),
.target = b.host, .target = b.graph.host,
}); });
deps.help_strings.addImport(webgen_actions); deps.help_strings.addImport(webgen_actions);
@ -77,7 +77,7 @@ pub fn init(
const webgen_commands = b.addExecutable(.{ const webgen_commands = b.addExecutable(.{
.name = "webgen_commands", .name = "webgen_commands",
.root_source_file = b.path("src/main.zig"), .root_source_file = b.path("src/main.zig"),
.target = b.host, .target = b.graph.host,
}); });
deps.help_strings.addImport(webgen_commands); deps.help_strings.addImport(webgen_commands);

View File

@ -32,6 +32,13 @@ pub fn init(b: *std.Build, deps: *const SharedDeps) !GhosttyXCFramework {
.os_tag = .ios, .os_tag = .ios,
.os_version_min = Config.osVersionMin(.ios), .os_version_min = Config.osVersionMin(.ios),
.abi = .simulator, .abi = .simulator,
// We force the Apple CPU model because the simulator
// doesn't support the generic CPU model as of Zig 0.14 due
// to missing "altnzcv" instructions, which is false. This
// surely can't be right but we can fix this if/when we get
// back to running simulator builds.
.cpu_model = .{ .explicit = &std.Target.aarch64.cpu.apple_a17 },
}), }),
)); ));

View File

@ -13,7 +13,7 @@ pub fn init(b: *std.Build, cfg: *const Config) !HelpStrings {
const exe = b.addExecutable(.{ const exe = b.addExecutable(.{
.name = "helpgen", .name = "helpgen",
.root_source_file = b.path("src/helpgen.zig"), .root_source_file = b.path("src/helpgen.zig"),
.target = b.host, .target = b.graph.host,
}); });
const help_config = config: { const help_config = config: {

View File

@ -277,7 +277,10 @@ pub fn add(
// on x86_64. // on x86_64.
if (step.rootModuleTarget().os.tag == .linux) { if (step.rootModuleTarget().os.tag == .linux) {
const triple = try step.rootModuleTarget().linuxTriple(b.allocator); const triple = try step.rootModuleTarget().linuxTriple(b.allocator);
step.addLibraryPath(.{ .cwd_relative = b.fmt("/usr/lib/{s}", .{triple}) }); const path = b.fmt("/usr/lib/{s}", .{triple});
if (std.fs.accessAbsolute(path, .{})) {
step.addLibraryPath(.{ .cwd_relative = path });
} else |_| {}
} }
// C files // C files
@ -320,8 +323,8 @@ pub fn add(
// We always require the system SDK so that our system headers are available. // We always require the system SDK so that our system headers are available.
// This makes things like `os/log.h` available for cross-compiling. // This makes things like `os/log.h` available for cross-compiling.
if (step.rootModuleTarget().isDarwin()) { if (step.rootModuleTarget().os.tag.isDarwin()) {
try @import("apple_sdk").addPaths(b, &step.root_module); try @import("apple_sdk").addPaths(b, step.root_module);
const metallib = self.metallib.?; const metallib = self.metallib.?;
metallib.output.addStepDependencies(&step.step); metallib.output.addStepDependencies(&step.step);
@ -363,7 +366,7 @@ pub fn add(
}).module("zf")); }).module("zf"));
// Mac Stuff // Mac Stuff
if (step.rootModuleTarget().isDarwin()) { if (step.rootModuleTarget().os.tag.isDarwin()) {
const objc_dep = b.dependency("zig_objc", .{ const objc_dep = b.dependency("zig_objc", .{
.target = target, .target = target,
.optimize = optimize, .optimize = optimize,
@ -470,7 +473,7 @@ pub fn add(
} }
if (self.config.wayland) { if (self.config.wayland) {
const scanner = Scanner.create(b.dependency("zig_wayland", .{}), .{ const scanner = Scanner.create(b.dependency("zig_wayland", .{}).builder, .{
.wayland_xml = b.dependency("wayland", .{}).path("protocol/wayland.xml"), .wayland_xml = b.dependency("wayland", .{}).path("protocol/wayland.xml"),
.wayland_protocols = b.dependency("wayland_protocols", .{}).path(""), .wayland_protocols = b.dependency("wayland_protocols", .{}).path(""),
}); });
@ -523,7 +526,7 @@ pub fn add(
const generate_gresource_xml = b.addExecutable(.{ const generate_gresource_xml = b.addExecutable(.{
.name = "generate_gresource_xml", .name = "generate_gresource_xml",
.root_source_file = b.path("src/apprt/gtk/gresource.zig"), .root_source_file = b.path("src/apprt/gtk/gresource.zig"),
.target = b.host, .target = b.graph.host,
}); });
const generate = b.addRunArtifact(generate_gresource_xml); const generate = b.addRunArtifact(generate_gresource_xml);
@ -531,7 +534,7 @@ pub fn add(
const gtk_blueprint_compiler = b.addExecutable(.{ const gtk_blueprint_compiler = b.addExecutable(.{
.name = "gtk_blueprint_compiler", .name = "gtk_blueprint_compiler",
.root_source_file = b.path("src/apprt/gtk/blueprint_compiler.zig"), .root_source_file = b.path("src/apprt/gtk/blueprint_compiler.zig"),
.target = b.host, .target = b.graph.host,
}); });
gtk_blueprint_compiler.linkSystemLibrary2("gtk4", dynamic_link_opts); gtk_blueprint_compiler.linkSystemLibrary2("gtk4", dynamic_link_opts);
gtk_blueprint_compiler.linkSystemLibrary2("libadwaita-1", dynamic_link_opts); gtk_blueprint_compiler.linkSystemLibrary2("libadwaita-1", dynamic_link_opts);
@ -569,7 +572,7 @@ pub fn add(
const gtk_builder_check = b.addExecutable(.{ const gtk_builder_check = b.addExecutable(.{
.name = "gtk_builder_check", .name = "gtk_builder_check",
.root_source_file = b.path("src/apprt/gtk/builder_check.zig"), .root_source_file = b.path("src/apprt/gtk/builder_check.zig"),
.target = b.host, .target = b.graph.host,
}); });
gtk_builder_check.root_module.addOptions("build_options", self.options); gtk_builder_check.root_module.addOptions("build_options", self.options);
gtk_builder_check.root_module.addImport("gtk", gobject.module("gtk4")); gtk_builder_check.root_module.addImport("gtk", gobject.module("gtk4"));
@ -593,7 +596,6 @@ pub fn add(
}); });
const ghostty_resources_c = generate_resources_c.addOutputFileArg("ghostty_resources.c"); const ghostty_resources_c = generate_resources_c.addOutputFileArg("ghostty_resources.c");
generate_resources_c.addFileArg(gresource_xml); generate_resources_c.addFileArg(gresource_xml);
generate_resources_c.extra_file_dependencies = &gresource.dependencies;
step.addCSourceFile(.{ .file = ghostty_resources_c, .flags = &.{} }); step.addCSourceFile(.{ .file = ghostty_resources_c, .flags = &.{} });
const generate_resources_h = b.addSystemCommand(&.{ const generate_resources_h = b.addSystemCommand(&.{
@ -605,7 +607,6 @@ pub fn add(
}); });
const ghostty_resources_h = generate_resources_h.addOutputFileArg("ghostty_resources.h"); const ghostty_resources_h = generate_resources_h.addOutputFileArg("ghostty_resources.h");
generate_resources_h.addFileArg(gresource_xml); generate_resources_h.addFileArg(gresource_xml);
generate_resources_h.extra_file_dependencies = &gresource.dependencies;
step.addIncludePath(ghostty_resources_h.dirname()); step.addIncludePath(ghostty_resources_h.dirname());
} }
}, },

View File

@ -13,11 +13,11 @@ pub fn init(b: *std.Build) !UnicodeTables {
const exe = b.addExecutable(.{ const exe = b.addExecutable(.{
.name = "unigen", .name = "unigen",
.root_source_file = b.path("src/unicode/props.zig"), .root_source_file = b.path("src/unicode/props.zig"),
.target = b.host, .target = b.graph.host,
}); });
const ziglyph_dep = b.dependency("ziglyph", .{ const ziglyph_dep = b.dependency("ziglyph", .{
.target = b.host, .target = b.graph.host,
}); });
exe.root_module.addImport("ziglyph", ziglyph_dep.module("ziglyph")); exe.root_module.addImport("ziglyph", ziglyph_dep.module("ziglyph"));

View File

@ -88,7 +88,7 @@ fn writeBashCompletions(writer: anytype) !void {
\\ \\
); );
for (@typeInfo(Config).Struct.fields) |field| { for (@typeInfo(Config).@"struct".fields) |field| {
if (field.name[0] == '_') continue; if (field.name[0] == '_') continue;
switch (field.type) { switch (field.type) {
bool, ?bool => try writer.writeAll(pad2 ++ "config+=\" '--" ++ field.name ++ " '\"\n"), bool, ?bool => try writer.writeAll(pad2 ++ "config+=\" '--" ++ field.name ++ " '\"\n"),
@ -102,7 +102,7 @@ fn writeBashCompletions(writer: anytype) !void {
\\ \\
); );
for (@typeInfo(Config).Struct.fields) |field| { for (@typeInfo(Config).@"struct".fields) |field| {
if (field.name[0] == '_') continue; if (field.name[0] == '_') continue;
try writer.writeAll(pad3 ++ "--" ++ field.name ++ ") "); try writer.writeAll(pad3 ++ "--" ++ field.name ++ ") ");
@ -118,8 +118,8 @@ fn writeBashCompletions(writer: anytype) !void {
const compgenPrefix = "mapfile -t COMPREPLY < <( compgen -W \""; const compgenPrefix = "mapfile -t COMPREPLY < <( compgen -W \"";
const compgenSuffix = "\" -- \"$cur\" ); _add_spaces ;;"; const compgenSuffix = "\" -- \"$cur\" ); _add_spaces ;;";
switch (@typeInfo(field.type)) { switch (@typeInfo(field.type)) {
.Bool => try writer.writeAll("return ;;"), .bool => try writer.writeAll("return ;;"),
.Enum => |info| { .@"enum" => |info| {
try writer.writeAll(compgenPrefix); try writer.writeAll(compgenPrefix);
for (info.fields, 0..) |f, i| { for (info.fields, 0..) |f, i| {
if (i > 0) try writer.writeAll(" "); if (i > 0) try writer.writeAll(" ");
@ -127,7 +127,7 @@ fn writeBashCompletions(writer: anytype) !void {
} }
try writer.writeAll(compgenSuffix); try writer.writeAll(compgenSuffix);
}, },
.Struct => |info| { .@"struct" => |info| {
if (!@hasDecl(field.type, "parseCLI") and info.layout == .@"packed") { if (!@hasDecl(field.type, "parseCLI") and info.layout == .@"packed") {
try writer.writeAll(compgenPrefix); try writer.writeAll(compgenPrefix);
for (info.fields, 0..) |f, i| { for (info.fields, 0..) |f, i| {
@ -157,13 +157,13 @@ fn writeBashCompletions(writer: anytype) !void {
\\ \\
); );
for (@typeInfo(Action).Enum.fields) |field| { for (@typeInfo(Action).@"enum".fields) |field| {
if (std.mem.eql(u8, "help", field.name)) continue; if (std.mem.eql(u8, "help", field.name)) continue;
if (std.mem.eql(u8, "version", field.name)) continue; if (std.mem.eql(u8, "version", field.name)) continue;
const options = @field(Action, field.name).options(); const options = @field(Action, field.name).options();
// assumes options will never be created with only <_name> members // assumes options will never be created with only <_name> members
if (@typeInfo(options).Struct.fields.len == 0) continue; if (@typeInfo(options).@"struct".fields.len == 0) continue;
var buffer: [field.name.len]u8 = undefined; var buffer: [field.name.len]u8 = undefined;
const bashName: []u8 = buffer[0..field.name.len]; const bashName: []u8 = buffer[0..field.name.len];
@ -174,7 +174,7 @@ fn writeBashCompletions(writer: anytype) !void {
{ {
var count = 0; var count = 0;
for (@typeInfo(options).Struct.fields) |opt| { for (@typeInfo(options).@"struct".fields) |opt| {
if (opt.name[0] == '_') continue; if (opt.name[0] == '_') continue;
if (count > 0) try writer.writeAll(" "); if (count > 0) try writer.writeAll(" ");
switch (opt.type) { switch (opt.type) {
@ -193,12 +193,12 @@ fn writeBashCompletions(writer: anytype) !void {
\\ \\
); );
for (@typeInfo(Action).Enum.fields) |field| { for (@typeInfo(Action).@"enum".fields) |field| {
if (std.mem.eql(u8, "help", field.name)) continue; if (std.mem.eql(u8, "help", field.name)) continue;
if (std.mem.eql(u8, "version", field.name)) continue; if (std.mem.eql(u8, "version", field.name)) continue;
const options = @field(Action, field.name).options(); const options = @field(Action, field.name).options();
if (@typeInfo(options).Struct.fields.len == 0) continue; if (@typeInfo(options).@"struct".fields.len == 0) continue;
// bash doesn't allow variable names containing '-' so replace them // bash doesn't allow variable names containing '-' so replace them
var buffer: [field.name.len]u8 = undefined; var buffer: [field.name.len]u8 = undefined;
@ -207,7 +207,7 @@ fn writeBashCompletions(writer: anytype) !void {
try writer.writeAll(pad3 ++ "+" ++ field.name ++ ")\n"); try writer.writeAll(pad3 ++ "+" ++ field.name ++ ")\n");
try writer.writeAll(pad4 ++ "case $prev in\n"); try writer.writeAll(pad4 ++ "case $prev in\n");
for (@typeInfo(options).Struct.fields) |opt| { for (@typeInfo(options).@"struct".fields) |opt| {
if (opt.name[0] == '_') continue; if (opt.name[0] == '_') continue;
try writer.writeAll(pad5 ++ "--" ++ opt.name ++ ") "); try writer.writeAll(pad5 ++ "--" ++ opt.name ++ ") ");
@ -215,8 +215,8 @@ fn writeBashCompletions(writer: anytype) !void {
const compgenPrefix = "mapfile -t COMPREPLY < <( compgen -W \""; const compgenPrefix = "mapfile -t COMPREPLY < <( compgen -W \"";
const compgenSuffix = "\" -- \"$cur\" ); _add_spaces ;;"; const compgenSuffix = "\" -- \"$cur\" ); _add_spaces ;;";
switch (@typeInfo(opt.type)) { switch (@typeInfo(opt.type)) {
.Bool => try writer.writeAll("return ;;"), .bool => try writer.writeAll("return ;;"),
.Enum => |info| { .@"enum" => |info| {
try writer.writeAll(compgenPrefix); try writer.writeAll(compgenPrefix);
for (info.fields, 0..) |f, i| { for (info.fields, 0..) |f, i| {
if (i > 0) try writer.writeAll(" "); if (i > 0) try writer.writeAll(" ");
@ -224,9 +224,9 @@ fn writeBashCompletions(writer: anytype) !void {
} }
try writer.writeAll(compgenSuffix); try writer.writeAll(compgenSuffix);
}, },
.Optional => |optional| { .optional => |optional| {
switch (@typeInfo(optional.child)) { switch (@typeInfo(optional.child)) {
.Enum => |info| { .@"enum" => |info| {
try writer.writeAll(compgenPrefix); try writer.writeAll(compgenPrefix);
for (info.fields, 0..) |f, i| { for (info.fields, 0..) |f, i| {
if (i > 0) try writer.writeAll(" "); if (i > 0) try writer.writeAll(" ");
@ -271,7 +271,7 @@ fn writeBashCompletions(writer: anytype) !void {
\\ \\
); );
for (@typeInfo(Action).Enum.fields) |field| { for (@typeInfo(Action).@"enum".fields) |field| {
if (std.mem.eql(u8, "help", field.name)) continue; if (std.mem.eql(u8, "help", field.name)) continue;
if (std.mem.eql(u8, "version", field.name)) continue; if (std.mem.eql(u8, "version", field.name)) continue;

View File

@ -28,7 +28,7 @@ RUN . /etc/os-release; if [ $VERSION_ID -le 12 ]; then ln -s libbz2.so /usr/lib/
# Install zig # Install zig
# https://ziglang.org/download/ # https://ziglang.org/download/
ARG ZIG_VERSION="0.13.0" ARG ZIG_VERSION="0.14.0"
RUN wget -q "https://ziglang.org/download/$ZIG_VERSION/zig-linux-$(uname -m)-$ZIG_VERSION.tar.xz" && \ RUN wget -q "https://ziglang.org/download/$ZIG_VERSION/zig-linux-$(uname -m)-$ZIG_VERSION.tar.xz" && \
tar -xf "zig-linux-$(uname -m)-$ZIG_VERSION.tar.xz" -C /opt && \ tar -xf "zig-linux-$(uname -m)-$ZIG_VERSION.tar.xz" -C /opt && \
rm zig-linux-* && \ rm zig-linux-* && \

View File

@ -25,7 +25,7 @@ fn writeFishCompletions(writer: anytype) !void {
{ {
try writer.writeAll("set -l commands \""); try writer.writeAll("set -l commands \"");
var count: usize = 0; var count: usize = 0;
for (@typeInfo(Action).Enum.fields) |field| { for (@typeInfo(Action).@"enum".fields) |field| {
if (std.mem.eql(u8, "help", field.name)) continue; if (std.mem.eql(u8, "help", field.name)) continue;
if (std.mem.eql(u8, "version", field.name)) continue; if (std.mem.eql(u8, "version", field.name)) continue;
if (count > 0) try writer.writeAll(" "); if (count > 0) try writer.writeAll(" ");
@ -41,7 +41,7 @@ fn writeFishCompletions(writer: anytype) !void {
try writer.writeAll("complete -c ghostty -s e -l help -f\n"); try writer.writeAll("complete -c ghostty -s e -l help -f\n");
try writer.writeAll("complete -c ghostty -n \"not __fish_seen_subcommand_from $commands\" -l version -f\n"); try writer.writeAll("complete -c ghostty -n \"not __fish_seen_subcommand_from $commands\" -l version -f\n");
for (@typeInfo(Config).Struct.fields) |field| { for (@typeInfo(Config).@"struct".fields) |field| {
if (field.name[0] == '_') continue; if (field.name[0] == '_') continue;
try writer.writeAll("complete -c ghostty -n \"not __fish_seen_subcommand_from $commands\" -l "); try writer.writeAll("complete -c ghostty -n \"not __fish_seen_subcommand_from $commands\" -l ");
@ -56,8 +56,8 @@ fn writeFishCompletions(writer: anytype) !void {
else { else {
try writer.writeAll(if (field.type != Config.RepeatablePath) " -f" else " -F"); try writer.writeAll(if (field.type != Config.RepeatablePath) " -f" else " -F");
switch (@typeInfo(field.type)) { switch (@typeInfo(field.type)) {
.Bool => {}, .bool => {},
.Enum => |info| { .@"enum" => |info| {
try writer.writeAll(" -a \""); try writer.writeAll(" -a \"");
for (info.fields, 0..) |f, i| { for (info.fields, 0..) |f, i| {
if (i > 0) try writer.writeAll(" "); if (i > 0) try writer.writeAll(" ");
@ -65,7 +65,7 @@ fn writeFishCompletions(writer: anytype) !void {
} }
try writer.writeAll("\""); try writer.writeAll("\"");
}, },
.Struct => |info| { .@"struct" => |info| {
if (!@hasDecl(field.type, "parseCLI") and info.layout == .@"packed") { if (!@hasDecl(field.type, "parseCLI") and info.layout == .@"packed") {
try writer.writeAll(" -a \""); try writer.writeAll(" -a \"");
for (info.fields, 0..) |f, i| { for (info.fields, 0..) |f, i| {
@ -86,7 +86,7 @@ fn writeFishCompletions(writer: anytype) !void {
{ {
try writer.writeAll("complete -c ghostty -n \"string match -q -- '+*' (commandline -pt)\" -f -a \""); try writer.writeAll("complete -c ghostty -n \"string match -q -- '+*' (commandline -pt)\" -f -a \"");
var count: usize = 0; var count: usize = 0;
for (@typeInfo(Action).Enum.fields) |field| { for (@typeInfo(Action).@"enum".fields) |field| {
if (std.mem.eql(u8, "help", field.name)) continue; if (std.mem.eql(u8, "help", field.name)) continue;
if (std.mem.eql(u8, "version", field.name)) continue; if (std.mem.eql(u8, "version", field.name)) continue;
if (count > 0) try writer.writeAll(" "); if (count > 0) try writer.writeAll(" ");
@ -97,12 +97,12 @@ fn writeFishCompletions(writer: anytype) !void {
try writer.writeAll("\"\n"); try writer.writeAll("\"\n");
} }
for (@typeInfo(Action).Enum.fields) |field| { for (@typeInfo(Action).@"enum".fields) |field| {
if (std.mem.eql(u8, "help", field.name)) continue; if (std.mem.eql(u8, "help", field.name)) continue;
if (std.mem.eql(u8, "version", field.name)) continue; if (std.mem.eql(u8, "version", field.name)) continue;
const options = @field(Action, field.name).options(); const options = @field(Action, field.name).options();
for (@typeInfo(options).Struct.fields) |opt| { for (@typeInfo(options).@"struct".fields) |opt| {
if (opt.name[0] == '_') continue; if (opt.name[0] == '_') continue;
try writer.writeAll("complete -c ghostty -n \"__fish_seen_subcommand_from +" ++ field.name ++ "\" -l "); try writer.writeAll("complete -c ghostty -n \"__fish_seen_subcommand_from +" ++ field.name ++ "\" -l ");
try writer.writeAll(opt.name); try writer.writeAll(opt.name);
@ -114,8 +114,8 @@ fn writeFishCompletions(writer: anytype) !void {
} else try writer.writeAll(" -f"); } else try writer.writeAll(" -f");
switch (@typeInfo(opt.type)) { switch (@typeInfo(opt.type)) {
.Bool => {}, .bool => {},
.Enum => |info| { .@"enum" => |info| {
try writer.writeAll(" -a \""); try writer.writeAll(" -a \"");
for (info.fields, 0..) |f, i| { for (info.fields, 0..) |f, i| {
if (i > 0) try writer.writeAll(" "); if (i > 0) try writer.writeAll(" ");
@ -123,9 +123,9 @@ fn writeFishCompletions(writer: anytype) !void {
} }
try writer.writeAll("\""); try writer.writeAll("\"");
}, },
.Optional => |optional| { .optional => |optional| {
switch (@typeInfo(optional.child)) { switch (@typeInfo(optional.child)) {
.Enum => |info| { .@"enum" => |info| {
try writer.writeAll(" -a \""); try writer.writeAll(" -a \"");
for (info.fields, 0..) |f, i| { for (info.fields, 0..) |f, i| {
if (i > 0) try writer.writeAll(" "); if (i > 0) try writer.writeAll(" ");

View File

@ -27,7 +27,7 @@ pub fn genConfig(writer: anytype, cli: bool) !void {
); );
@setEvalBranchQuota(3000); @setEvalBranchQuota(3000);
inline for (@typeInfo(Config).Struct.fields) |field| { inline for (@typeInfo(Config).@"struct".fields) |field| {
if (field.name[0] == '_') continue; if (field.name[0] == '_') continue;
try writer.writeAll("**`"); try writer.writeAll("**`");
@ -56,7 +56,7 @@ pub fn genActions(writer: anytype) !void {
\\ \\
); );
inline for (@typeInfo(Action).Enum.fields) |field| { inline for (@typeInfo(Action).@"enum".fields) |field| {
const action = std.meta.stringToEnum(Action, field.name).?; const action = std.meta.stringToEnum(Action, field.name).?;
switch (action) { switch (action) {
@ -92,9 +92,9 @@ pub fn genKeybindActions(writer: anytype) !void {
); );
const info = @typeInfo(KeybindAction); const info = @typeInfo(KeybindAction);
std.debug.assert(info == .Union); std.debug.assert(info == .@"union");
inline for (info.Union.fields) |field| { inline for (info.@"union".fields) |field| {
if (field.name[0] == '_') continue; if (field.name[0] == '_') continue;
try writer.writeAll("**`"); try writer.writeAll("**`");

View File

@ -8,7 +8,7 @@ pub fn main() !void {
} }
// Note: as a shortcut for defining inline editOnGithubLinks per cli action the user // Note: as a shortcut for defining inline editOnGithubLinks per cli action the user
// is directed to the folder view on Github. This includes a README pointing them to // is directed to the folder view on Github. This includes a README pointing them to
// the files to edit. // the files to edit.
pub fn genActions(writer: anytype) !void { pub fn genActions(writer: anytype) !void {
// Write the header // Write the header
@ -24,7 +24,7 @@ pub fn genActions(writer: anytype) !void {
\\ \\
); );
inline for (@typeInfo(Action).Enum.fields) |field| { inline for (@typeInfo(Action).@"enum".fields) |field| {
const action = std.meta.stringToEnum(Action, field.name).?; const action = std.meta.stringToEnum(Action, field.name).?;
switch (action) { switch (action) {

View File

@ -29,7 +29,7 @@ pub fn genConfig(writer: anytype) !void {
); );
@setEvalBranchQuota(50_000); @setEvalBranchQuota(50_000);
const fields = @typeInfo(Config).Struct.fields; const fields = @typeInfo(Config).@"struct".fields;
inline for (fields, 0..) |field, i| { inline for (fields, 0..) |field, i| {
if (field.name[0] == '_') continue; if (field.name[0] == '_') continue;
if (!@hasDecl(help_strings.Config, field.name)) continue; if (!@hasDecl(help_strings.Config, field.name)) continue;

View File

@ -45,7 +45,7 @@ fn writeZshCompletions(writer: anytype) !void {
try writer.writeAll(" _arguments \\\n"); try writer.writeAll(" _arguments \\\n");
try writer.writeAll(" \"--help\" \\\n"); try writer.writeAll(" \"--help\" \\\n");
try writer.writeAll(" \"--version\" \\\n"); try writer.writeAll(" \"--version\" \\\n");
for (@typeInfo(Config).Struct.fields) |field| { for (@typeInfo(Config).@"struct".fields) |field| {
if (field.name[0] == '_') continue; if (field.name[0] == '_') continue;
try writer.writeAll(" \"--"); try writer.writeAll(" \"--");
try writer.writeAll(field.name); try writer.writeAll(field.name);
@ -64,8 +64,8 @@ fn writeZshCompletions(writer: anytype) !void {
try writer.writeAll("_files"); // todo check if this is needed try writer.writeAll("_files"); // todo check if this is needed
} else { } else {
switch (@typeInfo(field.type)) { switch (@typeInfo(field.type)) {
.Bool => {}, .bool => {},
.Enum => |info| { .@"enum" => |info| {
try writer.writeAll(equals_required); try writer.writeAll(equals_required);
try writer.writeAll("("); try writer.writeAll("(");
for (info.fields, 0..) |f, i| { for (info.fields, 0..) |f, i| {
@ -74,7 +74,7 @@ fn writeZshCompletions(writer: anytype) !void {
} }
try writer.writeAll(")"); try writer.writeAll(")");
}, },
.Struct => |info| { .@"struct" => |info| {
try writer.writeAll(equals_required); try writer.writeAll(equals_required);
if (!@hasDecl(field.type, "parseCLI") and info.layout == .@"packed") { if (!@hasDecl(field.type, "parseCLI") and info.layout == .@"packed") {
try writer.writeAll("("); try writer.writeAll("(");
@ -138,7 +138,7 @@ fn writeZshCompletions(writer: anytype) !void {
// how to get 'commands' // how to get 'commands'
var count: usize = 0; var count: usize = 0;
const padding = " "; const padding = " ";
for (@typeInfo(Action).Enum.fields) |field| { for (@typeInfo(Action).@"enum".fields) |field| {
if (std.mem.eql(u8, "help", field.name)) continue; if (std.mem.eql(u8, "help", field.name)) continue;
if (std.mem.eql(u8, "version", field.name)) continue; if (std.mem.eql(u8, "version", field.name)) continue;
@ -167,25 +167,25 @@ fn writeZshCompletions(writer: anytype) !void {
); );
{ {
const padding = " "; const padding = " ";
for (@typeInfo(Action).Enum.fields) |field| { for (@typeInfo(Action).@"enum".fields) |field| {
if (std.mem.eql(u8, "help", field.name)) continue; if (std.mem.eql(u8, "help", field.name)) continue;
if (std.mem.eql(u8, "version", field.name)) continue; if (std.mem.eql(u8, "version", field.name)) continue;
const options = @field(Action, field.name).options(); const options = @field(Action, field.name).options();
// assumes options will never be created with only <_name> members // assumes options will never be created with only <_name> members
if (@typeInfo(options).Struct.fields.len == 0) continue; if (@typeInfo(options).@"struct".fields.len == 0) continue;
try writer.writeAll(padding ++ "(+" ++ field.name ++ ")\n"); try writer.writeAll(padding ++ "(+" ++ field.name ++ ")\n");
try writer.writeAll(padding ++ " _arguments \\\n"); try writer.writeAll(padding ++ " _arguments \\\n");
for (@typeInfo(options).Struct.fields) |opt| { for (@typeInfo(options).@"struct".fields) |opt| {
if (opt.name[0] == '_') continue; if (opt.name[0] == '_') continue;
try writer.writeAll(padding ++ " '--"); try writer.writeAll(padding ++ " '--");
try writer.writeAll(opt.name); try writer.writeAll(opt.name);
switch (@typeInfo(opt.type)) { switch (@typeInfo(opt.type)) {
.Bool => {}, .bool => {},
.Enum => |info| { .@"enum" => |info| {
try writer.writeAll(equals_required); try writer.writeAll(equals_required);
try writer.writeAll("("); try writer.writeAll("(");
for (info.fields, 0..) |f, i| { for (info.fields, 0..) |f, i| {
@ -194,10 +194,10 @@ fn writeZshCompletions(writer: anytype) !void {
} }
try writer.writeAll(")"); try writer.writeAll(")");
}, },
.Optional => |optional| { .optional => |optional| {
try writer.writeAll(equals_required); try writer.writeAll(equals_required);
switch (@typeInfo(optional.child)) { switch (@typeInfo(optional.child)) {
.Enum => |info| { .@"enum" => |info| {
try writer.writeAll("("); try writer.writeAll("(");
for (info.fields, 0..) |f, i| { for (info.fields, 0..) |f, i| {
if (i > 0) try writer.writeAll(" "); if (i > 0) try writer.writeAll(" ");

View File

@ -80,7 +80,7 @@ pub const Artifact = enum {
wasm_module, wasm_module,
pub fn detect() Artifact { pub fn detect() Artifact {
if (builtin.target.isWasm()) { if (builtin.target.cpu.arch.isWasm()) {
assert(builtin.output_mode == .Obj); assert(builtin.output_mode == .Obj);
assert(builtin.link_mode == .Static); assert(builtin.link_mode == .Static);
return .wasm_module; return .wasm_module;

View File

@ -119,7 +119,7 @@ pub const Action = enum {
// If help is requested, then we use some comptime trickery // If help is requested, then we use some comptime trickery
// to find this action in the help strings and output that. // to find this action in the help strings and output that.
help_error => err: { help_error => err: {
inline for (@typeInfo(Action).Enum.fields) |field| { inline for (@typeInfo(Action).@"enum".fields) |field| {
// Future note: for now we just output the help text directly // Future note: for now we just output the help text directly
// to stdout. In the future we can style this much prettier // to stdout. In the future we can style this much prettier
// for all commands by just changing this one place. // for all commands by just changing this one place.

View File

@ -55,7 +55,7 @@ pub fn parse(
iter: anytype, iter: anytype,
) !void { ) !void {
const info = @typeInfo(T); const info = @typeInfo(T);
assert(info == .Struct); assert(info == .@"struct");
comptime { comptime {
// Verify all renamed fields are valid (source does not exist, // Verify all renamed fields are valid (source does not exist,
@ -208,10 +208,10 @@ fn formatInvalidValue(
fn formatValues(comptime T: type, key: []const u8, writer: anytype) std.mem.Allocator.Error!void { fn formatValues(comptime T: type, key: []const u8, writer: anytype) std.mem.Allocator.Error!void {
const typeinfo = @typeInfo(T); const typeinfo = @typeInfo(T);
inline for (typeinfo.Struct.fields) |f| { inline for (typeinfo.@"struct".fields) |f| {
if (std.mem.eql(u8, key, f.name)) { if (std.mem.eql(u8, key, f.name)) {
switch (@typeInfo(f.type)) { switch (@typeInfo(f.type)) {
.Enum => |e| { .@"enum" => |e| {
try writer.print(", valid values are: ", .{}); try writer.print(", valid values are: ", .{});
inline for (e.fields, 0..) |field, i| { inline for (e.fields, 0..) |field, i| {
if (i != 0) try writer.print(", ", .{}); if (i != 0) try writer.print(", ", .{});
@ -243,19 +243,21 @@ pub fn parseIntoField(
value: ?[]const u8, value: ?[]const u8,
) !void { ) !void {
const info = @typeInfo(T); const info = @typeInfo(T);
assert(info == .Struct); assert(info == .@"struct");
inline for (info.Struct.fields) |field| { inline for (info.@"struct".fields) |field| {
if (field.name[0] != '_' and mem.eql(u8, field.name, key)) { if (field.name[0] != '_' and mem.eql(u8, field.name, key)) {
// For optional fields, we just treat it as the child type. // For optional fields, we just treat it as the child type.
// This lets optional fields default to null but get set by // This lets optional fields default to null but get set by
// the CLI. // the CLI.
const Field = switch (@typeInfo(field.type)) { const Field = switch (@typeInfo(field.type)) {
.Optional => |opt| opt.child, .optional => |opt| opt.child,
else => field.type, else => field.type,
}; };
const fieldInfo = @typeInfo(Field); const fieldInfo = @typeInfo(Field);
const canHaveDecls = fieldInfo == .Struct or fieldInfo == .Union or fieldInfo == .Enum; const canHaveDecls = fieldInfo == .@"struct" or
fieldInfo == .@"union" or
fieldInfo == .@"enum";
// If the value is empty string (set but empty string), // If the value is empty string (set but empty string),
// then we reset the value to the default. // then we reset the value to the default.
@ -266,7 +268,7 @@ pub fn parseIntoField(
try @field(dst, field.name).init(alloc); try @field(dst, field.name).init(alloc);
return; return;
} }
const raw = field.default_value orelse break :default; const raw = field.default_value_ptr orelse break :default;
const ptr: *const field.type = @alignCast(@ptrCast(raw)); const ptr: *const field.type = @alignCast(@ptrCast(raw));
@field(dst, field.name) = ptr.*; @field(dst, field.name) = ptr.*;
return; return;
@ -276,22 +278,22 @@ pub fn parseIntoField(
// we call that and use that to set the value. // we call that and use that to set the value.
if (canHaveDecls) { if (canHaveDecls) {
if (@hasDecl(Field, "parseCLI")) { if (@hasDecl(Field, "parseCLI")) {
const fnInfo = @typeInfo(@TypeOf(Field.parseCLI)).Fn; const fnInfo = @typeInfo(@TypeOf(Field.parseCLI)).@"fn";
switch (fnInfo.params.len) { switch (fnInfo.params.len) {
// 1 arg = (input) => output // 1 arg = (input) => output
1 => @field(dst, field.name) = try Field.parseCLI(value), 1 => @field(dst, field.name) = try Field.parseCLI(value),
// 2 arg = (self, input) => void // 2 arg = (self, input) => void
2 => switch (@typeInfo(field.type)) { 2 => switch (@typeInfo(field.type)) {
.Struct, .@"struct",
.Union, .@"union",
.Enum, .@"enum",
=> try @field(dst, field.name).parseCLI(value), => try @field(dst, field.name).parseCLI(value),
// If the field is optional and set, then we use // If the field is optional and set, then we use
// the pointer value directly into it. If its not // the pointer value directly into it. If its not
// set we need to create a new instance. // set we need to create a new instance.
.Optional => if (@field(dst, field.name)) |*v| { .optional => if (@field(dst, field.name)) |*v| {
try v.parseCLI(value); try v.parseCLI(value);
} else { } else {
// Note: you cannot do @field(dst, name) = undefined // Note: you cannot do @field(dst, name) = undefined
@ -307,12 +309,12 @@ pub fn parseIntoField(
// 3 arg = (self, alloc, input) => void // 3 arg = (self, alloc, input) => void
3 => switch (@typeInfo(field.type)) { 3 => switch (@typeInfo(field.type)) {
.Struct, .@"struct",
.Union, .@"union",
.Enum, .@"enum",
=> try @field(dst, field.name).parseCLI(alloc, value), => try @field(dst, field.name).parseCLI(alloc, value),
.Optional => if (@field(dst, field.name)) |*v| { .optional => if (@field(dst, field.name)) |*v| {
try v.parseCLI(alloc, value); try v.parseCLI(alloc, value);
} else { } else {
var tmp: Field = undefined; var tmp: Field = undefined;
@ -374,18 +376,18 @@ pub fn parseIntoField(
) catch return error.InvalidValue, ) catch return error.InvalidValue,
else => switch (fieldInfo) { else => switch (fieldInfo) {
.Enum => std.meta.stringToEnum( .@"enum" => std.meta.stringToEnum(
Field, Field,
value orelse return error.ValueRequired, value orelse return error.ValueRequired,
) orelse return error.InvalidValue, ) orelse return error.InvalidValue,
.Struct => try parseStruct( .@"struct" => try parseStruct(
Field, Field,
alloc, alloc,
value orelse return error.ValueRequired, value orelse return error.ValueRequired,
), ),
.Union => try parseTaggedUnion( .@"union" => try parseTaggedUnion(
Field, Field,
alloc, alloc,
value orelse return error.ValueRequired, value orelse return error.ValueRequired,
@ -413,8 +415,8 @@ pub fn parseIntoField(
} }
fn parseTaggedUnion(comptime T: type, alloc: Allocator, v: []const u8) !T { fn parseTaggedUnion(comptime T: type, alloc: Allocator, v: []const u8) !T {
const info = @typeInfo(T).Union; const info = @typeInfo(T).@"union";
assert(@typeInfo(info.tag_type.?) == .Enum); assert(@typeInfo(info.tag_type.?) == .@"enum");
// Get the union tag that is being set. We support values with no colon // Get the union tag that is being set. We support values with no colon
// if the value is void so its not an error to have no colon. // if the value is void so its not an error to have no colon.
@ -433,12 +435,12 @@ fn parseTaggedUnion(comptime T: type, alloc: Allocator, v: []const u8) !T {
// We need to create a struct that looks like this union field. // We need to create a struct that looks like this union field.
// This lets us use parseIntoField as if its a dedicated struct. // This lets us use parseIntoField as if its a dedicated struct.
const Target = @Type(.{ .Struct = .{ const Target = @Type(.{ .@"struct" = .{
.layout = .auto, .layout = .auto,
.fields = &.{.{ .fields = &.{.{
.name = field.name, .name = field.name,
.type = field.type, .type = field.type,
.default_value = null, .default_value_ptr = null,
.is_comptime = false, .is_comptime = false,
.alignment = @alignOf(field.type), .alignment = @alignOf(field.type),
}}, }},
@ -459,7 +461,7 @@ fn parseTaggedUnion(comptime T: type, alloc: Allocator, v: []const u8) !T {
} }
fn parseStruct(comptime T: type, alloc: Allocator, v: []const u8) !T { fn parseStruct(comptime T: type, alloc: Allocator, v: []const u8) !T {
return switch (@typeInfo(T).Struct.layout) { return switch (@typeInfo(T).@"struct".layout) {
.auto => parseAutoStruct(T, alloc, v), .auto => parseAutoStruct(T, alloc, v),
.@"packed" => parsePackedStruct(T, v), .@"packed" => parsePackedStruct(T, v),
else => @compileError("unsupported struct layout"), else => @compileError("unsupported struct layout"),
@ -467,7 +469,7 @@ fn parseStruct(comptime T: type, alloc: Allocator, v: []const u8) !T {
} }
pub fn parseAutoStruct(comptime T: type, alloc: Allocator, v: []const u8) !T { pub fn parseAutoStruct(comptime T: type, alloc: Allocator, v: []const u8) !T {
const info = @typeInfo(T).Struct; const info = @typeInfo(T).@"struct";
comptime assert(info.layout == .auto); comptime assert(info.layout == .auto);
// We start our result as undefined so we don't get an error for required // We start our result as undefined so we don't get an error for required
@ -519,7 +521,7 @@ pub fn parseAutoStruct(comptime T: type, alloc: Allocator, v: []const u8) !T {
// Ensure all required fields are set // Ensure all required fields are set
inline for (info.fields, 0..) |field, i| { inline for (info.fields, 0..) |field, i| {
if (!fields_set.isSet(i)) { if (!fields_set.isSet(i)) {
const default_ptr = field.default_value orelse return error.InvalidValue; const default_ptr = field.default_value_ptr orelse return error.InvalidValue;
const typed_ptr: *const field.type = @alignCast(@ptrCast(default_ptr)); const typed_ptr: *const field.type = @alignCast(@ptrCast(default_ptr));
@field(result, field.name) = typed_ptr.*; @field(result, field.name) = typed_ptr.*;
} }
@ -529,7 +531,7 @@ pub fn parseAutoStruct(comptime T: type, alloc: Allocator, v: []const u8) !T {
} }
fn parsePackedStruct(comptime T: type, v: []const u8) !T { fn parsePackedStruct(comptime T: type, v: []const u8) !T {
const info = @typeInfo(T).Struct; const info = @typeInfo(T).@"struct";
comptime assert(info.layout == .@"packed"); comptime assert(info.layout == .@"packed");
var result: T = .{}; var result: T = .{};

View File

@ -54,14 +54,14 @@ pub const Location = union(enum) {
line: usize, line: usize,
}, },
pub const Key = @typeInfo(Location).Union.tag_type.?; pub const Key = @typeInfo(Location).@"union".tag_type.?;
pub fn fromIter(iter: anytype, alloc: Allocator) Allocator.Error!Location { pub fn fromIter(iter: anytype, alloc: Allocator) Allocator.Error!Location {
const Iter = t: { const Iter = t: {
const T = @TypeOf(iter); const T = @TypeOf(iter);
break :t switch (@typeInfo(T)) { break :t switch (@typeInfo(T)) {
.Pointer => |v| v.child, .pointer => |v| v.child,
.Struct => T, .@"struct" => T,
else => return .none, else => return .none,
}; };
}; };

View File

@ -58,7 +58,7 @@ pub fn run(alloc: Allocator) !u8 {
\\ \\
); );
inline for (@typeInfo(Action).Enum.fields) |field| { inline for (@typeInfo(Action).@"enum".fields) |field| {
try stdout.print(" +{s}\n", .{field.name}); try stdout.print(" +{s}\n", .{field.name});
} }

View File

@ -101,7 +101,7 @@ fn runArgs(alloc_gpa: Allocator, argsIter: anytype) !u8 {
var exit: bool = false; var exit: bool = false;
outer: for (opts._diagnostics.items()) |diagnostic| { outer: for (opts._diagnostics.items()) |diagnostic| {
if (diagnostic.location != .cli) continue :outer; if (diagnostic.location != .cli) continue :outer;
inner: inline for (@typeInfo(Options).Struct.fields) |field| { inner: inline for (@typeInfo(Options).@"struct".fields) |field| {
if (field.name[0] == '_') continue :inner; if (field.name[0] == '_') continue :inner;
if (std.mem.eql(u8, field.name, diagnostic.key)) { if (std.mem.eql(u8, field.name, diagnostic.key)) {
try stderr.writeAll("config error: "); try stderr.writeAll("config error: ");
@ -134,7 +134,7 @@ fn runArgs(alloc_gpa: Allocator, argsIter: anytype) !u8 {
// action-specific argument. // action-specific argument.
if (!config._diagnostics.empty()) { if (!config._diagnostics.empty()) {
outer: for (config._diagnostics.items()) |diagnostic| { outer: for (config._diagnostics.items()) |diagnostic| {
inner: inline for (@typeInfo(Options).Struct.fields) |field| { inner: inline for (@typeInfo(Options).@"struct".fields) |field| {
if (field.name[0] == '_') continue :inner; if (field.name[0] == '_') continue :inner;
if (std.mem.eql(u8, field.name, diagnostic.key) and (diagnostic.location == .none or diagnostic.location == .cli)) continue :outer; if (std.mem.eql(u8, field.name, diagnostic.key) and (diagnostic.location == .none or diagnostic.location == .cli)) continue :outer;
} }

View File

@ -34,7 +34,7 @@ pub const WindowPaddingColor = Config.WindowPaddingColor;
// Alternate APIs // Alternate APIs
pub const CAPI = @import("config/CAPI.zig"); pub const CAPI = @import("config/CAPI.zig");
pub const Wasm = if (!builtin.target.isWasm()) struct {} else @import("config/Wasm.zig"); pub const Wasm = if (!builtin.target.cpu.arch.isWasm()) struct {} else @import("config/Wasm.zig");
test { test {
@import("std").testing.refAllDecls(@This()); @import("std").testing.refAllDecls(@This());

View File

@ -2801,7 +2801,7 @@ pub fn changeConditionalState(
// If the conditional state between the old and new is the same, // If the conditional state between the old and new is the same,
// then we don't need to do anything. // then we don't need to do anything.
relevant: { relevant: {
inline for (@typeInfo(conditional.Key).Enum.fields) |field| { inline for (@typeInfo(conditional.Key).@"enum".fields) |field| {
const key: conditional.Key = @field(conditional.Key, field.name); const key: conditional.Key = @field(conditional.Key, field.name);
// Conditional set contains the keys that this config uses. So we // Conditional set contains the keys that this config uses. So we
@ -2849,7 +2849,7 @@ fn expandPaths(self: *Config, base: []const u8) !void {
); );
// Expand all of our paths // Expand all of our paths
inline for (@typeInfo(Config).Struct.fields) |field| { inline for (@typeInfo(Config).@"struct".fields) |field| {
switch (field.type) { switch (field.type) {
RepeatablePath, Path => { RepeatablePath, Path => {
try @field(self, field.name).expand( try @field(self, field.name).expand(
@ -3023,7 +3023,7 @@ pub fn finalize(self: *Config) !void {
// to look up defaults which is kind of expensive. We only do this // to look up defaults which is kind of expensive. We only do this
// on desktop. // on desktop.
const wd_home = std.mem.eql(u8, "home", wd); const wd_home = std.mem.eql(u8, "home", wd);
if ((comptime !builtin.target.isWasm()) and if ((comptime !builtin.target.cpu.arch.isWasm()) and
(comptime !builtin.is_test)) (comptime !builtin.is_test))
{ {
if (self.command == null or wd_home) command: { if (self.command == null or wd_home) command: {
@ -3239,7 +3239,7 @@ pub fn clone(
const alloc_arena = result._arena.?.allocator(); const alloc_arena = result._arena.?.allocator();
// Copy our values // Copy our values
inline for (@typeInfo(Config).Struct.fields) |field| { inline for (@typeInfo(Config).@"struct".fields) |field| {
if (!@hasField(Key, field.name)) continue; if (!@hasField(Key, field.name)) continue;
@field(result, field.name) = try cloneValue( @field(result, field.name) = try cloneValue(
alloc_arena, alloc_arena,
@ -3286,26 +3286,26 @@ fn cloneValue(
// If we're a type that can have decls and we have clone, then // If we're a type that can have decls and we have clone, then
// call clone and be done. // call clone and be done.
const t = @typeInfo(T); const t = @typeInfo(T);
if (t == .Struct or t == .Enum or t == .Union) { if (t == .@"struct" or t == .@"enum" or t == .@"union") {
if (@hasDecl(T, "clone")) return try src.clone(alloc); if (@hasDecl(T, "clone")) return try src.clone(alloc);
} }
// Back into types of types // Back into types of types
switch (t) { switch (t) {
inline .Bool, inline .bool,
.Int, .int,
.Float, .float,
.Enum, .@"enum",
.Union, .@"union",
=> return src, => return src,
.Optional => |info| return try cloneValue( .optional => |info| return try cloneValue(
alloc, alloc,
info.child, info.child,
src orelse return null, src orelse return null,
), ),
.Struct => |info| { .@"struct" => |info| {
// Packed structs we can return directly as copies. // Packed structs we can return directly as copies.
assert(info.layout == .@"packed"); assert(info.layout == .@"packed");
return src; return src;
@ -3390,21 +3390,21 @@ fn equalField(comptime T: type, old: T, new: T) bool {
// Back into types of types // Back into types of types
switch (@typeInfo(T)) { switch (@typeInfo(T)) {
.Void => return true, .void => return true,
inline .Bool, inline .bool,
.Int, .int,
.Float, .float,
.Enum, .@"enum",
=> return old == new, => return old == new,
.Optional => |info| { .optional => |info| {
if (old == null and new == null) return true; if (old == null and new == null) return true;
if (old == null or new == null) return false; if (old == null or new == null) return false;
return equalField(info.child, old.?, new.?); return equalField(info.child, old.?, new.?);
}, },
.Struct => |info| { .@"struct" => |info| {
if (@hasDecl(T, "equal")) return old.equal(new); if (@hasDecl(T, "equal")) return old.equal(new);
// If a struct doesn't declare an "equal" function, we fall back // If a struct doesn't declare an "equal" function, we fall back
@ -3419,7 +3419,7 @@ fn equalField(comptime T: type, old: T, new: T) bool {
return true; return true;
}, },
.Union => |info| { .@"union" => |info| {
const tag_type = info.tag_type.?; const tag_type = info.tag_type.?;
const old_tag = std.meta.activeTag(old); const old_tag = std.meta.activeTag(old);
const new_tag = std.meta.activeTag(new); const new_tag = std.meta.activeTag(new);
@ -4293,7 +4293,7 @@ pub const Keybinds = struct {
// The order of these blocks is important. The *last* added keybind for a given action is // The order of these blocks is important. The *last* added keybind for a given action is
// what will display in the menu. We want the more typical keybinds after this block to be // what will display in the menu. We want the more typical keybinds after this block to be
// the standard // the standard
if (!builtin.target.isDarwin()) { if (!builtin.target.os.tag.isDarwin()) {
try self.set.put( try self.set.put(
alloc, alloc,
.{ .key = .{ .translated = .insert }, .mods = .{ .ctrl = true } }, .{ .key = .{ .translated = .insert }, .mods = .{ .ctrl = true } },
@ -4308,7 +4308,7 @@ pub const Keybinds = struct {
// On macOS we default to super but Linux ctrl+shift since // On macOS we default to super but Linux ctrl+shift since
// ctrl+c is to kill the process. // ctrl+c is to kill the process.
const mods: inputpkg.Mods = if (builtin.target.isDarwin()) const mods: inputpkg.Mods = if (builtin.target.os.tag.isDarwin())
.{ .super = true } .{ .super = true }
else else
.{ .ctrl = true, .shift = true }; .{ .ctrl = true, .shift = true };
@ -4426,7 +4426,7 @@ pub const Keybinds = struct {
); );
// Windowing // Windowing
if (comptime !builtin.target.isDarwin()) { if (comptime !builtin.target.os.tag.isDarwin()) {
try self.set.put( try self.set.put(
alloc, alloc,
.{ .key = .{ .translated = .n }, .mods = .{ .ctrl = true, .shift = true } }, .{ .key = .{ .translated = .n }, .mods = .{ .ctrl = true, .shift = true } },
@ -4603,7 +4603,7 @@ pub const Keybinds = struct {
{ {
// On macOS we default to super but everywhere else // On macOS we default to super but everywhere else
// is alt. // is alt.
const mods: inputpkg.Mods = if (builtin.target.isDarwin()) const mods: inputpkg.Mods = if (builtin.target.os.tag.isDarwin())
.{ .super = true } .{ .super = true }
else else
.{ .alt = true }; .{ .alt = true };
@ -4621,7 +4621,7 @@ pub const Keybinds = struct {
// want to be true on other platforms as well but this // want to be true on other platforms as well but this
// is definitely true on macOS so we just do it here for // is definitely true on macOS so we just do it here for
// now (#817) // now (#817)
.key = if (comptime builtin.target.isDarwin()) .key = if (comptime builtin.target.os.tag.isDarwin())
.{ .physical = @enumFromInt(i) } .{ .physical = @enumFromInt(i) }
else else
.{ .translated = @enumFromInt(i) }, .{ .translated = @enumFromInt(i) },
@ -4634,7 +4634,7 @@ pub const Keybinds = struct {
try self.set.put( try self.set.put(
alloc, alloc,
.{ .{
.key = if (comptime builtin.target.isDarwin()) .key = if (comptime builtin.target.os.tag.isDarwin())
.{ .physical = .nine } .{ .physical = .nine }
else else
.{ .translated = .nine }, .{ .translated = .nine },
@ -4659,7 +4659,7 @@ pub const Keybinds = struct {
); );
// Mac-specific keyboard bindings. // Mac-specific keyboard bindings.
if (comptime builtin.target.isDarwin()) { if (comptime builtin.target.os.tag.isDarwin()) {
try self.set.put( try self.set.put(
alloc, alloc,
.{ .key = .{ .translated = .q }, .mods = .{ .super = true } }, .{ .key = .{ .translated = .q }, .mods = .{ .super = true } },
@ -4995,7 +4995,7 @@ pub const Keybinds = struct {
if (docs) { if (docs) {
try formatter.writer.writeAll("\n"); try formatter.writer.writeAll("\n");
const name = @tagName(v); const name = @tagName(v);
inline for (@typeInfo(help_strings.KeybindAction).Struct.decls) |decl| { inline for (@typeInfo(help_strings.KeybindAction).@"struct".decls) |decl| {
if (std.mem.eql(u8, decl.name, name)) { if (std.mem.eql(u8, decl.name, name)) {
const help = @field(help_strings.KeybindAction, decl.name); const help = @field(help_strings.KeybindAction, decl.name);
try formatter.writer.writeAll("# " ++ decl.name ++ "\n"); try formatter.writer.writeAll("# " ++ decl.name ++ "\n");

View File

@ -53,21 +53,21 @@ fn getValue(ptr_raw: *anyopaque, value: anytype) bool {
}, },
else => |T| switch (@typeInfo(T)) { else => |T| switch (@typeInfo(T)) {
.Optional => { .optional => {
// If an optional has no value we return false. // If an optional has no value we return false.
const unwrapped = value orelse return false; const unwrapped = value orelse return false;
return getValue(ptr_raw, unwrapped); return getValue(ptr_raw, unwrapped);
}, },
.Enum => { .@"enum" => {
const ptr: *[*:0]const u8 = @ptrCast(@alignCast(ptr_raw)); const ptr: *[*:0]const u8 = @ptrCast(@alignCast(ptr_raw));
ptr.* = @tagName(value); ptr.* = @tagName(value);
}, },
.Struct => |info| { .@"struct" => |info| {
// If the struct implements cval then we call then. // If the struct implements cval then we call then.
if (@hasDecl(T, "cval")) { if (@hasDecl(T, "cval")) {
const PtrT = @typeInfo(@TypeOf(T.cval)).Fn.return_type.?; const PtrT = @typeInfo(@TypeOf(T.cval)).@"fn".return_type.?;
const ptr: *PtrT = @ptrCast(@alignCast(ptr_raw)); const ptr: *PtrT = @ptrCast(@alignCast(ptr_raw));
ptr.* = value.cval(); ptr.* = value.cval();
return true; return true;
@ -84,9 +84,9 @@ fn getValue(ptr_raw: *anyopaque, value: anytype) bool {
ptr.* = @intCast(@as(Backing, @bitCast(value))); ptr.* = @intCast(@as(Backing, @bitCast(value)));
}, },
.Union => |_| { .@"union" => |_| {
if (@hasDecl(T, "cval")) { if (@hasDecl(T, "cval")) {
const PtrT = @typeInfo(@TypeOf(T.cval)).Fn.return_type.?; const PtrT = @typeInfo(@TypeOf(T.cval)).@"fn".return_type.?;
const ptr: *PtrT = @ptrCast(@alignCast(ptr_raw)); const ptr: *PtrT = @ptrCast(@alignCast(ptr_raw));
ptr.* = value.cval(); ptr.* = value.cval();
return true; return true;

View File

@ -39,14 +39,14 @@ pub const State = struct {
/// An enum of the available conditional configuration keys. /// An enum of the available conditional configuration keys.
pub const Key = key: { pub const Key = key: {
const stateInfo = @typeInfo(State).Struct; const stateInfo = @typeInfo(State).@"struct";
var fields: [stateInfo.fields.len]std.builtin.Type.EnumField = undefined; var fields: [stateInfo.fields.len]std.builtin.Type.EnumField = undefined;
for (stateInfo.fields, 0..) |field, i| fields[i] = .{ for (stateInfo.fields, 0..) |field, i| fields[i] = .{
.name = field.name, .name = field.name,
.value = i, .value = i,
}; };
break :key @Type(.{ .Enum = .{ break :key @Type(.{ .@"enum" = .{
.tag_type = std.math.IntFittingRange(0, fields.len - 1), .tag_type = std.math.IntFittingRange(0, fields.len - 1),
.fields = &fields, .fields = &fields,
.decls = &.{}, .decls = &.{},

View File

@ -42,27 +42,27 @@ pub fn formatEntry(
writer: anytype, writer: anytype,
) !void { ) !void {
switch (@typeInfo(T)) { switch (@typeInfo(T)) {
.Bool, .Int => { .bool, .int => {
try writer.print("{s} = {}\n", .{ name, value }); try writer.print("{s} = {}\n", .{ name, value });
return; return;
}, },
.Float => { .float => {
try writer.print("{s} = {d}\n", .{ name, value }); try writer.print("{s} = {d}\n", .{ name, value });
return; return;
}, },
.Enum => { .@"enum" => {
try writer.print("{s} = {s}\n", .{ name, @tagName(value) }); try writer.print("{s} = {s}\n", .{ name, @tagName(value) });
return; return;
}, },
.Void => { .void => {
try writer.print("{s} = \n", .{name}); try writer.print("{s} = \n", .{name});
return; return;
}, },
.Optional => |info| { .optional => |info| {
if (value) |inner| { if (value) |inner| {
try formatEntry( try formatEntry(
info.child, info.child,
@ -77,7 +77,7 @@ pub fn formatEntry(
return; return;
}, },
.Pointer => switch (T) { .pointer => switch (T) {
[]const u8, []const u8,
[:0]const u8, [:0]const u8,
=> { => {
@ -93,7 +93,7 @@ pub fn formatEntry(
// This is given the formatter in use so that they can // This is given the formatter in use so that they can
// call BACK to our formatEntry to write each primitive // call BACK to our formatEntry to write each primitive
// value. // value.
.Struct => |info| if (@hasDecl(T, "formatEntry")) { .@"struct" => |info| if (@hasDecl(T, "formatEntry")) {
try value.formatEntry(entryFormatter(name, writer)); try value.formatEntry(entryFormatter(name, writer));
return; return;
} else switch (info.layout) { } else switch (info.layout) {
@ -114,7 +114,7 @@ pub fn formatEntry(
else => {}, else => {},
}, },
.Union => if (@hasDecl(T, "formatEntry")) { .@"union" => if (@hasDecl(T, "formatEntry")) {
try value.formatEntry(entryFormatter(name, writer)); try value.formatEntry(entryFormatter(name, writer));
return; return;
}, },
@ -158,7 +158,7 @@ pub const FileFormatter = struct {
null; null;
defer if (default) |*v| v.deinit(); defer if (default) |*v| v.deinit();
inline for (@typeInfo(Config).Struct.fields) |field| { inline for (@typeInfo(Config).@"struct".fields) |field| {
if (field.name[0] == '_') continue; if (field.name[0] == '_') continue;
const value = @field(self.config, field.name); const value = @field(self.config, field.name);

View File

@ -22,7 +22,7 @@ pub const Key = key: {
var decls = [_]std.builtin.Type.Declaration{}; var decls = [_]std.builtin.Type.Declaration{};
break :key @Type(.{ break :key @Type(.{
.Enum = .{ .@"enum" = .{
.tag_type = std.math.IntFittingRange(0, field_infos.len - 1), .tag_type = std.math.IntFittingRange(0, field_infos.len - 1),
.fields = enumFields[0..i], .fields = enumFields[0..i],
.decls = &decls, .decls = &decls,
@ -34,6 +34,8 @@ pub const Key = key: {
/// Returns the value type for a key /// Returns the value type for a key
pub fn Value(comptime key: Key) type { pub fn Value(comptime key: Key) type {
const field = comptime field: { const field = comptime field: {
@setEvalBranchQuota(100_000);
const fields = std.meta.fields(Config); const fields = std.meta.fields(Config);
for (fields) |field| { for (fields) |field| {
if (@field(Key, field.name) == key) { if (@field(Key, field.name) == key) {

View File

@ -36,7 +36,7 @@ fn isInternal(name: []const u8) bool {
fn generateKeywords() []const u8 { fn generateKeywords() []const u8 {
@setEvalBranchQuota(5000); @setEvalBranchQuota(5000);
var keywords: []const u8 = ""; var keywords: []const u8 = "";
const config_fields = @typeInfo(Config).Struct.fields; const config_fields = @typeInfo(Config).@"struct".fields;
for (config_fields) |field| { for (config_fields) |field| {
if (isInternal(field.name)) continue; if (isInternal(field.name)) continue;

View File

@ -76,7 +76,7 @@ pub const LocationIterator = struct {
location: Location, location: Location,
dir: []const u8, dir: []const u8,
} { } {
const max = @typeInfo(Location).Enum.fields.len; const max = @typeInfo(Location).@"enum".fields.len;
while (self.i < max) { while (self.i < max) {
const location: Location = @enumFromInt(self.i); const location: Location = @enumFromInt(self.i);
self.i += 1; self.i += 1;

View File

@ -91,7 +91,7 @@ fn writeSyntax(writer: anytype) !void {
\\syn keyword ghosttyConfigKeyword \\syn keyword ghosttyConfigKeyword
); );
const config_fields = @typeInfo(Config).Struct.fields; const config_fields = @typeInfo(Config).@"struct".fields;
inline for (config_fields) |field| { inline for (config_fields) |field| {
if (field.name[0] == '_') continue; if (field.name[0] == '_') continue;
try writer.print("\n\t\\ {s}", .{field.name}); try writer.print("\n\t\\ {s}", .{field.name});

View File

@ -46,13 +46,13 @@ pub fn Reader(comptime S: type) type {
stream_directory_rva: u32, stream_directory_rva: u32,
const SourceCallable = switch (@typeInfo(Source)) { const SourceCallable = switch (@typeInfo(Source)) {
.Pointer => |v| v.child, .pointer => |v| v.child,
.Struct => Source, .@"struct" => Source,
else => @compileError("Source type must be a pointer or struct"), else => @compileError("Source type must be a pointer or struct"),
}; };
const SourceReader = @typeInfo(@TypeOf(SourceCallable.reader)).Fn.return_type.?; const SourceReader = @typeInfo(@TypeOf(SourceCallable.reader)).@"fn".return_type.?;
const SourceSeeker = @typeInfo(@TypeOf(SourceCallable.seekableStream)).Fn.return_type.?; const SourceSeeker = @typeInfo(@TypeOf(SourceCallable.seekableStream)).@"fn".return_type.?;
/// A limited reader for reading data from the source. /// A limited reader for reading data from the source.
pub const LimitedReader = std.io.LimitedReader(SourceReader); pub const LimitedReader = std.io.LimitedReader(SourceReader);

View File

@ -34,7 +34,7 @@ pub fn HashMap(
return struct { return struct {
const Self = @This(); const Self = @This();
const Map = std.HashMapUnmanaged(K, *Queue.Node, Context, max_load_percentage); const Map = std.HashMapUnmanaged(K, *Queue.Node, Context, max_load_percentage);
const Queue = std.TailQueue(KV); const Queue = std.DoublyLinkedList(KV);
/// Map to maintain our entries. /// Map to maintain our entries.
map: Map, map: Map,

View File

@ -639,11 +639,11 @@ pub const PresentationMode = union(enum) {
/// the Backing type and everything should just work fine. /// the Backing type and everything should just work fine.
pub const Index = packed struct(Index.Backing) { pub const Index = packed struct(Index.Backing) {
const Backing = u16; const Backing = u16;
const backing_bits = @typeInfo(Backing).Int.bits; const backing_bits = @typeInfo(Backing).int.bits;
/// The number of bits we use for the index. /// The number of bits we use for the index.
const idx_bits = backing_bits - @typeInfo(@typeInfo(Style).Enum.tag_type).Int.bits; const idx_bits = backing_bits - @typeInfo(@typeInfo(Style).@"enum".tag_type).int.bits;
pub const IndexInt = @Type(.{ .Int = .{ .signedness = .unsigned, .bits = idx_bits } }); pub const IndexInt = @Type(.{ .int = .{ .signedness = .unsigned, .bits = idx_bits } });
/// The special-case fonts that we support. /// The special-case fonts that we support.
pub const Special = enum(IndexInt) { pub const Special = enum(IndexInt) {

Some files were not shown because too many files have changed in this diff Show More