diff --git a/flake.lock b/flake.lock
index f3452d5d..8ab88f28 100644
--- a/flake.lock
+++ b/flake.lock
@@ -63,6 +63,40 @@
         "type": "github"
       }
     },
+    "flake-compat": {
+      "flake": false,
+      "locked": {
+        "lastModified": 1733328505,
+        "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=",
+        "owner": "edolstra",
+        "repo": "flake-compat",
+        "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec",
+        "type": "github"
+      },
+      "original": {
+        "owner": "edolstra",
+        "repo": "flake-compat",
+        "type": "github"
+      }
+    },
+    "flake-utils": {
+      "inputs": {
+        "systems": "systems_2"
+      },
+      "locked": {
+        "lastModified": 1731533236,
+        "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
+        "owner": "numtide",
+        "repo": "flake-utils",
+        "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
+        "type": "github"
+      },
+      "original": {
+        "owner": "numtide",
+        "repo": "flake-utils",
+        "type": "github"
+      }
+    },
     "home-manager": {
       "inputs": {
         "nixpkgs": [
@@ -121,6 +155,27 @@
         "type": "github"
       }
     },
+    "nixos-wsl": {
+      "inputs": {
+        "flake-compat": "flake-compat",
+        "flake-utils": "flake-utils",
+        "nixpkgs": "nixpkgs_2"
+      },
+      "locked": {
+        "lastModified": 1733854371,
+        "narHash": "sha256-K9qGHniYBbjqVcEiwXyiofj/IFf78L5F0/FCf+CKyr0=",
+        "owner": "nix-community",
+        "repo": "NixOS-WSL",
+        "rev": "dee4425dcee3149475ead0cb6a616b8a028c5888",
+        "type": "github"
+      },
+      "original": {
+        "owner": "nix-community",
+        "ref": "main",
+        "repo": "NixOS-WSL",
+        "type": "github"
+      }
+    },
     "nixpkgs": {
       "locked": {
         "lastModified": 1703013332,
@@ -154,6 +209,22 @@
       }
     },
     "nixpkgs_2": {
+      "locked": {
+        "lastModified": 1733384649,
+        "narHash": "sha256-K5DJ2LpPqht7K76bsxetI+YHhGGRyVteTPRQaIIKJpw=",
+        "owner": "NixOS",
+        "repo": "nixpkgs",
+        "rev": "190c31a89e5eec80dd6604d7f9e5af3802a58a13",
+        "type": "github"
+      },
+      "original": {
+        "owner": "NixOS",
+        "ref": "nixos-24.05",
+        "repo": "nixpkgs",
+        "type": "github"
+      }
+    },
+    "nixpkgs_3": {
       "locked": {
         "lastModified": 1734649271,
         "narHash": "sha256-4EVBRhOjMDuGtMaofAIqzJbg4Ql7Ai0PSeuVZTHjyKQ=",
@@ -175,7 +246,8 @@
         "disko": "disko",
         "home-manager": "home-manager_2",
         "nixos-hardware": "nixos-hardware",
-        "nixpkgs": "nixpkgs_2",
+        "nixos-wsl": "nixos-wsl",
+        "nixpkgs": "nixpkgs_3",
         "nixpkgs-2405": "nixpkgs-2405"
       }
     },
@@ -193,6 +265,21 @@
         "repo": "default",
         "type": "github"
       }
+    },
+    "systems_2": {
+      "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 701bf33a..3d919504 100644
--- a/flake.nix
+++ b/flake.nix
@@ -14,6 +14,8 @@
 
     nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
     nixpkgs-2405.url = "github:nixos/nixpkgs/nixos-24.05";
+
+    nixos-wsl.url = "github:nix-community/NixOS-WSL/main";
   };
 
   outputs =
@@ -22,6 +24,7 @@
       disko,
       home-manager,
       nixos-hardware,
+      nixos-wsl,
       nixpkgs,
       self,
       ...
@@ -99,6 +102,23 @@
           ];
         };
 
