treewide: remove FHSEnv
To remove the FHSenv, we have to patch rules_python to use
/usr/bin/env to resolve the path to bash instead of hardcoding it.
Additionally, we now bring a Nix-compatible Bazel 8.
Change-Id: Id51e7748eea6dd77185f43a52fe45b5110ba4a2b
Reviewed-on: https://review.monogon.dev/c/monogon/+/4427
Tested-by: Jenkins CI
Reviewed-by: Jan Schär <jan@monogon.tech>
Reviewed-by: Lorenz Brun <lorenz@monogon.tech>
Reviewed-by: Leopold Schabel <leo@monogon.tech>
diff --git a/third_party/nix/pkgs/bazel_8/defaultShell.nix b/third_party/nix/pkgs/bazel_8/defaultShell.nix
new file mode 100644
index 0000000..0deb516
--- /dev/null
+++ b/third_party/nix/pkgs/bazel_8/defaultShell.nix
@@ -0,0 +1,41 @@
+{ lib
+, makeBinaryWrapper
+, writeShellApplication
+, bash
+, stdenv
+,
+}:
+{ defaultShellUtils }:
+let
+ defaultShellPath = lib.makeBinPath defaultShellUtils;
+
+ bashWithDefaultShellUtilsSh = writeShellApplication {
+ name = "bash";
+ runtimeInputs = defaultShellUtils;
+ # Empty PATH in Nixpkgs Bash is translated to /no-such-path
+ # On other distros empty PATH search fallback is looking in standard
+ # locations like /bin,/usr/bin
+ # For Bazel many rules rely on such search finding some common utils,
+ # so we provide them in case rules or arguments didn't specify a precise PATH
+ text = ''
+ if [[ "$PATH" == "/no-such-path" ]]; then
+ export PATH=${defaultShellPath}
+ fi
+ exec ${bash}/bin/bash "$@"
+ '';
+ };
+
+in
+{
+ inherit defaultShellUtils defaultShellPath;
+ # Script-based interpreters in shebangs aren't guaranteed to work,
+ # especially on MacOS. So let's produce a binary
+ bashWithDefaultShellUtils = stdenv.mkDerivation {
+ name = "bash";
+ src = bashWithDefaultShellUtilsSh;
+ nativeBuildInputs = [ makeBinaryWrapper ];
+ buildPhase = ''
+ makeWrapper ${bashWithDefaultShellUtilsSh}/bin/bash $out/bin/bash
+ '';
+ };
+}