key: :uploader,
type: :module,
description: "Module which will be used for uploads",
- suggestions: [Pleroma.Uploaders.Local, Pleroma.Uploaders.MDII, Pleroma.Uploaders.S3]
+ suggestions: [Pleroma.Uploaders.Local, Pleroma.Uploaders.S3]
},
%{
key: :filters,
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`"
+ "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,
key: :proxy_remote,
type: :boolean,
description:
- "If enabled, requests to media stored using a remote uploader will be proxied instead of being redirected."
+ "If enabled, requests to media stored using a remote uploader will be proxied instead of being redirected"
},
%{
key: :proxy_opts,
type: :boolean,
description:
"Redirects the client to the real remote URL if there's any HTTP errors. " <>
- "Any error during body processing will not be redirected as the response is chunked"
+ "Any error during body processing will not be redirected as the response is chunked."
},
%{
key: :max_body_length,
type: :integer,
description:
- "limits the content length to be approximately the " <>
- "specified length. It is validated with the `content-length` header and also verified when proxying"
+ "Limits the content length to be approximately the " <>
+ "specified length. It is validated with the `content-length` header and also verified when proxying."
},
%{
key: :http,
%{
key: :versions,
type: {:list, :atom},
- description: "List of TLS version to use",
+ description: "List of TLS versions to use",
suggestions: [:tlsv1, ":tlsv1.1", ":tlsv1.2"]
}
]
%{
key: :uploads,
type: :string,
- description: "Path where user uploads will be saved",
+ description: "Path where user's uploads will be saved",
suggestions: [
"uploads"
]
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}",
+ " filename extension by using {extension}, for example custom-file-name.{extension}.",
suggestions: [
"custom-file-name.{extension}"
]
},
%{
key: :email,
+ label: "Admin Email Address",
type: :string,
description: "Email used to reach an Administrator/Moderator of the instance",
suggestions: [
},
%{
key: :notify_email,
+ label: "Sender Email Address",
type: :string,
- description: "Email used for notifications",
+ description: "Envelope FROM address for mail sent via Pleroma",
suggestions: [
"notify@example.com"
]
%{
key: :description,
type: :string,
- description: "The instance's description, can be seen in nodeinfo and /api/v1/instance",
+ description:
+ "The instance's description. It can be seen in nodeinfo and `/api/v1/instance`",
suggestions: [
"Very cool instance"
]
%{
key: :registrations_open,
type: :boolean,
- description: "Enable registrations for anyone, invitations can be enabled when false"
+ 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: false)"
+ 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"
+ description: "Require users to confirm their emails before signing in."
},
%{
key: :federating,
type: :boolean,
- description: "Enable federation with other instances"
+ 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 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",
+ "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
]
label: "Fed. reachability timeout days",
type: :integer,
description:
- "Timeout (in days) of each external federation target being unreachable prior to pausing federating to it",
+ "Timeout (in days) of each external federation target being unreachable prior to pausing federating to it.",
suggestions: [
7
]
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"
+ " 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",
+ "List of ActivityPub instances where private (DMs, followers-only) activities will not be send",
suggestions: [
"quarantined.com",
"*.quarantined.com"
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",
+ "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"
+ "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",
+ description: "The maximum number of pinned statuses. 0 will disable the feature.",
suggestions: [
0,
1,
]
},
%{
- key: :no_attachment_links,
+ key: :attachment_links,
type: :boolean,
- description:
- "Set to true to disable automatically adding attachment link text to statuses"
+ description: "Enable to automatically add 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",
+ "A message that will be sent to a newly registered users as a direct message",
suggestions: [
"Hi, @username! Welcome on board!"
]
%{
key: :max_report_comment_size,
type: :integer,
- description: "The maximum size of the report comment (Default: 1000)",
+ 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"
+ "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 set to true, system data will be shown on /api/pleroma/healthcheck"
+ description: "If enabled, system data will be shown on `/api/pleroma/healthcheck`"
},
%{
key: :remote_post_retention_days,
%{
key: :user_bio_length,
type: :integer,
- description: "A user bio maximum length (default: 5000)",
+ 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)",
+ 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"
+ description: "Skip filtering out broken threads. Default: enabled"
},
%{
key: :limit_to_local_content,
- type: [:atom, false],
+ type: {:dropdown, :atom},
description:
- "Limit unauthenticated users to search for local statutes and users only. The default is :unauthenticated ",
+ "Limit unauthenticated users to search for local statutes and users only. Default: `:unauthenticated`.",
suggestions: [
:unauthenticated,
:all,
%{
key: :max_account_fields,
type: :integer,
- description: "The maximum number of custom fields in the user profile (default: 10)",
+ 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)",
+ "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)",
+ 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)",
+ description: "An account field value maximum length. Default: 2048.",
suggestions: [
2048
]
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.",
+ "Where logs will be sent, :console - send logs to stdout, { ExSyslogger, :ex_syslogger } - to syslog, Quack.Logger - to Slack.",
suggestions: [:console, {ExSyslogger, :ex_syslogger}, Quack.Logger]
}
]
children: [
%{
key: :level,
- type: :atom,
+ type: {:dropdown, :atom},
description: "Log level",
suggestions: [:debug, :info, :warn, :error]
},
%{
key: :format,
type: :string,
- description: "It defaults to \"$date $time [$level] $levelpad$node $metadata $message\"",
+ description: "Default: \"$date $time [$level] $levelpad$node $metadata $message\".",
suggestions: ["$metadata[$level] $message"]
},
%{
children: [
%{
key: :level,
- type: :atom,
+ type: {:dropdown, :atom},
description: "Log level",
suggestions: [:debug, :info, :warn, :error]
},
%{
key: :format,
type: :string,
- description: "It defaults to \"$date $time [$level] $levelpad$node $metadata $message\"",
+ description: "Default: \"$date $time [$level] $levelpad$node $metadata $message\".",
suggestions: ["$metadata[$level] $message"]
},
%{
children: [
%{
key: :level,
- type: :atom,
+ type: {:dropdown, :atom},
description: "Log level",
suggestions: [:debug, :info, :warn, :error]
},
description:
"This form can be used to configure a keyword list that keeps the configuration data for any " <>
"kind of frontend. By default, settings for pleroma_fe and masto_fe are configured. If you want to " <>
- "add your own configuration your settings need to be complete as they will override the defaults.",
+ "add your own configuration your settings all fields must be complete.",
children: [
%{
key: :pleroma_fe,
hideUserStats: false,
scopeCopy: true,
subjectLineBehavior: "email",
- alwaysShowSubjectInput: true
+ alwaysShowSubjectInput: true,
+ logoMask: false,
+ logoMargin: ".1em",
+ stickers: false,
+ enableEmojiPicker: false
}
],
children: [
label: "Redirect root no login",
type: :string,
description:
- "relative URL which indicates where to redirect when a user isn't logged in",
+ "Relative URL which indicates where to redirect when a user isn't logged in",
suggestions: ["/main/all"]
},
%{
label: "Redirect root login",
type: :string,
description:
- "relative URL which indicates where to redirect when a user is logged in",
+ "Relative URL which indicates where to redirect when a user is logged in",
suggestions: ["/main/friends"]
},
%{
key: :scopeOptionsEnabled,
label: "Scope options enabled",
type: :boolean,
- description: "Enable setting an notice visibility and subject/CW when posting"
+ description: "Enable setting a notice visibility and subject/CW when posting"
},
%{
key: :formattingOptionsEnabled,
label: "Formatting options enabled",
type: :boolean,
description:
- "Enable setting a formatting different than plain-text (ie. HTML, Markdown) when posting, relates to :instance, allowed_post_formats"
+ "Enable setting a formatting different than plain-text (ie. HTML, Markdown) when posting, relates to `:instance`, `allowed_post_formats`"
},
%{
key: :collapseMessageWithSubject,
label: "Collapse message with subject",
type: :boolean,
description:
- "When a message has a subject(aka Content Warning), collapse it by default"
+ "When a message has a subject (aka Content Warning), collapse it by default"
},
%{
key: :hidePostStats,
label: "Hide post stats",
type: :boolean,
- description: "Hide notices statistics(repeats, favorites, ...)"
+ description: "Hide notices statistics (repeats, favorites, ...)"
},
%{
key: :hideUserStats,
label: "Hide user stats",
type: :boolean,
description:
- "Hide profile statistics(posts, posts per day, followers, followings, ...)"
+ "Hide profile statistics (posts, posts per day, followers, followings, ...)"
},
%{
key: :scopeCopy,
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 subjec",
+ `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: :alwaysShowSubjectInput,
label: "Always show subject input",
type: :boolean,
- description: "When set to false, auto-hide the subject field when it's empty"
+ description: "When disabled, auto-hide the subject field if it's empty"
+ },
+ %{
+ key: :logoMask,
+ label: "Logo mask",
+ type: :boolean,
+ description:
+ "By default it assumes logo used will be monochrome with alpha channel to be compatible with both light and dark themes. " <>
+ "If you want a colorful logo you must disable logoMask."
+ },
+ %{
+ key: :logoMargin,
+ label: "Logo margin",
+ type: :string,
+ description:
+ "Allows you to adjust vertical margins between logo boundary and navbar borders. " <>
+ "The idea is that to have logo's image without any extra margins and instead adjust them to your need in layout.",
+ suggestions: [".1em"]
+ },
+ %{
+ key: :stickers,
+ type: :boolean,
+ description: "Enables stickers."
+ },
+ %{
+ key: :enableEmojiPicker,
+ label: "Emoji picker",
+ type: :boolean,
+ description: "Enables emoji picker."
}
]
},
key: :mascots,
type: {:keyword, :map},
description:
- "Keyword of mascots, each element MUST contain both a url and a mime_type key",
+ "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",
key: :default_mascot,
type: :atom,
description:
- "This will be used as the default mascot on MastoFE (default: :pleroma_fox_tan)",
+ "This will be used as the default mascot on MastoFE. Default: `:pleroma_fox_tan`",
suggestions: [
:pleroma_fox_tan
]
%{
key: :media_removal,
type: {:list, :string},
- description: "List of instances to remove medias from",
+ description: "List of instances to strip media attachments from",
suggestions: ["example.com", "*.example.com"]
},
%{
key: :media_nsfw,
label: "Media NSFW",
type: {:list, :string},
- description: "List of instances to put medias as NSFW(sensitive) from",
+ description: "List of instances to tag all media as NSFW (sensitive) from",
suggestions: ["example.com", "*.example.com"]
},
%{
%{
key: :reject,
type: {:list, :string},
- description: "List of instances to reject any activities from",
+ description: "List of instances to reject activities from (except deletes)",
suggestions: ["example.com", "*.example.com"]
},
%{
key: :accept,
type: {:list, :string},
- description: "List of instances to accept any activities from",
+ description: "List of instances to only accept activities from (except deletes)",
suggestions: ["example.com", "*.example.com"]
},
%{
type: {:list, :string},
description: "List of instances to strip banners from",
suggestions: ["example.com", "*.example.com"]
+ },
+ %{
+ key: :reject_deletes,
+ type: {:list, :string},
+ description: "List of instances to reject deletions from",
+ suggestions: ["example.com", "*.example.com"]
}
]
},
key: :allow_followersonly,
label: "Allow followers-only",
type: :boolean,
- description: "whether to allow followers-only posts"
+ description: "Whether to allow followers-only posts"
},
%{
key: :allow_direct,
type: :boolean,
- description: "whether to allow direct messages"
+ description: "Whether to allow direct messages"
}
]
},
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",
+ " 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",
+ "Number of mentioned users after which the messaged gets rejected. Set to 0 to disable.",
suggestions: [20]
}
]
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",
+ "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",
+ "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: [{:tuple, :string, :string}, {:tuple, :regex, :string}],
description:
- "A list of tuples containing {pattern, replacement}, pattern can be a string or a regular expression.",
+ "A list of tuples containing {pattern, replacement}. Each pattern can be a string or a regular expression.",
suggestions: [{"foo", "bar"}, {~r/foo/iu, "bar"}]
}
]
%{
key: :actors,
type: {:list, :string},
- description: "A list of actors, for which to drop any posts mentioning",
+ description: "A list of actors for which any post mentioning them will be dropped.",
suggestions: ["actor1", "actor2"]
}
]
key: :base_url,
type: :string,
description:
- "The base URL to access a user-uploaded file. Useful when you want to proxy the media files via another host/CDN fronts",
+ "The base URL to access a user-uploaded file. Useful when you want to proxy the media files via another host/CDN fronts.",
suggestions: ["https://example.com"]
},
%{
type: :boolean,
description:
"Redirects the client to the real remote URL if there's any HTTP errors. " <>
- "Any error during body processing will not be redirected as the response is chunked"
+ "Any error during body processing will not be redirected as the response is chunked."
},
%{
key: :max_body_length,
type: :integer,
description:
- "limits the content length to be approximately the " <>
- "specified length. It is validated with the `content-length` header and also verified when proxying"
+ "Limits the content length to be approximately the " <>
+ "specified length. It is validated with the `content-length` header and also verified when proxying."
},
%{
key: :http,
}
]
},
- %{
- group: :pleroma,
- key: Pleroma.Web.Endpoint,
- type: :group,
- description: "Phoenix endpoint configuration",
- children: [
- %{
- key: :http,
- label: "HTTP",
- type: {:keyword, :integer, :tuple},
- description: "http protocol configuration",
- suggestions: [
- port: 8080,
- ip: {127, 0, 0, 1}
- ],
- children: [
- %{
- key: :dispatch,
- type: {:list, :tuple},
- description: "dispatch settings",
- suggestions: [
- {:_,
- [
- {"/api/v1/streaming", Pleroma.Web.MastodonAPI.WebsocketHandler, []},
- {"/websocket", Phoenix.Endpoint.CowboyWebSocket,
- {Phoenix.Transports.WebSocket,
- {Pleroma.Web.Endpoint, Pleroma.Web.UserSocket, websocket_config}}},
- {:_, Phoenix.Endpoint.Cowboy2Handler, {Pleroma.Web.Endpoint, []}}
- ]}
- # end copied from config.exs
- ]
- },
- %{
- key: :ip,
- label: "IP",
- type: :tuple,
- description: "ip",
- suggestions: [
- {0, 0, 0, 0}
- ]
- },
- %{
- key: :port,
- type: :integer,
- description: "port",
- suggestions: [
- 2020
- ]
- }
- ]
- },
- %{
- key: :url,
- label: "URL",
- type: {:keyword, :string, :integer},
- description: "configuration for generating urls",
- suggestions: [
- host: "example.com",
- port: 2020,
- scheme: "https"
- ],
- children: [
- %{
- key: :host,
- type: :string,
- description: "Host",
- suggestions: [
- "example.com"
- ]
- },
- %{
- key: :port,
- type: :integer,
- description: "port",
- suggestions: [
- 2020
- ]
- },
- %{
- key: :scheme,
- type: :string,
- description: "Scheme",
- suggestions: [
- "https",
- "https"
- ]
- }
- ]
- },
- %{
- key: :instrumenters,
- type: {:list, :module},
- suggestions: [Pleroma.Web.Endpoint.Instrumenter]
- },
- %{
- key: :protocol,
- type: :string,
- suggestions: ["https"]
- },
- %{
- key: :secret_key_base,
- type: :string,
- suggestions: ["aK4Abxf29xU9TTDKre9coZPUgevcVCFQJe/5xP/7Lt4BEif6idBIbjupVbOrbKxl"]
- },
- %{
- key: :signing_salt,
- type: :string,
- suggestions: ["CqaoopA2"]
- },
- %{
- key: :render_errors,
- type: :keyword,
- suggestions: [view: Pleroma.Web.ErrorView, accepts: ~w(json)],
- children: [
- %{
- key: :view,
- type: :module,
- suggestions: [Pleroma.Web.ErrorView]
- },
- %{
- key: :accepts,
- type: {:list, :string},
- suggestions: ["json"]
- }
- ]
- },
- %{
- key: :pubsub,
- type: :keyword,
- suggestions: [name: Pleroma.PubSub, adapter: Phoenix.PubSub.PG2],
- children: [
- %{
- key: :name,
- type: :module,
- suggestions: [Pleroma.PubSub]
- },
- %{
- key: :adapter,
- type: :module,
- suggestions: [Phoenix.PubSub.PG2]
- }
- ]
- },
- %{
- key: :secure_cookie_flag,
- type: :boolean
- },
- %{
- key: :extra_cookie_attrs,
- type: {:list, :string},
- suggestions: ["SameSite=Lax"]
- }
- ]
- },
%{
group: :pleroma,
key: :activitypub,
type: :boolean,
description: "Sign object fetches with HTTP signatures"
},
+ %{
+ key: :note_replies_output_limit,
+ type: :integer,
+ description:
+ "The number of Note replies' URIs to be included with outgoing federation (`5` to match Mastodon hardcoded value, `0` to disable the output)."
+ },
%{
key: :follow_handshake_timeout,
type: :integer,
key: :subject,
type: :string,
description:
- "a mailto link for the administrative contact." <>
- " It's best if this email is not a personal email address, but rather a group email so that if a person leaves an organization," <>
- " is unavailable for an extended period, or otherwise can't respond, someone else on the list can",
- suggestions: ["Subject"]
+ "A mailto link for the administrative contact." <>
+ " It's best if this email is not a personal email address, but rather a group email to the instance moderation team.",
+ suggestions: ["mailto:moderators@pleroma.com"]
},
%{
key: :public_key,
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",
+ " 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",
+ description: "The kocaptcha endpoint to use",
suggestions: ["https://captcha.kotobank.ch"]
}
]
group: :pleroma,
type: :group,
description:
- "Allows to set a token that can be used to authenticate with the admin api without using an actual user by giving it as the 'admin_token' parameter",
+ "Allows to set a token that can be used to authenticate with the admin api without using an actual user by giving it as the `admin_token` parameter",
children: [
%{
key: :admin_token,
type: :string,
description: "Token",
- suggestions: ["some_random_token"]
- }
- ]
- },
- %{
- group: :pleroma_job_queue,
- key: :queues,
- type: :group,
- description: "[Deprecated] Replaced with `Oban`/`:queues` (keeping the same format)"
- },
- %{
- group: :pleroma,
- key: Pleroma.Web.Federator.RetryQueue,
- type: :group,
- description: "[Deprecated] See `Oban` and `:workers` sections for configuration notes",
- children: [
- %{
- key: :max_retries,
- type: :integer,
- description: "[Deprecated] Replaced as `Oban`/`:queues`/`:outgoing_federation` value"
+ suggestions: ["We recommend a secure random string or UUID"]
}
]
},
},
%{
key: :verbose,
- type: :boolean,
- description: "Logs verbose mode"
+ type: {:dropdown, :atom},
+ description: "Logs verbose mode",
+ suggestions: [false, :error, :warn, :info, :debug]
},
%{
key: :prune,
"Background jobs queues (keys: queues, values: max numbers of concurrent jobs)",
suggestions: [
activity_expiration: 10,
+ attachments_cleanup: 5,
background: 5,
federator_incoming: 50,
federator_outgoing: 50,
description: "Activity expiration queue",
suggestions: [10]
},
+ %{
+ key: :attachments_cleanup,
+ type: :integer,
+ description: "Attachment deletion queue",
+ suggestions: [5]
+ },
%{
key: :background,
type: :integer,
suggestions: [50]
}
]
+ },
+ %{
+ key: :crontab,
+ type: {:list, :tuple},
+ description: "Settings for cron background jobs",
+ suggestions: [
+ {"0 0 * * *", Pleroma.Workers.Cron.ClearOauthTokenWorker},
+ {"0 * * * *", Pleroma.Workers.Cron.StatsWorker},
+ {"* * * * *", Pleroma.Workers.Cron.PurgeExpiredActivitiesWorker},
+ {"0 0 * * 0", Pleroma.Workers.Cron.DigestEmailsWorker},
+ {"0 0 * * *", Pleroma.Workers.Cron.NewUsersDigestWorker}
+ ]
}
]
},
key: :unfurl_nsfw,
label: "Unfurl NSFW",
type: :boolean,
- description: "If set to true nsfw attachments will be shown in previews"
+ description: "When enabled NSFW attachments will be shown in previews"
}
]
},
%{
key: :enabled,
type: :boolean,
- description: "Enables/disables RichMedia."
+ description: "Enables RichMedia parsing of URLs."
},
%{
key: :ignore_hosts,
key: :ttl_setters,
label: "TTL setters",
type: {:list, :module},
- description: "List of rich media ttl setters.",
+ description: "List of rich media TTL setters.",
suggestions: [
Pleroma.Web.RichMedia.Parser.TTL.AwsSignedUrl
]
}
]
},
- %{
- group: :pleroma,
- key: :fetch_initial_posts,
- type: :group,
- description: "Fetching initial posts settings",
- children: [
- %{
- key: :enabled,
- type: :boolean,
- description:
- "if enabled, when a new user is federated with, fetch some of their latest posts"
- },
- %{
- key: :pages,
- type: :integer,
- description: "the amount of pages to fetch",
- suggestions: [5]
- }
- ]
- },
%{
group: :auto_linker,
key: :opts,
%{
key: :class,
type: [:string, false],
- description: "specify the class to be added to the generated link. false to clear",
+ description: "Specify the class to be added to the generated link. Disable to clear",
suggestions: ["auto-linker", false]
},
%{
key: :rel,
type: [:string, false],
- description: "override the rel attribute. false to clear",
+ description: "Override the rel attribute. Disable to clear",
suggestions: ["ugc", "noopener noreferrer", false]
},
%{
key: :new_window,
type: :boolean,
- description: "set to false to remove target='_blank' attribute"
- },
- %{
- key: :scheme,
- type: :boolean,
- description: "Set to true to link urls with schema http://google.com"
+ description: "Link urls will open in new window/tab"
},
%{
key: :truncate,
%{
key: :extra,
type: :boolean,
- description: "link urls with rarely used schemes (magnet, ipfs, irc, etc.)"
+ description: "Link urls with rarely used schemes (magnet, ipfs, irc, etc.)"
}
]
},
key: :daily_user_limit,
type: :integer,
description:
- "the number of scheduled activities a user is allowed to create in a single day (Default: 25)",
+ "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)",
+ "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"
+ description: "Whether scheduled activities are sent to the job queue to be executed"
}
]
},
%{
key: :enabled,
type: :boolean,
- description: "whether expired activities will be sent to the job queue to be deleted"
+ description: "Whether expired activities will be sent to the job queue to be deleted"
}
]
},
type: :group,
description:
"Use LDAP for user authentication. When a user logs in to the Pleroma instance, the name and password" <>
- " will be verified by trying to authenticate (bind) to an LDAP server." <>
+ " will be verified by trying to authenticate (bind) to a LDAP server." <>
" If a user exists in the LDAP directory but there is no account with the same name yet on the" <>
" Pleroma instance then a new Pleroma account will be created with the same name as the LDAP user name.",
children: [
%{
key: :enabled,
type: :boolean,
- description: "enables LDAP authentication"
+ description: "Enables LDAP authentication"
},
%{
key: :host,
key: :ssl,
label: "SSL",
type: :boolean,
- description: "true to use SSL, usually implies the port 636"
+ description: "Enable to use SSL, usually implies the port 636"
},
%{
key: :sslopts,
label: "SSL options",
type: :keyword,
- description: "additional SSL options",
+ description: "Additional SSL options",
suggestions: [cacertfile: "path/to/file/with/PEM/cacerts", verify: :verify_peer],
children: [
%{
key: :tls,
label: "TLS",
type: :boolean,
- description: "true to start TLS, usually implies the port 389"
+ description: "Enable to use STARTTLS, usually implies the port 389"
},
%{
key: :tlsopts,
label: "TLS options",
type: :keyword,
- description: "additional TLS options",
+ description: "Additional TLS options",
suggestions: [cacertfile: "path/to/file/with/PEM/cacerts", verify: :verify_peer],
children: [
%{
type: :boolean,
description:
"OAuth admin scope requirement toggle. " <>
- "If `true`, admin actions explicitly demand admin OAuth scope(s) presence in OAuth token " <>
- "(client app must support admin scopes). If `false` and token doesn't have admin scope(s)," <>
+ "If enabled, admin actions explicitly demand admin OAuth scope(s) presence in OAuth token " <>
+ "(client app must support admin scopes). If disabled and token doesn't have admin scope(s)," <>
"`is_admin` user flag grants access to admin-specific actions."
},
%{
key: :auth_template,
type: :string,
description:
- "authentication form template. By default it's show.html which corresponds to lib/pleroma/web/templates/o_auth/o_auth/show.html.ee",
+ "Authentication form template. By default it's `show.html` which corresponds to `lib/pleroma/web/templates/o_auth/o_auth/show.html.ee`.",
suggestions: ["show.html"]
},
%{
key: :oauth_consumer_template,
type: :string,
description:
- "OAuth consumer mode authentication form template. By default it's consumer.html which corresponds to" <>
- " lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex",
+ "OAuth consumer mode authentication form template. By default it's `consumer.html` which corresponds to" <>
+ " `lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex`.",
suggestions: ["consumer.html"]
},
%{
key: :oauth_consumer_strategies,
type: {:list, :string},
description:
- "the list of enabled OAuth consumer strategies; by default it's set by OAUTH_CONSUMER_STRATEGIES environment variable." <>
- " Each entry in this space-delimited string should be of format <strategy> or <strategy>:<dependency>" <>
+ "The list of enabled OAuth consumer strategies. By default it's set by OAUTH_CONSUMER_STRATEGIES environment variable." <>
+ " Each entry in this space-delimited string should be of format \"strategy\" or \"strategy:dependency\"" <>
" (e.g. twitter or keycloak:ueberauth_keycloak_strategy in case dependency is named differently than ueberauth_<strategy>).",
suggestions: ["twitter", "keycloak:ueberauth_keycloak_strategy"]
}
children: [
%{
key: :active,
+ label: "Enabled",
type: :boolean,
- description: "globally enable or disable digest emails"
+ description: "Globally enable or disable digest emails"
},
%{
key: :schedule,
type: :string,
description:
- "When to send digest email, in crontab format. \"0 0 0\" is the default, meaning \"once a week at midnight on Sunday morning\"",
+ "When to send digest email, in crontab format. \"0 0 0\" is the default, meaning \"once a week at midnight on Sunday morning\".",
suggestions: ["0 0 * * 0"]
},
%{
%{
key: :logo,
type: :string,
- description: "a path to a custom logo. Set it to nil to use the default Pleroma logo",
+ description: "A path to a custom logo. Set it to `nil` to use the default Pleroma logo.",
suggestions: ["some/path/logo.png"]
},
%{
%{
key: :clean_expired_tokens,
type: :boolean,
- description: "Enable a background job to clean expired oauth tokens. Defaults to false"
- },
- %{
- key: :clean_expired_tokens_interval,
- type: :integer,
- description:
- "Interval to run the job to clean expired tokens. Defaults to 86_400_000 (24 hours).",
- suggestions: [86_400_000]
+ description: "Enable a background job to clean expired oauth tokens. Default: disabled."
}
]
},
%{
key: :shortcode_globs,
type: {:list, :string},
- description: "Location of custom emoji files. * can be used as a wildcard",
+ description: "Location of custom emoji files. * can be used as a wildcard.",
suggestions: ["/emoji/custom/**/*.png"]
},
%{
key: :groups,
type: {:keyword, :string, {:list, :string}},
description:
- "Emojis are ordered in groups (tags). This is an array of key-value pairs where the key is the groupname" <>
- " and the value the location or array of locations. * can be used as a wildcard",
+ "Emojis are ordered in groups (tags). This is an array of key-value pairs where the key is the group name" <>
+ " and the value is the location or array of locations. * can be used as a wildcard.",
suggestions: [
Custom: ["/emoji/*.png", "/emoji/**/*.png"]
]
type: :string,
description:
"Location of the JSON-manifest. This manifest contains information about the emoji-packs you can download." <>
- " Currently only one manifest can be added (no arrays)",
+ " Currently only one manifest can be added (no arrays).",
suggestions: ["https://git.pleroma.social/pleroma/emoji-index/raw/master/index.json"]
},
%{
}
]
},
- %{
- group: :pleroma,
- key: :database,
- type: :group,
- description: "Database related settings",
- children: [
- %{
- key: :rum_enabled,
- type: :boolean,
- description: "If RUM indexes should be used. Defaults to false"
- }
- ]
- },
%{
group: :pleroma,
key: :rate_limit,
%{
key: :search,
type: [:tuple, {:list, :tuple}],
- description: "for the search requests (account & status search etc.)",
+ description: "For the search requests (account & status search etc.)",
+ suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
+ },
+ %{
+ key: :timeline,
+ type: [:tuple, {:list, :tuple}],
+ description: "For requests to timelines (each timeline has it's own limiter)",
suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
},
%{
key: :app_account_creation,
type: [:tuple, {:list, :tuple}],
- description: "for registering user accounts from the same IP address",
+ description: "For registering user accounts from the same IP address",
suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
},
%{
key: :relations_actions,
type: [:tuple, {:list, :tuple}],
- description: "for actions on relations with all users (follow, unfollow)",
+ description: "For actions on relationships with all users (follow, unfollow)",
suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
},
%{
key: :relation_id_action,
type: [:tuple, {:list, :tuple}],
- description: "for actions on relation with a specific user (follow, unfollow)",
+ description: "For actions on relation with a specific user (follow, unfollow)",
suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
},
%{
key: :statuses_actions,
type: [:tuple, {:list, :tuple}],
description:
- "for create / delete / fav / unfav / reblog / unreblog actions on any statuses",
+ "For create / delete / fav / unfav / reblog / unreblog actions on any statuses",
suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
},
%{
key: :status_id_action,
type: [:tuple, {:list, :tuple}],
description:
- "for fav / unfav or reblog / unreblog actions on the same status by the same user",
+ "For fav / unfav or reblog / unreblog actions on the same status by the same user",
suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
},
%{
key: :authentication,
type: [:tuple, {:list, :tuple}],
- description: "for authentication create / password check / user existence check requests",
+ description: "For authentication create / password check / user existence check requests",
suggestions: [{60_000, 15}]
}
]
%{
key: :enabled,
type: :boolean,
- description: "Enables ssh"
+ description: "Enables SSH"
},
%{
key: :priv_dir,
type: :string,
- description: "Dir with ssh keys",
+ description: "Dir with SSH keys",
suggestions: ["/some/path/ssh_keys"]
},
%{
}
]
},
- %{
- group: :tesla,
- type: :group,
- description: "Tesla settings",
- children: [
- %{
- key: :adapter,
- type: :module,
- description: "Tesla adapter",
- suggestions: [Tesla.Adapter.Hackney]
- }
- ]
- },
%{
group: :pleroma,
key: :chat,
}
]
},
- %{
- group: :pleroma,
- key: :suggestions,
- type: :group,
- children: [
- %{
- key: :enabled,
- type: :boolean,
- description: "Enables suggestions"
- },
- %{
- key: :third_party_engine,
- type: :string,
- description: "URL for third party engine",
- suggestions: [
- "http://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-suggestions-api.cgi?{{host}}+{{user}}"
- ]
- },
- %{
- key: :timeout,
- type: :integer,
- description: "Request timeout to third party engine",
- suggestions: [300_000]
- },
- %{
- key: :limit,
- type: :integer,
- description: "Limit for suggestions",
- suggestions: [40]
- },
- %{
- key: :web,
- type: :string,
- suggestions: ["https://vinayaka.distsn.org"]
- }
- ]
- },
- %{
- group: :prometheus,
- key: Pleroma.Web.Endpoint.MetricsExporter,
- type: :group,
- description: "Prometheus settings",
- children: [
- %{
- key: :path,
- type: :string,
- description: "API endpoint with metrics",
- suggestions: ["/api/pleroma/app_metrics"]
- }
- ]
- },
%{
group: :http_signatures,
type: :group,
key: :user_agent,
type: [:string, :atom],
description:
- "What user agent to use. Must be a string or an atom `:default`. Default value is `:default`",
+ "What user agent to use. Must be a string or an atom `:default`. Default value is `:default`.",
suggestions: ["Pleroma", :default]
},
%{
%{
key: :enabled,
type: :boolean,
- description: "Enable/disable the plug. Defaults to `false`."
+ 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. Defaults to `~w[forwarded x-forwarded-for x-client-ip x-real-ip]`."
+ "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. Defaults to `[]`."
+ "A list of strings in [CIDR](https://en.wikipedia.org/wiki/CIDR) notation specifying the IPs of known proxies. Default: `[]`."
},
%{
key: :reserved,
key: :activity_pub,
type: :integer,
description:
- "activity pub routes (except question activities). Defaults to `nil` (no expiration).",
- suggestions: [30_000]
+ "Activity pub routes (except question activities). Default: `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).",
+ description: "Activity pub routes (question activities). Default: `30_000` (30 seconds).",
suggestions: [30_000]
}
]
%{
key: :enabled,
type: :boolean,
- description: "Enables the rendering of static HTML. Defaults to `false`."
+ description: "Enables the rendering of static HTML. Default: disabled."
}
]
},
group: :pleroma,
key: :feed,
type: :group,
- description: "Configure feed rendering.",
+ description: "Configure feed rendering",
children: [
%{
key: :post_title,
group: :pleroma,
key: :modules,
type: :group,
- description: "Custom Runtime Modules.",
+ description: "Custom Runtime Modules",
children: [
%{
key: :runtime_dir,
},
%{
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: :checkin_timeout,
+ type: :integer,
+ description: "Timeout to checkin connection from pool. Default: 250ms.",
+ suggestions: [250]
+ },
+ %{
+ key: :max_connections,
+ type: :integer,
+ description: "Maximum number of connections in the pool. Default: 250 connections.",
+ suggestions: [250]
+ },
+ %{
+ key: :retry,
+ type: :integer,
+ description:
+ "Number of retries, while `gun` will try to reconnect if connection goes down. Default: 1.",
+ suggestions: [1]
+ },
+ %{
+ key: :retry_timeout,
+ type: :integer,
+ description:
+ "Time between retries when `gun` will try to reconnect in milliseconds. Default: 1000ms.",
+ suggestions: [1000]
+ },
+ %{
+ key: :await_up_timeout,
+ type: :integer,
+ description: "Timeout while `gun` will wait until connection is up. Default: 5000ms.",
+ suggestions: [5000]
+ }
+ ]
+ },
+ %{
+ group: :pleroma,
+ key: :pools,
type: :group,
- description: "Allow instance configuration from database.",
+ description: "Advanced settings for `gun` workers pools",
children: [
%{
- key: :configurable_from_database,
+ key: :federation,
+ type: :keyword,
+ description: "Settings for federation pool.",
+ children: [
+ %{
+ key: :size,
+ type: :integer,
+ description: "Number workers in the pool.",
+ suggestions: [50]
+ },
+ %{
+ key: :max_overflow,
+ type: :integer,
+ description: "Number of additional workers if pool is under load.",
+ suggestions: [10]
+ },
+ %{
+ key: :timeout,
+ type: :integer,
+ description: "Timeout while `gun` will wait for response.",
+ suggestions: [150_000]
+ }
+ ]
+ },
+ %{
+ key: :media,
+ type: :keyword,
+ description: "Settings for media pool.",
+ children: [
+ %{
+ key: :size,
+ type: :integer,
+ description: "Number workers in the pool.",
+ suggestions: [50]
+ },
+ %{
+ key: :max_overflow,
+ type: :integer,
+ description: "Number of additional workers if pool is under load.",
+ suggestions: [10]
+ },
+ %{
+ key: :timeout,
+ type: :integer,
+ description: "Timeout while `gun` will wait for response.",
+ suggestions: [150_000]
+ }
+ ]
+ },
+ %{
+ key: :upload,
+ type: :keyword,
+ description: "Settings for upload pool.",
+ children: [
+ %{
+ key: :size,
+ type: :integer,
+ description: "Number workers in the pool.",
+ suggestions: [25]
+ },
+ %{
+ key: :max_overflow,
+ type: :integer,
+ description: "Number of additional workers if pool is under load.",
+ suggestions: [5]
+ },
+ %{
+ key: :timeout,
+ type: :integer,
+ description: "Timeout while `gun` will wait for response.",
+ suggestions: [300_000]
+ }
+ ]
+ },
+ %{
+ key: :default,
+ type: :keyword,
+ description: "Settings for default pool.",
+ children: [
+ %{
+ key: :size,
+ type: :integer,
+ description: "Number workers in the pool.",
+ suggestions: [10]
+ },
+ %{
+ key: :max_overflow,
+ type: :integer,
+ description: "Number of additional workers if pool is under load.",
+ suggestions: [2]
+ },
+ %{
+ key: :timeout,
+ type: :integer,
+ description: "Timeout while `gun` will wait for response.",
+ suggestions: [10_000]
+ }
+ ]
+ }
+ ]
+ },
+ %{
+ 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,
+ 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:
- "Allow transferring configuration to DB with the subsequent customization from Admin api. Defaults to `false`"
+ "Enables strict input validation (useful in development, not recommended in production)",
+ suggestions: [false]
}
]
}