{ inputs, lib, ... }:
{
  flake.nixosModules =
    let
      nvim-config =
        { pkgs, ... }:
        {
          imports = [
            inputs.nixvim.homeManagerModules.nixvim
            (import ../nvim {
              inherit (inputs) unstable;
              inherit (pkgs) system;
            })
          ];
        };
      homeManagerModuleSandalone = import ../home {
        inherit nvim-config;
        inherit (inputs) stylix;
      };
      homeManagerModuleNixOS = import ../home { inherit nvim-config; };
      nixosModule = {
        imports = [
          (import ../system { inherit (inputs) stylix; })
          inputs.home-manager.nixosModules.home-manager
        ] ++ lib.optional (inputs.lix-module != null) inputs.lix-module.nixosModules.default;
        home-manager = {
          useGlobalPkgs = true;
          useUserPackages = true;
          sharedModules = [ homeManagerModuleNixOS ];
        };
        # Pin nixpkgs
        nix.registry.nixpkgs.flake = inputs.nixpkgs;
      };

      machines = [ "vm" ];
      mkMachine = hostname: {
        imports = [
          nixosModule
          (import (../machines + "/${hostname}"))
        ];
        home-manager.sharedModules = [ { jhome.hostName = hostname; } ];
      };
      machineModules = lib.genAttrs machines mkMachine;
    in
    {
      default = nixosModule;
      inherit nixosModule homeManagerModuleNixOS homeManagerModuleSandalone;
    }
    // machineModules;
}