diff --git a/shell.nix b/shell.nix
index c9773565cfcb74c153bfb0fcfa0d2c712d1dc9d4..bbfb2bc7050193f61bbb8968a90506fb390d133d 100644
--- a/shell.nix
+++ b/shell.nix
@@ -1,17 +1,21 @@
-{ pkgs ? import <nixpkgs> { } }:
 let
   nixpkgs-rev = builtins.readFile ./nixpkgs.rev;
+  nixpkgs-src = "https://github.com/NixOS/nixpkgs-channels/archive/${nixpkgs-rev}.tar.gz";
+  nixpkgs = import (builtins.fetchTarball nixpkgs-src) { };
+in
+{ pkgs ? nixpkgs }:
+let
+  # Get a version of Morph known to work with our version of NixOS.
   morph-src = pkgs.fetchFromGitHub {
     owner = "DBCDK";
     repo = "morph";
-    rev = "v1.4.0";
-    hash = "sha256:1y6clzi8sfnrv4an26b44r24nnxds1kj9aw3lmjbgxl9yrxxsj1k";
+    rev = "3856a9c2f733192dee1600b8655715d760ba1803";
+    hash = "sha256:0jhypvj45yjg4cn4rvb2j9091pl6z5j541vcfaln5sb3ds14fkwf";
   };
   morph = pkgs.callPackage (morph-src + "/nix-packaging") { };
 in
 pkgs.mkShell {
-  NIX_PATH = "nixpkgs=https://github.com/NixOS/nixpkgs-channels/archive/${nixpkgs-rev}.tar.gz";
-
+  NIX_PATH = "nixpkgs=${nixpkgs-src}";
   buildInputs = [
     morph
   ];