{ description = "A tool for organising a music library"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; utils.url = "github:numtide/flake-utils"; flake-compat = { url = "github:edolstra/flake-compat"; flake = false; }; }; outputs = { self, nixpkgs, utils, ... }: { overlay = final: prev: let system = final.system; fold-to-ascii = final.python3Packages.callPackage ./nix-extra-deps/fold-to-ascii.nix { }; in { fold-to-ascii = {fold-to-ascii = fold-to-ascii;}; musicutil = { musicutil = final.python3Packages.buildPythonApplication rec { pname = "musicutil"; version = "latest"; src = ./.; postPatch = '' substituteInPlace musicutil/meta.py --replace 'ffmpeg_path = "ffmpeg"' 'ffmpeg_path = "${final.ffmpeg}/bin/ffmpeg"' substituteInPlace musicutil/meta.py --replace 'ffprobe_path = "ffprobe"' 'ffprobe_path = "${final.ffmpeg}/bin/ffprobe"' substituteInPlace musicutil/meta.py --replace 'r128gain_path = "r128gain"' 'r128gain_path = "${final.r128gain}/bin/r128gain"' ''; doCheck = false; propagatedBuildInputs = with final.python3Packages; [ mutagen fold-to-ascii pyyaml ]; }; }; }; } // 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.musicutil; defaultApp = self.apps."${system}".musicutil; apps.musicutil = { type = "app"; program = "${self.defaultPackage."${system}"}/bin/musicutil"; }; devShell = pkgs.mkShell { inputsFrom = [ self.packages.${system}.musicutil ]; buildInputs = with pkgs; [ nixUnstable mutagen self.packages.${system}.fold-to-ascii pyyaml ]; }; lib = pkgs.musicutil.lib; }); }