"Name of the installed frontend. Valid config must include both `Name` and `Reference` values."
},
%{
key:"ref",
label:"Reference",
type::string,
description:
"Reference of the installed frontend to be used. Valid config must include both `Name` and `Reference` values."
}
]
frontend_options=[
%{
key:"name",
label:"Name",
type::string,
description:"Name of the frontend."
},
%{
key:"ref",
label:"Reference",
type::string,
description:"Reference of the frontend to be used."
},
%{
key:"git",
type::string,
description:"URL of the git repository of the frontend"
},
%{
key:"build_url",
type::string,
description:
"Either an url to a zip file containing the frontend or a template to build it by inserting the `ref`. The string `${ref}` will be replaced by the configured `ref`.",
example:"https://some.url/builds/${ref}.zip"
},
%{
key:"build_dir",
type::string,
description:"The directory inside the zip file "
}
]
config:pleroma,:config_description,[
%{
group::pleroma,
key:Pleroma.Upload,
type::group,
description:"Upload general settings",
children:[
%{
key::uploader,
type::module,
description:"Module which will be used for uploads",
"List of filter modules for uploads. Module names are shortened (removed leading `Pleroma.Upload.Filter.` part), but on adding custom module you need to use full name.",
description:"Set max length of a filename to display. 0 = no limit. Default: 30"
}
]
},
%{
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. It's possible to add self-written settings as string. "<>
"For example `auto-orient, strip, {\"resize\", \"3840x1080>\"}` value will be parsed into valid list of the settings.",
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,
label:"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",
"hyper",
"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::account_approval_required,
type::boolean,
description:"Require users to be manually approved by an admin 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::allow_relay,
type::boolean,
description:"Enable Pleroma's Relay, which makes it possible to follow a whole instance"
},
%{
key::public,
type::boolean,
description:
"Makes the client API in authenticated mode-only except for user-profiles."<>
" Useful for disabling the Local Timeline and The Whole Known Network. "<>
" Note: when setting to `false`, please also check `:restrict_unauthenticated` setting."
},
%{
key::quarantined_instances,
type:{:list,:string},
description:
"List of ActivityPub instances where private (DMs, followers-only) activities will not be sent",
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::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::max_report_comment_size,
type::integer,
description:"The maximum size of the report comment. Default: 1000.",
suggestions:[
1_000
]
},
%{
key::safe_dm_mentions,
label:"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.",
"Determines the length of a one-time pass-code, in characters. Defaults to 6 characters."
},
%{
key::period,
type::integer,
suggestions:[30],
description:
"A period for which the TOTP code will be valid, in seconds. Defaults to 30 seconds."
}
]
},
%{
key::backup_codes,
type::keyword,
description:"MFA backup codes settings",
suggestions:[number:5,length:16],
children:[
%{
key::number,
type::integer,
suggestions:[5],
description:"Number of backup codes to generate."
},
%{
key::length,
type::integer,
suggestions:[16],
description:
"Determines the length of backup one-time pass-codes, in characters. Defaults to 16 characters."
}
]
}
]
},
%{
key::instance_thumbnail,
type:{:string,:image},
description:
"The instance thumbnail can be any image that represents your instance and is used by some apps or services when they display information about your instance.",
suggestions:["/instance/thumbnail.jpeg"]
},
%{
key::show_reactions,
type::boolean,
description:"Let favourites and emoji reactions be viewed through the API."
}
]
},
%{
group::pleroma,
key::welcome,
type::group,
description:"Welcome messages settings",
children:[
%{
key::direct_message,
type::keyword,
descpiption:"Direct message settings",
children:[
%{
key::enabled,
type::boolean,
description:"Enables sending a direct message to newly registered users"
},
%{
key::message,
type::string,
description:"A message that will be sent to newly registered users",
suggestions:[
"Hi, @username! Welcome on board!"
]
},
%{
key::sender_nickname,
type::string,
description:"The nickname of the local user that sends a welcome message",
suggestions:[
"lain"
]
}
]
},
%{
key::chat_message,
type::keyword,
descpiption:"Chat message settings",
children:[
%{
key::enabled,
type::boolean,
description:"Enables sending a chat message to newly registered users"
},
%{
key::message,
type::string,
description:
"A message that will be sent to newly registered users as a chat message",
suggestions:[
"Hello, welcome on board!"
]
},
%{
key::sender_nickname,
type::string,
description:"The nickname of the local user that sends a welcome chat message",
suggestions:[
"lain"
]
}
]
},
%{
key::email,
type::keyword,
descpiption:"Email message settings",
children:[
%{
key::enabled,
type::boolean,
description:"Enables sending an email to newly registered users"
},
%{
key::sender,
type:[:string,:tuple],
description:
"Email address and/or nickname that will be used to send the welcome email.",
suggestions:[
{"Pleroma App","welcome@pleroma.app"}
]
},
%{
key::subject,
type::string,
description:
"Subject of the welcome email. EEX template with user and instance_name variables can be used.",
suggestions:["Welcome to <%= instance_name%>"]
},
%{
key::html,
type::string,
description:
"HTML content of the welcome email. EEX template with user and instance_name variables can be used.",
suggestions:["<h1>Hello <%= user.name%>. Welcome to <%= instance_name%></h1>"]
},
%{
key::text,
type::string,
description:
"Text content of the welcome email. EEX template with user and instance_name variables can be used.",
suggestions:["Hello <%= user.name%>. \n Welcome to <%= instance_name%>\n"]
}
]
}
]
},
%{
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.",
"Relative URL which indicates where to redirect when a user isn't logged in",
suggestions:["/main/all"]
},
%{
key::redirectRootLogin,
label:"Redirect root login",
type::string,
description:
"Relative URL which indicates where to redirect when a user is logged in",
suggestions:["/main/friends"]
},
%{
key::scopeCopy,
label:"Scope copy",
type::boolean,
description:"Copy the scope (private/unlisted/public) in replies to posts by default"
},
%{
key::sidebarRight,
label:"Sidebar on Right",
type::boolean,
description:"Change alignment of sidebar and panels to the right"
},
%{
key::showFeaturesPanel,
label:"Show instance features panel",
type::boolean,
description:
"Enables panel displaying functionality of the instance on the About page"
},
%{
key::showInstanceSpecificPanel,
label:"Show instance specific panel",
type::boolean,
description:"Whether to show the instance's custom panel"
},
%{
key::subjectLineBehavior,
label:"Subject line behavior",
type::string,
description:"Allows changing the default behaviour of subject lines in replies.
`email`: copy and preprend re:, as in email,
`masto`: copy verbatim, as in Mastodon,
`noop`: don't copy the subject.",
suggestions:["email","masto","noop"]
},
%{
key::theme,
type::string,
description:"Which theme to use. Available themes are defined in styles.json",
suggestions:["pleroma-dark"]
}
]
},
%{
key::masto_fe,
label:"Masto FE",
type::map,
description:"Settings for Masto FE",
suggestions:[
%{
showInstanceSpecificPanel:true
}
],
children:[
%{
key::showInstanceSpecificPanel,
label:"Show instance specific panel",
type::boolean,
description:"Whenether to show the instance's specific panel"
}
]
}
]
},
%{
group::pleroma,
key::assets,
type::group,
description:
"This section configures assets to be used with various frontends. Currently the only option relates to mascots on the mastodon frontend",
children:[
%{
key::mascots,
type:{:keyword,:map},
description:
"Keyword of mascots, each element must contain both an URL and a mime_type key",
suggestions:[
pleroma_fox_tan:%{
url:"/images/pleroma-fox-tan-smol.png",
mime_type:"image/png"
},
pleroma_fox_tan_shy:%{
url:"/images/pleroma-fox-tan-shy.png",
mime_type:"image/png"
}
]
},
%{
key::default_mascot,
type::atom,
description:
"This will be used as the default mascot on MastoFE. Default: `:pleroma_fox_tan`",
suggestions:[
:pleroma_fox_tan
]
},
%{
key::default_user_avatar,
type:{:string,:image},
description:"URL of the default user avatar",
suggestions:["/images/avi.png"]
}
]
},
%{
group::pleroma,
key::manifest,
type::group,
description:
"This section describe PWA manifest instance-specific values. Currently this option relate only for MastoFE.",
children:[
%{
key::icons,
type:{:list,:map},
description:"Describe the icons of the app",
suggestion:[
%{
src:"/static/logo.png"
},
%{
src:"/static/icon.png",
type:"image/png"
},
%{
src:"/static/icon.ico",
sizes:"72x72 96x96 128x128 256x256"
}
]
},
%{
key::theme_color,
type::string,
description:"Describe the theme color of the app",
suggestions:["#282c37","mediumpurple"]
},
%{
key::background_color,
type::string,
description:"Describe the background color of the app",
suggestions:["#191b22","aliceblue"]
}
]
},
%{
group::pleroma,
key::mrf,
tab::mrf,
label:"MRF",
type::group,
description:"General MRF settings",
children:[
%{
key::policies,
type:[:module,{:list,:module}],
description:
"A list of MRF policies enabled. Module names are shortened (removed leading `Pleroma.Web.ActivityPub.MRF.` part), but on adding custom module you need to use full name.",
description:"Reject or Word-Replace messages with a keyword or regex",
children:[
%{
key::reject,
type:{:list,:string},
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:{:list,: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",~r/foo/iu]
},
%{
key::replace,
type:{:list,:tuple},
description:
"A list of tuples containing {pattern, replacement}. Each pattern can be a string or a regular expression.",
description:"The time in seconds for which the captcha is valid",
suggestions:[60]
}
]
},
%{
group::pleroma,
key:Pleroma.Captcha.Kocaptcha,
type::group,
description:
"Kocaptcha is a very simple captcha service with a single API endpoint, the source code is"<>
" here: https://github.com/koto-bank/kocaptcha. The default endpoint (https://captcha.kotobank.ch) is hosted by the developer.",
children:[
%{
key::endpoint,
type::string,
description:"The kocaptcha endpoint to use",
suggestions:["https://captcha.kotobank.ch"]
}
]
},
%{
group::pleroma,
label:"Pleroma Admin Token",
type::group,
description:
"Allows setting a token that can be used to authenticate requests with admin privileges without a normal user account token. Append the `admin_token` parameter to requests to utilize it. (Please reconsider using HTTP Basic Auth or OAuth-based authentication if possible)",
description:"Includes custom worker options not interpretable directly by `Oban`",
children:[
%{
key::retries,
type:{:keyword,:integer},
description:"Max retry attempts for failed jobs, per `Oban` queue",
suggestions:[
federator_incoming:5,
federator_outgoing:5
]
}
]
},
%{
group::pleroma,
key:Pleroma.Web.Metadata,
type::group,
description:"Metadata-related settings",
children:[
%{
key::providers,
type:{:list,:module},
description:"List of metadata providers to enable",
suggestions:[
Pleroma.Web.Metadata.Providers.OpenGraph,
Pleroma.Web.Metadata.Providers.TwitterCard,
Pleroma.Web.Metadata.Providers.RelMe,
Pleroma.Web.Metadata.Providers.Feed
]
},
%{
key::unfurl_nsfw,
label:"Unfurl NSFW",
type::boolean,
description:"When enabled NSFW attachments will be shown in previews"
}
]
},
%{
group::pleroma,
key::rich_media,
type::group,
description:
"If enabled the instance will parse metadata from attached links to generate link previews",
children:[
%{
key::enabled,
type::boolean,
description:"Enables RichMedia parsing of URLs"
},
%{
key::ignore_hosts,
type:{:list,:string},
description:"List of hosts which will be ignored by the metadata parser",
suggestions:["accounts.google.com","xss.website"]
},
%{
key::ignore_tld,
label:"Ignore TLD",
type:{:list,:string},
description:"List TLDs (top-level domains) which will ignore for parse metadata",
suggestions:["local","localdomain","lan"]
},
%{
key::parsers,
type:{:list,:module},
description:
"List of Rich Media parsers. Module names are shortened (removed leading `Pleroma.Web.RichMedia.Parsers.` part), but on adding custom module you need to use full name.",
suggestions:[
Pleroma.Web.RichMedia.Parsers.OEmbed,
Pleroma.Web.RichMedia.Parsers.TwitterCard
]
},
%{
key::ttl_setters,
label:"TTL setters",
type:{:list,:module},
description:
"List of rich media TTL setters. Module names are shortened (removed leading `Pleroma.Web.RichMedia.Parser.` part), but on adding custom module you need to use full name.",
suggestions:[
Pleroma.Web.RichMedia.Parser.TTL.AwsSignedUrl
]
},
%{
key::failure_backoff,
type::integer,
description:
"Amount of milliseconds after request failure, during which the request will not be retried.",
suggestions:[60_000]
}
]
},
%{
group::pleroma,
key:Pleroma.Formatter,
label:"Auto Linker",
type::group,
description:
"Configuration for Pleroma's link formatter which parses mentions, hashtags, and URLs.",
children:[
%{
key::class,
type:[:string,:boolean],
description:"Specify the class to be added to the generated link. Disable to clear.",
suggestions:["auto-linker",false]
},
%{
key::rel,
type:[:string,:boolean],
description:"Override the rel attribute. Disable to clear.",
suggestions:["ugc","noopener noreferrer",false]
},
%{
key::new_window,
type::boolean,
description:"Link URLs will open in a new window/tab."
},
%{
key::truncate,
type:[:integer,:boolean],
description:
"Set to a number to truncate URLs longer than the number. Truncated URLs will end in `...`",
suggestions:[15,false]
},
%{
key::strip_prefix,
type::boolean,
description:"Strip the scheme prefix."
},
%{
key::extra,
type::boolean,
description:"Link URLs with rarely used schemes (magnet, ipfs, irc, etc.)"
},
%{
key::validate_tld,
type:[:atom,:boolean],
description:
"Set to false to disable TLD validation for URLs/emails. Can be set to :no_scheme to validate TLDs only for URLs without a scheme (e.g `example.com` will be validated, but `http://example.loki` won't)",
suggestions:[:no_scheme,true]
}
]
},
%{
group::pleroma,
key:Pleroma.ScheduledActivity,
type::group,
description:"Scheduled activities settings",
children:[
%{
key::daily_user_limit,
type::integer,
description:
"The number of scheduled activities a user is allowed to create in a single day. Default: 25.",
suggestions:[25]
},
%{
key::total_user_limit,
type::integer,
description:
"The number of scheduled activities a user is allowed to create in total. Default: 300.",
suggestions:[300]
},
%{
key::enabled,
type::boolean,
description:"Whether scheduled activities are sent to the job queue to be executed"
`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,
label:"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).",
"Rejects or delists posts based on their timestamp deviance from your server's clock.",
children:[
%{
key::threshold,
type::integer,
description:"Required age (in seconds) of a post before actions are taken.",
suggestions:[172_800]
},
%{
key::actions,
type:{:list,:atom},
description:
"A list of actions to apply to the post. `:delist` removes the post from public timelines; "<>
"`:strip_followers` removes followers from the ActivityPub recipient list ensuring they won't be delivered to home timelines; "<>
"`:reject` rejects the message entirely",
suggestions:[:delist,:strip_followers,:reject]
}
]
},
%{
group::pleroma,
key::modules,
type::group,
description:"Custom Runtime Modules",
children:[
%{
key::runtime_dir,
type::string,
description:"A path to custom Elixir modules (such as MRF policies)."
}
]
},
%{
group::pleroma,
key::streamer,
type::group,
description:"Settings for notifications streamer",
children:[
%{
key::workers,
type::integer,
description:"Number of workers to send notifications",
suggestions:[3]
},
%{
key::overflow_workers,
type::integer,
description:"Maximum number of workers created if pool is empty",
suggestions:[2]
}
]
},
%{
group::pleroma,
key::connections_pool,
type::group,
description:"Advanced settings for `Gun` connections pool",
children:[
%{
key::connection_acquisition_wait,
type::integer,
description:
"Timeout to acquire a connection from pool. The total max time is this value multiplied by the number of retries. Default: 250ms.",
suggestions:[250]
},
%{
key::connection_acquisition_retries,
type::integer,
description:
"Number of attempts to acquire the connection from the pool if it is overloaded. Default: 5",
suggestions:[5]
},
%{
key::max_connections,
type::integer,
description:"Maximum number of connections in the pool. Default: 250 connections.",
suggestions:[250]
},
%{
key::connect_timeout,
type::integer,
description:"Timeout while `gun` will wait until connection is up. Default: 5000ms.",
suggestions:[5000]
},
%{
key::reclaim_multiplier,
type::integer,
description:
"Multiplier for the number of idle connection to be reclaimed if the pool is full. For example if the pool maxes out at 250 connections and this setting is set to 0.3, the pool will reclaim at most 75 idle connections if it's overloaded. Default: 0.1",
suggestions:[0.1]
}
]
},
%{
group::pleroma,
key::pools,
type::group,
description:"Advanced settings for `Gun` workers pools",
description:"Maximum number of concurrent requests in the pool.",
suggestions:[50]
},
%{
key::max_waiting,
type::integer,
description:
"Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made",
suggestions:[10]
},
%{
key::recv_timeout,
type::integer,
description:"Timeout for the pool while gun will wait for response",
suggestions:[10_000]
}
]
}
end)
},
%{
group::pleroma,
key::hackney_pools,
type::group,
description:"Advanced settings for `Hackney` connections pools",
children:[
%{
key::federation,
type::keyword,
description:"Settings for federation pool.",
children:[
%{
key::max_connections,
type::integer,
description:"Number workers in the pool.",
suggestions:[50]
},
%{
key::timeout,
type::integer,
description:"Timeout while `hackney` will wait for response.",
suggestions:[150_000]
}
]
},
%{
key::media,
type::keyword,
description:"Settings for media pool.",
children:[
%{
key::max_connections,
type::integer,
description:"Number workers in the pool.",
suggestions:[50]
},
%{
key::timeout,
type::integer,
description:"Timeout while `hackney` will wait for response.",
suggestions:[150_000]
}
]
},
%{
key::upload,
type::keyword,
description:"Settings for upload pool.",
children:[
%{
key::max_connections,
type::integer,
description:"Number workers in the pool.",
suggestions:[25]
},
%{
key::timeout,
type::integer,
description:"Timeout while `hackney` will wait for response.",
suggestions:[300_000]
}
]
}
]
},
%{
group::pleroma,
key::restrict_unauthenticated,
label:"Restrict Unauthenticated",
type::group,
description:
"Disallow viewing timelines, user profiles and statuses for unauthenticated users.",
children:[
%{
key::timelines,
type::map,
description:"Settings for public and federated timelines.",
children:[
%{
key::local,
type::boolean,
description:"Disallow view public timeline."
},
%{
key::federated,
type::boolean,
description:"Disallow view federated timeline."
}
]
},
%{
key::profiles,
type::map,
description:"Settings for user profiles.",
children:[
%{
key::local,
type::boolean,
description:"Disallow view local user profiles."
},
%{
key::remote,
type::boolean,
description:"Disallow view remote user profiles."
}
]
},
%{
key::activities,
type::map,
description:"Settings for statuses.",
children:[
%{
key::local,
type::boolean,
description:"Disallow view local statuses."
},
%{
key::remote,
type::boolean,
description:"Disallow view remote statuses."
}
]
}
]
},
%{
group::pleroma,
key:Pleroma.Web.ApiSpec.CastAndValidate,
type::group,
children:[
%{
key::strict,
type::boolean,
description:
"Enables strict input validation (useful in development, not recommended in production)"
}
]
},
%{
group::pleroma,
key::instances_favicons,
type::group,
description:"Control favicons for instances",
children:[
%{
key::enabled,
type::boolean,
description:"Allow/disallow displaying and getting instances favicons"