{
  withSystem,
  inputs,
  ...
}: {
  # perSystem = { ... }: { config.packages.hello = ...; };

  flake.homeConfigurations.wsl = withSystem "x86_64-linux" (
    ctx @ {
      config,
      inputs',
      ...
    }:
      inputs.home-manager.lib.homeManagerConfiguration {
        pkgs = inputs.nixpkgs.legacyPackages.${"x86_64-linux"};
        extraSpecialArgs = {
          inherit inputs inputs';
          packages = config.packages;
        };
        modules = [
          (
            {
              config,
              lib,
              pkgs,
              ...
            }: {
              imports = [
                ../../modules/programs/shell.nix
                ../../modules/programs/neovim.nix
                (import ../../modules/programs/git.nix {})
                ../../modules/programs/core.nix
                ../../modules/programs/devel.nix
                ../../modules/programs/ssh.nix
                (import ../../modules/programs/emacs.nix {})
                ../../modules/programs/fonts.nix
              ];
              home.username = "nathan";
              home.homeDirectory = "/home/nathan/";
              programs.command-not-found.enable = true;
              home.stateVersion = "24.11";
              programs.home-manager.enable = true;

              # Allow unfree packages
              nixpkgs.config.allowUnfree = true;

              # Machine specific configuration
            }
          )
        ];
      }
  );
}