From 7e71cc6192d0db14f94f1d5d25fa84033cd9ae7f Mon Sep 17 00:00:00 2001 From: Lin Jian Date: Wed, 22 Jul 2026 21:07:09 +0800 Subject: [PATCH 1/3] emacs.pkgs.ghostel: teach updateScript to update vendored zig deps --- .../emacs/elisp-packages/manual-packages/ghostel/package.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ghostel/package.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ghostel/package.nix index 588218f3f05a..65ce4fe60a00 100644 --- a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ghostel/package.nix +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ghostel/package.nix @@ -69,9 +69,10 @@ melpaBuild { ''; passthru = { - updateScript = nix-update-script { }; + updateScript = nix-update-script { extraArgs = [ "--custom-dep=deps" ]; }; inherit module; + inherit (module) deps; }; meta = { From 1724d46f5b24f1dc5a6025814c6bdd1e8ae9fadd Mon Sep 17 00:00:00 2001 From: Lin Jian Date: Wed, 22 Jul 2026 21:19:29 +0800 Subject: [PATCH 2/3] emacs.pkgs.ghostel: rename vendored zig deps from deps to zigDeps nix-update knows[1] zigDeps so we can remove --custom-dep after the renaming. [1]: https://github.com/Mic92/nix-update/blob/cf68051e7b7e08de6c707484cdcd1a53feb48e05/nix_update/dependency_hashes.py#L230 --- .../elisp-packages/manual-packages/ghostel/package.nix | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ghostel/package.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ghostel/package.nix index 65ce4fe60a00..cf607e49a6fc 100644 --- a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ghostel/package.nix +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ghostel/package.nix @@ -26,7 +26,7 @@ let module = stdenv.mkDerivation (finalAttrs: { inherit pname version src; - deps = zig.fetchDeps { + zigDeps = zig.fetchDeps { inherit (finalAttrs) src pname version; fetchAll = true; hash = "sha256-yrVgiofdmVjTGJ+PGPGRCc8gb/JcEca1uAzIoPgHHqU="; @@ -49,7 +49,7 @@ let zigBuildFlags = finalAttrs.zigCheckFlags; postConfigure = '' - cp -rLT ${finalAttrs.deps} "$ZIG_GLOBAL_CACHE_DIR/p" + cp -rLT ${finalAttrs.zigDeps} "$ZIG_GLOBAL_CACHE_DIR/p" chmod -R u+w "$ZIG_GLOBAL_CACHE_DIR/p" ''; }); @@ -69,10 +69,10 @@ melpaBuild { ''; passthru = { - updateScript = nix-update-script { extraArgs = [ "--custom-dep=deps" ]; }; + updateScript = nix-update-script { }; inherit module; - inherit (module) deps; + inherit (module) zigDeps; }; meta = { From 99800dd6b5955e2955848a9e0bbf95c899ccf814 Mon Sep 17 00:00:00 2001 From: Lin Jian Date: Wed, 22 Jul 2026 21:31:42 +0800 Subject: [PATCH 3/3] emacs.pkgs.ghostel: ease overrideAttrs of local bumps To make overrideAttrs pleasant, we should merge the elisp derivation and the zig module derivation into one derivation. One way is to make zig build hooks composable via #514028. This patch tries to make overrideAttrs less painful based on the current situation. With this patch, overrideAttrs can be done like this: emacs.pkgs.ghostel.overrideAttrs (old: { version = "0.41.0"; src = old.src.override { hash = "sha256-07Ml/eRIHyptI6MNlHhDNsfIiXOAUVKaEalDVJ101WM="; }; zigDeps = old.zigDeps.overrideAttrs { outputHash = "sha256-lFU0ywNyP1q2NL9MkIfWciH03VAA/Act5dGYAV4V7EY="; }; }) --- .../manual-packages/ghostel/package.nix | 99 +++++++++++-------- 1 file changed, 58 insertions(+), 41 deletions(-) diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ghostel/package.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ghostel/package.nix index cf607e49a6fc..16a9e0f2161a 100644 --- a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ghostel/package.nix +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ghostel/package.nix @@ -12,6 +12,46 @@ let zig = zig_0_15; + mkModule = + { + pname, + version, + src, + zigDeps, + }: + stdenv.mkDerivation (finalAttrs: { + inherit + pname + version + src + zigDeps + ; + + nativeBuildInputs = [ zig ] ++ lib.optionals stdenv.hostPlatform.isDarwin [ xcbuild ]; + + env.EMACS_INCLUDE_DIR = "${emacs}/include"; + + dontSetZigDefaultFlags = true; + + doCheck = true; + + zigCheckFlags = [ + "-Dcpu=baseline" + # See https://github.com/ghostty-org/ghostty/blob/main/PACKAGING.md#build-options + "-Doptimize=ReleaseFast" + ]; + + zigBuildFlags = finalAttrs.zigCheckFlags; + + postConfigure = '' + cp -rLT ${finalAttrs.zigDeps} "$ZIG_GLOBAL_CACHE_DIR/p" + chmod -R u+w "$ZIG_GLOBAL_CACHE_DIR/p" + ''; + }); + + libExt = stdenv.hostPlatform.extensions.sharedLibrary; +in +melpaBuild (finalAttrs: { pname = "ghostel"; version = "0.44.0"; @@ -19,60 +59,37 @@ let src = fetchFromGitHub { owner = "dakra"; repo = "ghostel"; - tag = "v${version}"; + tag = "v${finalAttrs.version}"; hash = "sha256-vRGZoQtjsL42ga07fOfEjccKRidAhqgwHBoKs++62Ls="; }; - module = stdenv.mkDerivation (finalAttrs: { - inherit pname version src; - - zigDeps = zig.fetchDeps { - inherit (finalAttrs) src pname version; - fetchAll = true; - hash = "sha256-yrVgiofdmVjTGJ+PGPGRCc8gb/JcEca1uAzIoPgHHqU="; - }; - - nativeBuildInputs = [ zig ] ++ lib.optionals stdenv.hostPlatform.isDarwin [ xcbuild ]; - - env.EMACS_INCLUDE_DIR = "${emacs}/include"; - - dontSetZigDefaultFlags = true; - - doCheck = true; - - zigCheckFlags = [ - "-Dcpu=baseline" - # See https://github.com/ghostty-org/ghostty/blob/main/PACKAGING.md#build-options - "-Doptimize=ReleaseFast" - ]; - - zigBuildFlags = finalAttrs.zigCheckFlags; - - postConfigure = '' - cp -rLT ${finalAttrs.zigDeps} "$ZIG_GLOBAL_CACHE_DIR/p" - chmod -R u+w "$ZIG_GLOBAL_CACHE_DIR/p" - ''; - }); - - libExt = stdenv.hostPlatform.extensions.sharedLibrary; -in -melpaBuild { - inherit pname version src; + # this can be put into mkModule, but we put it here to ease user overrideAttrs + zigDeps = zig.fetchDeps { + inherit (finalAttrs) src pname version; + fetchAll = true; + hash = "sha256-yrVgiofdmVjTGJ+PGPGRCc8gb/JcEca1uAzIoPgHHqU="; + }; files = '' (:defaults "etc" "ghostel-module${libExt}" "ghostel-module.version") ''; preBuild = '' - install ${module}/ghostel-module${libExt} ghostel-module${libExt} - install --mode=444 ${module}/ghostel-module.version ghostel-module.version + install ${finalAttrs.finalPackage.module}/ghostel-module${libExt} ghostel-module${libExt} + install --mode=444 ${finalAttrs.finalPackage.module}/ghostel-module.version ghostel-module.version ''; passthru = { updateScript = nix-update-script { }; - inherit module; - inherit (module) zigDeps; + module = mkModule { + pname = "${finalAttrs.pname}-module"; + inherit (finalAttrs) + version + src + zigDeps + ; + }; }; meta = { @@ -84,4 +101,4 @@ melpaBuild { ]; license = lib.licenses.gpl3Plus; }; -} +})