{ config, lib, pkgs, ... }:

let

  inherit (lib) mkIf mkOption types;

in {
  options.uninstall = mkOption {
    type = types.bool;
    default = false;
    description = ''
      Whether to set up a minimal configuration that will remove all managed
      files and packages.

      Use this with extreme care since running the generated activation script
      will remove all Home Manager state from your user environment. This
      includes removing all your historic Home Manager generations.
    '';
  };

  config = mkIf config.uninstall {
    home.packages = lib.mkForce [ ];
    home.file = lib.mkForce { };
    home.stateVersion = lib.mkForce "23.11";
    home.enableNixpkgsReleaseCheck = lib.mkForce false;
    manual.manpages.enable = lib.mkForce false;
    news.display = lib.mkForce "silent";

    home.activation.uninstall =
      lib.hm.dag.entryAfter [ "installPackages" "linkGeneration" ] ''
        nixProfileRemove home-manager-path

        if [[ -e $hmDataPath ]]; then
            run rm $VERBOSE_ARG -r "$hmDataPath"
        fi

        if [[ -e $hmStatePath ]]; then
            run rm $VERBOSE_ARG -r "$hmStatePath"
        fi

        if [[ -e $genProfilePath ]]; then
            run rm $VERBOSE_ARG "$genProfilePath"*
        fi

        if [[ -e $legacyGenGcPath ]]; then
            run rm $VERBOSE_ARG "$legacyGenGcPath"
        fi
      '';
  };
}