From 64a5a2980970ee649caf097f7468832799d474fe Mon Sep 17 00:00:00 2001 From: Christoph Schmatzler Date: Wed, 4 Feb 2026 20:22:37 +0000 Subject: [PATCH] Add overseer host package for UI support --- overlays/overseer.nix | 82 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 79 insertions(+), 3 deletions(-) diff --git a/overlays/overseer.nix b/overlays/overseer.nix index a1d575e..78381f6 100644 --- a/overlays/overseer.nix +++ b/overlays/overseer.nix @@ -1,9 +1,9 @@ {inputs}: final: prev: let manifest = (prev.lib.importTOML "${inputs.overseer}/overseer/Cargo.toml").package; -in { - overseer = + + overseer-cli = prev.rustPlatform.buildRustPackage { - pname = manifest.name; + pname = "overseer-cli"; version = manifest.version; cargoLock.lockFile = "${inputs.overseer}/overseer/Cargo.lock"; @@ -22,4 +22,80 @@ in { doCheck = false; }; + + overseer-host = + prev.buildNpmPackage { + pname = "overseer-host"; + version = manifest.version; + + src = "${inputs.overseer}/host"; + + npmDepsHash = "sha256-WIjx6N8vnH3C6Kxn4tiryi3bM0xnov5ok2k9XrndIS0="; + + buildPhase = '' + runHook preBuild + npm run build + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + mkdir -p $out + cp -r dist $out/ + cp -r node_modules $out/ + cp package.json $out/ + runHook postInstall + ''; + }; + + overseer-ui = + prev.buildNpmPackage { + pname = "overseer-ui"; + version = manifest.version; + + src = "${inputs.overseer}/ui"; + + npmDepsHash = "sha256-krOsSd8OAPsdCOCf1bcz9c/Myj6jpHOkaD/l+R7PQpY="; + + buildPhase = '' + runHook preBuild + npm run build + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + mkdir -p $out + cp -r dist $out/ + runHook postInstall + ''; + }; +in { + # The CLI looks for host/dist/index.js and ui/dist relative to the binary + # Using paths like: exe_dir.join("../@dmmulroy/overseer/host/dist/index.js") + # So we create: bin/os and @dmmulroy/overseer/host/dist/index.js + overseer = + prev.runCommand "overseer-${manifest.version}" { + nativeBuildInputs = [prev.makeWrapper]; + } '' + # Create npm-like structure that the CLI expects + mkdir -p $out/bin + mkdir -p $out/@dmmulroy/overseer/host + mkdir -p $out/@dmmulroy/overseer/ui + + # Copy host files + cp -r ${overseer-host}/dist $out/@dmmulroy/overseer/host/ + cp -r ${overseer-host}/node_modules $out/@dmmulroy/overseer/host/ + cp ${overseer-host}/package.json $out/@dmmulroy/overseer/host/ + + # Copy UI files + cp -r ${overseer-ui}/dist $out/@dmmulroy/overseer/ui/ + + # Copy CLI binary + cp ${overseer-cli}/bin/os $out/bin/os + + # Make wrapper that ensures node is available + wrapProgram $out/bin/os \ + --prefix PATH : ${prev.nodejs}/bin + ''; }