feat(dist): generate completions, editor syntax, man pages, translations
Ports Ghostty's build-data helpers (main_build_data.zig, src/extra/*, build/mdgen) as the ghostty-build-data binary: bash/zsh/fish completions, Vim syntax/ftdetect/ftplugin/compiler, Sublime syntax (also used by bat), terminfo source and ghostty(1)/ghostty(5) markdown. With the version set to the installed 1.3.1-arch2, all generated files are byte-identical to the installed Ghostty's. - `just docs` renders man pages and HTML with pandoc. - po/: Ghostty's 29 translation catalogs; `just locales` compiles them into the com.mitchellh.ghostty gettext domain. - `just install PREFIX FLATPAK SYSTEM_PACKAGE` installs everything incl. terminfo text/termcap outputs and mirrors GhosttyResources.zig install modes (Flatpak D-Bus template without systemd; lib/systemd/user for system packages). - Build metadata (version, tip/stable channel, commit, build mode) is derived at build time like build_config.zig; GTK/libadwaita compile-time versions come from pkg-config instead of constants. Test Plan: - cargo run -p ghostty-build-data -- +bash | diff - \ /usr/share/bash-completion/completions/ghostty (same for zsh/fish/vim) - just install /tmp/prefix
This commit is contained in:
1 parent
b65bfc575c
commit
b192fdb046
56 files changed
+12614
-16
No files matched your search
@@ -34,34 +34,130 @@ test:
|
||||
clean:
|
||||
cargo clean
|
||||
|
||||
# Install bin + share/ghostty (shell-integration, themes) + share/terminfo +
|
||||
# desktop file, D-Bus/systemd/metainfo and icons, mirroring Ghostty's
|
||||
# GhosttyResources.zig. Usage: `just install /usr/local` (default PREFIX
|
||||
# /usr/local; honours DESTDIR). Builds the release profile.
|
||||
install PREFIX="/usr/local": build-release
|
||||
# Build the build-data generator (Zig: `ghostty-build-data`,
|
||||
# src/main_build_data.zig) in release mode.
|
||||
build-data:
|
||||
cargo build --release -p ghostty-build-data
|
||||
|
||||
# Print generated build data to stdout. MODE is one of: bash zsh fish sublime
|
||||
# vim-syntax vim-ftdetect vim-ftplugin vim-compiler terminfo mdgen-ghostty-1
|
||||
# mdgen-ghostty-5. Example: `just build-data-run bash`.
|
||||
build-data-run MODE:
|
||||
cargo run -q --release -p ghostty-build-data -- "+{{ MODE }}"
|
||||
|
||||
# Generate the man page markdown (ghostty.1.md / ghostty.5.md) plus html and
|
||||
# roff man pages via pandoc into OUT (Zig: GhosttyDocs.zig). When pandoc is
|
||||
# not installed only the markdown is produced.
|
||||
docs OUT="target/docs": build-data
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
mkdir -p "{{ OUT }}"
|
||||
for s in 1 5; do
|
||||
target/release/ghostty-build-data "+mdgen-ghostty-$s" > "{{ OUT }}/ghostty.$s.md"
|
||||
if command -v pandoc >/dev/null 2>&1; then
|
||||
pandoc --standalone --from markdown --to html "{{ OUT }}/ghostty.$s.md" > "{{ OUT }}/ghostty.$s.html"
|
||||
pandoc --standalone --from markdown --to man "{{ OUT }}/ghostty.$s.md" > "{{ OUT }}/ghostty.$s"
|
||||
else
|
||||
echo "pandoc not found: only markdown written for ghostty($s)" >&2
|
||||
fi
|
||||
done
|
||||
|
||||
# Compile the gettext catalogs in po/ into OUT/<lang>/LC_MESSAGES/<domain>.mo
|
||||
# (Zig: GhosttyI18n.zig; domain com.mitchellh.ghostty).
|
||||
locales OUT="target/locale":
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
for po in po/*.po; do
|
||||
lang=$(basename "$po" .po)
|
||||
mkdir -p "{{ OUT }}/$lang/LC_MESSAGES"
|
||||
msgfmt -o "{{ OUT }}/$lang/LC_MESSAGES/com.mitchellh.ghostty.mo" "$po"
|
||||
done
|
||||
|
||||
# Install bin + share/ghostty (shell-integration, themes, docs) +
|
||||
# share/terminfo (compiled db, ghostty.terminfo, ghostty.termcap) + shell
|
||||
# completions, vim/neovim/bat syntax, man pages, translations, desktop file,
|
||||
# D-Bus/systemd/metainfo and icons, mirroring Ghostty's GhosttyResources.zig,
|
||||
# GhosttyDocs.zig and GhosttyI18n.zig.
|
||||
#
|
||||
# Usage: `just install [PREFIX] [FLATPAK] [SYSTEM_PACKAGE]`; honours DESTDIR.
|
||||
# PREFIX install prefix (default /usr/local)
|
||||
# FLATPAK "true": use the Flatpak D-Bus template, no systemd unit
|
||||
# and no 1024x1024 icon (Zig: -Dflatpak)
|
||||
# SYSTEM_PACKAGE "true": install the systemd user unit to lib/systemd/user
|
||||
# instead of share/systemd/user (Zig: --system / system
|
||||
# package mode)
|
||||
install PREFIX="/usr/local" FLATPAK="false" SYSTEM_PACKAGE="false": build-release build-data docs locales
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
P="${DESTDIR:-}{{ PREFIX }}"
|
||||
BD=target/release/ghostty-build-data
|
||||
install -Dm755 target/release/ghostty "$P/bin/ghostty"
|
||||
mkdir -p "$P/share/ghostty" "$P/share/terminfo"
|
||||
cp -R resources/shell-integration resources/themes "$P/share/ghostty/"
|
||||
find "$P/share/ghostty/shell-integration" -name '*.md' -delete
|
||||
find "$P/share/ghostty/themes" -name '*.md' -delete
|
||||
|
||||
# Terminfo: compiled database plus the textual sources.
|
||||
cp -R resources/terminfo/. "$P/share/terminfo/"
|
||||
$BD +terminfo > "$P/share/terminfo/ghostty.terminfo"
|
||||
if command -v infotocap >/dev/null 2>&1; then
|
||||
infotocap "$P/share/terminfo/ghostty.terminfo" > "$P/share/terminfo/ghostty.termcap" 2>/dev/null
|
||||
else
|
||||
echo "infotocap not found: skipping ghostty.termcap" >&2
|
||||
fi
|
||||
|
||||
# Shell completions.
|
||||
$BD +fish | install -Dm644 /dev/stdin "$P/share/fish/vendor_completions.d/ghostty.fish"
|
||||
$BD +zsh | install -Dm644 /dev/stdin "$P/share/zsh/site-functions/_ghostty"
|
||||
$BD +bash | install -Dm644 /dev/stdin "$P/share/bash-completion/completions/ghostty.bash"
|
||||
|
||||
# Vim and Neovim plugin files, and the sublime syntax used by bat.
|
||||
for root in share/vim/vimfiles share/nvim/site; do
|
||||
$BD +vim-syntax | install -Dm644 /dev/stdin "$P/$root/syntax/ghostty.vim"
|
||||
$BD +vim-ftdetect | install -Dm644 /dev/stdin "$P/$root/ftdetect/ghostty.vim"
|
||||
$BD +vim-ftplugin | install -Dm644 /dev/stdin "$P/$root/ftplugin/ghostty.vim"
|
||||
$BD +vim-compiler | install -Dm644 /dev/stdin "$P/$root/compiler/ghostty.vim"
|
||||
done
|
||||
$BD +sublime | install -Dm644 /dev/stdin "$P/share/bat/syntaxes/ghostty.sublime-syntax"
|
||||
|
||||
# Docs (markdown always; html and man pages when pandoc is available).
|
||||
for s in 1 5; do
|
||||
install -Dm644 "target/docs/ghostty.$s.md" "$P/share/ghostty/doc/ghostty.$s.md"
|
||||
if [ -f "target/docs/ghostty.$s" ]; then
|
||||
install -Dm644 "target/docs/ghostty.$s.html" "$P/share/ghostty/doc/ghostty.$s.html"
|
||||
install -Dm644 "target/docs/ghostty.$s" "$P/share/man/man$s/ghostty.$s"
|
||||
fi
|
||||
done
|
||||
|
||||
# Translations.
|
||||
for mo in target/locale/*/LC_MESSAGES/com.mitchellh.ghostty.mo; do
|
||||
lang=$(basename "$(dirname "$(dirname "$mo")")")
|
||||
install -Dm644 "$mo" "$P/share/locale/$lang/LC_MESSAGES/com.mitchellh.ghostty.mo"
|
||||
done
|
||||
|
||||
gen() { # template out
|
||||
mkdir -p "$(dirname "$2")"
|
||||
sed -e 's|@NAME@|Ghostty|g' -e 's|@APPID@|com.mitchellh.ghostty|g' \
|
||||
-e "s|@GHOSTTY@|{{ PREFIX }}/bin/ghostty|g" "$1" > "$2"
|
||||
}
|
||||
gen dist/linux/app.desktop.in "$P/share/applications/com.mitchellh.ghostty.desktop"
|
||||
gen dist/linux/dbus.service.in "$P/share/dbus-1/services/com.mitchellh.ghostty.service"
|
||||
gen dist/linux/systemd.service.in "$P/share/systemd/user/app-com.mitchellh.ghostty.service"
|
||||
if [ "{{ FLATPAK }}" = "true" ]; then
|
||||
gen dist/linux/dbus.service.flatpak.in "$P/share/dbus-1/services/com.mitchellh.ghostty.service"
|
||||
else
|
||||
gen dist/linux/dbus.service.in "$P/share/dbus-1/services/com.mitchellh.ghostty.service"
|
||||
# systemd looks in lib/ for system packages and share/ otherwise.
|
||||
sysd=share
|
||||
if [ "{{ SYSTEM_PACKAGE }}" = "true" ]; then sysd=lib; fi
|
||||
gen dist/linux/systemd.service.in "$P/$sysd/systemd/user/app-com.mitchellh.ghostty.service"
|
||||
fi
|
||||
gen dist/linux/com.mitchellh.ghostty.metainfo.xml.in "$P/share/metainfo/com.mitchellh.ghostty.metainfo.xml"
|
||||
install -Dm644 dist/linux/ghostty_dolphin.desktop "$P/share/kio/servicemenus/com.mitchellh.ghostty.desktop"
|
||||
install -Dm755 dist/linux/ghostty_nautilus.py "$P/share/nautilus-python/extensions/ghostty.py"
|
||||
ic="$P/share/icons/hicolor"
|
||||
for pair in 16:16x16 32:32x32 128:128x128 256:256x256 512:512x512 1024:1024x1024 \
|
||||
32:16x16@2 64:32x32@2 256:128x128@2 512:256x256@2; do
|
||||
# Flatpaks only support icons up to 512x512.
|
||||
if [ "{{ FLATPAK }}" = "true" ] && [ "${pair%%:*}" = "1024" ]; then continue; fi
|
||||
install -Dm644 "dist/icons/${pair%%:*}.png" "$ic/${pair##*:}/apps/com.mitchellh.ghostty.png"
|
||||
done
|
||||
echo "installed to $P"
|
||||
|
||||
Reference in new issue
Block a user