From c707a8edaac9a1b8692d89728d07cfc57cf4ffc7 Mon Sep 17 00:00:00 2001 From: Saad Nadeem Date: Mon, 15 Jun 2026 05:50:23 -0400 Subject: [PATCH] pipeweaver: init at 0.1.6 --- pkgs/by-name/pi/pipeweaver/package.nix | 126 +++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 pkgs/by-name/pi/pipeweaver/package.nix diff --git a/pkgs/by-name/pi/pipeweaver/package.nix b/pkgs/by-name/pi/pipeweaver/package.nix new file mode 100644 index 000000000000..ac386a89f88c --- /dev/null +++ b/pkgs/by-name/pi/pipeweaver/package.nix @@ -0,0 +1,126 @@ +{ + lib, + buildNpmPackage, + fetchFromGitHub, + rustPlatform, + pkg-config, + pipewire, + nix-update-script, + stdenv, +}: + +rustPlatform.buildRustPackage ( + finalAttrs: + let + web = buildNpmPackage { + pname = "${finalAttrs.pname}-web"; + inherit (finalAttrs) version src; + + sourceRoot = "${finalAttrs.src.name}/web"; + + npmDepsHash = "sha256-ZX/3H/VdRdWC2j+mPA/0rZflDhslqTN1mqA9vvQRQG0="; + + installPhase = '' + runHook preInstall + cp -r dist $out + runHook postInstall + ''; + }; + in + { + pname = "pipeweaver"; + version = "0.1.6"; + + __structuredAttrs = true; + + src = fetchFromGitHub { + owner = "pipeweaver"; + repo = "pipeweaver"; + tag = "v${finalAttrs.version}"; + hash = "sha256-wf3gxCLT5vOz+5+CpfmkX0stKoAOpQ6KIoW6xBNV1xk="; + }; + + cargoHash = "sha256-Jv0fF6keg2NcUnCJhCId7rwPVZK1/Q9+otQNjp54RCI="; + + nativeBuildInputs = [ + pkg-config + rustPlatform.bindgenHook + ]; + + buildInputs = [ + pipewire + ]; + + cargoBuildFlags = [ + "--workspace" + "--exclude" + "pipeweaver-app" + "--all-features" + ]; + + cargoTestFlags = [ + "--workspace" + "--exclude" + "pipeweaver-app" + "--all-features" + ]; + + postPatch = '' + # Prevent daemon/build.rs from running to prevent impure git and npm calls. + rm daemon/build.rs + substituteInPlace daemon/Cargo.toml --replace-fail 'build = "build.rs"' "" + + mkdir -p daemon/web-content + cp -r ${web}/* daemon/web-content/ + ''; + + # Provide GIT_HASH that build.rs would have set + env.GIT_HASH = finalAttrs.src.tag; + + installPhase = '' + runHook preInstall + + releaseDir=target/${stdenv.hostPlatform.rust.cargoShortTarget}/release + + install -Dm755 $releaseDir/pipeweaver-daemon -t $out/bin + install -Dm755 $releaseDir/pipeweaver-client -t $out/bin + + install -Dm644 daemon/resources/icons/pipeweaver.png \ + $out/share/icons/hicolor/48x48/apps/pipeweaver.png + install -Dm644 daemon/resources/icons/pipeweaver.svg \ + $out/share/icons/hicolor/scalable/apps/pipeweaver.svg + install -Dm644 daemon/resources/icons/pipeweaver-large.png \ + $out/share/pixmaps/pipeweaver.png + install -Dm644 daemon/resources/desktop/pipeweaver.desktop \ + $out/share/applications/pipeweaver.desktop + + substituteInPlace $out/share/applications/pipeweaver.desktop \ + --replace-fail "Path=/usr/bin" "Path=$out/bin" \ + --replace-fail "Exec=/usr/bin/pipeweaver-daemon" "Exec=$out/bin/pipeweaver-daemon" + + install -Dm644 README.md $out/share/doc/pipeweaver/README.md + install -Dm644 LICENSE $out/share/licenses/pipeweaver/LICENSE + + runHook postInstall + ''; + + passthru = { + inherit web; + updateScript = nix-update-script { + extraArgs = [ + "--subpackage" + "web" + ]; + }; + }; + + meta = { + description = "Manage streaming audio on Linux through PipeWire with virtual channels, mixing, and routing"; + homepage = "https://github.com/pipeweaver/pipeweaver"; + license = lib.licenses.mit; + mainProgram = "pipeweaver-daemon"; + platforms = lib.platforms.linux; + maintainers = with lib.maintainers; [ saadndm ]; + }; + } +)