#
# This configuration file is loaded before any dependency and
# is restricted to this project.
-use Mix.Config
+import Config
# General application configuration
config :pleroma, ecto_repos: [Pleroma.Repo]
config :pleroma, Pleroma.Repo,
- types: Pleroma.PostgresTypes,
telemetry_event: [Pleroma.Repo.Instrumenter],
migration_lock: nil
filters: [Pleroma.Upload.Filter.Dedupe],
link_name: false,
proxy_remote: false,
- proxy_opts: [
- redirect_on_failure: false,
- max_body_length: 25 * 1_048_576,
- http: [
- follow_redirect: true,
- pool: :upload
- ]
- ],
- filename_display_max_length: 30
+ filename_display_max_length: 30,
+ default_description: nil,
+ base_url: nil
config :pleroma, Pleroma.Uploaders.Local, uploads: "uploads"
config :pleroma, Pleroma.Uploaders.S3,
bucket: nil,
- streaming_enabled: true,
- public_endpoint: "https://s3.amazonaws.com"
+ bucket_namespace: nil,
+ truncated_namespace: nil,
+ streaming_enabled: true
+
+config :ex_aws, :s3,
+ # host: "s3.wasabisys.com", # required if not Amazon AWS
+ access_key_id: nil,
+ secret_access_key: nil,
+ # region: "us-east-1", # may be required for Amazon AWS
+ scheme: "https://"
config :pleroma, :emoji,
shortcode_globs: ["/emoji/custom/**/*.png"],
# Configures the endpoint
config :pleroma, Pleroma.Web.Endpoint,
- instrumenters: [Pleroma.Web.Endpoint.Instrumenter],
url: [host: "localhost"],
http: [
ip: {127, 0, 0, 1},
],
protocol: "https",
secret_key_base: "aK4Abxf29xU9TTDKre9coZPUgevcVCFQJe/5xP/7Lt4BEif6idBIbjupVbOrbKxl",
+ live_view: [signing_salt: "U5ELgdEwTD3n1+D5s0rY0AMg8/y1STxZ3Zvsl3bWh+oBcGrYdil0rXqPMRd3Glcq"],
signing_salt: "CqaoopA2",
render_errors: [view: Pleroma.Web.ErrorView, accepts: ~w(json)],
- pubsub: [name: Pleroma.PubSub, adapter: Phoenix.PubSub.PG2],
+ pubsub_server: Pleroma.PubSub,
secure_cookie_flag: true,
extra_cookie_attrs: [
"SameSite=Lax"
]
# Configures Elixir's Logger
+config :logger, truncate: 65_536
+
config :logger, :console,
- level: :debug,
+ level: :info,
format: "\n$time $metadata[$level] $message\n",
metadata: [:request_id]
config :logger, :ex_syslogger,
- level: :debug,
+ level: :info,
ident: "pleroma",
format: "$metadata[$level] $message",
metadata: [:request_id]
"application/ld+json" => ["activity+json"]
}
-config :tesla, adapter: Tesla.Adapter.Gun
+config :tesla, :adapter, {Tesla.Adapter.Finch, name: MyFinch}
# Configures http settings, upstream proxy etc.
config :pleroma, :http,
proxy_url: nil,
- send_user_agent: true,
user_agent: :default,
adapter: []
name: "Pleroma",
email: "example@example.com",
notify_email: "noreply@example.com",
- description: "Pleroma: An efficient and flexible fediverse server",
+ description: "Akkoma: The cooler fediverse server",
background_image: "/images/city.jpg",
instance_thumbnail: "/instance/thumbnail.jpeg",
limit: 5_000,
description_limit: 5_000,
- chat_limit: 5_000,
remote_limit: 100_000,
upload_limit: 16_000_000,
avatar_upload_limit: 2_000_000,
registrations_open: true,
invites_enabled: false,
account_activation_required: false,
+ account_approval_required: false,
federating: true,
federation_incoming_replies_max_depth: 100,
federation_reachability_timeout_days: 7,
allow_relay: true,
public: true,
quarantined_instances: [],
- managed_config: true,
static_dir: "instance/static/",
allowed_post_formats: [
"text/plain",
"text/html",
"text/markdown",
- "text/bbcode"
+ "text/bbcode",
+ "text/x.misskeymarkdown"
],
+ staff_transparency: [],
autofollowed_nicknames: [],
+ autofollowing_nicknames: [],
max_pinned_statuses: 1,
attachment_links: false,
- welcome_user_nickname: nil,
- welcome_message: nil,
max_report_comment_size: 1000,
safe_dm_mentions: false,
healthcheck: false,
max_remote_account_fields: 20,
account_field_name_length: 512,
account_field_value_length: 2048,
+ registration_reason_length: 500,
external_user_synchronization: true,
extended_nickname_format: true,
cleanup_attachments: false,
number: 5,
length: 16
]
+ ],
+ show_reactions: true,
+ password_reset_token_validity: 60 * 60 * 24,
+ profile_directory: true,
+ privileged_staff: false
+
+config :pleroma, :welcome,
+ direct_message: [
+ enabled: false,
+ sender_nickname: nil,
+ message: nil
+ ],
+ email: [
+ enabled: false,
+ sender: nil,
+ subject: "Welcome to <%= instance_name %>",
+ html: "Welcome to <%= instance_name %>",
+ text: "Welcome to <%= instance_name %>"
]
config :pleroma, :feed,
hideSitename: false,
hideUserStats: false,
loginMethod: "password",
- logo: "/static/logo.png",
+ logo: "/static/logo.svg",
logoMargin: ".1em",
logoMask: true,
minimalScopesMode: false,
config :pleroma, :manifest,
icons: [
%{
- src: "/static/logo.png",
- type: "image/png"
+ src: "/static/logo.svg",
+ type: "image/svg+xml"
}
],
theme_color: "#282c37",
config :pleroma, :activitypub,
unfollow_blocked: true,
outgoing_blocks: true,
+ blockers_visible: true,
follow_handshake_timeout: 500,
note_replies_output_limit: 5,
sign_object_fetches: true,
- authorized_fetch_mode: false
+ authorized_fetch_mode: false,
+ max_collection_objects: 50
config :pleroma, :streamer,
workers: 3,
federated_timeline_removal: [],
report_removal: [],
reject: [],
+ followers_only: [],
accept: [],
avatar_removal: [],
banner_removal: [],
federated_timeline_removal: [],
replace: []
+config :pleroma, :mrf_hashtag,
+ sensitive: ["nsfw"],
+ reject: [],
+ federated_timeline_removal: []
+
config :pleroma, :mrf_subchain, match_actor: %{}
config :pleroma, :mrf_activity_expiration, days: 365
accept: [],
reject: []
+# threshold of 7 days
config :pleroma, :mrf_object_age,
- threshold: 172_800,
+ threshold: 604_800,
actions: [:delist, :strip_followers]
+config :pleroma, :mrf_follow_bot, follower_nickname: nil
+
config :pleroma, :rich_media,
enabled: true,
ignore_hosts: [],
Pleroma.Web.RichMedia.Parsers.TwitterCard,
Pleroma.Web.RichMedia.Parsers.OEmbed
],
+ failure_backoff: 60_000,
ttl_setters: [Pleroma.Web.RichMedia.Parser.TTL.AwsSignedUrl]
config :pleroma, :media_proxy,
proxy_opts: [
redirect_on_failure: false,
max_body_length: 25 * 1_048_576,
- http: [
- follow_redirect: true,
- pool: :media
- ]
+ # Note: max_read_duration defaults to Pleroma.ReverseProxy.max_read_duration_default/1
+ max_read_duration: 30_000
],
whitelist: []
headers: [],
options: []
-config :pleroma, Pleroma.Web.MediaProxy.Invalidation.Script, script_path: nil
+config :pleroma, Pleroma.Web.MediaProxy.Invalidation.Script,
+ script_path: nil,
+ url_format: nil
+
+# Note: media preview proxy depends on media proxy to be enabled
+config :pleroma, :media_preview_proxy,
+ enabled: false,
+ thumbnail_max_width: 600,
+ thumbnail_max_height: 600,
+ image_quality: 85,
+ min_content_length: 100 * 1024
-config :pleroma, :chat, enabled: true
+config :pleroma, :shout,
+ enabled: true,
+ limit: 5_000
-config :phoenix, :format_encoders, json: Jason
+config :phoenix, :format_encoders, json: Jason, "activity+json": Jason
config :phoenix, :json_library, Jason
config :phoenix, :filter_parameters, ["password", "confirm"]
-config :pleroma, :gopher,
- enabled: false,
- ip: {0, 0, 0, 0},
- port: 9999
-
config :pleroma, Pleroma.Web.Metadata,
providers: [
Pleroma.Web.Metadata.Providers.OpenGraph,
- Pleroma.Web.Metadata.Providers.TwitterCard,
- Pleroma.Web.Metadata.Providers.RelMe,
- Pleroma.Web.Metadata.Providers.Feed
+ Pleroma.Web.Metadata.Providers.TwitterCard
],
unfurl_nsfw: false
+config :pleroma, Pleroma.Web.Metadata.Providers.Theme, theme_color: "#593196"
+
config :pleroma, Pleroma.Web.Preload,
providers: [
Pleroma.Web.Preload.Providers.Instance
"~",
"about",
"activities",
+ "akkoma",
"api",
"auth",
"check_password",
"user-search",
"user_exists",
"users",
- "web"
- ]
+ "web",
+ "verify_credentials",
+ "update_credentials",
+ "relationships",
+ "search",
+ "confirmation_resend",
+ "mfa"
+ ],
+ email_blacklist: []
config :pleroma, Oban,
repo: Pleroma.Repo,
log: false,
queues: [
activity_expiration: 10,
+ token_expiration: 5,
+ filter_expiration: 1,
+ backup: 1,
federator_incoming: 50,
federator_outgoing: 50,
+ ingestion_queue: 50,
web_push: 50,
mailer: 10,
transmogrifier: 20,
scheduled_activities: 10,
+ poll_notifications: 10,
background: 5,
remote_fetcher: 2,
- attachments_cleanup: 5,
- new_users_digest: 1
+ attachments_cleanup: 1,
+ new_users_digest: 1,
+ mute_expire: 5,
+ search_indexing: 10
],
plugins: [Oban.Plugins.Pruner],
crontab: [
- {"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}
]
config :pleroma, :workers,
retries: [
federator_incoming: 5,
- federator_outgoing: 5
+ federator_outgoing: 5,
+ search_indexing: 2
]
config :pleroma, Pleroma.Formatter,
extra: true,
validate_tld: :no_scheme
-config :pleroma, :ldap,
- enabled: System.get_env("LDAP_ENABLED") == "true",
- host: System.get_env("LDAP_HOST") || "localhost",
- port: String.to_integer(System.get_env("LDAP_PORT") || "389"),
- ssl: System.get_env("LDAP_SSL") == "true",
- sslopts: [],
- tls: System.get_env("LDAP_TLS") == "true",
- tlsopts: [],
- base: System.get_env("LDAP_BASE") || "dc=example,dc=com",
- uid: System.get_env("LDAP_UID") || "cn"
-
-config :esshd,
- enabled: false
-
oauth_consumer_strategies =
- System.get_env("OAUTH_CONSUMER_STRATEGIES")
+ "OAUTH_CONSUMER_STRATEGIES"
+ |> System.get_env()
|> to_string()
|> String.split()
|> Enum.map(&hd(String.split(&1, ":")))
base_path: "/oauth",
providers: ueberauth_providers
-config :pleroma,
- :auth,
- enforce_oauth_admin_scope_usage: true,
- oauth_consumer_strategies: oauth_consumer_strategies
+config :pleroma, :auth, oauth_consumer_strategies: oauth_consumer_strategies
config :pleroma, Pleroma.Emails.Mailer, adapter: Swoosh.Adapters.Sendmail, enabled: false
config :pleroma, Pleroma.Emails.NewUsersDigestEmail, enabled: false
-config :prometheus, Pleroma.Web.Endpoint.MetricsExporter, path: "/api/pleroma/app_metrics"
+config :prometheus, Pleroma.Web.Endpoint.MetricsExporter,
+ enabled: false,
+ auth: false,
+ ip_whitelist: [],
+ path: "/api/pleroma/app_metrics",
+ format: :text
config :pleroma, Pleroma.ScheduledActivity,
daily_user_limit: 25,
}
config :pleroma, :oauth2,
- token_expires_in: 600,
+ token_expires_in: 3600 * 24 * 365 * 100,
issue_new_refresh_token: true,
clean_expired_tokens: false
config :pleroma, :database, rum_enabled: false
+config :pleroma, :features, improved_hashtag_timeline: :auto
+
+config :pleroma, :populate_hashtags_table, fault_rate_allowance: 0.01
+
config :pleroma, :env, Mix.env()
config :http_signatures,
account_confirmation_resend: {8_640_000, 5},
ap_routes: {60_000, 15}
-config :pleroma, Pleroma.ActivityExpiration, enabled: true
+config :pleroma, Pleroma.Workers.PurgeExpiredActivity, enabled: true, min_lifetime: 600
-config :pleroma, Pleroma.Plugs.RemoteIp, enabled: true
+config :pleroma, Pleroma.Web.Plugs.RemoteIp,
+ enabled: true,
+ headers: ["x-forwarded-for"],
+ proxies: [],
+ reserved: [
+ "127.0.0.0/8",
+ "::1/128",
+ "fc00::/7",
+ "10.0.0.0/8",
+ "172.16.0.0/12",
+ "192.168.0.0/16"
+ ]
config :pleroma, :static_fe, enabled: false
+# Example of frontend configuration
+# This example will make us serve the primary frontend from the
+# frontends directory within your `:pleroma, :instance, static_dir`.
+# e.g., instance/static/frontends/pleroma/develop/
+#
+# With no frontend configuration, the bundled files from the `static` directory will
+# be used.
+#
+# config :pleroma, :frontends,
+# primary: %{"name" => "pleroma-fe", "ref" => "develop"},
+# admin: %{"name" => "admin-fe", "ref" => "stable"},
+# mastodon: %{"enabled" => true, "name" => "mastodon-fe", "ref" => "develop"}
+# available: %{...}
+
+config :pleroma, :frontends,
+ primary: %{"name" => "pleroma-fe", "ref" => "stable"},
+ admin: %{"name" => "admin-fe", "ref" => "stable"},
+ mastodon: %{"name" => "mastodon-fe", "ref" => "akkoma"},
+ swagger: %{
+ "name" => "swagger-ui",
+ "ref" => "stable",
+ "enabled" => false
+ },
+ available: %{
+ "pleroma-fe" => %{
+ "name" => "pleroma-fe",
+ "git" => "https://akkoma.dev/AkkomaGang/pleroma-fe",
+ "build_url" =>
+ "https://akkoma-updates.s3-website.fr-par.scw.cloud/frontend/${ref}/akkoma-fe.zip",
+ "ref" => "stable",
+ "build_dir" => "dist"
+ },
+ # Mastodon-Fe cannot be set as a primary - this is only here so we can update this seperately
+ "mastodon-fe" => %{
+ "name" => "mastodon-fe",
+ "git" => "https://akkoma.dev/AkkomaGang/masto-fe",
+ "build_url" =>
+ "https://akkoma-updates.s3-website.fr-par.scw.cloud/frontend/${ref}/masto-fe.zip",
+ "build_dir" => "distribution",
+ "ref" => "akkoma"
+ },
+ "admin-fe" => %{
+ "name" => "admin-fe",
+ "git" => "https://akkoma.dev/AkkomaGang/admin-fe",
+ "build_url" =>
+ "https://akkoma-updates.s3-website.fr-par.scw.cloud/frontend/${ref}/admin-fe.zip",
+ "ref" => "stable"
+ },
+ "soapbox-fe" => %{
+ "name" => "soapbox-fe",
+ "git" => "https://gitlab.com/soapbox-pub/soapbox-fe",
+ "build_url" =>
+ "https://gitlab.com/soapbox-pub/soapbox-fe/-/jobs/artifacts/${ref}/download?job=build-production",
+ "ref" => "v1.0.0",
+ "build_dir" => "static"
+ },
+ # For developers - enables a swagger frontend to view the openapi spec
+ "swagger-ui" => %{
+ "name" => "swagger-ui",
+ "git" => "https://github.com/swagger-api/swagger-ui",
+ "build_url" => "https://akkoma-updates.s3-website.fr-par.scw.cloud/frontend/swagger-ui.zip",
+ "build_dir" => "dist",
+ "ref" => "stable"
+ }
+ }
+
config :pleroma, :web_cache_ttl,
activity_pub: nil,
activity_pub_question: 30_000
parameters: [gin_fuzzy_search_limit: "500"],
prepare: :unnamed
-config :pleroma, :connections_pool,
- reclaim_multiplier: 0.1,
- connection_acquisition_wait: 250,
- connection_acquisition_retries: 5,
- max_connections: 250,
- max_idle_time: 30_000,
- retry: 0,
- await_up_timeout: 5_000
-
-config :pleroma, :pools,
- federation: [
- size: 50,
- max_waiting: 10
- ],
- media: [
- size: 50,
- max_waiting: 10
- ],
- upload: [
- size: 25,
- max_waiting: 5
- ],
- default: [
- size: 10,
- max_waiting: 2
- ]
+config :pleroma, :majic_pool, size: 2
-config :pleroma, :hackney_pools,
- federation: [
- max_connections: 50,
- timeout: 150_000
- ],
- media: [
- max_connections: 50,
- timeout: 150_000
- ],
- upload: [
- max_connections: 25,
- timeout: 300_000
- ]
+private_instance? = :if_instance_is_private
config :pleroma, :restrict_unauthenticated,
- timelines: %{local: false, federated: false},
- profiles: %{local: false, remote: false},
- activities: %{local: false, remote: false}
+ timelines: %{local: private_instance?, federated: private_instance?},
+ profiles: %{local: private_instance?, remote: private_instance?},
+ activities: %{local: private_instance?, remote: private_instance?}
config :pleroma, Pleroma.Web.ApiSpec.CastAndValidate, strict: false
config :pleroma, :mrf,
- policies: Pleroma.Web.ActivityPub.MRF.NoOpPolicy,
+ policies: [Pleroma.Web.ActivityPub.MRF.ObjectAgePolicy, Pleroma.Web.ActivityPub.MRF.TagPolicy],
transparency: true,
transparency_exclusions: []
-config :tzdata, :http_client, Pleroma.HTTP.Tzdata
-
config :ex_aws, http_client: Pleroma.HTTP.ExAws
+config :web_push_encryption, http_client: Pleroma.HTTP.WebPush
+
config :pleroma, :instances_favicons, enabled: false
+config :floki, :html_parser, Floki.HTMLParser.FastHtml
+
+config :pleroma, Pleroma.Web.Auth.Authenticator, Pleroma.Web.Auth.PleromaAuthenticator
+
+config :pleroma, Pleroma.User.Backup,
+ purge_after_days: 30,
+ limit_days: 7,
+ dir: nil
+
+config :pleroma, ConcurrentLimiter, [
+ {Pleroma.Web.RichMedia.Helpers, [max_running: 5, max_waiting: 5]},
+ {Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy, [max_running: 5, max_waiting: 5]},
+ {Pleroma.Search, [max_running: 30, max_waiting: 50]}
+]
+
+config :pleroma, Pleroma.Search, module: Pleroma.Search.DatabaseSearch
+
+config :pleroma, Pleroma.Search.Meilisearch,
+ url: "http://127.0.0.1:7700/",
+ private_key: nil,
+ initial_indexing_chunk_size: 100_000
+
+config :pleroma, Pleroma.Search.Elasticsearch.Cluster,
+ url: "http://localhost:9200",
+ username: "elastic",
+ password: "changeme",
+ api: Elasticsearch.API.HTTP,
+ json_library: Jason,
+ indexes: %{
+ activities: %{
+ settings: "priv/es-mappings/activity.json",
+ store: Pleroma.Search.Elasticsearch.Store,
+ sources: [Pleroma.Activity],
+ bulk_page_size: 1000,
+ bulk_wait_interval: 15_000
+ }
+ }
+
# Import environment specific config. This must remain at the bottom
# of this file so it overrides the configuration defined above.
import_config "#{Mix.env()}.exs"