{ description = "A tool for organising a music library"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/release-22.05"; utils.url = "github:numtide/flake-utils"; flake-compat = { url = "github:edolstra/flake-compat"; flake = false; }; }; outputs = { self, nixpkgs, utils, ... }: { hmModule = import ./hm-module.nix; overlay = final: prev: let system = final.system; in { musicutil = final.rustPlatform.buildRustPackage rec { pname = "musicutil"; version = "latest"; src = ./.; cargoLock = { lockFile = ./Cargo.lock; }; postPatch = '' substituteInPlace src/meta.rs --replace 'ffmpeg' '${final.ffmpeg}/bin/ffmpeg' substituteInPlace src/meta.rs --replace 'ffprobe' '${final.ffmpeg}/bin/ffprobe' ''; doCheck = false; nativeBuildInputs = with final.pkgs; [ pkg-config rustc cargo ]; buildInputs = with final; [ ffmpeg ]; }; }; } // utils.lib.eachSystem (utils.lib.defaultSystems) (system: let pkgs = import nixpkgs { inherit system; overlays = [ self.overlay ]; }; in { defaultPackage = self.packages."${system}".musicutil; packages.musicutil = pkgs.musicutil; apps = rec { musicutil = { type = "app"; program = "${self.defaultPackage.${system}}/bin/musicutil"; }; default = musicutil; }; defaultApp = self.apps."${system}".musicutil; devShell = pkgs.mkShell { RUST_SRC_PATH = pkgs.rustPlatform.rustLibSrc; buildInputs = with pkgs; [ rustc cargo rust-analyzer rustfmt ]; }; lib = pkgs.musicutil.lib; }); }