{ description = "Confetti packaged for Nix/NixOS"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; # optional: pin a Rust toolchain via rust-overlay if you need nightly # rust-overlay.url = "github:oxalica/rust-overlay"; }; outputs = { self, nixpkgs, # , rust-overlay }: let systems = [ "x86_64-linux" "aarch64-linux" ]; forAllSystems = f: nixpkgs.lib.genAttrs systems (system: f (import nixpkgs { inherit system; })); in { packages = forAllSystems ( pkgs: let lib = pkgs.lib; in { # name it default (and alias to confetti if you like) default = pkgs.rustPlatform.buildRustPackage { pname = "confetti"; version = "unstable"; src = ./.; cargoHash = "sha256-6lwp5gky+NKhE2IKVI2Qxqe5HT9a8xqWfrJ2e9CK6IE="; # run once to get the real hash # NOTE: makeWrapper is needed for wrapProgram nativeBuildInputs = with pkgs; [ pkg-config wayland-protocols makeWrapper ]; # These are *runtime* libraries the app needs to load buildInputs = with pkgs; [ wayland libxkbcommon vulkan-loader mesa ]; # Ensure the Wayland/Vulkan/libxkbcommon libs are found at runtime postInstall = let libPath = lib.makeLibraryPath [ pkgs.wayland pkgs.libxkbcommon pkgs.vulkan-loader pkgs.mesa ]; in '' wrapProgram "$out/bin/confetti" \ --prefix LD_LIBRARY_PATH : ${libPath} ''; }; confetti = self.packages.${pkgs.system}.default; } ); # Expose a runnable `nix run` apps = forAllSystems (pkgs: { default = { type = "app"; program = "${self.packages.${pkgs.system}.default}/bin/confetti"; }; }); # Nice dev shell for hacking locally (cargo, rustc, system libs) devShells = forAllSystems (pkgs: { default = pkgs.mkShell { nativeBuildInputs = with pkgs; [ pkg-config rustc cargo # or: (rust-bin.stable.latest.default) if using rust-overlay wayland-protocols ]; buildInputs = with pkgs; [ wayland libxkbcommon vulkan-loader mesa ]; }; }); nixosModules.default = { pkgs, ... }: { environment.systemPackages = [ self.packages.${pkgs.system}.default ]; }; }; }