{ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; flake-utils.url = "github:numtide/flake-utils"; naersk.url = "github:nix-community/naersk/master"; }; outputs = { self, nixpkgs, flake-utils, naersk, }: let packageOutputs = flake-utils.lib.eachDefaultSystem ( system: let pkgs = import nixpkgs { inherit system; }; naersk-lib = pkgs.callPackage naersk { }; # Needed at compile time (on build system) nativeBuildInputs = with pkgs; [ gtk4 cairo glib pkg-config poppler wrapGAppsHook ]; # Needed at runtime (on run system) buildInputs = with pkgs; [ ]; in rec { defaultPackage = naersk-lib.buildPackage { src = ./.; inherit buildInputs; inherit nativeBuildInputs; postInstall = '' mkdir -p $out/share/applications cp ${./music-reader.desktop} $out/share/applications/music-reader.desktop mkdir -p $out/share/icons cp ${./music-reader.png} $out/share/icons/music-reader.png mkdir -p $out/share/glib-2.0/schemas cp ${./de.frajul.music-reader.gschema.xml} $out/share/glib-2.0/schemas/de.frajul.music-reader.gschema.xml glib-compile-schemas $out/share/glib-2.0/schemas/ ''; }; devShell = with pkgs; mkShell { buildInputs = [ cargo rustc rustfmt pre-commit rustPackages.clippy gtk4 cairo glib pkg-config poppler wrapGAppsHook ]; # Without inheriting nativeBuildinputs, cargo build will fail but that is good since we want to use only nix build # inherit nativeBuildInputs; RUST_SRC_PATH = rustPlatform.rustLibSrc; }; } ); in packageOutputs // { hydraJobs = { x86_64-linux.music-reader = packageOutputs.defaultPackage.x86_64-linux; aarch64-linux.music-reader = packageOutputs.defaultPackage.aarch64-linux; }; }; }