{ inputs = { nixpkgs = { type = "github"; owner = "NixOS"; repo = "nixpkgs"; ref = "nixos-26.05"; }; crane = { url = "github:ipetkov/crane"; }; }; outputs = { self, nixpkgs, crane }: let supportedSystems = [ "aarch64-linux" "x86_64-linux" ]; forAllSystems = nixpkgs.lib.genAttrs supportedSystems; nixpkgsFor = forAllSystems (system: import nixpkgs { inherit system; }); buildInputsFor = pkgs: with pkgs; [ # The list of packages needed feels more than a little bit random; # it's because winit relies on packages that differ vastly in how and # when they find the C libraries. pkg-config libgcc libxcursor libxi libxkbcommon # mesa # wayland # vulkan-loader ]; in { packages = forAllSystems (system: let pkgs = nixpkgsFor.${system}; in { default = ((crane.mkLib pkgs).buildPackage { src = ./.; buildInputs = buildInputsFor pkgs; nativeBuildInputs = with pkgs; [ autoPatchelfHook ]; }).overrideAttrs { preFixup = '' patchelf --add-needed libxkbcommon-x11.so $out/bin/surreality ''; }; }); devShells = forAllSystems (system: let pkgs = nixpkgsFor.${system}; in { default = pkgs.mkShell { nativeBuildInputs = with pkgs; [ cargo rustc vulkan-tools ] ++ buildInputsFor pkgs; # This makes cargo run work; mind that you don't let it mask a # problem with the nix build. LD_LIBRARY_PATH = "${pkgs.libxkbcommon}/lib"; }; }); }; }