| # If you're on NixOS, use me! `nix-shell --pure`. | 
 | with import (fetchTarball { | 
 |   # nixpkgs 23.05 as of 2023/07/19 | 
 |   url = "https://github.com/NixOS/nixpkgs/archive/2fadc2426928c844054cd28fabe231ff26a70715.tar.gz"; | 
 |   sha256 = "sha256:06hpcqhaaqvd5gjcz2ps9lz6q2sf5fwgl5rwllpyl9x4g5g95ahv"; | 
 | }) {}; | 
 | let | 
 |   wrapper = pkgs.writeScript "wrapper.sh" | 
 |   '' | 
 |     # Fancy colorful PS1 to make people notice easily they're in the Monogon Nix shell. | 
 |     PS1='\[\033]0;\u/monogon:\w\007\]' | 
 |     if type -P dircolors >/dev/null ; then | 
 |       PS1+='\[\033[01;37m\]\u/monogon\[\033[01;36m\] \w \$\[\033[00m\] ' | 
 |     fi | 
 |     export PS1 | 
 |  | 
 |     # Use Nix-provided cert store. | 
 |     export NIX_SSL_CERT_FILE="${cacert}/etc/ssl/certs/ca-bundle.crt" | 
 |     export SSL_CERT_FILE="${cacert}/etc/ssl/certs/ca-bundle.crt" | 
 |  | 
 |     # Let some downstream machinery know we're on NixOS. This is used mostly to | 
 |     # work around Bazel/NixOS interactions. | 
 |     export MONOGON_NIXOS=yep | 
 |  | 
 |     # Convince rules_go to use /bin/bash and not a NixOS store bash which has | 
 |     # no idea how to resolve other things in the nix store once PATH is | 
 |     # stripped by (host_)action_env. | 
 |     export BAZEL_SH=/bin/bash | 
 |  | 
 |     exec bash --noprofile --norc "$@" | 
 |   ''; | 
 | in | 
 | (pkgs.buildFHSUserEnv { | 
 |   name = "monogon-nix"; | 
 |   targetPkgs = pkgs: with pkgs; [ | 
 |     git | 
 |     (stdenv.mkDerivation { | 
 |       name = "bazel"; | 
 |       src = builtins.fetchurl  { | 
 |         url = https://github.com/bazelbuild/bazel/releases/download/5.4.0/bazel-5.4.0-linux-x86_64; | 
 |         sha256 = "1w58m1brwjfwsv48fmd66inry67m4vgb3bwvwmamhdv099v183jg"; | 
 |       }; | 
 |       unpackPhase = '' | 
 |         true | 
 |       ''; | 
 |       buildPhase = '' | 
 |         mkdir -p $out/bin | 
 |         cp $src $out/bin/.bazel-inner | 
 |         chmod +x $out/bin/.bazel-inner | 
 |  | 
 |         cat > $out/bin/bazel <<EOF | 
 |         #!/usr/bin/bash | 
 |         export BAZEL_REAL=$out/bin/.bazel-inner | 
 |         function get_workspace_root() { | 
 |           workspace_dir="\''${PWD}" | 
 |           while [[ "\''${workspace_dir}" != / ]]; do | 
 |             if [[ -e "\''${workspace_dir}/WORKSPACE" || -e "\''${workspace_dir}/WORKSPACE.bazel" ]]; then | 
 |               readonly workspace_dir | 
 |               return | 
 |             fi | 
 |             workspace_dir="$(dirname "\''${workspace_dir}")" | 
 |           done | 
 |           readonly workspace_dir="" | 
 |         } | 
 |  | 
 |         get_workspace_root | 
 |         readonly wrapper="\''${workspace_dir}/tools/bazel" | 
 |         if [ -f "\''${wrapper}" ]; then | 
 |           exec -a "\$0" "\''${wrapper}" "\$@" | 
 |         fi | 
 |         exec -a "\$0" "\''${BAZEL_REAL}" "\$@" | 
 |         EOF | 
 |         chmod +x $out/bin/bazel | 
 |       ''; | 
 |       dontStrip = true; | 
 |     }) | 
 |     zlib | 
 |     curl | 
 |     gcc | 
 |     binutils | 
 |     openjdk11 | 
 |     patch | 
 |     python3 | 
 |   ]; | 
 |   runScript = wrapper; | 
 | }).env | 
 |  |