%bcond_with zig_cache %global app_id com.mitchellh.ghostty %global zig_version 0.16.0 # libghostty-vt currently trips Fedora debuginfo extraction: # *** ERROR: No build ID note found in .../libghostty-vt.so.0.1.0 # For this personal COPR package, keep the RPM simple and disable debuginfo. %global debug_package %{nil} %global _build_id_links none Name: ghostty Version: 1.3.1 Release: 11%{?dist} Summary: Fast, feature-rich, GPU-accelerated terminal emulator License: MIT URL: https://github.com/ghostty-org/ghostty Source0: https://release.files.ghostty.org/%{version}/%{name}-%{version}.tar.gz %if %{with zig_cache} Source1: %{name}-%{version}-zig-cache.tar.zst %endif ExclusiveArch: x86_64 aarch64 BuildRequires: gcc BuildRequires: gcc-c++ BuildRequires: gettext BuildRequires: pandoc-cli BuildRequires: pkgconf-pkg-config BuildRequires: systemd-rpm-macros BuildRequires: zstd BuildRequires: zig >= %{zig_version} BuildRequires: desktop-file-utils BuildRequires: bzip2-devel BuildRequires: pkgconfig(fontconfig) BuildRequires: pkgconfig(freetype2) BuildRequires: pkgconfig(glib-2.0) BuildRequires: pkgconfig(gtk4) BuildRequires: pkgconfig(gtk4-layer-shell-0) BuildRequires: pkgconfig(harfbuzz) BuildRequires: pkgconfig(libadwaita-1) BuildRequires: pkgconfig(libpng) BuildRequires: pkgconfig(oniguruma) BuildRequires: pkgconfig(wayland-client) BuildRequires: pkgconfig(x11) BuildRequires: pkgconfig(zlib) Requires: ncurses-term Requires: hicolor-icon-theme %description Ghostty is a fast, feature-rich, GPU-accelerated terminal emulator that uses platform-native UI and aims to provide modern terminal features with good defaults. %prep %autosetup -n %{name}-%{version} zig version | grep -q -E '^[0-9]+\.[0-9]+\.[0-9]+$' %if %{with zig_cache} tar -xaf %{SOURCE1} test -d zig-cache/p %endif %build export ZIG_GLOBAL_CACHE_DIR="$PWD/.zig-global-cache" export ZIG_LOCAL_CACHE_DIR="$PWD/.zig-cache-local" ZIG_SYSTEM_ARGS= %if %{with zig_cache} ZIG_SYSTEM_ARGS="--system $PWD/zig-cache/p" %endif zig build $ZIG_SYSTEM_ARGS \ --summary all \ -Dversion-string=%{version} \ -Doptimize=ReleaseFast \ -Dcpu=baseline \ -Dpie=true \ -Dstrip=false \ -Demit-docs %install rm -rf %{buildroot} export ZIG_GLOBAL_CACHE_DIR="$PWD/.zig-global-cache" export ZIG_LOCAL_CACHE_DIR="$PWD/.zig-cache-local" ZIG_SYSTEM_ARGS= %if %{with zig_cache} ZIG_SYSTEM_ARGS="--system $PWD/zig-cache/p" %endif DESTDIR="%{buildroot}" zig build $ZIG_SYSTEM_ARGS \ --summary all \ --prefix "%{_prefix}" \ -Dversion-string=%{version} \ -Doptimize=ReleaseFast \ -Dcpu=baseline \ -Dpie=true \ -Dstrip=false \ -Demit-docs test -x %{buildroot}%{_bindir}/ghostty # Do not ship /usr/share/terminfo/g/ghostty on Fedora. # Fedora's ncurses-term already owns this file, otherwise installation fails: # /usr/share/terminfo/g/ghostty conflicts with ncurses-term. rm -f %{buildroot}%{_datadir}/terminfo/g/ghostty # Keep xterm-ghostty from Ghostty itself. test -f %{buildroot}%{_datadir}/terminfo/x/xterm-ghostty # Do not ship nautilus-python extension. rm -f %{buildroot}%{_datadir}/nautilus-python/extensions/ghostty.py # Move libghostty-vt from /usr/lib to /usr/lib64 on 64-bit Fedora if upstream # installs it under the generic lib directory. if [ "%{_libdir}" != "%{_prefix}/lib" ]; then install -dm0755 %{buildroot}%{_libdir} if ls %{buildroot}%{_prefix}/lib/libghostty-vt.so* >/dev/null 2>&1; then mv %{buildroot}%{_prefix}/lib/libghostty-vt.so* %{buildroot}%{_libdir}/ fi fi # Put libghostty-vt pkgconfig metadata in the arch-specific pkgconfig dir. if [ -f %{buildroot}%{_datadir}/pkgconfig/libghostty-vt.pc ]; then install -dm0755 %{buildroot}%{_libdir}/pkgconfig mv %{buildroot}%{_datadir}/pkgconfig/libghostty-vt.pc %{buildroot}%{_libdir}/pkgconfig/ fi if [ -f %{buildroot}%{_prefix}/lib/pkgconfig/libghostty-vt.pc ]; then install -dm0755 %{buildroot}%{_libdir}/pkgconfig mv %{buildroot}%{_prefix}/lib/pkgconfig/libghostty-vt.pc %{buildroot}%{_libdir}/pkgconfig/ fi if [ -f %{buildroot}%{_libdir}/pkgconfig/libghostty-vt.pc ]; then sed -i \ -e 's|^prefix=.*|prefix=%{_prefix}|' \ -e 's|^libdir=.*|libdir=%{_libdir}|' \ -e 's|^includedir=.*|includedir=%{_includedir}|' \ %{buildroot}%{_libdir}/pkgconfig/libghostty-vt.pc fi # Remove empty leftovers after moving libraries/pkgconfig files. find %{buildroot}%{_prefix}/lib -type d -empty -delete 2>/dev/null || : # If Zig/upstream generated desktop/dbus/systemd/pkgconfig files with the # buildroot path embedded, strip it from text files. grep -RIl -- "%{buildroot}" "%{buildroot}" | while IFS= read -r file; do sed -i "s|%{buildroot}||g" "$file" done # Final sanity check: no staged text file may contain BUILDROOT. ! grep -RIl -- "%{buildroot}" "%{buildroot}" %find_lang %{app_id} %check desktop-file-validate %{buildroot}%{_datadir}/applications/%{app_id}.desktop %{buildroot}%{_bindir}/ghostty --version %files -f %{app_id}.lang %license LICENSE %doc README.md %{_bindir}/ghostty %{_datadir}/applications/%{app_id}.desktop %{_metainfodir}/%{app_id}.metainfo.xml %{_datadir}/dbus-1/services/%{app_id}.service %{_datadir}/ghostty/ %{_datadir}/icons/hicolor/*/apps/%{app_id}.png %{_mandir}/man1/ghostty.1* %{_mandir}/man5/ghostty.5* %{_datadir}/bash-completion/completions/ghostty.bash %{_datadir}/fish/vendor_completions.d/ghostty.fish %{_datadir}/zsh/site-functions/_ghostty %{_datadir}/bat/syntaxes/ghostty.sublime-syntax %{_datadir}/kio/servicemenus/%{app_id}.desktop %{_datadir}/nvim/site/compiler/ghostty.vim %{_datadir}/nvim/site/ftdetect/ghostty.vim %{_datadir}/nvim/site/ftplugin/ghostty.vim %{_datadir}/nvim/site/syntax/ghostty.vim %{_datadir}/vim/vimfiles/compiler/ghostty.vim %{_datadir}/vim/vimfiles/ftdetect/ghostty.vim %{_datadir}/vim/vimfiles/ftplugin/ghostty.vim %{_datadir}/vim/vimfiles/syntax/ghostty.vim # Do not package /usr/share/terminfo/g/ghostty; ncurses-term owns it. %{_datadir}/terminfo/x/xterm-ghostty %{_includedir}/ghostty/ %{_libdir}/libghostty-vt.so* %{_libdir}/pkgconfig/libghostty-vt.pc %changelog * Fri May 08 2026 sachesi - 1.3.1-11 - Default to online build (%bcond_with zig_cache) for Copr enable_net=True - Drop nautilus-python extension and Recommends * Tue Apr 28 2026 sachesi - 1.3.1-9 - Remove /usr/share/terminfo/g/ghostty to avoid conflict with ncurses-term - Require ncurses-term for the system Ghostty terminfo entry - Keep xterm-ghostty packaged from Ghostty - Move libghostty-vt artifacts to Fedora libdir/pkgconfig locations - Disable debuginfo for personal COPR build because libghostty-vt lacks build-id - Add missing pandoc-cli and oniguruma build dependencies