From 422a411bd1ab3ae17ee9a49fba3301c6042a8178 Mon Sep 17 00:00:00 2001 From: Kit Langton Date: Sun, 3 May 2026 16:43:06 -0400 Subject: [PATCH 1/2] maintainers: add kitlangton --- maintainers/maintainer-list.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix index b771a590c9dd..d8d2366ff6c5 100644 --- a/maintainers/maintainer-list.nix +++ b/maintainers/maintainer-list.nix @@ -14297,6 +14297,11 @@ githubId = 148352; name = "Jim Fowler"; }; + kitlangton = { + github = "kitlangton"; + githubId = 7587245; + name = "Kit Langton"; + }; kitsunoff = { github = "kitsunoff"; githubId = 58953114; From 9135716c9b5400f67679ceb96dccb0c91b2440a4 Mon Sep 17 00:00:00 2001 From: Kit Langton Date: Sun, 3 May 2026 16:43:06 -0400 Subject: [PATCH 2/2] ghui: init at 0.4.6 --- pkgs/by-name/gh/ghui/package.nix | 142 +++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 pkgs/by-name/gh/ghui/package.nix diff --git a/pkgs/by-name/gh/ghui/package.nix b/pkgs/by-name/gh/ghui/package.nix new file mode 100644 index 000000000000..77abf4ad7864 --- /dev/null +++ b/pkgs/by-name/gh/ghui/package.nix @@ -0,0 +1,142 @@ +{ + lib, + buildNpmPackage, + fetchFromGitHub, + fetchNpmDeps, + bun, + gh, + git, + nodejs, + nix-update-script, + runtimeShell, + versionCheckHook, +}: + +buildNpmPackage (finalAttrs: { + pname = "ghui"; + version = "0.4.6"; + + __structuredAttrs = true; + + src = fetchFromGitHub { + owner = "kitlangton"; + repo = "ghui"; + tag = "v${finalAttrs.version}"; + hash = "sha256-jMi2Pc2VTpj0cZ2zXqtunG0FxcglCNEt9WzWnwxq+Js="; + }; + + npmDeps = fetchNpmDeps { + name = "${finalAttrs.pname}-${finalAttrs.version}-npm-deps"; + inherit (finalAttrs) src; + fetcherVersion = finalAttrs.npmDepsFetcherVersion; + hash = "sha256-GYGegGw80M5T2wETreP95OrCn7F7XxlZcZWy9TjbCHY="; + nativeBuildInputs = [ nodejs ]; + prePatch = '' + export HOME=$TMPDIR + npm pkg set 'dependencies.@ghui/keymap=file:packages/keymap' + npm pkg delete 'devDependencies.@ghui/keymap' + npm install --package-lock-only --ignore-scripts --no-audit --no-fund + ''; + }; + + prePatch = '' + export HOME=$TMPDIR + # prefetch-npm-deps --map-cache reads npmDeps from the process environment. + export npmDeps + npm pkg set 'dependencies.@ghui/keymap=file:packages/keymap' + npm pkg delete 'devDependencies.@ghui/keymap' + cp ${finalAttrs.npmDeps}/package-lock.json package-lock.json + ''; + + nativeBuildInputs = [ bun ]; + + npmDepsFetcherVersion = 3; + + npmFlags = [ + "--no-audit" + "--no-fund" + ]; + + npmBuildScript = "build:cli"; + + nativeInstallCheckInputs = [ versionCheckHook ]; + doInstallCheck = true; + + postInstallCheck = '' + cd $out/lib/ghui + ${lib.getExe bun} -e ' + await import("@effect/atom-react") + await import("@ghui/keymap") + await import("@opentui/core") + await import("@opentui/react") + await import("effect") + await import("react") + await import("scheduler") + ' + ''; + + # The bundled CLI runs on Bun and resolves runtime dependencies from the + # installed node_modules tree. gh is kept on PATH for GitHub API operations. + installPhase = '' + runHook preInstall + + npm prune --omit=dev --no-save --no-audit --no-fund + + mkdir -p $out/lib/ghui $out/bin + cp -r dist node_modules packages package.json README.md LICENSE .env.example $out/lib/ghui/ + rm -f $out/lib/ghui/node_modules/.bin/ghui + + cat > $out/bin/ghui <<'EOF' + #!@runtimeShell@ + case "''${1-}" in + -v|--version|version) + echo @version@ + exit 0 + ;; + -h|--help|help) + printf '%s\n' \ + "ghui @version@" \ + "" \ + "Terminal UI for GitHub pull requests." \ + "" \ + "Usage:" \ + " ghui Start the TUI" \ + " ghui -v, --version" \ + " Print the installed version" \ + " ghui -h, --help Show this help message" + exit 0 + ;; + esac + + export PATH=@path@:$PATH + exec @bun@ "@out@/lib/ghui/dist/index.js" "$@" + EOF + substituteInPlace $out/bin/ghui \ + --replace-fail @runtimeShell@ ${runtimeShell} \ + --replace-fail @version@ ${finalAttrs.version} \ + --replace-fail @path@ ${ + lib.makeBinPath [ + gh + git + ] + } \ + --replace-fail @bun@ ${lib.getExe bun} \ + --replace-fail @out@ $out + chmod +x $out/bin/ghui + + runHook postInstall + ''; + + passthru.updateScript = nix-update-script { }; + + meta = { + description = "Terminal UI for GitHub pull requests"; + homepage = "https://github.com/kitlangton/ghui"; + changelog = "https://github.com/kitlangton/ghui/releases/tag/v${finalAttrs.version}"; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ kitlangton ]; + mainProgram = "ghui"; + platforms = bun.meta.platforms; + sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ]; + }; +})