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

  flake.homeConfigurations.crash = 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
              ../../modules/programs/desktop.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
            services.emacs.defaultEditor = true;

            systemd.user = {
              targets.tray = {
                Unit = {
                  Description = "Home Manager System Tray";
                  Requires = [ "graphical-session.target" ];
                };
              };
              services.syncthingtray = {
                Service.ExecStart = lib.mkForce "${pkgs.syncthingtray}/bin/syncthingtray --wait";
              };
            };
          }
        )
      ];
    }
  );
}