+        PW05CH3L = nixpkgs.lib.nixosSystem {
+          inherit system;
+
+          specialArgs = specialArgs // {
+            headless = true;
+            hostname = "PW05CH3L";
+          };
+
+          modules = [
+            agenix.nixosModules.default
+            disko.nixosModules.disko
+            nixos-wsl.nixosModules.default
+
+            ./nix/hosts/PW05CH3L
+          ];
+        };
+
         hetznix = nixpkgs.lib.nixosSystem {
           inherit system;
 
@@ -114,20 +134,5 @@
           ];
         };
       };
-
-      homeConfigurations = {
-        "${username}@PW05CH3L" = home-manager.lib.homeManagerConfiguration {
-          inherit pkgs;
-
-          extraSpecialArgs = specialArgs // {
-            headless = true;
-            hostname = "PW05CH3L";
-          };
-
-          modules = [
-            ./nix/home/opdavies
-          ];
-        };
-      };
     };
 }
diff --git a/nix/hosts/PW05CH3L/configuration.nix b/nix/hosts/PW05CH3L/configuration.nix
new file mode 100644
index 00000000..2f2c5bfc
--- /dev/null
+++ b/nix/hosts/PW05CH3L/configuration.nix
@@ -0,0 +1,118 @@
+{
+  headless ? false,
+  hostname,
+  inputs,
+  outputs,
+  pkgs,
+  self,
+  system,
+  username,
+  ...
+}:
+
+{
+  home-manager = {
+    extraSpecialArgs = {
+      inherit
+        hostname
+        inputs
+        outputs
+        headless
+        self
+        system
+        username
+        ;
+    };
+    useGlobalPkgs = true;
+    useUserPackages = true;
+
+    users."${username}" = import "${self}/nix/home/${username}";
+  };
+
+  nixpkgs = {
+    config = {
+      allowUnfree = true;
+    };
+
+    overlays = [
+      outputs.overlays.additions
+      outputs.overlays.modifications
+      outputs.overlays.stable-packages
+    ];
+  };
+
+  nix.nixPath = [ "nixpkgs=${inputs.nixpkgs}" ];
+
+  # # Enable networking
+  # networking.networkmanager.enable = true;
+
+  # Set your time zone.
+  time.timeZone = "Europe/London";
+
+  # Select internationalisation properties.
+  i18n.defaultLocale = "en_GB.UTF-8";
+
+  i18n.extraLocaleSettings = {
+    LC_ADDRESS = "en_GB.UTF-8";
+    LC_IDENTIFICATION = "en_GB.UTF-8";
+    LC_MEASUREMENT = "en_GB.UTF-8";
+    LC_MONETARY = "en_GB.UTF-8";
+    LC_NAME = "en_GB.UTF-8";
+    LC_NUMERIC = "en_GB.UTF-8";
+    LC_PAPER = "en_GB.UTF-8";
+    LC_TELEPHONE = "en_GB.UTF-8";
+    LC_TIME = "en_GB.UTF-8";
+  };
+
+  # Configure console keymap
+  console.keyMap = "uk";
+
+  users.users.${username} = {
+    description = "Oliver Davies";
+    isNormalUser = true;
+
+    extraGroups = [
+      "docker"
+      "media"
+      "networkmanager"
+      "wheel"
+    ];
+
+    packages = with pkgs; [ ];
+  };
+
+  security.sudo.wheelNeedsPassword = false;
+
+  environment.systemPackages =
+    with pkgs;
+    [
+    ]
+    ++ pkgs.lib.optionals (!headless) [
+    ];
+
+  system.stateVersion = "22.11";
+
+  nix = {
+    extraOptions = ''
+      trusted-users = root ${username}
+    '';
+
+    gc = {
+      automatic = true;
+      dates = "daily";
+      options = "--delete-older-than 7d";
+    };
+
+    optimise.automatic = true;
+
+    settings = {
+      auto-optimise-store = true;
+      experimental-features = [
+        "nix-command"
+        "flakes"
+      ];
+      warn-dirty = false;
+    };
+  };
+
+}
diff --git a/nix/hosts/PW05CH3L/default.nix b/nix/hosts/PW05CH3L/default.nix
new file mode 100644
index 00000000..e1303ff9
--- /dev/null
+++ b/nix/hosts/PW05CH3L/default.nix
@@ -0,0 +1,14 @@
+{ username, ... }:
+
+{
+  imports = [
+    ../common
+
+    ./configuration.nix
+  ];
+
+  wsl = {
+    enable = true;
+    defaultUser = username;
+  };
+}
diff --git a/nix/hosts/lemp11/default.nix b/nix/hosts/lemp11/default.nix
index 7c94665b..22c16606 100644
--- a/nix/hosts/lemp11/default.nix
+++ b/nix/hosts/lemp11/default.nix
@@ -7,6 +7,7 @@
     };
 
     desktop = {
+      autorandr.enable = true;
       gaming.enable = true;
       peek.enable = true;
     };
