%{
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: :description,
type: :string,
- description: "The instance's description. It 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"
]
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" <>
+ "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: :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: [: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"]
}
]
}
]
},
- %{
- 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,
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"]
+ " 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,
}
]
},
- %{
- 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"
- }
- ]
- },
%{
group: :pleroma,
key: Oban,
"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: :enabled,
type: :boolean,
- description: "Enables/disables RichMedia."
+ description: "Enables RichMedia parsing of URLs."
},
%{
key: :ignore_hosts,
}
]
},
- %{
- group: :pleroma,
- key: :fetch_initial_posts,
- type: :group,
- description: "Fetching initial posts settings",
- children: [
- %{
- key: :enabled,
- type: :boolean,
- description:
- "Fetch posts when a new user is federated with"
- },
- %{
- 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: :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,
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,
description:
"OAuth admin scope requirement toggle. " <>
"If enabled, 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)," <>
+ "(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: :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." <>
+ "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"]
}
]
},
+ %{
+ group: :pleroma,
+ key: Pleroma.Emails.NewUsersDigestEmail,
+ type: :group,
+ description: "New users admin email digest",
+ children: [
+ %{
+ key: :enabled,
+ type: :boolean,
+ description: "enables new users admin digest email when `true`",
+ suggestions: [false]
+ }
+ ]
+ },
%{
group: :pleroma,
key: :oauth2,
%{
key: :clean_expired_tokens,
type: :boolean,
- description: "Enable a background job to clean expired oauth tokens. Default: `false`."
+ description: "Enable a background job to clean expired oauth tokens. Default: disabled."
}
]
},
}
]
},
- %{
- group: :pleroma,
- key: :database,
- type: :group,
- description: "Database related settings",
- children: [
- %{
- key: :rum_enabled,
- type: :boolean,
- description: "If RUM indexes should be used. Default: `false`"
- }
- ]
- },
%{
group: :pleroma,
key: :rate_limit,
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}],
%{
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}]]
},
%{
}
]
},
- %{
- group: :tesla,
- type: :group,
- description: "Tesla settings",
- children: [
- %{
- key: :adapter,
- type: :module,
- description: "Tesla adapter",
- suggestions: [Tesla.Adapter.Hackney]
- }
- ]
- },
%{
group: :pleroma,
key: :chat,
}
]
},
- %{
- 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: :enabled,
type: :boolean,
- description: "Enable/disable the plug. Default: `false`."
+ description: "Enable/disable the plug. Default: disabled."
},
%{
key: :headers,
%{
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: "Allow instance configuration from database.",
+ description: "Settings for notifications streamer",
children: [
%{
- key: :configurable_from_database,
- type: :boolean,
+ 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:
- "Allow transferring configuration to DB with the subsequent customization from Admin api. Defaults to `false`"
+ "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: "Advanced settings for `gun` workers pools",
+ children: [
+ %{
+ 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."
+ }
+ ]
}
]
}