{
  lib,
  options,
  username,
  config,
  ...
}:
with lib; let
  inherit (config.age) secrets;
in {
  options.fireproof = {
    home-manager = lib.mkOption {
      type = options.home-manager.users.type.functor.wrapped;
    };
  };
  config = {
    age.secrets.hashed-user-password.rekeyFile = ../../../secrets/hashed-user-password.age;

    users.users.${username} = {
      isNormalUser = true;
      extraGroups = ["wheel"];
      # initialPassword = "password";
      hashedPasswordFile = secrets.hashed-user-password.path;
    };

    home-manager = {
      useUserPackages = true;
      useGlobalPkgs = true;
    };
    home-manager.users.${username} = mkAliasDefinitions options.fireproof.home-manager;

    # set the same version of home-manager as the system
    fireproof.home-manager.home.stateVersion = "24.11";
    system.stateVersion = "24.11";
  };
}
