summaryrefslogtreecommitdiff
path: root/config
diff options
context:
space:
mode:
Diffstat (limited to 'config')
-rw-r--r--config/benchmark.exs8
-rw-r--r--config/config.exs25
-rw-r--r--config/description.exs1028
-rw-r--r--config/prod.exs4
-rw-r--r--config/releases.exs12
-rw-r--r--config/test.exs2
6 files changed, 697 insertions, 382 deletions
diff --git a/config/benchmark.exs b/config/benchmark.exs
index dd99cf5fd..84c6782a2 100644
--- a/config/benchmark.exs
+++ b/config/benchmark.exs
@@ -82,3 +82,11 @@ config :pleroma, :database, rum_enabled: rum_enabled
IO.puts("RUM enabled: #{rum_enabled}")
config :pleroma, Pleroma.ReverseProxy.Client, Pleroma.ReverseProxy.ClientMock
+
+if File.exists?("./config/benchmark.secret.exs") do
+ import_config "benchmark.secret.exs"
+else
+ IO.puts(
+ "You may want to create benchmark.secret.exs to declare custom database connection parameters."
+ )
+end
diff --git a/config/config.exs b/config/config.exs
index 47098858b..f4e307e18 100644
--- a/config/config.exs
+++ b/config/config.exs
@@ -67,7 +67,7 @@ config :pleroma, Pleroma.Scheduler,
config :pleroma, Pleroma.Captcha,
enabled: true,
- seconds_valid: 60,
+ seconds_valid: 300,
method: Pleroma.Captcha.Native
config :pleroma, Pleroma.Captcha.Kocaptcha, endpoint: "https://captcha.kotobank.ch"
@@ -108,15 +108,10 @@ config :pleroma, Pleroma.Uploaders.S3,
streaming_enabled: true,
public_endpoint: "https://s3.amazonaws.com"
-config :pleroma, Pleroma.Uploaders.MDII,
- cgi: "https://mdii.sakura.ne.jp/mdii-post.cgi",
- files: "https://mdii.sakura.ne.jp"
-
config :pleroma, :emoji,
shortcode_globs: ["/emoji/custom/**/*.png"],
pack_extensions: [".png", ".gif"],
groups: [
- # Put groups that have higher priority than defaults here. Example in `docs/config/custom_emoji.md`
Custom: ["/emoji/*.png", "/emoji/**/*.png"]
],
default_manifest: "https://git.pleroma.social/pleroma/emoji-index/raw/master/index.json",
@@ -269,7 +264,6 @@ config :pleroma, :instance,
remote_post_retention_days: 90,
skip_thread_containment: true,
limit_to_local_content: :unauthenticated,
- dynamic_configuration: false,
user_bio_length: 5000,
user_name_length: 100,
max_account_fields: 10,
@@ -431,14 +425,6 @@ config :pleroma, Pleroma.Web.Metadata,
],
unfurl_nsfw: false
-config :pleroma, :suggestions,
- enabled: false,
- third_party_engine:
- "http://vinayaka.distsn.org/cgi-bin/vinayaka-user-match-suggestions-api.cgi?{{host}}+{{user}}",
- timeout: 300_000,
- limit: 40,
- web: "https://vinayaka.distsn.org"
-
config :pleroma, :http_security,
enabled: true,
sts: false,
@@ -506,7 +492,8 @@ config :pleroma, Oban,
mailer: 10,
transmogrifier: 20,
scheduled_activities: 10,
- background: 5
+ background: 5,
+ attachments_cleanup: 5
]
config :pleroma, :workers,
@@ -565,7 +552,7 @@ config :ueberauth,
config :pleroma,
:auth,
- enforce_oauth_admin_scope_usage: false,
+ enforce_oauth_admin_scope_usage: true,
oauth_consumer_strategies: oauth_consumer_strategies
config :pleroma, Pleroma.Emails.Mailer, adapter: Swoosh.Adapters.Sendmail, enabled: false
@@ -621,6 +608,10 @@ config :pleroma, :web_cache_ttl,
activity_pub: nil,
activity_pub_question: 30_000
+config :pleroma, :modules, runtime_dir: "instance/modules"
+
+config :pleroma, configurable_from_database: false
+
config :swarm, node_blacklist: [~r/myhtml_.*$/]
# Import environment specific config. This must remain at the bottom
# of this file so it overrides the configuration defined above.
diff --git a/config/description.exs b/config/description.exs
index 45e4b43f1..5f3c58b08 100644
--- a/config/description.exs
+++ b/config/description.exs
@@ -23,23 +23,23 @@ config :pleroma, :config_description, [
key: :uploader,
type: :module,
description: "Module which will be used for uploads",
- suggestions: [
- Generator.uploaders_list()
- ]
+ suggestions: [Pleroma.Uploaders.Local, Pleroma.Uploaders.S3]
},
%{
key: :filters,
type: {:list, :module},
description: "List of filter modules for uploads",
- suggestions: [
- Generator.filters_list()
- ]
+ suggestions:
+ Generator.list_modules_in_dir(
+ "lib/pleroma/upload/filter",
+ "Elixir.Pleroma.Upload.Filter."
+ )
},
%{
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,
@@ -53,12 +53,71 @@ config :pleroma, :config_description, [
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: :keyword,
- description: "Proxy options, see `Pleroma.ReverseProxy` documentation"
+ description: "Options for Pleroma.ReverseProxy",
+ suggestions: [
+ redirect_on_failure: false,
+ max_body_length: 25 * 1_048_576,
+ http: [
+ follow_redirect: true,
+ pool: :media
+ ]
+ ],
+ children: [
+ %{
+ key: :redirect_on_failure,
+ 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."
+ },
+ %{
+ 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."
+ },
+ %{
+ key: :http,
+ type: :keyword,
+ description: "HTTP options",
+ children: [
+ %{
+ key: :adapter,
+ type: :keyword,
+ description: "Adapter specific options",
+ children: [
+ %{
+ key: :ssl_options,
+ type: :keyword,
+ label: "SSL Options",
+ description: "SSL options for HTTP adapter",
+ children: [
+ %{
+ key: :versions,
+ type: {:list, :atom},
+ description: "List of TLS version to use",
+ suggestions: [:tlsv1, ":tlsv1.1", ":tlsv1.2"]
+ }
+ ]
+ }
+ ]
+ },
+ %{
+ key: :proxy_url,
+ label: "Proxy URL",
+ type: [:string, :tuple],
+ description: "Proxy URL",
+ suggestions: ["127.0.0.1:8123", {:socks5, :localhost, 9050}]
+ }
+ ]
+ }
+ ]
}
]
},
@@ -71,7 +130,7 @@ config :pleroma, :config_description, [
%{
key: :uploads,
type: :string,
- description: "Path where user uploads will be saved",
+ description: "Path where user's uploads will be saved",
suggestions: [
"uploads"
]
@@ -131,9 +190,8 @@ config :pleroma, :config_description, [
description: "List of actions for the mogrify command",
suggestions: [
"strip",
- ["strip", "auto-orient"],
- [{"implode", "1"}],
- ["strip", "auto-orient", {"implode", "1"}]
+ "auto-orient",
+ {"implode", "1"}
]
}
]
@@ -149,10 +207,9 @@ config :pleroma, :config_description, [
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}",
- nil
+ "custom-file-name.{extension}"
]
}
]
@@ -181,7 +238,8 @@ config :pleroma, :config_description, [
Swoosh.Adapters.AmazonSES,
Swoosh.Adapters.Dyn,
Swoosh.Adapters.SocketLabs,
- Swoosh.Adapters.Gmail
+ Swoosh.Adapters.Gmail,
+ Swoosh.Adapters.Local
]
},
%{
@@ -213,12 +271,14 @@ config :pleroma, :config_description, [
%{
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]
@@ -247,12 +307,14 @@ config :pleroma, :config_description, [
%{
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"]
@@ -280,6 +342,7 @@ config :pleroma, :config_description, [
%{
group: {:subgroup, Swoosh.Adapters.Mandrill},
key: :api_key,
+ label: "API key",
type: :string,
description: "`Swoosh.Adapters.Mandrill` adapter specific setting",
suggestions: ["my-api-key"]
@@ -287,6 +350,7 @@ config :pleroma, :config_description, [
%{
group: {:subgroup, Swoosh.Adapters.Mailgun},
key: :api_key,
+ label: "API key",
type: :string,
description: "`Swoosh.Adapters.Mailgun` adapter specific setting",
suggestions: ["my-api-key"]
@@ -301,6 +365,7 @@ config :pleroma, :config_description, [
%{
group: {:subgroup, Swoosh.Adapters.Mailjet},
key: :api_key,
+ label: "API key",
type: :string,
description: "`Swoosh.Adapters.Mailjet` adapter specific setting",
suggestions: ["my-api-key"]
@@ -315,6 +380,7 @@ config :pleroma, :config_description, [
%{
group: {:subgroup, Swoosh.Adapters.Postmark},
key: :api_key,
+ label: "API key",
type: :string,
description: "`Swoosh.Adapters.Postmark` adapter specific setting",
suggestions: ["my-api-key"]
@@ -322,6 +388,7 @@ config :pleroma, :config_description, [
%{
group: {:subgroup, Swoosh.Adapters.SparkPost},
key: :api_key,
+ label: "API key",
type: :string,
description: "`Swoosh.Adapters.SparkPost` adapter specific setting",
suggestions: ["my-api-key"]
@@ -336,7 +403,7 @@ config :pleroma, :config_description, [
%{
group: {:subgroup, Swoosh.Adapters.AmazonSES},
key: :region,
- type: {:string},
+ type: :string,
description: "`Swoosh.Adapters.AmazonSES` adapter specific setting",
suggestions: ["us-east-1", "us-east-2"]
},
@@ -357,6 +424,7 @@ config :pleroma, :config_description, [
%{
group: {:subgroup, Swoosh.Adapters.Dyn},
key: :api_key,
+ label: "API key",
type: :string,
description: "`Swoosh.Adapters.Dyn` adapter specific setting",
suggestions: ["my-api-key"]
@@ -370,6 +438,7 @@ config :pleroma, :config_description, [
%{
group: {:subgroup, Swoosh.Adapters.SocketLabs},
key: :api_key,
+ label: "API key",
type: :string,
description: "`Swoosh.Adapters.SocketLabs` adapter specific setting"
},
@@ -382,6 +451,26 @@ config :pleroma, :config_description, [
]
},
%{
+ group: :swoosh,
+ type: :group,
+ description: "`Swoosh.Adapters.Local` adapter specific settings",
+ children: [
+ %{
+ group: {:subgroup, Swoosh.Adapters.Local},
+ key: :serve_mailbox,
+ type: :boolean,
+ description: "Run the preview server together as part of your app"
+ },
+ %{
+ group: {:subgroup, Swoosh.Adapters.Local},
+ key: :preview_port,
+ type: :integer,
+ description: "The preview server port",
+ suggestions: [4001]
+ }
+ ]
+ },
+ %{
group: :pleroma,
key: :uri_schemes,
type: :group,
@@ -392,22 +481,20 @@ config :pleroma, :config_description, [
type: {:list, :string},
description: "List of the scheme part that is considered valid to be an URL",
suggestions: [
- [
- "https",
- "http",
- "dat",
- "dweb",
- "gopher",
- "ipfs",
- "ipns",
- "irc",
- "ircs",
- "magnet",
- "mailto",
- "mumble",
- "ssb",
- "xmpp"
- ]
+ "https",
+ "http",
+ "dat",
+ "dweb",
+ "gopher",
+ "ipfs",
+ "ipns",
+ "irc",
+ "ircs",
+ "magnet",
+ "mailto",
+ "mumble",
+ "ssb",
+ "xmpp"
]
}
]
@@ -428,6 +515,7 @@ config :pleroma, :config_description, [
},
%{
key: :email,
+ label: "Admin Email Address",
type: :string,
description: "Email used to reach an Administrator/Moderator of the instance",
suggestions: [
@@ -436,8 +524,9 @@ config :pleroma, :config_description, [
},
%{
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"
]
@@ -459,6 +548,14 @@ config :pleroma, :config_description, [
]
},
%{
+ 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",
@@ -540,12 +637,12 @@ config :pleroma, :config_description, [
%{
key: :registrations_open,
type: :boolean,
- description: "Enable registrations for anyone, invitations can be enabled when false"
+ description: "Enable registrations for anyone, invitations can be enabled when `false`"
},
%{
key: :invites_enabled,
type: :boolean,
- description: "Enable user invitations for admins (depends on registrations_open: false)"
+ description: "Enable user invitations for admins (depends on `registrations_open: false`)"
},
%{
key: :account_activation_required,
@@ -559,26 +656,28 @@ config :pleroma, :config_description, [
},
%{
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",
+ " 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",
+ "Timeout (in days) of each external federation target being unreachable prior to pausing federating to it.",
suggestions: [
7
]
},
%{
key: :federation_publisher_modules,
- type: [:list, :module],
+ type: {:list, :module},
description: "List of modules for federation publishing",
suggestions: [
Pleroma.Web.ActivityPub.Publisher
@@ -591,25 +690,26 @@ config :pleroma, :config_description, [
},
%{
key: :rewrite_policy,
- type: {:list, :module},
+ type: [:module, {:list, :module}],
description: "A list of MRF policies enabled",
- suggestions: [
- Pleroma.Web.ActivityPub.MRF.NoOpPolicy,
- Generator.mrf_list()
- ]
+ suggestions:
+ Generator.list_modules_in_dir(
+ "lib/pleroma/web/activity_pub/mrf",
+ "Elixir.Pleroma.Web.ActivityPub.MRF."
+ )
},
%{
key: :public,
type: :boolean,
description:
"Makes the client API in authentificated mode-only except for user-profiles." <>
- " Useful for disabling the Local Timeline and The Whole Known Network"
+ " 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"
@@ -634,40 +734,40 @@ config :pleroma, :config_description, [
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"
- ]
+ "text/plain",
+ "text/html",
+ "text/markdown",
+ "text/bbcode"
]
},
%{
key: :mrf_transparency,
+ label: "MRF transparency",
type: :boolean,
description:
"Make the content of your Message Rewrite Facility settings public (via nodeinfo)"
},
%{
key: :mrf_transparency_exclusions,
+ label: "MRF transparency exclusions",
type: {:list, :string},
description:
- "Exclude specific instance names from MRF transparency. The use of the exclusions feature will be disclosed in nodeinfo as a boolean value",
+ "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"]
+ "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"
+ "Set to `true` to use extended local nicknames format (allows underscores/dashes)." <>
+ " This will break federation with older software for theses nicknames."
},
%{
key: :max_pinned_statuses,
type: :integer,
- description: "The maximum number of pinned statuses. 0 will disable the feature",
+ description: "The maximum number of pinned statuses. 0 will disable the feature.",
suggestions: [
0,
1,
@@ -690,16 +790,15 @@ config :pleroma, :config_description, [
key: :no_attachment_links,
type: :boolean,
description:
- "Set to true to disable automatically adding attachment link text to statuses"
+ "Set to `true` to disable automatically adding attachment link text to statuses"
},
%{
key: :welcome_message,
type: :string,
description:
- "A message that will be send to a newly registered users as a direct message",
+ "A message that will be sent to a newly registered users as a direct message",
suggestions: [
- "Hi, @username! Welcome to the board!",
- nil
+ "Hi, @username! Welcome on board!"
]
},
%{
@@ -707,14 +806,13 @@ config :pleroma, :config_description, [
type: :string,
description: "The nickname of the local user that sends the welcome message",
suggestions: [
- "lain",
- nil
+ "lain"
]
},
%{
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
]
@@ -723,14 +821,14 @@ config :pleroma, :config_description, [
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 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. \"@admin please keep an eye on @bad_actor\")." <>
+ " Default: `false`"
},
%{
key: :healthcheck,
type: :boolean,
- description: "If set to true, system data will be shown on /api/pleroma/healthcheck"
+ description: "If set to `true`, system data will be shown on /api/pleroma/healthcheck"
},
%{
key: :remote_post_retention_days,
@@ -744,7 +842,7 @@ config :pleroma, :config_description, [
%{
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
]
@@ -752,7 +850,7 @@ config :pleroma, :config_description, [
%{
key: :user_name_length,
type: :integer,
- description: "A user name maximum length (default: 100)",
+ description: "A user name maximum length. Default: 100.",
suggestions: [
100
]
@@ -760,13 +858,13 @@ config :pleroma, :config_description, [
%{
key: :skip_thread_containment,
type: :boolean,
- description: "Skip filter out broken threads. The default is true"
+ description: "Skip filter out broken threads. Default: `true`"
},
%{
key: :limit_to_local_content,
type: [:atom, false],
description:
- "Limit unauthenticated users to search for local statutes and users only. The default is :unauthenticated ",
+ "Limit unauthenticated users to search for local statutes and users only. Default: `:unauthenticated`.",
suggestions: [
:unauthenticated,
:all,
@@ -774,15 +872,9 @@ config :pleroma, :config_description, [
]
},
%{
- key: :dynamic_configuration,
- type: :boolean,
- description:
- "Allow transferring configuration to DB with the subsequent customization from Admin api. Defaults to `false`"
- },
- %{
key: :max_account_fields,
type: :integer,
- description: "The maximum number of custom fields in the user profile (default: 10)",
+ description: "The maximum number of custom fields in the user profile. Default: 10.",
suggestions: [
10
]
@@ -791,7 +883,7 @@ config :pleroma, :config_description, [
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
]
@@ -799,7 +891,7 @@ config :pleroma, :config_description, [
%{
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
]
@@ -807,7 +899,7 @@ config :pleroma, :config_description, [
%{
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
]
@@ -828,8 +920,8 @@ config :pleroma, :config_description, [
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.",
- suggestions: [[:console, {ExSyslogger, :ex_syslogger}, Quack.Logger]]
+ "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]
}
]
},
@@ -855,13 +947,13 @@ config :pleroma, :config_description, [
%{
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"]
},
%{
key: :metadata,
type: {:list, :atom},
- suggestions: [[:request_id]]
+ suggestions: [:request_id]
}
]
},
@@ -880,13 +972,13 @@ config :pleroma, :config_description, [
%{
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"]
},
%{
key: :metadata,
type: {:list, :atom},
- suggestions: [[:request_id]]
+ suggestions: [:request_id]
}
]
},
@@ -931,10 +1023,14 @@ config :pleroma, :config_description, [
group: :pleroma,
key: :frontend_configurations,
type: :group,
- description: "A keyword list that keeps the configuration data for any kind of frontend",
+ 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 all fields must be complete.",
children: [
%{
key: :pleroma_fe,
+ label: "Pleroma FE",
type: :map,
description: "Settings for Pleroma FE",
suggestions: [
@@ -952,7 +1048,11 @@ config :pleroma, :config_description, [
hideUserStats: false,
scopeCopy: true,
subjectLineBehavior: "email",
- alwaysShowSubjectInput: true
+ alwaysShowSubjectInput: true,
+ logoMask: false,
+ logoMargin: ".1em",
+ stickers: false,
+ enableEmojiPicker: false
}
],
children: [
@@ -977,74 +1077,116 @@ config :pleroma, :config_description, [
},
%{
key: :redirectRootNoLogin,
+ 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"]
},
%{
key: :redirectRootLogin,
+ 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: :showInstanceSpecificPanel,
+ label: "Show instance specific panel",
type: :boolean,
description: "Whenether to show the instance's specific panel"
},
%{
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: "Scope copy",
type: :boolean,
description: "Copy the scope (private/unlisted/public) in replies to posts by default"
},
%{
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 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"
+ },
+ %{
+ key: :logoMask,
+ label: "Logo mask",
+ type: :boolean,
+ description:
+ "By default it assumes logo used will be monochrome-with-alpha one, this is done to be compatible with both light and dark themes, " <>
+ "so that white logo designed with dark theme in mind won't be invisible over light theme, this is done via CSS3 Masking. " <>
+ "Basically - it will take alpha channel of the image and fill non-transparent areas of it with solid color. " <>
+ "If you really want colorful logo - it can be done by setting logoMask to false."
+ },
+ %{
+ 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/disables stickers."
+ },
+ %{
+ key: :enableEmojiPicker,
+ label: "Emoji picker",
type: :boolean,
- description: "When set to false, auto-hide the subject field when it's empty"
+ description: "Enables/disables emoji picker."
}
]
},
%{
key: :masto_fe,
+ label: "Masto FE",
type: :map,
description: "Settings for Masto FE",
suggestions: [
@@ -1055,6 +1197,7 @@ config :pleroma, :config_description, [
children: [
%{
key: :showInstanceSpecificPanel,
+ label: "Show instance specific panel",
type: :boolean,
description: "Whenether to show the instance's specific panel"
}
@@ -1071,27 +1214,25 @@ config :pleroma, :config_description, [
children: [
%{
key: :mascots,
- type: :keyword,
+ 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",
- mime_type: "image/png"
- },
- pleroma_fox_tan_shy: %{
- url: "/images/pleroma-fox-tan-shy.png",
- mime_type: "image/png"
- }
- ]
+ 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)",
+ "This will be used as the default mascot on MastoFE. Default: `:pleroma_fox_tan`",
suggestions: [
:pleroma_fox_tan
]
@@ -1140,6 +1281,7 @@ config :pleroma, :config_description, [
%{
group: :pleroma,
key: :mrf_simple,
+ label: "MRF simple",
type: :group,
description: "Message Rewrite Facility",
children: [
@@ -1151,8 +1293,9 @@ config :pleroma, :config_description, [
},
%{
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 put medias as NSFW (sensitive) from",
suggestions: ["example.com", "*.example.com"]
},
%{
@@ -1197,6 +1340,7 @@ config :pleroma, :config_description, [
%{
group: :pleroma,
key: :mrf_subchain,
+ label: "MRF subchain",
type: :group,
description:
"This policy processes messages through an alternate pipeline when a given message matches certain criteria." <>
@@ -1217,23 +1361,28 @@ config :pleroma, :config_description, [
%{
group: :pleroma,
key: :mrf_rejectnonpublic,
+ description:
+ "MRF RejectNonPublic settings. RejectNonPublic drops posts with non-public visibility settings.",
+ label: "MRF reject non public",
type: :group,
children: [
%{
key: :allow_followersonly,
+ label: "Allow followers-only",
type: :boolean,
- description: "whether to allow followers-only posts"
+ description: "Whether to allow followers-only posts"
},
%{
key: :allow_direct,
type: :boolean,
- description: "whether to allow direct messages"
+ description: "Whether to allow direct messages"
}
]
},
%{
group: :pleroma,
key: :mrf_hellthread,
+ label: "MRF hellthread",
type: :group,
description: "Block messages with too much mentions",
children: [
@@ -1242,14 +1391,14 @@ config :pleroma, :config_description, [
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]
}
]
@@ -1257,6 +1406,7 @@ config :pleroma, :config_description, [
%{
group: :pleroma,
key: :mrf_keyword,
+ label: "MRF keyword",
type: :group,
description: "Reject or Word-Replace messages with a keyword or regex",
children: [
@@ -1264,21 +1414,21 @@ config :pleroma, :config_description, [
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: [{:string, :string}, {:regex, :string}],
+ type: [{:tuple, :string, :string}, {:tuple, :regex, :string}],
description:
- "A list of patterns which result in message being removed from federated timelines (a.k.a unlisted), each pattern can be a string or a regular expression",
+ "A list of tuples containing {pattern, replacement}, pattern can be a string or a regular expression.",
suggestions: [{"foo", "bar"}, {~r/foo/iu, "bar"}]
}
]
@@ -1286,6 +1436,7 @@ config :pleroma, :config_description, [
%{
group: :pleroma,
key: :mrf_mention,
+ label: "MRF mention",
type: :group,
description: "Block messages which mention a user",
children: [
@@ -1293,13 +1444,14 @@ config :pleroma, :config_description, [
key: :actors,
type: {:list, :string},
description: "A list of actors, for which to drop any posts mentioning",
- suggestions: [["actor1", "actor2"]]
+ suggestions: ["actor1", "actor2"]
}
]
},
%{
group: :pleroma,
key: :mrf_vocabulary,
+ label: "MRF vocabulary",
type: :group,
description: "Filter messages which belong to certain activity vocabularies",
children: [
@@ -1308,14 +1460,14 @@ config :pleroma, :config_description, [
type: {:list, :string},
description:
"A list of ActivityStreams terms to accept. If empty, all supported messages are accepted",
- suggestions: [["Create", "Follow", "Mention", "Announce", "Like"]]
+ suggestions: ["Create", "Follow", "Mention", "Announce", "Like"]
},
%{
key: :reject,
type: {:list, :string},
description:
"A list of ActivityStreams terms to reject. If empty, no messages are rejected",
- suggestions: [["Create", "Follow", "Mention", "Announce", "Like"]]
+ suggestions: ["Create", "Follow", "Mention", "Announce", "Like"]
}
]
},
@@ -1348,14 +1500,72 @@ config :pleroma, :config_description, [
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"]
},
%{
key: :proxy_opts,
type: :keyword,
description: "Options for Pleroma.ReverseProxy",
- suggestions: [[max_body_length: 25 * 1_048_576, redirect_on_failure: false]]
+ suggestions: [
+ redirect_on_failure: false,
+ max_body_length: 25 * 1_048_576,
+ http: [
+ follow_redirect: true,
+ pool: :media
+ ]
+ ],
+ children: [
+ %{
+ key: :redirect_on_failure,
+ 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."
+ },
+ %{
+ 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."
+ },
+ %{
+ key: :http,
+ type: :keyword,
+ description: "HTTP options",
+ children: [
+ %{
+ key: :adapter,
+ type: :keyword,
+ description: "Adapter specific options",
+ children: [
+ %{
+ key: :ssl_options,
+ type: :keyword,
+ label: "SSL Options",
+ description: "SSL options for HTTP adapter",
+ children: [
+ %{
+ key: :versions,
+ type: {:list, :atom},
+ description: "List of TLS version to use",
+ suggestions: [:tlsv1, ":tlsv1.1", ":tlsv1.2"]
+ }
+ ]
+ }
+ ]
+ },
+ %{
+ key: :proxy_url,
+ label: "Proxy URL",
+ type: [:string, :tuple],
+ description: "Proxy URL",
+ suggestions: ["127.0.0.1:8123", {:socks5, :localhost, 9050}]
+ }
+ ]
+ }
+ ]
},
%{
key: :whitelist,
@@ -1404,10 +1614,12 @@ config :pleroma, :config_description, [
children: [
%{
key: :http,
- type: :keyword,
+ label: "HTTP",
+ type: {:keyword, :integer, :tuple},
description: "http protocol configuration",
suggestions: [
- [port: 8080, ip: {127, 0, 0, 1}]
+ port: 8080,
+ ip: {127, 0, 0, 1}
],
children: [
%{
@@ -1415,21 +1627,20 @@ config :pleroma, :config_description, [
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
- ]
+ {:_,
+ [
+ {"/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: [
@@ -1448,10 +1659,13 @@ config :pleroma, :config_description, [
},
%{
key: :url,
- type: :keyword,
+ label: "URL",
+ type: {:keyword, :string, :integer},
description: "configuration for generating urls",
suggestions: [
- [host: "example.com", port: 2020, scheme: "https"]
+ host: "example.com",
+ port: 2020,
+ scheme: "https"
],
children: [
%{
@@ -1504,7 +1718,7 @@ config :pleroma, :config_description, [
%{
key: :render_errors,
type: :keyword,
- suggestions: [[view: Pleroma.Web.ErrorView, accepts: ~w(json)]],
+ suggestions: [view: Pleroma.Web.ErrorView, accepts: ~w(json)],
children: [
%{
key: :view,
@@ -1521,7 +1735,7 @@ config :pleroma, :config_description, [
%{
key: :pubsub,
type: :keyword,
- suggestions: [[name: Pleroma.PubSub, adapter: Phoenix.PubSub.PG2]],
+ suggestions: [name: Pleroma.PubSub, adapter: Phoenix.PubSub.PG2],
children: [
%{
key: :name,
@@ -1588,17 +1802,20 @@ config :pleroma, :config_description, [
},
%{
key: :sts,
+ label: "STS",
type: :boolean,
description: "Whether to additionally send a Strict-Transport-Security header"
},
%{
key: :sts_max_age,
+ label: "STS max age",
type: :integer,
description: "The maximum age for the Strict-Transport-Security header if sent",
suggestions: [31_536_000]
},
%{
key: :ct_max_age,
+ label: "CT max age",
type: :integer,
description: "The maximum age for the Expect-CT header if sent",
suggestions: [2_592_000]
@@ -1611,6 +1828,7 @@ config :pleroma, :config_description, [
},
%{
key: :report_uri,
+ label: "Report URI",
type: :string,
description: "Adds the specified url to report-uri and report-to group in CSP header",
suggestions: ["https://example.com/report-uri"]
@@ -1628,9 +1846,9 @@ config :pleroma, :config_description, [
key: :subject,
type: :string,
description:
- "a mailto link for the administrative contact." <>
+ "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",
+ " is unavailable for an extended period, or otherwise can't respond, someone else on the list can.",
suggestions: ["Subject"]
},
%{
@@ -1642,7 +1860,7 @@ config :pleroma, :config_description, [
%{
key: :private_key,
type: :string,
- description: "VAPID private keyn",
+ description: "VAPID private key",
suggestions: ["Private key"]
}
]
@@ -1662,7 +1880,7 @@ config :pleroma, :config_description, [
key: :method,
type: :module,
description: "The method/service to use for captcha",
- suggestions: [Pleroma.Captcha.Kocaptcha]
+ suggestions: [Pleroma.Captcha.Kocaptcha, Pleroma.Captcha.Native]
},
%{
key: :seconds_valid,
@@ -1678,12 +1896,12 @@ config :pleroma, :config_description, [
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"]
}
]
@@ -1692,7 +1910,7 @@ config :pleroma, :config_description, [
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,
@@ -1742,8 +1960,9 @@ config :pleroma, :config_description, [
},
%{
key: :verbose,
- type: :boolean,
- description: "Logs verbose mode"
+ type: [:atom, false],
+ description: "Logs verbose mode",
+ suggestions: [false, :error, :warn, :info, :debug]
},
%{
key: :prune,
@@ -1754,20 +1973,18 @@ config :pleroma, :config_description, [
},
%{
key: :queues,
- type: :keyword,
+ type: {:keyword, :integer},
description:
"Background jobs queues (keys: queues, values: max numbers of concurrent jobs)",
suggestions: [
- [
- activity_expiration: 10,
- background: 5,
- federator_incoming: 50,
- federator_outgoing: 50,
- mailer: 10,
- scheduled_activities: 10,
- transmogrifier: 20,
- web_push: 50
- ]
+ activity_expiration: 10,
+ background: 5,
+ federator_incoming: 50,
+ federator_outgoing: 50,
+ mailer: 10,
+ scheduled_activities: 10,
+ transmogrifier: 20,
+ web_push: 50
],
children: [
%{
@@ -1830,13 +2047,11 @@ config :pleroma, :config_description, [
children: [
%{
key: :retries,
- type: :keyword,
+ type: {:keyword, :integer},
description: "Max retry attempts for failed jobs, per `Oban` queue",
suggestions: [
- [
- federator_incoming: 5,
- federator_outgoing: 5
- ]
+ federator_incoming: 5,
+ federator_outgoing: 5
]
}
]
@@ -1845,24 +2060,24 @@ config :pleroma, :config_description, [
group: :pleroma,
key: Pleroma.Web.Metadata,
type: :group,
- decsription: "Metadata-related settings",
+ 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.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: "If set to true nsfw attachments will be shown in previews"
+ description: "If set to `true` NSFW attachments will be shown in previews"
}
]
},
@@ -1870,39 +2085,45 @@ config :pleroma, :config_description, [
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:
- "if enabled the instance will parse metadata from attached links to generate link previews"
+ description: "Enables/disables RichMedia."
},
%{
key: :ignore_hosts,
type: {:list, :string},
- description: "list of hosts which will be ignored by the metadata parser",
- suggestions: [["accounts.google.com", "xss.website"]]
+ 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"]]
+ 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",
+ description: "List of Rich Media parsers.",
suggestions: [
- Generator.richmedia_parsers()
+ Pleroma.Web.RichMedia.Parsers.MetaTagsParser,
+ Pleroma.Web.RichMedia.Parsers.OEmbed,
+ Pleroma.Web.RichMedia.Parsers.OGP,
+ Pleroma.Web.RichMedia.Parsers.TwitterCard
]
},
%{
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]
+ Pleroma.Web.RichMedia.Parser.TTL.AwsSignedUrl
]
}
]
@@ -1917,12 +2138,12 @@ config :pleroma, :config_description, [
key: :enabled,
type: :boolean,
description:
- "if enabled, when a new user is federated with, fetch some of their latest posts"
+ "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",
+ description: "The amount of pages to fetch",
suggestions: [5]
}
]
@@ -1936,24 +2157,24 @@ config :pleroma, :config_description, [
%{
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. `False` to clear",
suggestions: ["auto-linker", false]
},
%{
key: :rel,
type: [:string, false],
- description: "override the rel attribute. false to clear",
+ description: "Override the rel attribute. `False` to clear",
suggestions: ["ugc", "noopener noreferrer", false]
},
%{
key: :new_window,
type: :boolean,
- description: "set to false to remove target='_blank' attribute"
+ 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: "Set to `true` to link urls with schema http://google.com"
},
%{
key: :truncate,
@@ -1970,7 +2191,7 @@ config :pleroma, :config_description, [
%{
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.)"
}
]
},
@@ -1984,20 +2205,20 @@ config :pleroma, :config_description, [
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"
}
]
},
@@ -2010,7 +2231,7 @@ config :pleroma, :config_description, [
%{
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"
}
]
},
@@ -2032,14 +2253,14 @@ config :pleroma, :config_description, [
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,
@@ -2055,23 +2276,57 @@ config :pleroma, :config_description, [
},
%{
key: :ssl,
+ label: "SSL",
type: :boolean,
- description: "true to use SSL, usually implies the port 636"
+ description: "`True` 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: :cacertfile,
+ type: :string,
+ description: "Path to file with PEM encoded cacerts",
+ suggestions: ["path/to/file/with/PEM/cacerts"]
+ },
+ %{
+ key: :verify,
+ type: :atom,
+ description: "Type of cert verification",
+ suggestions: [:verify_peer]
+ }
+ ]
},
%{
key: :tls,
+ label: "TLS",
type: :boolean,
- description: "true to start TLS, usually implies the port 389"
+ description: "`True` to start TLS, 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: [
+ %{
+ key: :cacertfile,
+ type: :string,
+ description: "Path to file with PEM encoded cacerts",
+ suggestions: ["path/to/file/with/PEM/cacerts"]
+ },
+ %{
+ key: :verify,
+ type: :atom,
+ description: "Type of cert verification",
+ suggestions: [:verify_peer]
+ }
+ ]
},
%{
key: :base,
@@ -2107,23 +2362,23 @@ config :pleroma, :config_description, [
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: :string,
+ 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"]
}
@@ -2152,18 +2407,18 @@ config :pleroma, :config_description, [
%{
key: :active,
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: :interval,
- type: :ininteger,
+ type: :integer,
description: "Minimum interval between digest emails to one user",
suggestions: [7]
},
@@ -2185,9 +2440,9 @@ config :pleroma, :config_description, [
children: [
%{
key: :logo,
- type: [:string, nil],
- description: "a path to a custom logo. Set it to nil to use the default Pleroma logo",
- suggestions: ["some/path/logo.png", nil]
+ type: :string,
+ description: "A path to a custom logo. Set it to `nil` to use the default Pleroma logo.",
+ suggestions: ["some/path/logo.png"]
},
%{
key: :styling,
@@ -2259,13 +2514,13 @@ config :pleroma, :config_description, [
%{
key: :clean_expired_tokens,
type: :boolean,
- description: "Enable a background job to clean expired oauth tokens. Defaults to false"
+ description: "Enable a background job to clean expired oauth tokens. Default: `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).",
+ "Interval to run the job to clean expired tokens. Default: 86_400_000 (24 hours).",
suggestions: [86_400_000]
}
]
@@ -2278,27 +2533,24 @@ config :pleroma, :config_description, [
%{
key: :shortcode_globs,
type: {:list, :string},
- description: "Location of custom emoji files. * can be used as a wildcard",
- suggestions: [["/emoji/custom/**/*.png"]]
+ description: "Location of custom emoji files. * can be used as a wildcard.",
+ suggestions: ["/emoji/custom/**/*.png"]
},
%{
key: :pack_extensions,
type: {:list, :string},
description:
"A list of file extensions for emojis, when no emoji.txt for a pack is present",
- suggestions: [[".png", ".gif"]]
+ suggestions: [".png", ".gif"]
},
%{
key: :groups,
- type: :keyword,
+ 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: [
- [
- # Put groups that have higher priority than defaults here. Example in `docs/config/custom_emoji.md`
- Custom: ["/emoji/*.png", "/emoji/**/*.png"]
- ]
+ Custom: ["/emoji/*.png", "/emoji/**/*.png"]
]
},
%{
@@ -2306,11 +2558,12 @@ config :pleroma, :config_description, [
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"]
},
%{
key: :shared_pack_cache_seconds_per_file,
+ label: "Shared pack cache s/file",
type: :integer,
descpiption:
"When an emoji pack is shared, the archive is created and cached in memory" <>
@@ -2328,7 +2581,7 @@ config :pleroma, :config_description, [
%{
key: :rum_enabled,
type: :boolean,
- description: "If RUM indexes should be used. Defaults to false"
+ description: "If RUM indexes should be used. Default: `false`"
}
]
},
@@ -2342,45 +2595,45 @@ config :pleroma, :config_description, [
%{
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: :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 relations 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}]
}
]
@@ -2389,17 +2642,18 @@ config :pleroma, :config_description, [
group: :esshd,
type: :group,
description:
- "To enable simple command line interface accessible over ssh, add a setting like this to your configuration file",
+ "Before enabling this you must add :esshd to mix.exs as one of the extra_applications " <>
+ "and generate host keys in your priv dir with ssh-keygen -m PEM -N \"\" -b 2048 -t rsa -f ssh_host_rsa_key",
children: [
%{
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"]
},
%{
@@ -2443,27 +2697,27 @@ config :pleroma, :config_description, [
%{
key: "application/xml",
type: {:list, :string},
- suggestions: [["xml"]]
+ suggestions: ["xml"]
},
%{
key: "application/xrd+xml",
type: {:list, :string},
- suggestions: [["xrd+xml"]]
+ suggestions: ["xrd+xml"]
},
%{
key: "application/jrd+json",
type: {:list, :string},
- suggestions: [["jrd+json"]]
+ suggestions: ["jrd+json"]
},
%{
key: "application/activity+json",
type: {:list, :string},
- suggestions: [["activity+json"]]
+ suggestions: ["activity+json"]
},
%{
key: "application/ld+json",
type: {:list, :string},
- suggestions: [["activity+json"]]
+ suggestions: ["activity+json"]
}
]
}
@@ -2495,43 +2749,6 @@ config :pleroma, :config_description, [
]
},
%{
- 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,
@@ -2559,48 +2776,48 @@ config :pleroma, :config_description, [
},
%{
group: :pleroma,
- key: Pleroma.Uploaders.MDII,
- type: :group,
- children: [
- %{
- key: :cgi,
- type: :string,
- suggestions: ["https://mdii.sakura.ne.jp/mdii-post.cgi"]
- },
- %{
- key: :files,
- type: :string,
- suggestions: ["https://mdii.sakura.ne.jp"]
- }
- ]
- },
- %{
- group: :pleroma,
key: :http,
type: :group,
description: "HTTP settings",
children: [
%{
key: :proxy_url,
- type: [:string, :atom, nil],
- suggestions: ["localhost:9020", {:socks5, :localhost, 3090}, nil]
+ label: "Proxy URL",
+ type: [:string, :tuple],
+ description: "Proxy URL",
+ suggestions: ["localhost:9020", {:socks5, :localhost, 3090}]
},
%{
key: :send_user_agent,
type: :boolean
},
%{
+ key: :user_agent,
+ type: [:string, :atom],
+ description:
+ "What user agent to use. Must be a string or an atom `:default`. Default value is `:default`.",
+ suggestions: ["Pleroma", :default]
+ },
+ %{
key: :adapter,
type: :keyword,
- suggestions: [
- [
- ssl_options: [
- # Workaround for remote server certificate chain issues
- partial_chain: &:hackney_connect.partial_chain/1,
- # We don't support TLS v1.3 yet
- versions: [:tlsv1, :"tlsv1.1", :"tlsv1.2"]
+ description: "Adapter specific options",
+ suggestions: [],
+ children: [
+ %{
+ key: :ssl_options,
+ type: :keyword,
+ label: "SSL Options",
+ description: "SSL options for HTTP adapter",
+ children: [
+ %{
+ key: :versions,
+ type: {:list, :atom},
+ description: "List of TLS version to use",
+ suggestions: [:tlsv1, ":tlsv1.1", ":tlsv1.2"]
+ }
]
- ]
+ }
]
}
]
@@ -2629,7 +2846,7 @@ config :pleroma, :config_description, [
%{
key: :scrub_policy,
type: {:list, :module},
- suggestions: [[Pleroma.HTML.Transform.MediaProxy, Pleroma.HTML.Scrubber.Default]]
+ suggestions: [Pleroma.HTML.Transform.MediaProxy, Pleroma.HTML.Scrubber.Default]
}
]
},
@@ -2647,6 +2864,8 @@ config :pleroma, :config_description, [
%{
group: :pleroma,
key: :mrf_normalize_markup,
+ label: "MRF normalize markup",
+ description: "MRF NormalizeMarkup settings. Scrub configured hypertext markup.",
type: :group,
children: [
%{
@@ -2665,38 +2884,36 @@ config :pleroma, :config_description, [
key: :restricted_nicknames,
type: {:list, :string},
suggestions: [
- [
- ".well-known",
- "~",
- "about",
- "activities",
- "api",
- "auth",
- "check_password",
- "dev",
- "friend-requests",
- "inbox",
- "internal",
- "main",
- "media",
- "nodeinfo",
- "notice",
- "oauth",
- "objects",
- "ostatus_subscribe",
- "pleroma",
- "proxy",
- "push",
- "registration",
- "relay",
- "settings",
- "status",
- "tag",
- "user-search",
- "user_exists",
- "users",
- "web"
- ]
+ ".well-known",
+ "~",
+ "about",
+ "activities",
+ "api",
+ "auth",
+ "check_password",
+ "dev",
+ "friend-requests",
+ "inbox",
+ "internal",
+ "main",
+ "media",
+ "nodeinfo",
+ "notice",
+ "oauth",
+ "objects",
+ "ostatus_subscribe",
+ "pleroma",
+ "proxy",
+ "push",
+ "registration",
+ "relay",
+ "settings",
+ "status",
+ "tag",
+ "user-search",
+ "user_exists",
+ "users",
+ "web"
]
}
]
@@ -2713,20 +2930,18 @@ config :pleroma, :config_description, [
%{
key: :methods,
type: {:list, :string},
- suggestions: [["POST", "PUT", "DELETE", "GET", "PATCH", "OPTIONS"]]
+ suggestions: ["POST", "PUT", "DELETE", "GET", "PATCH", "OPTIONS"]
},
%{
key: :expose,
- type: :string,
+ type: {:list, :string},
suggestions: [
- [
- "Link",
- "X-RateLimit-Reset",
- "X-RateLimit-Limit",
- "X-RateLimit-Remaining",
- "X-Request-Id",
- "Idempotency-Key"
- ]
+ "Link",
+ "X-RateLimit-Reset",
+ "X-RateLimit-Limit",
+ "X-RateLimit-Remaining",
+ "X-Request-Id",
+ "Idempotency-Key"
]
},
%{
@@ -2736,7 +2951,7 @@ config :pleroma, :config_description, [
%{
key: :headers,
type: {:list, :string},
- suggestions: [["Authorization", "Content-Type", "Idempotency-Key"]]
+ suggestions: ["Authorization", "Content-Type", "Idempotency-Key"]
}
]
},
@@ -2745,28 +2960,26 @@ config :pleroma, :config_description, [
key: Pleroma.Plugs.RemoteIp,
type: :group,
description: """
- **If your instance is not behind at least one reverse proxy, you should not enable this plug.**
-
`Pleroma.Plugs.RemoteIp` is a shim to call [`RemoteIp`](https://git.pleroma.social/pleroma/remote_ip) but with runtime configuration.
+ **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. Defaults to `false`.",
- suggestions: [true, false]
+ description: "Enable/disable the plug. Default: `false`."
},
%{
key: :headers,
type: {:list, :string},
description:
- "A list of strings naming the `req_headers` to use when deriving the `remote_ip`. Order does not matter. Defaults to `~w[forwarded x-forwarded-for x-client-ip x-real-ip]`."
+ "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,
@@ -2787,16 +3000,105 @@ config :pleroma, :config_description, [
key: :activity_pub,
type: :integer,
description:
- "activity pub routes (except question activities). Defaults to `nil` (no expiration).",
+ "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]
}
]
+ },
+ %{
+ group: :pleroma,
+ key: :static_fe,
+ type: :group,
+ description:
+ "Render profiles and posts using server-generated HTML that is viewable without using JavaScript.",
+ children: [
+ %{
+ key: :enabled,
+ type: :boolean,
+ description: "Enables the rendering of static HTML. Defaults to `false`."
+ }
+ ]
+ },
+ %{
+ group: :pleroma,
+ key: :feed,
+ type: :group,
+ description: "Configure feed rendering.",
+ children: [
+ %{
+ key: :post_title,
+ type: :map,
+ description: "Configure title rendering.",
+ children: [
+ %{
+ key: :max_length,
+ type: :integer,
+ description: "Maximum number of characters before truncating title.",
+ suggestions: [100]
+ },
+ %{
+ key: :omission,
+ type: :string,
+ description: "Replacement which will be used after truncating string.",
+ suggestions: ["..."]
+ }
+ ]
+ }
+ ]
+ },
+ %{
+ group: :pleroma,
+ key: :mrf_object_age,
+ type: :group,
+ description: "Rejects or delists posts based on their age when received.",
+ 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,
+ type: :group,
+ description: "Allow instance configuration from database.",
+ children: [
+ %{
+ key: :configurable_from_database,
+ type: :boolean,
+ description:
+ "Allow transferring configuration to DB with the subsequent customization from Admin api. Defaults to `false`"
+ }
+ ]
}
]
diff --git a/config/prod.exs b/config/prod.exs
index 25873f360..adbce5606 100644
--- a/config/prod.exs
+++ b/config/prod.exs
@@ -20,8 +20,8 @@ config :pleroma, Pleroma.Web.Endpoint,
config :phoenix, serve_endpoints: true
# Do not print debug messages in production
-config :logger, :console, level: :warn
-config :logger, :ex_syslogger, level: :warn
+config :logger, :console, level: :info
+config :logger, :ex_syslogger, level: :info
# ## SSL Support
#
diff --git a/config/releases.exs b/config/releases.exs
index 98c5ceccd..19636765f 100644
--- a/config/releases.exs
+++ b/config/releases.exs
@@ -2,9 +2,12 @@ import Config
config :pleroma, :instance, static_dir: "/var/lib/pleroma/static"
config :pleroma, Pleroma.Uploaders.Local, uploads: "/var/lib/pleroma/uploads"
+config :pleroma, :modules, runtime_dir: "/var/lib/pleroma/modules"
config_path = System.get_env("PLEROMA_CONFIG_PATH") || "/etc/pleroma/config.exs"
+config :pleroma, release: true, config_path: config_path
+
if File.exists?(config_path) do
import_config config_path
else
@@ -17,3 +20,12 @@ else
IO.puts(warning)
end
+
+exported_config =
+ config_path
+ |> Path.dirname()
+ |> Path.join("prod.exported_from_db.secret.exs")
+
+if File.exists?(exported_config) do
+ import_config exported_config
+end
diff --git a/config/test.exs b/config/test.exs
index d52ced612..5c66a36f1 100644
--- a/config/test.exs
+++ b/config/test.exs
@@ -95,6 +95,8 @@ config :joken, default_signer: "yU8uHKq+yyAkZ11Hx//jcdacWc8yQ1bxAAGrplzB0Zwwjkp3
config :pleroma, Pleroma.ReverseProxy.Client, Pleroma.ReverseProxy.ClientMock
+config :pleroma, :modules, runtime_dir: "test/fixtures/modules"
+
if File.exists?("./config/test.secret.exs") do
import_config "test.secret.exs"
else