{ inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; flake-utils.url = "github:numtide/flake-utils"; }; outputs = inputs: inputs.flake-utils.lib.eachDefaultSystem ( system: let pkgs = import inputs.nixpkgs { inherit system; }; lib = pkgs.lib; cargoToml = fromTOML (builtins.readFile ./Cargo.toml); name = cargoToml.package.name; dlDeps = with pkgs; [ # needed for both x11 and wayland libxkbcommon libGL libx11 libxcursor libxi libxcb ] ++ lib.optionals stdenv.hostPlatform.isLinux [ vulkan-loader wayland ]; commonArgs = { # all that's needed for artifacts and checks nativeBuildInputs = with pkgs; [ # pkg-config ]; buildInputs = with pkgs; [ ]; src = ./.; }; crate = let desktopItem = pkgs.makeDesktopItem { inherit name; desktopName = name; icon = name; exec = name; }; in pkgs.rustPlatform.buildRustPackage ( commonArgs // { inherit name; cargoLock.lockFile = ./Cargo.lock; nativeBuildInputs = commonArgs.nativeBuildInputs ++ [ pkgs.autoPatchelfHook ]; buildInputs = commonArgs.buildInputs ++ [ pkgs.libgcc ]; runtimeDependencies = dlDeps; doCheck = false; postFixup = '' mkdir -p "$out/share/applications" ln -s "${desktopItem}"/share/applications/* "$out/share/applications/" ''; } ); in { packages.default = crate; devShells.default = pkgs.mkShell { LD_LIBRARY_PATH = lib.makeLibraryPath dlDeps; inputsFrom = [ crate ]; packages = with pkgs; [ rustc cargo clippy rustfmt rust-analyzer ]; }; } ); }