Commit Graph

258 Commits (main)

Author SHA1 Message Date
Mitchell Hashimoto 710ea1c8d9
up all the metadata to 1.1.2 2025-02-13 13:02:06 -08:00
Jeffrey C. Ollie f63242f7fb
gtk: add support for using GTK Builder UI files and Blueprints
Adds buildtime and comptime checks to make sure that Blueprints/UI files
are availble and correctly formed. Will also compile Blueprints to UI
files so that they are available to GTK code.
2025-02-12 15:05:42 -06:00
Jeffrey C. Ollie 3a8c934b19 nix: use zig2nix to manage nix cache/deps
This brings the internal package more in line with how the nixpkgs
package is built. It also handles recursive dependencies better than the
current system.
2025-02-11 08:25:34 -08:00
Leah Amelia Chen 843c714088
gtk: introduce Zig bindings for GTK/GObject
`zig-gobject` is a set of GObject bindings that allow us to write
GTK-facing code in Zig instead of getting hands dirty with C.
It's been tested and refined in real-life applications and several
GTK contributors agree that it is a marked improvement over using
the C API directly, such as allowing method call syntax and avoiding
many manual `@ptrCast`s.

This commit doesn't actually contain any changes to our preexisting
GTK code — the migration process is intended to begin in chunks,
firstly in self-contained components (e.g. the header bar, overlays,
etc.), and then full-scale migration can begin when we remove non-Adwaita
GTK builds for 1.2. (After all, why port code that you'll remove later
either way?)
2025-02-10 18:34:08 +01:00
mitchellh 5100f4ff7d deps: Update iTerm2 color schemes 2025-02-02 00:10:42 +00:00
Mitchell Hashimoto c5508e7d19
update version for development 2025-01-30 14:23:24 -08:00
Jeffrey C. Ollie 6dd9bf0038
nix: fix Ghostty homepage in package 2025-01-30 11:04:44 -06:00
Mitchell Hashimoto adf4066b69
nix: use --system build flag instead of relying on $ZIG_GLOBAL_CACHE_DIR (#5434)
Fixes #5431
2025-01-30 08:48:31 -08:00
Jeffrey C. Ollie 40973417d0
nix: use --system build flag instead of relying on $ZIG_GLOBAL_CACHE_DIR
Fixes #5431
2025-01-30 10:16:45 -06:00
Mitchell Hashimoto a62b26cd2f
next version will be 1.1.0 2025-01-30 07:18:43 -08:00
Mitchell Hashimoto 9ab2e563bb
Update libxev to fix zombie processes on macOS
Fixes #4554

xev.Process.wait is documented as being equivalent to calling `waitpid`,
i.e. including reaping the process. On Linux, it does this automatically
by using pidfd and the `waitid` syscall. On macOS, it wasn't doing this.

This commit updates libxev to include a fix that explicitly calls
`waitpid` for kqueue.
2025-01-24 12:07:01 -08:00
Mitchell Hashimoto 0d6a1d3fdb
Prevent fd leaks to the running shell or command
Multiple fixes to prevent file descriptor leaks:

- libxev eventfd now uses CLOEXEC
- linux: cgroup clone now uses CLOEXEC for the cgroup fd
- termio pipe uses pipe2 with CLOEXEC
- pty master always sets CLOEXEC because the child doesn't need it
- termio exec now closes pty slave fd after fork

There still appear to be some fd leaks happening. They seem related to
GTK, they aren't things we're accessig directly. I still want to
investigate them but this at least cleans up the major sources of fd
leakage.
2025-01-23 22:12:58 -08:00
Mitchell Hashimoto 78a2a815f3
nix: vms for testing ghostty (#4608)
Adds a Nix VM configuration to run Gnome/Wayland. The primary purpose
will be testing Ghostty in a "clean" environment. I'm going to continue
to experiment with running this in CI to see if we can do some basic
testing of GTK since it's difficult to unit test that code.

To use, run `nix run .#wayland-gnome` in the Ghostty source directory. I
have no idea if this works on macOS. There's probably a lot of extra
stuff that can be trimmed to slim it down.

Whatever directory you run this from will be mounted at `/tmp/shared` in
the VM. The `ghostty` user runs as uid/gid 1000/1000 so that may affect
your ability to read/write that directory if your host system user runs
as a different uid/gid.

If this is something that we'd like to keep, we should add VM
definitions for KDE Plasma and maybe one tiling window manager.


https://github.com/user-attachments/assets/57190913-f338-4383-93aa-90c9e351543d
2025-01-23 16:03:29 -08:00
mitchellh 3f367857fc deps: Update iTerm2 color schemes 2025-01-19 00:58:22 +00:00
Jeffrey C. Ollie 3159a7bec7
nix: add x11 xfce vm 2025-01-15 20:37:31 -06:00
Jeffrey C. Ollie 423133bc3c
nix: document how to create custom vms 2025-01-15 11:56:19 -06:00
Jeffrey C. Ollie 1ac56a7ac2
nix vm: +fish +zsh -zig 2025-01-15 10:25:03 -06:00
Jeffrey C. Ollie 321119e001
nix vm: more reusability 2025-01-15 10:25:03 -06:00
Jeffrey C. Ollie e1e2f94681
nix vm: try and make vm creation more re-usable 2025-01-15 10:25:03 -06:00
Jeffrey C. Ollie 268fc1a040
nix vm: simplify vm definition 2025-01-15 10:25:03 -06:00
Jeffrey C. Ollie 450c019b4e
nix vm: add plasma and cinnamon vms 2025-01-15 10:25:03 -06:00
Jeffrey C. Ollie 6be0902c09
nix vm: add documentation, add Gnome/X11 VM 2025-01-15 10:25:02 -06:00
Jeffrey C. Ollie dddc2a50a8
nix vm: more slimming 2025-01-15 10:25:02 -06:00
Jeffrey C. Ollie 4bfb1f616c
nix: disable geary 2025-01-15 10:25:02 -06:00
Jeffrey C. Ollie 4ff7f6df06
nix: fix dark mode setting 2025-01-15 10:25:02 -06:00
Jeffrey C. Ollie 0b456d14a4
nix: vms for testing ghostty 2025-01-15 10:24:58 -06:00
mitchellh 50e33a6665 deps: Update iTerm2 color schemes 2025-01-12 01:01:09 +00:00
Mitchell Hashimoto 6e411d60f2
Fix wayland-scanner/protocols packaging dependency
By updating zig-wayland:
https://codeberg.org/ifreund/zig-wayland/issues/67
2025-01-10 09:57:29 -08:00
Mitchell Hashimoto 622cc3f9c7
build: update zig-wayland to use new LazyPath API
This is a more idiomatic way to handle build paths in Zig 0.13 and
later.
2025-01-08 19:55:57 -08:00
Mitchell Hashimoto bade7be021
Use build.zig.zon for Wayland protocols 2025-01-07 20:26:26 -08:00
Mitchell Hashimoto 8bf5c4ed7f
This is a major refactor of `build.zig`.
The major idea behind the refactor is to split the `build.zig` file up into
distinct `src/build/*.zig` files. By doing so, we can improve readability of
the primary `build.zig` while also enabling better reuse of steps. Our
`build.zig` is now less than 150 lines of code (of course, it calls into a lot
more lines but they're neatly organized now).

Improvements:

  * `build.zig` is less than 150 lines of readable code.
  * Help strings and unicode table generators are only run once when multiple
    artifacts are built since the results are the same regardless of target.
  * Metal lib is only built once per architecture (rather than once per artifact)
  * Resources (shell integration, terminfo, etc.) and docs are only
    built/installed for artifacts that need them

Breaking changes:

  * Removed broken wasm build (@gabydd will re-add)
  * Removed conformance files, shell scripts are better and we don't run
    these anymore
  * Removed macOS app bundle creation, we don't use this anymore since we
    use Xcode

## Some History

Our `build.zig` hasn't been significantly refactored since the project started,
when Zig was _version 0.10_. Since then, the build system has changed
significantly. We've only ever duct taped the `build.zig` as we needed to
support new Zig versions, new features, etc. It was a mess.

The major improvement is adapting the entire Ghostty `build.zig` to the Step
and LazyPath changes introduced way back in Zig 0.12. This lets us better take
advantage of parallelism and the dependency graph so that steps are only
executed as they're needed.

As such, you can see in the build.zig that we initialize a lot of things, but
unless a final target (i.e. install, run) references those steps, _they'll
never be executed_. This lets us clean up a lot.
2025-01-07 19:47:43 -08:00
Mitchell Hashimoto ce77b91bf6
nix fmt 2025-01-05 12:37:56 -08:00
Mitchell Hashimoto 0ae8d9ed42
nix: update hash 2025-01-05 12:30:16 -08:00
Leah Amelia Chen 31439f311d build: add wayland 2025-01-05 12:27:11 -08:00
mitchellh 6db39e827e deps: Update iTerm2 color schemes 2025-01-05 01:00:16 +00:00
Jeffrey C. Ollie 652079b26c
wuffs: update, add jpeg decoding, add simple tests 2025-01-01 22:48:30 -06:00
Mitchell Hashimoto 1d71196de3
up version to 1.0.2 for development 2024-12-31 14:12:00 -08:00
mitchellh 12a333dfb4 deps: Update iTerm2 color schemes 2024-12-31 05:40:18 +00:00
Jeffrey C. Ollie b6e45d49a3
gtk/x11: link directly to libX11, no more dlopen 2024-12-29 01:15:01 -06:00
mitchellh a671ca43f8 deps: Update iTerm2 color schemes 2024-12-29 01:00:43 +00:00
Jeffrey C. Ollie 8ecb11a602
gtk: add option to not link against libX11 2024-12-28 13:40:17 -06:00
Mitchell Hashimoto 35b9ceee21
up the version to 1.0.1 everywhere for dev 2024-12-26 15:21:50 -08:00
Mitchell Hashimoto 68f09eb60d
set version metadata to 1.0.0 2024-12-26 11:49:31 -08:00
Mitchell Hashimoto 010e73517d
nix: move vimfiles instead of copying (#3073) 2024-12-22 19:07:41 -08:00
Qwerasd b920352c39 deps: update z2d to v0.4.0
Introduces static path methods and a reworked context API that makes
things generally cleaner.

This update incidentally fixed a bug we had before where the corner
triangle shade characters were drawn solid rather than medium shade.
2024-12-22 16:07:05 -05:00
Jeffrey C. Ollie b41db4f288
nix: move vimfiles instead of copying 2024-12-22 14:25:36 -06:00
mitchellh 7da6af85e1 deps: Update iTerm2 color schemes 2024-12-22 01:01:15 +00:00
Anund ac6956f1fe nix: support `programs.vim.plugins = [ ghostty.vim ]`
nix vim module expects vim plugins to have their code organized as top level
directories. eg: /ftdetect rather than /share/vim/vimfiles/ftdetect. Adding
a separate output seems like a convenient way to reference the plugin
files in `programs.vim.plugins ...`. Interestingly nvim will find the
plugin via nested directories making ghostty.vim and ghostty the same
for `programs.neovim.plugins`
2024-12-19 07:21:54 -08:00
Anund c39b60709f nix: address warning to use toplevel adwaita-icon-theme 2024-12-17 14:37:20 +11:00
mitchellh 854ec586f9 deps: Update iTerm2 color schemes 2024-12-15 01:05:52 +00:00
mitchellh c4029015b9 deps: Update iTerm2 color schemes 2024-12-12 21:45:11 +00:00
Mitchell Hashimoto 313752dee2
update libxev
This fixes a possible deadlock. This has never happened in reports by
beta testers but good hygiene to get this fixed.
2024-12-08 16:49:50 -08:00
Mitchell Hashimoto 1ee7da174b
flake: update to Nix 24.11 2024-12-05 12:15:48 -08:00
furtidev d32e3be0b3
update nix cache 2024-11-16 21:15:20 +06:00
Mitchell Hashimoto 523e3a6ae3
deps: update iterm2 color themes 2024-11-12 19:49:53 -08:00
Mitchell Hashimoto b26ff0a41b
deps: update zf and nix hash 2024-11-12 19:07:07 -08:00
Mitchell Hashimoto 98c4c453ee
update iterm2 themes 2024-11-05 16:32:30 -08:00
Mitchell Hashimoto f8d2ac6c8c
update zig-objc
removes usingnamespace
2024-11-04 09:52:19 -08:00
Mitchell Hashimoto 038b3dec79
update zig-objc
This fixes a hack we had around apple paths since we do this now
upstream in zig-objc. This also adds in support for NSFastEnumeration
needed for #2586
2024-11-03 15:21:26 -08:00
Mitchell Hashimoto 1a12355dc9
ci: add signing and tarball generation to release-tip workflow 2024-10-24 16:32:43 -07:00
Mitchell Hashimoto 3ae3429bf7
nix: oniguruma needed for dynamic linking 2024-10-24 15:14:46 -07:00
Mitchell Hashimoto 8bb8b01e54
build: use Zig system packaging options
This allows dynamically linking against system libraries, which is
particularly useful for packaging.
2024-10-24 14:46:37 -07:00
Mitchell Hashimoto dc26a9abe0
nix hash 2024-10-15 09:26:46 -07:00
Qwerasd d38d0f30c4 font/sprite: replace pixman with z2d, extend Box coverage
More complete coverage of the Symbols For Legacy Computing block,
including characters from Unicode 16.0.

Pixman and the web canvas impl for Canvas have been removed in favor of
z2d for drawing, since it has a nicer API with more powerful methods,
and is in Zig with no specific platform optimizations so should compile
to wasm no problem.
2024-10-14 17:50:49 -04:00
isabel 02be641358
refactor(nix): stdenv.isX -> stdenv.hostPlatform.isX
In preparation for the deprecation of `stdenv.isX`

e0464e4788
2024-10-14 16:39:28 +01:00
Tim Culverhouse e502597e8d fix(list-keybinds): reset SGR after pretty printing
Update libvaxis which now resets SGR at the end of a pretty print.

Fixes: #2333
2024-09-30 20:16:27 -07:00
Jeffrey C. Ollie cadca8ca45
nix: remove tracy from the devshell 2024-09-27 23:18:42 -05:00
Jeffrey C. Ollie 21a7e40510
nix: move fetch-zig-cache script into nix/build-support 2024-09-27 20:40:03 -05:00
Jeffrey C. Ollie a9b04037b4
nix: don't require the ZIG_LOCAL_CACHE_DIR to be set
NixOS does not set this during Nix package builds. Probably Nix's
caching got in the way of detecting this on my system.
2024-09-27 19:19:51 -05:00
Jeffrey C. Ollie 39733ac3e5
nix: work around ziglang/zig#20976 and fix nix package builds
Because Zig does not fetch recursive dependencies when you run `zig build
--fetch` (see https://github.com/ziglang/zig/issues/20976) we need to do some
extra work to fetch everything that we actually need to build without Internet
access (such as when building a Nix package).

An example of this happening:

```
error: builder for '/nix/store/cx8qcwrhjmjxik2547fw99v5j6np5san-ghostty-0.1.0.drv' failed with exit code 1;
      la/build/tmp.xgHOheUF7V/p/12208cfdda4d5fdbc81b0c44b82e4d6dba2d4a86bff644a153e026fdfc80f8469133/build.zig.zon:7:20: error: unable to discover remote git server capabilities: TemporaryNameServerFailure
      >             .url = "git+https://github.com/zigimg/zigimg#3a667bdb3d7f0955a5a51c8468eac83210c1439e",
      >                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      > /build/tmp.xgHOheUF7V/p/12208cfdda4d5fdbc81b0c44b82e4d6dba2d4a86bff644a153e026fdfc80f8469133/build.zig.zon:16:20: error: unable to discover remote git server capabilities: TemporaryNameServerFailure
      >             .url = "git+https://github.com/mitchellh/libxev#f6a672a78436d8efee1aa847a43a900ad773618b",
      >                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      >
      For full logs, run 'nix log /nix/store/cx8qcwrhjmjxik2547fw99v5j6np5san-ghostty-0.1.0.drv'.
```

To update this script, add any failing URLs with a line like this:

```
  zig fetch <url>
```

Periodically old URLs may need to be cleaned out.

Hopefully when the Zig issue is fixed this script can be eliminated in favor
of a plain `zig build --fetch`.
2024-09-27 15:49:02 -05:00
Jeffrey C. Ollie a969364f93 cli/list-themes: add ability to search theme names 2024-09-27 10:53:58 -07:00
Jeffrey C. Ollie 743e547235 cli: "fancy" theme preview
This adds a "fancy" theme preview to the `+list-themes` CLI action.
By default, if the command is connected to a TTY, it will display the
fancy preview. If it is not connected to a TTY, or the user specifies
`--plain` on the command line, a simple list of themes will be printed
to stdout.

While in the preview `F1` or `?` will show a help screen.
2024-09-27 10:53:58 -07:00
Jeffrey C. Ollie 196c9dc3ba
nix: fix up zig hook in package.nix 2024-09-26 17:24:16 -05:00
Mitchell Hashimoto c91c5164ff
update libxev
This fixes the issue where a write could be interrupted and not retried.
2024-09-23 09:30:57 -07:00
Mitchell Hashimoto a9deb37071
nix: remove ZLS
Fixes #2171

ZLS has caused us issues in our Nix shell before and I noted when we
first added it that we probably shouldn't. We now pin to release
versions of Zig so I think its reasonable to expect developers to have
ZLS installed themselves with the proper version or not use it at all.
2024-09-03 15:18:04 -07:00
Mitchell Hashimoto e6c3ba2cf9
update zig cache hash 2024-09-02 20:47:07 -07:00
Mitchell Hashimoto f133206c55
nix: update cache 2024-08-28 21:43:18 -07:00
Mitchell Hashimoto b826c98701
update nix hash 2024-08-28 21:43:18 -07:00
hanna 329848ca60
update the zig cache hash for nix 2024-08-07 17:53:31 -07:00
Mitchell Hashimoto d50fa27243
nix: update hash 2024-08-06 14:55:40 -07:00
Łukasz Niemier f9be02a20f chore: clean up typos 2024-08-05 13:56:57 +02:00
Mitchell Hashimoto a5ddf57d4c
nix: update hash 2024-08-01 10:30:57 -07:00
Mitchell Hashimoto c8e94a5553
nix: update hash 2024-08-01 10:15:14 -07:00
Mitchell Hashimoto c1ead2e2f1
nix: update to zig 0.13 2024-06-24 15:16:24 -07:00
Mitchell Hashimoto ac0550e267
update libxev 2024-06-24 15:16:24 -07:00
Mitchell Hashimoto 5eff2d88a2
nix: update package to zig 0.13 2024-06-24 15:16:24 -07:00
Mitchell Hashimoto f062d6e405
Update libxev
Fixes #1836, upstream: efde8a1708
2024-06-23 21:32:44 -07:00
isabel 81344faeca
build(nix): include more into source; ignore flake comapct 2024-06-21 18:19:14 +01:00
isabel a73e0183d3
refactor(nix): specify source
this should reduce the amount of rebuilds that need to occur that due to
the souce changing invalidating the cache

also note that a update to nixpkgs-stable had to occur such that the new
lib functions existed
2024-06-21 15:17:43 +01:00
Mitchell Hashimoto 4b277f1bca
update color themes to a34aeb1f505707a35102fe95984d4bea4a85eb3e 2024-06-03 19:24:56 -07:00
Jon Parise 2a66d37e48 Update functional URLs for ghostty-org 2024-06-01 16:44:09 -04:00
Mitchell Hashimoto 0fdbf80381
nix: update hash 2024-05-25 14:12:56 -07:00
Mitchell Hashimoto a11c7ac785
update Dear Imgui to 1.90.6 2024-05-10 10:17:33 -07:00
Mitchell Hashimoto 0030ce7ff9
nix: update hash again 2024-05-09 21:08:43 -07:00
Mitchell Hashimoto 76ff6b81d8
nix: update cache hash 2024-05-09 21:02:26 -07:00
Mitchell Hashimoto dbbaceec4a
fix windows build 2024-04-18 14:48:07 -07:00
Mitchell Hashimoto 5370ac7eef
nix: update cache hash 2024-04-18 14:23:10 -07:00
Mitchell Hashimoto c5496b89ee
nix: do not build ZLS on linux aarch64, see comment 2024-04-11 05:30:20 -07:00
RGBCube aa928b8d87
nix: use packages = instead of (native)buildInputs as that is recommended 2024-03-29 22:27:32 +03:00
Jeffrey C. Ollie bf34582f54
allow building nix package with different optimizations 2024-03-22 20:28:06 -07:00