diff --git a/nix/hosts/t490/default.nix b/nix/hosts/t490/default.nix
index 364150d6..15d408b6 100644
--- a/nix/hosts/t490/default.nix
+++ b/nix/hosts/t490/default.nix
@@ -7,6 +7,7 @@
 
   features = {
     desktop = {
+      autorandr.enable = true;
       gaming.enable = true;
       i3.enable = true;
       peek.enable = true;
diff --git a/nix/modules/nixos/autorandr.nix b/nix/modules/nixos/autorandr.nix
deleted file mode 100644
index 202c4ced..00000000
--- a/nix/modules/nixos/autorandr.nix
+++ /dev/null
@@ -1,75 +0,0 @@
-{ config, ... }:
-
-{
-  services.autorandr = {
-    enable = true;
-
-    profiles =
-      let
-        hosts = {
-          lemp11 = {
-            internal = {
-              fingerprint = "00ffffffffffff000dae081400000000251d0104a51f117802ee95a3544c99260f505400000001010101010101010101010101010101363680a0703820403020350035ad1000001a000000fe004e3134304843472d4551310a20000000fe00434d4e0a202020202020202020000000fe004e3134304843472d4551310a200084";
-              name = "eDP-1";
-            };
-
-            desktop.name = "HDMI-1";
-          };
-
-          nixedo = {
-            internal = {
-              fingerprint = "00ffffffffffff000dae081400000000251d0104a51f117802ee95a3544c99260f505400000001010101010101010101010101010101363680a0703820403020350035ad1000001a000000fe004e3134304843472d4551310a20000000fe00434d4e0a202020202020202020000000fe004e3134304843472d4551310a200084";
-              name = "eDP-1";
-            };
-
-            desktop.name = "HDMI-1";
-          };
-
-          t490 = {
-            internal = {
-              fingerprint = "00ffffffffffff0030e4fa0500000000001c0104a51f117802aa95955e598e271b5054000000010101010101010101010101010101012e3680a070381f403020350035ae1000001ab62c80f4703816403020350035ae1000001a000000fe004c4720446973706c61790a2020000000fe004c503134305746412d53504432004d";
-              name = "eDP-1";
-            };
-
-            desktop.name = "HDMI-2";
-          };
-        };
-
-        host = hosts."${config.networking.hostName}";
-      in
-      {
-        default = {
-          fingerprint = {
-            "${host.internal.name}" = host.internal.fingerprint;
-          };
-
-          config = {
-            "${host.internal.name}" = {
-              enable = true;
-              mode = "1920x1080";
-            };
-          };
-        };
-
-        desktop = {
-          config = {
-            "${host.internal.name}".enable = false;
-
-            "${host.desktop.name}" = {
-              enable = true;
-              mode = "2560x1440";
-              primary = true;
-              rate = "59.95";
-            };
-          };
-
-          fingerprint = {
-            "${host.internal.name}" = host.internal.fingerprint;
-
-            "${host.desktop.name}" =
-              "00ffffffffffff004c2d1710424e58432b1f0103803f24782ac8b5ad50449e250f5054bfef80714f810081c081809500a9c0b300010108e80030f2705a80b0588a0078682100001e000000fd00324b1e873c000a202020202020000000fc004c5532385235350a2020202020000000ff0048345a524130303132380a20200183020335f04961120313041f10605f2309070783010000e305c0006b030c002000b83c2000200167d85dc401788003e20f81e3060501023a801871382d40582c450078682100001e023a80d072382d40102c458078682100001e04740030f2705a80b0588a0078682100001e565e00a0a0a029503020350078682100001a000049";
-          };
-        };
-      };
-  };
-}
diff --git a/nix/modules/nixos/default.nix b/nix/modules/nixos/default.nix
index 28ce9167..7fc8e31a 100644
--- a/nix/modules/nixos/default.nix
+++ b/nix/modules/nixos/default.nix
@@ -1,6 +1,5 @@
 {
   imports = [
-    ./autorandr.nix
     ./features/cli
     ./features/desktop
     ./features/gaming.nix
diff --git a/nix/modules/nixos/features/desktop/autorandr.nix b/nix/modules/nixos/features/desktop/autorandr.nix
new file mode 100644
index 00000000..385e9b3a
--- /dev/null
+++ b/nix/modules/nixos/features/desktop/autorandr.nix
@@ -0,0 +1,81 @@
+{ config, lib, ... }:
+
+with lib;
+
+{
+  options.features.desktop.autorandr.enable = mkEnableOption "Enable autorandr";
+
+  config = mkIf config.features.desktop.autorandr.enable {
+    services.autorandr = {
+      enable = true;
+
+      profiles =
+        let
+          hosts = {
+            lemp11 = {
+              internal = {
+                fingerprint = "00ffffffffffff000dae081400000000251d0104a51f117802ee95a3544c99260f505400000001010101010101010101010101010101363680a0703820403020350035ad1000001a000000fe004e3134304843472d4551310a20000000fe00434d4e0a202020202020202020000000fe004e3134304843472d4551310a200084";
+                name = "eDP-1";
+              };
+
+              desktop.name = "HDMI-1";
+            };
+
+            nixedo = {
+              internal = {
+                fingerprint = "00ffffffffffff000dae081400000000251d0104a51f117802ee95a3544c99260f505400000001010101010101010101010101010101363680a0703820403020350035ad1000001a000000fe004e3134304843472d4551310a20000000fe00434d4e0a202020202020202020000000fe004e3134304843472d4551310a200084";
+                name = "eDP-1";
+              };
+
+              desktop.name = "HDMI-1";
+            };
+
+            t490 = {
+              internal = {
+                fingerprint = "00ffffffffffff0030e4fa0500000000001c0104a51f117802aa95955e598e271b5054000000010101010101010101010101010101012e3680a070381f403020350035ae1000001ab62c80f4703816403020350035ae1000001a000000fe004c4720446973706c61790a2020000000fe004c503134305746412d53504432004d";
+                name = "eDP-1";
+              };
+
+              desktop.name = "HDMI-2";
+            };
+          };
+
+          host = hosts."${config.networking.hostName}";
+        in
+        {
+          default = {
+            fingerprint = {
+              "${host.internal.name}" = host.internal.fingerprint;
+            };
+
+            config = {
+              "${host.internal.name}" = {
+                enable = true;
+                mode = "1920x1080";
+              };
+            };
+          };
+
+          desktop = {
+            config = {
+              "${host.internal.name}".enable = false;
+
+              "${host.desktop.name}" = {
+                enable = true;
+                mode = "2560x1440";
+                primary = true;
+                rate = "59.95";
+              };
+            };
+
+            fingerprint = {
+              "${host.internal.name}" = host.internal.fingerprint;
+
+              "${host.desktop.name}" =
+                "00ffffffffffff004c2d1710424e58432b1f0103803f24782ac8b5ad50449e250f5054bfef80714f810081c081809500a9c0b300010108e80030f2705a80b0588a0078682100001e000000fd00324b1e873c000a202020202020000000fc004c5532385235350a2020202020000000ff0048345a524130303132380a20200183020335f04961120313041f10605f2309070783010000e305c0006b030c002000b83c2000200167d85dc401788003e20f81e3060501023a801871382d40582c450078682100001e023a80d072382d40102c458078682100001e04740030f2705a80b0588a0078682100001e565e00a0a0a029503020350078682100001a000049";
+            };
+          };
+        };
+    };
+  };
+}
diff --git a/nix/modules/nixos/features/desktop/default.nix b/nix/modules/nixos/features/desktop/default.nix
index 80157252..07ce9a0a 100644
--- a/nix/modules/nixos/features/desktop/default.nix
+++ b/nix/modules/nixos/features/desktop/default.nix
@@ -1,5 +1,6 @@
 {
   imports = [
+    ./autorandr.nix
     ./peek.nix
     ./screenkey.nix
   ];