{ description = "Rust dev shell for Hertog's bevy project (YAY!)"; # Flake inputs inputs = { nixpkgs.url = "https://flakehub.com/f/NixOS/nixpkgs/0.2305.491812.tar.gz"; rust-overlay.url = "github:oxalica/rust-overlay"; # A helper for Rust + Nix nixgl.url = "github:guibou/nixGL"; # Allows you to run OpenGL and or Vulkan applications in a nix shell }; # Flake outputs outputs = { self, nixpkgs, rust-overlay, nixgl, ... }: let # Overlays enable you to customize the Nixpkgs attribute set overlays = [ # Makes a `rust-bin` attribute available in Nixpkgs (import rust-overlay) nixgl.overlay # Provides a `rustToolchain` attribute for Nixpkgs that we can use to # create a Rust environment (self: super: { rustToolchain = super.rust-bin.stable.latest.default; }) ]; # Systems supported allSystems = [ "x86_64-linux" # 64-bit Intel/AMD Linux "aarch64-linux" # 64-bit ARM Linux "x86_64-darwin" # 64-bit Intel macOS "aarch64-darwin" # 64-bit ARM macOS ]; # Helper to provide system-specific attributes forAllSystems = f: nixpkgs.lib.genAttrs allSystems (system: f { pkgs = import nixpkgs { inherit overlays system; }; }); in { # Development environment output devShells = forAllSystems ({ pkgs }: { default = let podmanSetupScript = let registriesConf = pkgs.writeText "registries.conf" '' [registries.search] registries = ['docker.io'] [registries.block] registries = [] ''; in pkgs.writeScript "podman-setup" '' #!${pkgs.runtimeShell} # Dont overwrite customised configuration if ! test -f ~/.config/containers/policy.json; then install -Dm555 ${pkgs.skopeo.src}/default-policy.json ~/.config/containers/policy.json fi if ! test -f ~/.config/containers/registries.conf; then install -Dm555 ${registriesConf} ~/.config/containers/registries.conf fi ''; # Provides a fake "docker" binary mapping to podman dockerCompat = pkgs.runCommandNoCC "docker-podman-compat" {} '' mkdir -p $out/bin ln -s ${pkgs.podman}/bin/podman $out/bin/docker ''; in pkgs.mkShell { # The Nix packages provided in the environment packages = (with pkgs; [ # Fluff cargo-mommy onefetch # Bevy pkg-config alsa-lib vulkan-tools vulkan-headers vulkan-loader vulkan-validation-layers udev clang lld # If using an intel GPU pkgs.nixgl.nixVulkanIntel # If on x11 xorg.libX11 xorg.libX11 xorg.libXcursor xorg.libXi xorg.libXrandr # If on wayland libxkbcommon wayland # Cross compilation cargo-cross podman # needed by cargo-cross # Rust rustup rustToolchain ]) ++ pkgs.lib.optionals pkgs.stdenv.isDarwin (with pkgs; [ libiconv ]); shellHook = '' # Required export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${pkgs.lib.makeLibraryPath [ pkgs.alsaLib pkgs.udev pkgs.vulkan-loader ]}" ${podmanSetupScript} # Aliases and other fluff/ease of use alias runIntel="nixVulkanIntel cargo run" alias runMommyIntel="nixVulkanIntel cargo mommy run" onefetch echo "Welcome to nix-hell uh nix-shell!" ''; }; }); }; }