mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-04-12 10:48:39 +03:00

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
191 lines
4.7 KiB
Nix
191 lines
4.7 KiB
Nix
{
|
|
lib,
|
|
stdenv,
|
|
bzip2,
|
|
expat,
|
|
fontconfig,
|
|
freetype,
|
|
harfbuzz,
|
|
libpng,
|
|
pixman,
|
|
zlib,
|
|
libGL,
|
|
libX11,
|
|
libXcursor,
|
|
libXi,
|
|
libXrandr,
|
|
glib,
|
|
gtk4,
|
|
libadwaita,
|
|
wrapGAppsHook4,
|
|
gsettings-desktop-schemas,
|
|
git,
|
|
ncurses,
|
|
pkg-config,
|
|
zig_0_12,
|
|
pandoc,
|
|
revision ? "dirty",
|
|
optimize ? "Debug",
|
|
}: let
|
|
# The Zig hook has no way to select the release type without actual
|
|
# overriding of the default flags.
|
|
#
|
|
# TODO: Once
|
|
# https://github.com/ziglang/zig/issues/14281#issuecomment-1624220653 is
|
|
# ultimately acted on and has made its way to a nixpkgs implementation, this
|
|
# can probably be removed in favor of that.
|
|
zig012Hook = zig_0_12.hook.overrideAttrs {
|
|
zig_default_flags = "-Dcpu=baseline -Doptimize=${optimize}";
|
|
};
|
|
|
|
# We limit source like this to try and reduce the amount of rebuilds as possible
|
|
# thus we only provide the source that is needed for the build
|
|
#
|
|
# NOTE: as of the current moment only linux files are provided,
|
|
# since darwin support is not finished
|
|
src = lib.fileset.toSource {
|
|
root = ../.;
|
|
fileset = lib.fileset.intersection (lib.fileset.fromSource (lib.sources.cleanSource ../.)) (
|
|
lib.fileset.unions [
|
|
../dist/linux
|
|
../conformance
|
|
../images
|
|
../pkg
|
|
../src
|
|
../vendor
|
|
../build.zig
|
|
../build.zig.zon
|
|
]
|
|
);
|
|
};
|
|
|
|
# This hash is the computation of the zigCache fixed-output derivation. This
|
|
# allows us to use remote package dependencies without breaking the sandbox.
|
|
#
|
|
# This will need updating whenever dependencies get updated (e.g. changes are
|
|
# made to zig.build.zon). If you see that the main build is trying to reach
|
|
# out to the internet and failing, this is likely the cause. Change this
|
|
# value back to lib.fakeHash, and re-run. The build failure should emit the
|
|
# updated hash, which of course, should be validated before updating here.
|
|
#
|
|
# (It's also possible that you might see a hash mismatch - without the
|
|
# network errors - if you don't have a previous instance of the cache
|
|
# derivation in your store already. If so, just update the value as above.)
|
|
zigCacheHash = import ./zigCacheHash.nix;
|
|
|
|
zigCache = stdenv.mkDerivation {
|
|
inherit src;
|
|
name = "ghostty-cache";
|
|
nativeBuildInputs = [
|
|
git
|
|
zig_0_12.hook
|
|
];
|
|
|
|
dontConfigure = true;
|
|
dontUseZigBuild = true;
|
|
dontUseZigInstall = true;
|
|
dontFixup = true;
|
|
|
|
buildPhase = ''
|
|
runHook preBuild
|
|
|
|
zig build --fetch
|
|
|
|
runHook postBuild
|
|
'';
|
|
|
|
installPhase = ''
|
|
runHook preInstall
|
|
|
|
cp -r --reflink=auto $ZIG_GLOBAL_CACHE_DIR $out
|
|
|
|
runHook postInstall
|
|
'';
|
|
|
|
outputHashMode = "recursive";
|
|
outputHash = zigCacheHash;
|
|
};
|
|
in
|
|
stdenv.mkDerivation (finalAttrs: {
|
|
pname = "ghostty";
|
|
version = "0.1.0";
|
|
inherit src;
|
|
|
|
nativeBuildInputs = [
|
|
git
|
|
ncurses
|
|
pandoc
|
|
pkg-config
|
|
zig012Hook
|
|
wrapGAppsHook4
|
|
];
|
|
|
|
buildInputs =
|
|
[
|
|
libGL
|
|
]
|
|
++ lib.optionals stdenv.isLinux [
|
|
bzip2
|
|
expat
|
|
fontconfig
|
|
freetype
|
|
harfbuzz
|
|
libpng
|
|
pixman
|
|
zlib
|
|
|
|
libX11
|
|
libXcursor
|
|
libXi
|
|
libXrandr
|
|
|
|
libadwaita
|
|
gtk4
|
|
glib
|
|
gsettings-desktop-schemas
|
|
];
|
|
|
|
dontConfigure = true;
|
|
|
|
zigBuildFlags = "-Dversion-string=${finalAttrs.version}-${revision}-nix";
|
|
|
|
preBuild = ''
|
|
rm -rf $ZIG_GLOBAL_CACHE_DIR
|
|
cp -r --reflink=auto ${zigCache} $ZIG_GLOBAL_CACHE_DIR
|
|
chmod u+rwX -R $ZIG_GLOBAL_CACHE_DIR
|
|
'';
|
|
|
|
outputs = ["out" "terminfo" "shell_integration"];
|
|
|
|
postInstall = ''
|
|
terminfo_src=${
|
|
if stdenv.isDarwin
|
|
then ''"$out/Applications/Ghostty.app/Contents/Resources/terminfo"''
|
|
else "$out/share/terminfo"
|
|
}
|
|
|
|
mkdir -p "$out/nix-support"
|
|
|
|
mkdir -p "$terminfo/share"
|
|
mv "$terminfo_src" "$terminfo/share/terminfo"
|
|
ln -sf "$terminfo/share/terminfo" "$terminfo_src"
|
|
echo "$terminfo" >> "$out/nix-support/propagated-user-env-packages"
|
|
|
|
mkdir -p "$shell_integration"
|
|
mv "$out/share/ghostty/shell-integration" "$shell_integration/shell-integration"
|
|
ln -sf "$shell_integration/shell-integration" "$out/share/ghostty/shell-integration"
|
|
echo "$shell_integration" >> "$out/nix-support/propagated-user-env-packages"
|
|
'';
|
|
|
|
postFixup = ''
|
|
patchelf --add-rpath "${lib.makeLibraryPath [libX11]}" "$out/bin/.ghostty-wrapped"
|
|
'';
|
|
|
|
meta = {
|
|
homepage = "https://github.com/ghostty-org/ghostty";
|
|
license = lib.licenses.mit;
|
|
platforms = ["x86_64-linux" "aarch64-linux"];
|
|
mainProgram = "ghostty";
|
|
};
|
|
})
|