diff --git a/shell.nix b/shell.nix
index d314b073f3198ebc2794f96220684b01f8605f8c..1005d2eef46a9535b06563b322c28bd991582c6b 100644
--- a/shell.nix
+++ b/shell.nix
@@ -1,9 +1,21 @@
-with import <nixpkgs> {};
-stdenv.mkDerivation {
-  name = "redox";
+{ pkgs ? import <nixpkgs> {} }:
 
+pkgs.mkShell rec {
   hardeningDisable = [ "all" ];
 
-  nativeBuildInputs = [ gnumake cmake nasm pkgconfig gcc automake autoconf bison gperf qemu ];
-  buildInputs = [ openssl gettext libtool flex libpng perl perlPackages.HTMLParser ];
+  # used in mk/prefix.mk to patch interpreter when PREFIX_BINARY=1
+  NIX_INTERPRETER = "${pkgs.stdenv.cc.libc}/lib/ld-linux-x86-64.so.2";
+
+  LIBRARY_PATH = pkgs.lib.makeLibraryPath [
+    pkgs.gcc-unwrapped pkgs.stdenv.cc.libc
+    (toString prefix/x86_64-unknown-redox)
+  ];
+  LD_LIBRARY_PATH = LIBRARY_PATH;
+
+  nativeBuildInputs = with pkgs; [ gnumake cmake nasm pkgconfig gcc automake autoconf bison gperf qemu rustup ];
+  buildInputs = with pkgs; [ fuse openssl gettext libtool flex libpng perl perlPackages.HTMLParser ];
+
+  shellHook = ''
+    export PATH="/run/wrappers/bin:$PATH"
+  '';
 }