From 40d173bf21597a970167bdc2fa663e8ff2c9004e Mon Sep 17 00:00:00 2001 From: Federico Izzo Date: Mon, 20 Jul 2026 17:03:31 +0200 Subject: [PATCH 1/7] docs: point flake input to upstream repository --- docs/nixos.md | 2 +- flake.lock | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 flake.lock diff --git a/docs/nixos.md b/docs/nixos.md index 7a8e3a882..5b771a4c2 100644 --- a/docs/nixos.md +++ b/docs/nixos.md @@ -86,7 +86,7 @@ In your `flake.nix`, add it to your `inputs`, making sure to use `follows` to av inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; - audiocpp.url = "github:fedeizzo/audio.cpp"; + audiocpp.url = "github:0xShug0/audio.cpp"; audiocpp.inputs.nixpkgs.follows = "nixpkgs"; }; diff --git a/flake.lock b/flake.lock new file mode 100644 index 000000000..fdfbda464 --- /dev/null +++ b/flake.lock @@ -0,0 +1,27 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1784497964, + "narHash": "sha256-vlHUuqAcbcH2RKmHbPiuQzbv1pnzzavXnI62RD0bqCU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "241313f4e8e508cb9b13278c2b0fa25b9ca27163", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} From 28fd24918e40170b3ac7b5958ab7d466b601ccf6 Mon Sep 17 00:00:00 2001 From: Federico Izzo Date: Mon, 20 Jul 2026 17:15:24 +0200 Subject: [PATCH 2/7] build(nix): address code review feedback on flake --- flake.nix | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/flake.nix b/flake.nix index ac500ec84..63fe453f5 100644 --- a/flake.nix +++ b/flake.nix @@ -12,7 +12,6 @@ nixpkgsFor = forAllSystems (system: import nixpkgs { inherit system; config.allowUnfree = true; - config.cudaSupport = true; }); in { @@ -38,11 +37,9 @@ cmake ninja pkg-config - makeWrapper ] ++ pkgs.lib.optional cudaSupport pkgs.cudaPackages.cuda_nvcc; buildInputs = with pkgs; [ - libunwind myPython ] ++ pkgs.lib.optionals vulkanSupport [ vulkan-headers @@ -72,8 +69,8 @@ mkdir -p $out/bin - # Find and copy the built C++ executables - find . -type f -executable \( -name "audiocpp_cli" -o -name "audiocpp_server" -o -name "audiocpp_gguf" \) -exec cp {} $out/bin/ \; + # Copy the built C++ executables directly from the bin directory + cp bin/audiocpp_cli bin/audiocpp_server bin/audiocpp_gguf $out/bin/ # Install the python model manager script cp $src/tools/model_manager.py $out/bin/audiocpp_model_manager From 9b3ee08c777b6c9085ca7754a86022f253c7dd72 Mon Sep 17 00:00:00 2001 From: Federico Izzo Date: Tue, 21 Jul 2026 08:24:06 +0200 Subject: [PATCH 3/7] build(nix): use specific torch variant depending on build flags --- flake.nix | 41 ++++++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/flake.nix b/flake.nix index 63fe453f5..046d26307 100644 --- a/flake.nix +++ b/flake.nix @@ -9,7 +9,10 @@ let supportedSystems = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ]; forAllSystems = nixpkgs.lib.genAttrs supportedSystems; - nixpkgsFor = forAllSystems (system: import nixpkgs { + nixpkgsFreeFor = forAllSystems (system: import nixpkgs { + inherit system; + }); + nixpkgsUnfreeFor = forAllSystems (system: import nixpkgs { inherit system; config.allowUnfree = true; }); @@ -17,16 +20,16 @@ { packages = forAllSystems (system: let - pkgs = nixpkgsFor.${system}; - # Python environment for model_manager.py - myPython = pkgs.python3.withPackages (ps: with ps; [ - torch - safetensors - pyyaml - ]); - # A function to build audio.cpp with any set of features - mkAudioCpp = { cudaSupport ? false, vulkanSupport ? false, metalSupport ? pkgs.stdenv.isDarwin }: + mkAudioCpp = { pkgs, cudaSupport ? false, vulkanSupport ? false, metalSupport ? pkgs.stdenv.isDarwin }: + let + # Python environment for model_manager.py + myPython = pkgs.python3.withPackages (ps: with ps; [ + (if cudaSupport then ps.torchWithCuda else if vulkanSupport then ps.torchWithVulkan else ps.torch) + ps.safetensors + ps.pyyaml + ]); + in pkgs.stdenv.mkDerivation { pname = "audio.cpp"; version = self.shortRev or self.dirtyShortRev or "dirty"; @@ -93,24 +96,24 @@ in { # Expose specific backend variants - cpu = mkAudioCpp { cudaSupport = false; vulkanSupport = false; metalSupport = false; }; - vulkan = mkAudioCpp { vulkanSupport = true; cudaSupport = false; metalSupport = false; }; - cuda = mkAudioCpp { cudaSupport = true; vulkanSupport = false; metalSupport = false; }; - metal = mkAudioCpp { metalSupport = true; cudaSupport = false; vulkanSupport = false; }; + cpu = mkAudioCpp { pkgs = nixpkgsFreeFor.${system}; cudaSupport = false; vulkanSupport = false; metalSupport = false; }; + vulkan = mkAudioCpp { pkgs = nixpkgsFreeFor.${system}; vulkanSupport = true; cudaSupport = false; metalSupport = false; }; + cuda = mkAudioCpp { pkgs = nixpkgsUnfreeFor.${system}; cudaSupport = true; vulkanSupport = false; metalSupport = false; }; + metal = mkAudioCpp { pkgs = nixpkgsFreeFor.${system}; metalSupport = true; cudaSupport = false; vulkanSupport = false; }; # Automatically select best default for the current platform - default = if pkgs.stdenv.isDarwin then self.packages.${system}.metal else self.packages.${system}.vulkan; + default = if nixpkgsFreeFor.${system}.stdenv.isDarwin then self.packages.${system}.metal else self.packages.${system}.vulkan; } ); devShells = forAllSystems (system: - let - pkgs = nixpkgsFor.${system}; - in { - default = pkgs.mkShell { + default = nixpkgsFreeFor.${system}.mkShell { inputsFrom = [ self.packages.${system}.default ]; }; + cuda = nixpkgsUnfreeFor.${system}.mkShell { + inputsFrom = [ self.packages.${system}.cuda ]; + }; } ); }; From 2a531af146933329f218a78872989c6273ef0f72 Mon Sep 17 00:00:00 2001 From: Federico Izzo Date: Tue, 21 Jul 2026 08:47:15 +0200 Subject: [PATCH 4/7] fix(nix): resolve undefined pkgs variable in flake evaluation --- flake.nix | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/flake.nix b/flake.nix index 046d26307..32304be69 100644 --- a/flake.nix +++ b/flake.nix @@ -20,6 +20,7 @@ { packages = forAllSystems (system: let + pkgs = nixpkgsFreeFor.${system}; # A function to build audio.cpp with any set of features mkAudioCpp = { pkgs, cudaSupport ? false, vulkanSupport ? false, metalSupport ? pkgs.stdenv.isDarwin }: let @@ -53,10 +54,7 @@ ] ++ pkgs.lib.optionals cudaSupport [ pkgs.cudaPackages.cudatoolkit ] ++ pkgs.lib.optionals metalSupport [ - darwin.apple_sdk.frameworks.Metal - darwin.apple_sdk.frameworks.Foundation - darwin.apple_sdk.frameworks.MetalPerformanceShaders - darwin.apple_sdk.frameworks.Accelerate + pkgs.apple-sdk_14 ]; cmakeFlags = [ @@ -98,9 +96,11 @@ # Expose specific backend variants cpu = mkAudioCpp { pkgs = nixpkgsFreeFor.${system}; cudaSupport = false; vulkanSupport = false; metalSupport = false; }; vulkan = mkAudioCpp { pkgs = nixpkgsFreeFor.${system}; vulkanSupport = true; cudaSupport = false; metalSupport = false; }; + } // pkgs.lib.optionalAttrs pkgs.stdenv.isLinux { cuda = mkAudioCpp { pkgs = nixpkgsUnfreeFor.${system}; cudaSupport = true; vulkanSupport = false; metalSupport = false; }; + } // pkgs.lib.optionalAttrs pkgs.stdenv.isDarwin { metal = mkAudioCpp { pkgs = nixpkgsFreeFor.${system}; metalSupport = true; cudaSupport = false; vulkanSupport = false; }; - + } // { # Automatically select best default for the current platform default = if nixpkgsFreeFor.${system}.stdenv.isDarwin then self.packages.${system}.metal else self.packages.${system}.vulkan; } @@ -111,6 +111,7 @@ default = nixpkgsFreeFor.${system}.mkShell { inputsFrom = [ self.packages.${system}.default ]; }; + } // nixpkgsFreeFor.${system}.lib.optionalAttrs nixpkgsFreeFor.${system}.stdenv.isLinux { cuda = nixpkgsUnfreeFor.${system}.mkShell { inputsFrom = [ self.packages.${system}.cuda ]; }; From db1d1f336d25d92b0121bdcc43ba8120fc1db633 Mon Sep 17 00:00:00 2001 From: Federico Izzo Date: Tue, 21 Jul 2026 09:16:56 +0200 Subject: [PATCH 5/7] build(nix): remove internal allowUnfree to delegate permission to callers --- flake.nix | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/flake.nix b/flake.nix index 32304be69..7d2c97de6 100644 --- a/flake.nix +++ b/flake.nix @@ -9,18 +9,14 @@ let supportedSystems = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ]; forAllSystems = nixpkgs.lib.genAttrs supportedSystems; - nixpkgsFreeFor = forAllSystems (system: import nixpkgs { + nixpkgsFor = forAllSystems (system: import nixpkgs { inherit system; }); - nixpkgsUnfreeFor = forAllSystems (system: import nixpkgs { - inherit system; - config.allowUnfree = true; - }); in { packages = forAllSystems (system: let - pkgs = nixpkgsFreeFor.${system}; + pkgs = nixpkgsFor.${system}; # A function to build audio.cpp with any set of features mkAudioCpp = { pkgs, cudaSupport ? false, vulkanSupport ? false, metalSupport ? pkgs.stdenv.isDarwin }: let @@ -94,25 +90,25 @@ in { # Expose specific backend variants - cpu = mkAudioCpp { pkgs = nixpkgsFreeFor.${system}; cudaSupport = false; vulkanSupport = false; metalSupport = false; }; - vulkan = mkAudioCpp { pkgs = nixpkgsFreeFor.${system}; vulkanSupport = true; cudaSupport = false; metalSupport = false; }; + cpu = mkAudioCpp { pkgs = nixpkgsFor.${system}; cudaSupport = false; vulkanSupport = false; metalSupport = false; }; + vulkan = mkAudioCpp { pkgs = nixpkgsFor.${system}; vulkanSupport = true; cudaSupport = false; metalSupport = false; }; } // pkgs.lib.optionalAttrs pkgs.stdenv.isLinux { - cuda = mkAudioCpp { pkgs = nixpkgsUnfreeFor.${system}; cudaSupport = true; vulkanSupport = false; metalSupport = false; }; + cuda = mkAudioCpp { pkgs = nixpkgsFor.${system}; cudaSupport = true; vulkanSupport = false; metalSupport = false; }; } // pkgs.lib.optionalAttrs pkgs.stdenv.isDarwin { - metal = mkAudioCpp { pkgs = nixpkgsFreeFor.${system}; metalSupport = true; cudaSupport = false; vulkanSupport = false; }; + metal = mkAudioCpp { pkgs = nixpkgsFor.${system}; metalSupport = true; cudaSupport = false; vulkanSupport = false; }; } // { # Automatically select best default for the current platform - default = if nixpkgsFreeFor.${system}.stdenv.isDarwin then self.packages.${system}.metal else self.packages.${system}.vulkan; + default = if nixpkgsFor.${system}.stdenv.isDarwin then self.packages.${system}.metal else self.packages.${system}.vulkan; } ); devShells = forAllSystems (system: { - default = nixpkgsFreeFor.${system}.mkShell { + default = nixpkgsFor.${system}.mkShell { inputsFrom = [ self.packages.${system}.default ]; }; - } // nixpkgsFreeFor.${system}.lib.optionalAttrs nixpkgsFreeFor.${system}.stdenv.isLinux { - cuda = nixpkgsUnfreeFor.${system}.mkShell { + } // nixpkgsFor.${system}.lib.optionalAttrs nixpkgsFor.${system}.stdenv.isLinux { + cuda = nixpkgsFor.${system}.mkShell { inputsFrom = [ self.packages.${system}.cuda ]; }; } From 64338c0f3b024a887063ed6a77ec41620ee2ef84 Mon Sep 17 00:00:00 2001 From: Federico Izzo Date: Tue, 21 Jul 2026 09:31:19 +0200 Subject: [PATCH 6/7] build(nix): use allowUnfreePredicate for strict cuda license whitelisting --- flake.nix | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/flake.nix b/flake.nix index 7d2c97de6..31d3d21b8 100644 --- a/flake.nix +++ b/flake.nix @@ -12,6 +12,20 @@ nixpkgsFor = forAllSystems (system: import nixpkgs { inherit system; }); + nixpkgsCudaFor = forAllSystems (system: import nixpkgs { + inherit system; + config.cudaSupport = true; + config.allowUnfreePredicate = p: + builtins.all ( + license: + license.free + || builtins.elem license.shortName [ + "CUDA EULA" + "cuDNN EULA" + "cuSPARSELt EULA" + ] + ) (p.meta.licenses or (nixpkgs.lib.toList (p.meta.license or []))); + }); in { packages = forAllSystems (system: @@ -93,7 +107,7 @@ cpu = mkAudioCpp { pkgs = nixpkgsFor.${system}; cudaSupport = false; vulkanSupport = false; metalSupport = false; }; vulkan = mkAudioCpp { pkgs = nixpkgsFor.${system}; vulkanSupport = true; cudaSupport = false; metalSupport = false; }; } // pkgs.lib.optionalAttrs pkgs.stdenv.isLinux { - cuda = mkAudioCpp { pkgs = nixpkgsFor.${system}; cudaSupport = true; vulkanSupport = false; metalSupport = false; }; + cuda = mkAudioCpp { pkgs = nixpkgsCudaFor.${system}; cudaSupport = true; vulkanSupport = false; metalSupport = false; }; } // pkgs.lib.optionalAttrs pkgs.stdenv.isDarwin { metal = mkAudioCpp { pkgs = nixpkgsFor.${system}; metalSupport = true; cudaSupport = false; vulkanSupport = false; }; } // { @@ -108,7 +122,7 @@ inputsFrom = [ self.packages.${system}.default ]; }; } // nixpkgsFor.${system}.lib.optionalAttrs nixpkgsFor.${system}.stdenv.isLinux { - cuda = nixpkgsFor.${system}.mkShell { + cuda = nixpkgsCudaFor.${system}.mkShell { inputsFrom = [ self.packages.${system}.cuda ]; }; } From f512ab0dcb2bcd56b146f5bdb0191999a17da434 Mon Sep 17 00:00:00 2001 From: Federico Izzo Date: Tue, 21 Jul 2026 09:32:51 +0200 Subject: [PATCH 7/7] style(nix): rename nixpkgs instances to pkgs and pkgsCuda --- flake.nix | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/flake.nix b/flake.nix index 31d3d21b8..a63b528d3 100644 --- a/flake.nix +++ b/flake.nix @@ -9,10 +9,10 @@ let supportedSystems = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ]; forAllSystems = nixpkgs.lib.genAttrs supportedSystems; - nixpkgsFor = forAllSystems (system: import nixpkgs { + pkgs = forAllSystems (system: import nixpkgs { inherit system; }); - nixpkgsCudaFor = forAllSystems (system: import nixpkgs { + pkgsCuda = forAllSystems (system: import nixpkgs { inherit system; config.cudaSupport = true; config.allowUnfreePredicate = p: @@ -30,7 +30,6 @@ { packages = forAllSystems (system: let - pkgs = nixpkgsFor.${system}; # A function to build audio.cpp with any set of features mkAudioCpp = { pkgs, cudaSupport ? false, vulkanSupport ? false, metalSupport ? pkgs.stdenv.isDarwin }: let @@ -104,25 +103,25 @@ in { # Expose specific backend variants - cpu = mkAudioCpp { pkgs = nixpkgsFor.${system}; cudaSupport = false; vulkanSupport = false; metalSupport = false; }; - vulkan = mkAudioCpp { pkgs = nixpkgsFor.${system}; vulkanSupport = true; cudaSupport = false; metalSupport = false; }; - } // pkgs.lib.optionalAttrs pkgs.stdenv.isLinux { - cuda = mkAudioCpp { pkgs = nixpkgsCudaFor.${system}; cudaSupport = true; vulkanSupport = false; metalSupport = false; }; - } // pkgs.lib.optionalAttrs pkgs.stdenv.isDarwin { - metal = mkAudioCpp { pkgs = nixpkgsFor.${system}; metalSupport = true; cudaSupport = false; vulkanSupport = false; }; + cpu = mkAudioCpp { pkgs = pkgs.${system}; cudaSupport = false; vulkanSupport = false; metalSupport = false; }; + vulkan = mkAudioCpp { pkgs = pkgs.${system}; vulkanSupport = true; cudaSupport = false; metalSupport = false; }; + } // pkgs.${system}.lib.optionalAttrs pkgs.${system}.stdenv.isLinux { + cuda = mkAudioCpp { pkgs = pkgsCuda.${system}; cudaSupport = true; vulkanSupport = false; metalSupport = false; }; + } // pkgs.${system}.lib.optionalAttrs pkgs.${system}.stdenv.isDarwin { + metal = mkAudioCpp { pkgs = pkgs.${system}; metalSupport = true; cudaSupport = false; vulkanSupport = false; }; } // { # Automatically select best default for the current platform - default = if nixpkgsFor.${system}.stdenv.isDarwin then self.packages.${system}.metal else self.packages.${system}.vulkan; + default = if pkgs.${system}.stdenv.isDarwin then self.packages.${system}.metal else self.packages.${system}.vulkan; } ); devShells = forAllSystems (system: { - default = nixpkgsFor.${system}.mkShell { + default = pkgs.${system}.mkShell { inputsFrom = [ self.packages.${system}.default ]; }; - } // nixpkgsFor.${system}.lib.optionalAttrs nixpkgsFor.${system}.stdenv.isLinux { - cuda = nixpkgsCudaFor.${system}.mkShell { + } // pkgs.${system}.lib.optionalAttrs pkgs.${system}.stdenv.isLinux { + cuda = pkgsCuda.${system}.mkShell { inputsFrom = [ self.packages.${system}.cuda ]; }; }