diff --git a/shell.nix b/shell.nix
new file mode 100644
index 0000000..d64223f
--- /dev/null
+++ b/shell.nix
@@ -0,0 +1,87 @@
+# 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
+
