"If `true`, outputs account/pleroma/relationship map for each rendered status / notification (for all clients). "<>
"If `false`, outputs the above only if `with_relationships` param is tru-ish "<>
"(that breaks compatibility with older PleromaFE versions which do not send this param but expect the output)."
}
]
},
%{
group::pleroma,
key:Pleroma.Uploaders.Local,
type::group,
description:"Local uploader-related settings",
children:[
%{
key::uploads,
type::string,
description:"Path where user's uploads will be saved",
suggestions:[
"uploads"
]
}
]
},
%{
group::pleroma,
key:Pleroma.Uploaders.S3,
type::group,
description:"S3 uploader-related settings",
children:[
%{
key::bucket,
type::string,
description:"S3 bucket",
suggestions:[
"bucket"
]
},
%{
key::bucket_namespace,
type::string,
description:"S3 bucket namespace",
suggestions:["pleroma"]
},
%{
key::public_endpoint,
type::string,
description:"S3 endpoint",
suggestions:["https://s3.amazonaws.com"]
},
%{
key::truncated_namespace,
type::string,
description:
"If you use S3 compatible service such as Digital Ocean Spaces or CDN, set folder name or \"\" etc."<>
" For example, when using CDN to S3 virtual host format, set \"\". At this time, write CNAME to CDN in public_endpoint."
},
%{
key::streaming_enabled,
type::boolean,
description:
"Enable streaming uploads, when enabled the file will be sent to the server in chunks as it's being read. This may be unsupported by some providers, try disabling this if you have upload problems."
}
]
},
%{
group::pleroma,
key:Pleroma.Upload.Filter.Mogrify,
type::group,
description:"Uploads mogrify filter settings",
children:[
%{
key::args,
type:[:string,{:list,:string},{:list,:tuple}],
description:"List of actions for the mogrify command",
suggestions:[
"strip",
"auto-orient",
{"implode","1"}
]
}
]
},
%{
group::pleroma,
key:Pleroma.Upload.Filter.AnonymizeFilename,
type::group,
description:"Filter replaces the filename of the upload",
children:[
%{
key::text,
type::string,
description:
"Text to replace filenames in links. If no setting, {random}.extension will be used. You can get the original"<>
" filename extension by using {extension}, for example custom-file-name.{extension}.",
suggestions:[
"custom-file-name.{extension}"
]
}
]
},
%{
group::pleroma,
key:Pleroma.Emails.Mailer,
type::group,
description:"Mailer-related settings",
children:[
%{
key::adapter,
type::module,
description:
"One of the mail adapters listed in [Swoosh readme](https://github.com/swoosh/swoosh#adapters),"<>
" or Swoosh.Adapters.Local for in-memory mailbox",
suggestions:[
Swoosh.Adapters.SMTP,
Swoosh.Adapters.Sendgrid,
Swoosh.Adapters.Sendmail,
Swoosh.Adapters.Mandrill,
Swoosh.Adapters.Mailgun,
Swoosh.Adapters.Mailjet,
Swoosh.Adapters.Postmark,
Swoosh.Adapters.SparkPost,
Swoosh.Adapters.AmazonSES,
Swoosh.Adapters.Dyn,
Swoosh.Adapters.SocketLabs,
Swoosh.Adapters.Gmail,
Swoosh.Adapters.Local
]
},
%{
key::enabled,
type::boolean,
description:"Allow/disallow send emails"
},
%{
group:{:subgroup,Swoosh.Adapters.SMTP},
key::relay,
type::string,
description:"`Swoosh.Adapters.SMTP` adapter specific setting",
suggestions:["smtp.gmail.com"]
},
%{
group:{:subgroup,Swoosh.Adapters.SMTP},
key::username,
type::string,
description:"`Swoosh.Adapters.SMTP` adapter specific setting",
suggestions:["pleroma"]
},
%{
group:{:subgroup,Swoosh.Adapters.SMTP},
key::password,
type::string,
description:"`Swoosh.Adapters.SMTP` adapter specific setting",
suggestions:["password"]
},
%{
group:{:subgroup,Swoosh.Adapters.SMTP},
key::ssl,
label:"SSL",
type::boolean,
description:"`Swoosh.Adapters.SMTP` adapter specific setting"
},
%{
group:{:subgroup,Swoosh.Adapters.SMTP},
key::tls,
label:"TLS",
type::atom,
description:"`Swoosh.Adapters.SMTP` adapter specific setting",
suggestions:[:always,:never,:if_available]
},
%{
group:{:subgroup,Swoosh.Adapters.SMTP},
key::auth,
type::atom,
description:"`Swoosh.Adapters.SMTP` adapter specific setting",
suggestions:[:always,:never,:if_available]
},
%{
group:{:subgroup,Swoosh.Adapters.SMTP},
key::port,
type::integer,
description:"`Swoosh.Adapters.SMTP` adapter specific setting",
suggestions:[1025]
},
%{
group:{:subgroup,Swoosh.Adapters.SMTP},
key::retries,
type::integer,
description:"`Swoosh.Adapters.SMTP` adapter specific setting",
suggestions:[5]
},
%{
group:{:subgroup,Swoosh.Adapters.SMTP},
key::no_mx_lookups,
label:"No MX lookups",
type::boolean,
description:"`Swoosh.Adapters.SMTP` adapter specific setting"
},
%{
group:{:subgroup,Swoosh.Adapters.Sendgrid},
key::api_key,
label:"API key",
type::string,
description:"`Swoosh.Adapters.Sendgrid` adapter specific setting",
suggestions:["my-api-key"]
},
%{
group:{:subgroup,Swoosh.Adapters.Sendmail},
key::cmd_path,
type::string,
description:"`Swoosh.Adapters.Sendmail` adapter specific setting",
suggestions:["/usr/bin/sendmail"]
},
%{
group:{:subgroup,Swoosh.Adapters.Sendmail},
key::cmd_args,
type::string,
description:"`Swoosh.Adapters.Sendmail` adapter specific setting",
suggestions:["-N delay,failure,success"]
},
%{
group:{:subgroup,Swoosh.Adapters.Sendmail},
key::qmail,
type::boolean,
description:"`Swoosh.Adapters.Sendmail` adapter specific setting"
},
%{
group:{:subgroup,Swoosh.Adapters.Mandrill},
key::api_key,
label:"API key",
type::string,
description:"`Swoosh.Adapters.Mandrill` adapter specific setting",
suggestions:["my-api-key"]
},
%{
group:{:subgroup,Swoosh.Adapters.Mailgun},
key::api_key,
label:"API key",
type::string,
description:"`Swoosh.Adapters.Mailgun` adapter specific setting",
suggestions:["my-api-key"]
},
%{
group:{:subgroup,Swoosh.Adapters.Mailgun},
key::domain,
type::string,
description:"`Swoosh.Adapters.Mailgun` adapter specific setting",
suggestions:["pleroma.com"]
},
%{
group:{:subgroup,Swoosh.Adapters.Mailjet},
key::api_key,
label:"API key",
type::string,
description:"`Swoosh.Adapters.Mailjet` adapter specific setting",
suggestions:["my-api-key"]
},
%{
group:{:subgroup,Swoosh.Adapters.Mailjet},
key::secret,
type::string,
description:"`Swoosh.Adapters.Mailjet` adapter specific setting",
suggestions:["my-secret-key"]
},
%{
group:{:subgroup,Swoosh.Adapters.Postmark},
key::api_key,
label:"API key",
type::string,
description:"`Swoosh.Adapters.Postmark` adapter specific setting",
suggestions:["my-api-key"]
},
%{
group:{:subgroup,Swoosh.Adapters.SparkPost},
key::api_key,
label:"API key",
type::string,
description:"`Swoosh.Adapters.SparkPost` adapter specific setting",
suggestions:["my-api-key"]
},
%{
group:{:subgroup,Swoosh.Adapters.SparkPost},
key::endpoint,
type::string,
description:"`Swoosh.Adapters.SparkPost` adapter specific setting",
suggestions:["https://api.sparkpost.com/api/v1"]
},
%{
group:{:subgroup,Swoosh.Adapters.AmazonSES},
key::region,
type::string,
description:"`Swoosh.Adapters.AmazonSES` adapter specific setting",
suggestions:["us-east-1","us-east-2"]
},
%{
group:{:subgroup,Swoosh.Adapters.AmazonSES},
key::access_key,
type::string,
description:"`Swoosh.Adapters.AmazonSES` adapter specific setting",
suggestions:["aws-access-key"]
},
%{
group:{:subgroup,Swoosh.Adapters.AmazonSES},
key::secret,
type::string,
description:"`Swoosh.Adapters.AmazonSES` adapter specific setting",
suggestions:["aws-secret-key"]
},
%{
group:{:subgroup,Swoosh.Adapters.Dyn},
key::api_key,
label:"API key",
type::string,
description:"`Swoosh.Adapters.Dyn` adapter specific setting",
suggestions:["my-api-key"]
},
%{
group:{:subgroup,Swoosh.Adapters.SocketLabs},
key::server_id,
type::string,
description:"`Swoosh.Adapters.SocketLabs` adapter specific setting"
},
%{
group:{:subgroup,Swoosh.Adapters.SocketLabs},
key::api_key,
label:"API key",
type::string,
description:"`Swoosh.Adapters.SocketLabs` adapter specific setting"
},
%{
group:{:subgroup,Swoosh.Adapters.Gmail},
key::access_token,
type::string,
description:"`Swoosh.Adapters.Gmail` adapter specific setting"
}
]
},
%{
group::swoosh,
type::group,
description:"`Swoosh.Adapters.Local` adapter specific settings",
children:[
%{
group:{:subgroup,Swoosh.Adapters.Local},
key::serve_mailbox,
type::boolean,
description:"Run the preview server together as part of your app"
},
%{
group:{:subgroup,Swoosh.Adapters.Local},
key::preview_port,
type::integer,
description:"The preview server port",
suggestions:[4001]
}
]
},
%{
group::pleroma,
key::uri_schemes,
type::group,
description:"URI schemes related settings",
children:[
%{
key::valid_schemes,
type:{:list,:string},
description:"List of the scheme part that is considered valid to be an URL",
suggestions:[
"https",
"http",
"dat",
"dweb",
"gopher",
"ipfs",
"ipns",
"irc",
"ircs",
"magnet",
"mailto",
"mumble",
"ssb",
"xmpp"
]
}
]
},
%{
group::pleroma,
key::instance,
type::group,
description:"Instance-related settings",
children:[
%{
key::name,
type::string,
description:"Name of the instance",
suggestions:[
"Pleroma"
]
},
%{
key::email,
label:"Admin Email Address",
type::string,
description:"Email used to reach an Administrator/Moderator of the instance",
suggestions:[
"email@example.com"
]
},
%{
key::notify_email,
label:"Sender Email Address",
type::string,
description:"Envelope FROM address for mail sent via Pleroma",
suggestions:[
"notify@example.com"
]
},
%{
key::description,
type::string,
description:
"The instance's description. It can be seen in nodeinfo and `/api/v1/instance`",
suggestions:[
"Very cool instance"
]
},
%{
key::limit,
type::integer,
description:"Posts character limit (CW/Subject included in the counter)",
suggestions:[
5_000
]
},
%{
key::chat_limit,
type::integer,
description:"Character limit of the instance chat messages",
suggestions:[
5_000
]
},
%{
key::remote_limit,
type::integer,
description:"Hard character limit beyond which remote posts will be dropped",
suggestions:[
100_000
]
},
%{
key::upload_limit,
type::integer,
description:"File size limit of uploads (except for avatar, background, banner)",
suggestions:[
16_000_000
]
},
%{
key::avatar_upload_limit,
type::integer,
description:"File size limit of user's profile avatars",
suggestions:[
2_000_000
]
},
%{
key::background_upload_limit,
type::integer,
description:"File size limit of user's profile backgrounds",
suggestions:[
4_000_000
]
},
%{
key::banner_upload_limit,
type::integer,
description:"File size limit of user's profile banners",
suggestions:[
4_000_000
]
},
%{
key::poll_limits,
type::map,
description:"A map with poll limits for local polls",
suggestions:[
%{
max_options:20,
max_option_chars:200,
min_expiration:0,
max_expiration:31_536_000
}
],
children:[
%{
key::max_options,
type::integer,
description:"Maximum number of options",
suggestions:[20]
},
%{
key::max_option_chars,
type::integer,
description:"Maximum number of characters per option",
suggestions:[200]
},
%{
key::min_expiration,
type::integer,
description:"Minimum expiration time (in seconds)",
suggestions:[0]
},
%{
key::max_expiration,
type::integer,
description:"Maximum expiration time (in seconds)",
suggestions:[3600]
}
]
},
%{
key::registrations_open,
type::boolean,
description:
"Enable registrations for anyone. Invitations require this setting to be disabled."
},
%{
key::invites_enabled,
type::boolean,
description:
"Enable user invitations for admins (depends on `registrations_open` being disabled)."
},
%{
key::account_activation_required,
type::boolean,
description:"Require users to confirm their emails before signing in."
},
%{
key::federating,
type::boolean,
description:"Enable federation with other instances."
},
%{
key::federation_incoming_replies_max_depth,
label:"Fed. incoming replies max depth",
type::integer,
description:
"Max. depth of reply-to and reply activities fetching on incoming federation, to prevent out-of-memory situations while"<>
" fetching very long threads. If set to `nil`, threads of any depth will be fetched. Lower this value if you experience out-of-memory crashes.",
suggestions:[
100
]
},
%{
key::federation_reachability_timeout_days,
label:"Fed. reachability timeout days",
type::integer,
description:
"Timeout (in days) of each external federation target being unreachable prior to pausing federating to it.",
suggestions:[
7
]
},
%{
key::federation_publisher_modules,
type:{:list,:module},
description:"List of modules for federation publishing",
suggestions:[
Pleroma.Web.ActivityPub.Publisher
]
},
%{
key::allow_relay,
type::boolean,
description:"Enable Pleroma's Relay, which makes it possible to follow a whole instance"
},
%{
key::rewrite_policy,
type:[:module,{:list,:module}],
description:"A list of MRF policies enabled",
suggestions:
Generator.list_modules_in_dir(
"lib/pleroma/web/activity_pub/mrf",
"Elixir.Pleroma.Web.ActivityPub.MRF."
)
},
%{
key::public,
type::boolean,
description:
"Makes the client API in authentificated mode-only except for user-profiles."<>
" Useful for disabling the Local Timeline and The Whole Known Network."
},
%{
key::quarantined_instances,
type:{:list,:string},
description:
"List of ActivityPub instances where private (DMs, followers-only) activities will not be send",
suggestions:[
"quarantined.com",
"*.quarantined.com"
]
},
%{
key::managed_config,
type::boolean,
description:
"Whenether the config for pleroma-fe is configured in this config or in static/config.json"
},
%{
key::static_dir,
type::string,
description:"Instance static directory",
suggestions:[
"instance/static/"
]
},
%{
key::allowed_post_formats,
type:{:list,:string},
description:"MIME-type list of formats allowed to be posted (transformed into HTML)",
suggestions:[
"text/plain",
"text/html",
"text/markdown",
"text/bbcode"
]
},
%{
key::mrf_transparency,
label:"MRF transparency",
type::boolean,
description:
"Make the content of your Message Rewrite Facility settings public (via nodeinfo)"
},
%{
key::mrf_transparency_exclusions,
label:"MRF transparency exclusions",
type:{:list,:string},
description:
"Exclude specific instance names from MRF transparency. The use of the exclusions feature will be disclosed in nodeinfo as a boolean value.",
suggestions:[
"exclusion.com"
]
},
%{
key::extended_nickname_format,
type::boolean,
description:
"Enable to use extended local nicknames format (allows underscores/dashes)."<>
" This will break federation with older software for theses nicknames."
},
%{
key::cleanup_attachments,
type::boolean,
description:"""
Enable to remove associated attachments when status is removed.
This will not affect duplicates and attachments without status.
Enabling this will increase load to database when deleting statuses on larger instances.
"""
},
%{
key::max_pinned_statuses,
type::integer,
description:"The maximum number of pinned statuses. 0 will disable the feature.",
suggestions:[
0,
1,
3
]
},
%{
key::autofollowed_nicknames,
type:{:list,:string},
description:
"Set to nicknames of (local) users that every new user should automatically follow",
suggestions:[
"lain",
"kaniini",
"lanodan",
"rinpatch"
]
},
%{
key::attachment_links,
type::boolean,
description:"Enable to automatically add attachment link text to statuses"
},
%{
key::welcome_message,
type::string,
description:
"A message that will be sent to a newly registered users as a direct message",
suggestions:[
"Hi, @username! Welcome on board!"
]
},
%{
key::welcome_user_nickname,
type::string,
description:"The nickname of the local user that sends the welcome message",
suggestions:[
"lain"
]
},
%{
key::max_report_comment_size,
type::integer,
description:"The maximum size of the report comment. Default: 1000.",
suggestions:[
1_000
]
},
%{
key::safe_dm_mentions,
type::boolean,
description:
"If enabled, only mentions at the beginning of a post will be used to address people in direct messages."<>
" This is to prevent accidental mentioning of people when talking about them (e.g. \"@admin please keep an eye on @bad_actor\")."<>
" Default: disabled"
},
%{
key::healthcheck,
type::boolean,
description:"If enabled, system data will be shown on `/api/pleroma/healthcheck`"
},
%{
key::remote_post_retention_days,
type::integer,
description:
"The default amount of days to retain remote posts when pruning the database",
suggestions:[
90
]
},
%{
key::user_bio_length,
type::integer,
description:"A user bio maximum length. Default: 5000.",
suggestions:[
5_000
]
},
%{
key::user_name_length,
type::integer,
description:"A user name maximum length. Default: 100.",
suggestions:[
100
]
},
%{
key::skip_thread_containment,
type::boolean,
description:"Skip filtering out broken threads. Default: enabled"
},
%{
key::limit_to_local_content,
type:{:dropdown,:atom},
description:
"Limit unauthenticated users to search for local statutes and users only. Default: `:unauthenticated`.",
suggestions:[
:unauthenticated,
:all,
false
]
},
%{
key::max_account_fields,
type::integer,
description:"The maximum number of custom fields in the user profile. Default: 10.",
suggestions:[
10
]
},
%{
key::max_remote_account_fields,
type::integer,
description:
"The maximum number of custom fields in the remote user profile. Default: 20.",
suggestions:[
20
]
},
%{
key::account_field_name_length,
type::integer,
description:"An account field name maximum length. Default: 512.",
suggestions:[
512
]
},
%{
key::account_field_value_length,
type::integer,
description:"An account field value maximum length. Default: 2048.",
suggestions:[
2048
]
},
%{
key::external_user_synchronization,
type::boolean,
description:"Enabling following/followers counters synchronization for external users"
}
]
},
%{
group::logger,
type::group,
description:"Logger-related settings",
children:[
%{
key::backends,
type:[:atom,:tuple,:module],
description:
"Where logs will be sent, :console - send logs to stdout, { ExSyslogger, :ex_syslogger } - to syslog, Quack.Logger - to Slack.",
"MRF RejectNonPublic settings. RejectNonPublic drops posts with non-public visibility settings.",
label:"MRF reject non public",
type::group,
children:[
%{
key::allow_followersonly,
label:"Allow followers-only",
type::boolean,
description:"Whether to allow followers-only posts"
},
%{
key::allow_direct,
type::boolean,
description:"Whether to allow direct messages"
}
]
},
%{
group::pleroma,
key::mrf_hellthread,
label:"MRF hellthread",
type::group,
description:"Block messages with too much mentions",
children:[
%{
key::delist_threshold,
type::integer,
description:
"Number of mentioned users after which the message gets delisted (the message can still be seen, "<>
" but it will not show up in public timelines and mentioned users won't get notifications about it). Set to 0 to disable.",
suggestions:[10]
},
%{
key::reject_threshold,
type::integer,
description:
"Number of mentioned users after which the messaged gets rejected. Set to 0 to disable.",
suggestions:[20]
}
]
},
%{
group::pleroma,
key::mrf_keyword,
label:"MRF keyword",
type::group,
description:"Reject or Word-Replace messages with a keyword or regex",
children:[
%{
key::reject,
type:[:string,:regex],
description:
"A list of patterns which result in message being rejected. Each pattern can be a string or a regular expression.",
suggestions:["foo",~r/foo/iu]
},
%{
key::federated_timeline_removal,
type:[:string,:regex],
description:
"A list of patterns which result in message being removed from federated timelines (a.k.a unlisted). Each pattern can be a string or a regular expression.",
`Pleroma.Plugs.RemoteIp` is a shim to call [`RemoteIp`](https://git.pleroma.social/pleroma/remote_ip) but with runtime configuration.
**If your instance is not behind at least one reverse proxy, you should not enable this plug.**
""",
children:[
%{
key::enabled,
type::boolean,
description:"Enable/disable the plug. Default: disabled."
},
%{
key::headers,
type:{:list,:string},
description:
"A list of strings naming the `req_headers` to use when deriving the `remote_ip`. Order does not matter. Default: `~w[forwarded x-forwarded-for x-client-ip x-real-ip]`."
},
%{
key::proxies,
type:{:list,:string},
description:
"A list of strings in [CIDR](https://en.wikipedia.org/wiki/CIDR) notation specifying the IPs of known proxies. Default: `[]`."
},
%{
key::reserved,
type:{:list,:string},
description:
"Defaults to [localhost](https://en.wikipedia.org/wiki/Localhost) and [private network](https://en.wikipedia.org/wiki/Private_network)."
}
]
},
%{
group::pleroma,
key::web_cache_ttl,
type::group,
description:
"The expiration time for the web responses cache. Values should be in milliseconds or `nil` to disable expiration.",
children:[
%{
key::activity_pub,
type::integer,
description:
"Activity pub routes (except question activities). Default: `nil` (no expiration).",