{ 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
            programs.nushell.environmentVariables = {
              VISUAL = "nvim";
              EDITOR = "nvim";
            };
          }
        )
      ];
    }
  );
}