diff --git a/.envrc b/.envrc
new file mode 100644
index 0000000..bdf8f8e
--- /dev/null
+++ b/.envrc
@@ -0,0 +1,2 @@
+use nix
+watch_file flake.nix
diff --git a/flake.lock b/flake.lock
index ffb2d0d..c369787 100644
--- a/flake.lock
+++ b/flake.lock
@@ -1,5 +1,24 @@
 {
   "nodes": {
+    "flake-utils": {
+      "inputs": {
+        "systems": "systems"
+      },
+      "locked": {
+        "lastModified": 1710146030,
+        "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
+        "owner": "numtide",
+        "repo": "flake-utils",
+        "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
+        "type": "github"
+      },
+      "original": {
+        "owner": "numtide",
+        "ref": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
+        "repo": "flake-utils",
+        "type": "github"
+      }
+    },
     "nixpkgs": {
       "locked": {
         "lastModified": 1714532603,
@@ -17,8 +36,24 @@
     },
     "root": {
       "inputs": {
+        "flake-utils": "flake-utils",
         "nixpkgs": "nixpkgs"
       }
+    },
+    "systems": {
+      "locked": {
+        "lastModified": 1681028828,
+        "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+        "owner": "nix-systems",
+        "repo": "default",
+        "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+        "type": "github"
+      },
+      "original": {
+        "owner": "nix-systems",
+        "repo": "default",
+        "type": "github"
+      }
     }
   },
   "root": "root",
diff --git a/flake.nix b/flake.nix
index 9f994fd..60fedb6 100644
--- a/flake.nix
+++ b/flake.nix
@@ -3,9 +3,10 @@
 
   inputs = {
     nixpkgs.url = "nixpkgs/38c01297e7ec11f7b9e3f2cae7d6fcec6cc767ec";
+    flake-utils.url = "github:numtide/flake-utils?ref=b1d9ab70662946ef0850d488da1c9019f3a9752a";
   };
 
-  outputs = { self, nixpkgs }: 
+  outputs = { self, nixpkgs, flake-utils }: 
     let
       system = import ./lib/system.nix {
         inherit nixpkgs;
@@ -25,5 +26,18 @@
                 value = system config;
               })
             systems);
-    };
+    } //
+      flake-utils.lib.eachDefaultSystem (
+        system:
+        let
+          pkgs = nixpkgs.legacyPackages.${system};
+        in {
+          devShells.default = pkgs.mkShellNoCC (
+            with pkgs;
+            {
+              packages = [
+                nixos-rebuild
+              ];
+            });
+        });
 }
diff --git a/shell.nix b/shell.nix
new file mode 100644
index 0000000..f3d4d54
--- /dev/null
+++ b/shell.nix
@@ -0,0 +1,8 @@
+(import (
+  fetchTarball {
+    url = "https://github.com/edolstra/flake-compat/archive/0f9255e01c2351cc7d116c072cb317785dd33b33.tar.gz";
+    sha256 = "0m9grvfsbwmvgwaxvdzv6cmyvjnlww004gfxjvcl806ndqaxzy4j";
+  }
+) {
+  src =  ./.;
+}).shellNix