{ lib, config, ... }:
let
  cfg = config.module.docker;
in
{
  config = lib.mkIf cfg.enable (
    lib.mkMerge [
      {
        virtualisation.docker.enable = true;

        systemd =
          if cfg.autostart then
            { }
          else
            {
              sockets.docker.wantedBy = lib.mkForce [ ];
              services = {
                docker-prune.wantedBy = lib.mkForce [ ];
                docker.wantedBy = lib.mkForce [ ];
              };
            };
      }

      (lib.mkIf cfg.rootless {
        virtualisation.docker.rootless = {
          enable = true;
          setSocketVariable = true;
        };
      })
    ]
  );
}