{ description = "Remove background Rust project with X11/Wayland support"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; rust-overlay.url = "github:oxalica/rust-overlay"; flake-utils.url = "github:numtide/flake-utils"; }; outputs = { self, nixpkgs, rust-overlay, flake-utils, }: flake-utils.lib.eachDefaultSystem ( system: let overlays = [ (import rust-overlay) ]; pkgs = import nixpkgs { inherit system overlays; }; stdenv = pkgs.stdenvAdapters.useMoldLinker pkgs.clangStdenv; rustToolchain = pkgs.rust-bin.stable.latest.default.override { extensions = [ "rust-src" ]; }; nativeBuildInputs = with pkgs; [ rustToolchain mold pkg-config clang ]; xorgBuildInputs = with pkgs; [ xorg.libX11 xorg.libXcursor xorg.libXi xorg.libXrandr ]; waylandBuildInputs = with pkgs; [ libxkbcommon wayland ]; # Graphics/rendering libraries needed for wgpu (used by show-image) graphicsBuildInputs = with pkgs; [ vulkan-loader openssl ]; buildInputs = xorgBuildInputs ++ waylandBuildInputs ++ graphicsBuildInputs; mkShell = pkgs.mkShell.override { stdenv = stdenv; }; in { packages.default = pkgs.rustPlatform.buildRustPackage { inherit stdenv buildInputs nativeBuildInputs; pname = (builtins.fromTOML (builtins.readFile ./Cargo.toml)).package.name; version = (builtins.fromTOML (builtins.readFile ./Cargo.toml)).package.version; src = ./.; cargoLock = { lockFile = ./Cargo.lock; }; }; devShells.default = mkShell { inherit buildInputs nativeBuildInputs; RUST_BACKTRACE = 1; shellHook = '' export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${pkgs.lib.makeLibraryPath buildInputs}" ''; }; } ); }