Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 32 additions & 12 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -13,19 +13,29 @@
}:
flake-utils.lib.eachDefaultSystem (system: let
pkgs = nixpkgs.legacyPackages.${system};
# release binaries have the curseforge key compiled in; source builds
# don't, so forward the caller's key when building impurely.
curseforgeApiKey = builtins.getEnv "CURSEFORGE_API_KEY";
# minecraft's bundled lwjgl natives dlopen the host's x11 stack, which
# isn't on the default loader path on nixos. java is spawned as a child
# of rmcl, so a wrapper LD_LIBRARY_PATH propagates all the way down.
runtimeLibs = pkgs.lib.makeLibraryPath (with pkgs; [
libX11
libXext
libXcursor
libXrandr
libXxf86vm
]);
# minecraft's lwjgl/sdl natives dlopen the host's x11, opengl, vulkan,
# input and audio stack, which isn't on the default loader path on nixos.
# java is spawned as a child of rmcl, so a wrapper LD_LIBRARY_PATH
# propagates all the way down. /run/opengl-driver/lib holds the mesa
# drivers that libglvnd dispatches to.
runtimeLibs =
pkgs.lib.makeLibraryPath (with pkgs; [
libX11
libXext
libXcursor
libXrandr
libXxf86vm
libXi
libXinerama
libGL
vulkan-loader
libxkbcommon
udev
alsa-lib
libpulseaudio
])
+ ":/run/opengl-driver/lib";
in {
packages.default = pkgs.rustPlatform.buildRustPackage {
pname = "rmcl";
Expand All @@ -50,5 +60,15 @@
mainProgram = "rmcl";
};
};

# `nix develop` + `cargo run --release` spawns java directly, bypassing
# the wrapper above, so expose the same runtime libs in the dev shell.
devShells.default = pkgs.mkShell {
packages = with pkgs; [cargo rustc rustfmt clippy jdk pkg-config];
buildInputs = [pkgs.libxcb];
shellHook = ''
export LD_LIBRARY_PATH="${runtimeLibs}:$LD_LIBRARY_PATH"
'';
};
});
}
Loading