{ description = "NodeJS application with mpv, yt-dlp, and pulseaudio dependencies"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; flake-utils.url = "github:numtide/flake-utils"; }; outputs = { self, nixpkgs, flake-utils }: let mkQueuecube = pkgs: pkgs.buildNpmPackage { pname = "queuecube"; version = "0.1.0"; src = ./.; # Skip the standard buildPhase and provide our own dontNpmBuild = true; buildPhase = '' # First install all dependencies npm install # Then run the build with workspaces flag npm run build --workspaces ''; # Runtime dependencies buildInputs = with pkgs; [ mpv yt-dlp pulseaudio ]; # Create a wrapper script to ensure runtime deps are available postInstall = '' # Create the necessary directories mkdir -p $out/lib/node_modules/queuecube # Copy the entire project with built files cp -r . $out/lib/node_modules/queuecube # Install the frontend build to the backend dist directory mkdir -p $out/lib/node_modules/queuecube/backend/dist/ cp -r frontend/dist $out/lib/node_modules/queuecube/backend/dist/frontend # Create bin directory if it doesn't exist mkdir -p $out/bin # Create executable script cat > $out/bin/queuecube <