{ inputs = { flake-utils.url = "github:numtide/flake-utils"; nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; fenix = { url = "github:nix-community/fenix"; inputs.nixpkgs.follows = "nixpkgs"; }; naersk = { url = "github:nix-community/naersk"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = { self, flake-utils, nixpkgs, fenix, naersk, }: flake-utils.lib.eachDefaultSystem ( system: let overlay = final: prev: { whisper-cpp = prev.whisper-cpp.override { vulkanSupport = true; }; }; pkgs = import nixpkgs { inherit system; overlays = [ overlay ]; }; fenix' = fenix.packages.${system}; toolchain = fenix'.stable.withComponents [ "cargo" "clippy" "rust-src" "rustc" "rustfmt" ]; naersk' = naersk.lib.${system}.override { cargo = toolchain; rustc = toolchain; }; rustPlatform = pkgs.makeRustPlatform { cargo = toolchain; rustc = toolchain; }; in rec { defaultPackage = naersk'.buildPackage { src = ./.; nativeBuildInputs = with pkgs; [ pkg-config rustPlatform.bindgenHook wrapGAppsHook4 glib ]; buildInputs = with pkgs; [ gtk4 libadwaita gst_all_1.gstreamer gst_all_1.gst-plugins-base gst_all_1.gst-plugins-good gst_all_1.gst-plugins-bad gst_all_1.gst-plugins-ugly gst_all_1.gst-plugins-rs gst_all_1.gst-libav gst_all_1.gst-vaapi ffmpeg_8-full.dev ]; postInstall = '' install -D -m444 -t $out/share/glib-2.0/schemas data/*.gschema.xml glib-compile-schemas $out/share/glib-2.0/schemas ''; }; devShell = pkgs.mkShell { inputsFrom = [ defaultPackage ]; buildInputs = [ fenix'.rust-analyzer rustPlatform.bindgenHook ]; # this fixes tls-related gstreamer error when playing https streams shellHook = '' export GIO_MODULE_DIR=${pkgs.glib-networking}/lib/gio/modules/ ''; }; } ); }