description:"Module which will be used for uploads",
suggestions:[
Generator.uploaders_list()
]
},
%{
key::filters,
type:{:list,:module},
description:"List of filter modules for uploads",
suggestions:[
Generator.filters_list()
]
},
%{
key::link_name,
type::boolean,
description:
"If enabled, a name parameter will be added to the url of the upload. For example `https://instance.tld/media/imagehash.png?name=realname.png`"
},
%{
key::base_url,
type::string,
description:"Base url for the uploads, needed if you use CDN",
suggestions:[
"https://cdn-host.com"
]
},
%{
key::proxy_remote,
type::boolean,
description:
"If enabled, requests to media stored using a remote uploader will be proxied instead of being redirected."
},
%{
key::proxy_opts,
type::keyword,
description:"Proxy options, see `Pleroma.ReverseProxy` documentation"
}
]
},
%{
group::pleroma,
key:Pleroma.Uploaders.Local,
type::group,
description:"Local uploader-related settings",
children:[
%{
key::uploads,
type::string,
description:"Path where user 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",
["strip","auto-orient"],
[{"implode","1"}],
["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}",
nil
]
}
]
},
%{
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
]
},
%{
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,
type::boolean,
description:"`Swoosh.Adapters.SMTP` adapter specific setting"
},
%{
group:{:subgroup,Swoosh.Adapters.SMTP},
key::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,
type::boolean,
description:"`Swoosh.Adapters.SMTP` adapter specific setting"
},
%{
group:{:subgroup,Swoosh.Adapters.Sendgrid},
key::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,
type::string,
description:"`Swoosh.Adapters.Mandrill` adapter specific setting",
suggestions:["my-api-key"]
},
%{
group:{:subgroup,Swoosh.Adapters.Mailgun},
key::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,
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,
type::string,
description:"`Swoosh.Adapters.Postmark` adapter specific setting",
suggestions:["my-api-key"]
},
%{
group:{:subgroup,Swoosh.Adapters.SparkPost},
key::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,
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,
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::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,
type::string,
description:"Email used to reach an Administrator/Moderator of the instance",
suggestions:[
"email@example.com"
]
},
%{
key::notify_email,
type::string,
description:"Email used for notifications",
suggestions:[
"notify@example.com"
]
},
%{
key::description,
type::string,
description:"The instance's description, 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::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 can be enabled when false"
},
%{
key::invites_enabled,
type::boolean,
description:"Enable user invitations for admins (depends on registrations_open: false)"
},
%{
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,
type::integer,
description:
"Max. depth of reply-to 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,
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,
Pleroma.Web.Websub,
Pleroma.Web.Salmo
]
},
%{
key::allow_relay,
type::boolean,
description:"Enable Pleroma's Relay, which makes it possible to follow a whole instance"
},
%{
key::rewrite_policy,
type:{:list,:module},
description:"A list of MRF policies enabled",
suggestions:[
Pleroma.Web.ActivityPub.MRF.NoOpPolicy,
Generator.mrf_list()
]
},
%{
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,
type::boolean,
description:
"Make the content of your Message Rewrite Facility settings public (via nodeinfo)"
},
%{
key::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:
"Set to true to use extended local nicknames format (allows underscores/dashes)."<>
" This will break federation with older software for theses nicknames"
},
%{
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::no_attachment_links,
type::boolean,
description:
"Set to true to disable automatically adding attachment link text to statuses"
},
%{
key::welcome_message,
type::string,
description:
"A message that will be send to a newly registered users as a direct message",
suggestions:[
"Hi, @username! Welcome to the board!",
nil
]
},
%{
key::welcome_user_nickname,
type::string,
description:"The nickname of the local user that sends the welcome message",
suggestions:[
"lain",
nil
]
},
%{
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 set to true, 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. \"@friend hey i really don't like @enemy\")."<>
" Default: false"
},
%{
key::healthcheck,
type::boolean,
description:"If set to true, 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 filter out broken threads. The default is true"
},
%{
key::limit_to_local_content,
type:[:atom,false],
description:
"Limit unauthenticated users to search for local statutes and users only. The default is :unauthenticated ",
suggestions:[
:unauthenticated,
:all,
false
]
},
%{
key::dynamic_configuration,
type::boolean,
description:
"Allow transferring configuration to DB with the subsequent customization from Admin api. Defaults to `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 send, :console - send logs to stdout, {ExSyslogger, :ex_syslogger} - to syslog, Quack.Logger - to Slack.",
description:"whether to allow followers-only posts"
},
%{
key::allow_direct,
type::boolean,
description:"whether to allow direct messages"
}
]
},
%{
group::pleroma,
key::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,
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",
suggestions:["foo",~r/foo/iu]
},
%{
key::replace,
type:[{:string,:string},{:regex,:string}],
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",
suggestions:[{"foo","bar"},{~r/foo/iu,"bar"}]
}
]
},
%{
group::pleroma,
key::mrf_mention,
type::group,
description:"Block messages which mention a user",
children:[
%{
key::actors,
type:{:list,:string},
description:"A list of actors, for which to drop any posts mentioning",
suggestions:[["actor1","actor2"]]
}
]
},
%{
group::pleroma,
key::mrf_vocabulary,
type::group,
description:"Filter messages which belong to certain activity vocabularies",
children:[
%{
key::accept,
type:{:list,:string},
description:
"A list of ActivityStreams terms to accept. If empty, all supported messages are accepted",
**If your instance is not behind at least one reverse proxy, you should not enable this plug.**
`Pleroma.Plugs.RemoteIp` is a shim to call [`RemoteIp`](https://git.pleroma.social/pleroma/remote_ip) but with runtime configuration.
""",
children:[
%{
key::enabled,
type::boolean,
description:"Enable/disable the plug. Defaults to `false`.",
suggestions:[true,false]
},
%{
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. Defaults to `~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. Defaults to `[]`."
},
%{
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). Defaults to `nil` (no expiration).",
suggestions:[30_000,nil]
},
%{
key::activity_pub_question,
type::integer,
description:
"activity pub routes (question activities). Defaults to `30_000` (30 seconds).",