From b409742911835ee955d74f75ec23a60677261aa3 Mon Sep 17 00:00:00 2001 From: "Dylan M. Taylor" Date: Thu, 30 Apr 2026 19:10:51 -0400 Subject: [PATCH 1/3] headlamp-server: init at 0.41.0 --- pkgs/by-name/he/headlamp-server/package.nix | 49 +++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 pkgs/by-name/he/headlamp-server/package.nix diff --git a/pkgs/by-name/he/headlamp-server/package.nix b/pkgs/by-name/he/headlamp-server/package.nix new file mode 100644 index 000000000000..6cb3ac559dc6 --- /dev/null +++ b/pkgs/by-name/he/headlamp-server/package.nix @@ -0,0 +1,49 @@ +{ + lib, + buildGoModule, + fetchFromGitHub, +}: + +buildGoModule rec { + pname = "headlamp-server"; + version = "0.41.0"; + + strictDeps = true; + __structuredAttrs = true; + + src = fetchFromGitHub { + owner = "kubernetes-sigs"; + repo = "headlamp"; + tag = "v${version}"; + hash = "sha256-ZXyE4oPkwimnU2ArOiTCnLxzaI5z/7T/SHS9aqP2DGM="; + }; + + modRoot = "backend"; + + vendorHash = "sha256-JjfB93C97yTbUTUbs7wEB/iFtuRzHzFXGyRHDAec7X8="; + + # Don't embed frontend - Electron serves it directly. This also prevents + # the server from auto-opening a browser window. + + ldflags = [ + "-s" + "-w" + "-X github.com/kubernetes-sigs/headlamp/backend/pkg/kubeconfig.Version=${version}" + "-X github.com/kubernetes-sigs/headlamp/backend/pkg/kubeconfig.AppName=Headlamp" + ]; + + subPackages = [ "cmd" ]; + + postInstall = '' + mv $out/bin/cmd $out/bin/headlamp-server + ''; + + meta = { + description = "An easy-to-use and extensible Kubernetes web UI"; + homepage = "https://headlamp.dev"; + changelog = "https://github.com/kubernetes-sigs/headlamp/releases/tag/v${version}"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ dylanmtaylor ]; + mainProgram = "headlamp-server"; + }; +} From 1780a5156c4f58ba91f4ae61a4dc3a850e4a970e Mon Sep 17 00:00:00 2001 From: "Dylan M. Taylor" Date: Thu, 30 Apr 2026 19:12:40 -0400 Subject: [PATCH 2/3] headlamp-frontend: init at 0.41.0 --- pkgs/by-name/he/headlamp-frontend/package.nix | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 pkgs/by-name/he/headlamp-frontend/package.nix diff --git a/pkgs/by-name/he/headlamp-frontend/package.nix b/pkgs/by-name/he/headlamp-frontend/package.nix new file mode 100644 index 000000000000..191a68b1547c --- /dev/null +++ b/pkgs/by-name/he/headlamp-frontend/package.nix @@ -0,0 +1,53 @@ +{ + buildNpmPackage, + headlamp-server, +}: + +buildNpmPackage { + pname = "headlamp-frontend"; + inherit (headlamp-server) version src; + + strictDeps = true; + __structuredAttrs = true; + + sourceRoot = "${headlamp-server.src.name}/frontend"; + + npmDepsHash = "sha256-cjar6j5Wzh5monp9YxrsrnGDxgjlT+YRFh5mgZcImKI="; + + postPatch = '' + chmod -R u+w ../app + cp ${headlamp-server.src}/app/package.json ../app/package.json + substituteInPlace package.json --replace-fail '"prebuild": "npm run make-version",' "" + ''; + + preBuild = '' + cat > .env < Date: Thu, 30 Apr 2026 19:12:43 -0400 Subject: [PATCH 3/3] headlamp: init at 0.41.0 --- pkgs/by-name/he/headlamp/package.nix | 118 +++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 pkgs/by-name/he/headlamp/package.nix diff --git a/pkgs/by-name/he/headlamp/package.nix b/pkgs/by-name/he/headlamp/package.nix new file mode 100644 index 000000000000..52c90fceba03 --- /dev/null +++ b/pkgs/by-name/he/headlamp/package.nix @@ -0,0 +1,118 @@ +{ + buildNpmPackage, + headlamp-server, + headlamp-frontend, + electron, + makeWrapper, + makeDesktopItem, + copyDesktopItems, +}: + +buildNpmPackage { + pname = "headlamp"; + inherit (headlamp-server) version src; + + strictDeps = true; + __structuredAttrs = true; + + sourceRoot = "${headlamp-server.src.name}/app"; + + npmDepsHash = "sha256-FcV2ORs96Rj/OyCbBCBo/ZmcwvjDLPKkn0i4m+0gXIE="; + + env.ELECTRON_SKIP_BINARY_DOWNLOAD = "1"; + + postPatch = '' + chmod u+w .. + ''; + + npmBuildScript = "compile-electron"; + + nativeBuildInputs = [ + makeWrapper + copyDesktopItems + ]; + + desktopItems = [ + (makeDesktopItem { + name = "headlamp"; + desktopName = "Headlamp"; + comment = "An easy-to-use and extensible Kubernetes web UI"; + exec = "headlamp"; + icon = "headlamp"; + categories = [ + "Network" + "System" + ]; + startupWMClass = "Headlamp"; + }) + ]; + + installPhase = '' + runHook preInstall + + # Electron app + install -Dt $out/lib/headlamp/app package.json + install -Dt $out/lib/headlamp/app/build build/main.js build/preload.js + + # Production dependencies only + npm prune --omit=dev + rm -rf node_modules/.bin + cp -r node_modules $out/lib/headlamp/app/ + + # Resources directory (where process.resourcesPath should point) + mkdir -p $out/lib/headlamp/resources + cp -r ${headlamp-frontend} $out/lib/headlamp/resources/frontend + chmod -R u+w $out/lib/headlamp/resources/frontend + ln -s ${headlamp-server}/bin/headlamp-server $out/lib/headlamp/resources/headlamp-server + mkdir -p $out/lib/headlamp/resources/.plugins + cp ${headlamp-server.src}/app/app-build-manifest.json $out/lib/headlamp/resources/ + + # i18n locales + mkdir -p $out/lib/headlamp/resources/frontend/i18n + cp -r ${headlamp-server.src}/frontend/src/i18n/locales $out/lib/headlamp/resources/frontend/i18n/locales + + # Entry point that sets process.resourcesPath before loading the real main + cat > $out/lib/headlamp/app/main.js < resourcesPath, + configurable: false, + }); + app.setVersion('${headlamp-server.version}'); + app.setName('Headlamp'); + require('./build/main.js'); + ENTRY + + # Point package.json main at our wrapper + substituteInPlace $out/lib/headlamp/app/package.json \ + --replace-fail '"main": "build/main.js"' '"main": "main.js"' + + # Icons + for size in 16 32; do + mkdir -p $out/share/icons/hicolor/''${size}x''${size}/apps + cp ${headlamp-server.src}/frontend/public/favicon-''${size}x''${size}.png $out/share/icons/hicolor/''${size}x''${size}/apps/headlamp.png + done + mkdir -p $out/share/icons/hicolor/192x192/apps + cp ${headlamp-server.src}/frontend/public/android-chrome-192x192.png $out/share/icons/hicolor/192x192/apps/headlamp.png + mkdir -p $out/share/icons/hicolor/512x512/apps + cp ${headlamp-server.src}/frontend/public/android-chrome-512x512.png $out/share/icons/hicolor/512x512/apps/headlamp.png + + # Wrapper + mkdir -p $out/bin + makeWrapper ${electron}/bin/electron $out/bin/headlamp \ + --add-flags $out/lib/headlamp/app \ + --prefix PATH : ${headlamp-server}/bin + + runHook postInstall + ''; + + passthru = { + frontend = headlamp-frontend; + }; + + meta = headlamp-server.meta // { + mainProgram = "headlamp"; + }; +}