anchor.diff:            '';
           };
   
  -        extraConfig = mkOption {
  -          type = types.lines;
  -          default = "";
  +        settings = mkOption {
  +          type = with types; attrsOf (oneOf [ bool int str (listOf str) ]);
  +          default = {};
             description = ''
  -            Extra configuration for freshclam. Contents will be added verbatim to the
  -            configuration file.
  +            freshclam configuration. Refer to <link xlink:href="https://linux.die.net/man/5/freshclam.conf"/>,
  +            for details on supported values.
             '';
           };
         };
  
positive.code:       daemon = {
          enable = mkEnableOption "ClamAV clamd daemon";
  
          extraConfig = mkOption {
            type = types.lines;
            default = "";
            description = ''
              Extra configuration for clamd. Contents will be added verbatim to the
              configuration file.
            '';
          };
        };
  
negative.code:   cfg = config.services.clamav;
    pkg = pkgs.clamav;
  
    toKeyValue = generators.toKeyValue {
      mkKeyValue = generators.mkKeyValueDefault {} " ";
      listsAsDuplicateKeys = true;
    };
  
    clamdConfigFile = pkgs.writeText "clamd.conf" (toKeyValue cfg.daemon.settings);
    freshclamConfigFile = pkgs.writeText "freshclam.conf" (toKeyValue cfg.updater.settings);
  in
  {
    imports = [
      (mkRemovedOptionModule [ "services" "clamav" "updater" "config" ] "Use services.clamav.updater.settings instead.")
      (mkRemovedOptionModule [ "services" "clamav" "updater" "extraConfig" ] "Use services.clamav.updater.settings instead.")
      (mkRemovedOptionModule [ "services" "clamav" "daemon" "extraConfig" ] "Use services.clamav.daemon.settings instead.")
    ];
  
    options = {
  