Merge branch 'develop' of https://git.pleroma.social/pleroma/pleroma into develop
[akkoma] / config / description.exs
index d5322fa3378b3e54827a59ad968cbbec6ffc1afb..807c945e00ca990b3f44bdecf0e77b6f2f40f154 100644 (file)
@@ -28,7 +28,8 @@ config :pleroma, :config_description, [
       %{
         key: :filters,
         type: {:list, :module},
-        description: "List of filter modules for uploads",
+        description:
+          "List of filter modules for uploads. Module names are shortened (removed leading `Pleroma.Upload.Filter.` part), but on adding custom module you need to use full name.",
         suggestions:
           Generator.list_modules_in_dir(
             "lib/pleroma/upload/filter",
@@ -101,7 +102,7 @@ config :pleroma, :config_description, [
                       %{
                         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"]
                       }
                     ]
@@ -118,6 +119,11 @@ config :pleroma, :config_description, [
             ]
           }
         ]
+      },
+      %{
+        key: :filename_display_max_length,
+        type: :integer,
+        description: "Set max length of a filename to display. 0 = no limit. Default: 30"
       }
     ]
   },
@@ -534,7 +540,8 @@ config :pleroma, :config_description, [
       %{
         key: :description,
         type: :string,
-        description: "The instance's description, can be seen in nodeinfo and /api/v1/instance",
+        description:
+          "The instance's description. It can be seen in nodeinfo and `/api/v1/instance`",
         suggestions: [
           "Very cool instance"
         ]
@@ -661,7 +668,7 @@ config :pleroma, :config_description, [
         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
@@ -677,14 +684,6 @@ config :pleroma, :config_description, [
           7
         ]
       },
-      %{
-        key: :federation_publisher_modules,
-        type: {:list, :module},
-        description: "List of modules for federation publishing",
-        suggestions: [
-          Pleroma.Web.ActivityPub.Publisher
-        ]
-      },
       %{
         key: :allow_relay,
         type: :boolean,
@@ -693,7 +692,8 @@ config :pleroma, :config_description, [
       %{
         key: :rewrite_policy,
         type: [:module, {:list, :module}],
-        description: "A list of MRF policies enabled",
+        description:
+          "A list of enabled MRF policies. Module names are shortened (removed leading `Pleroma.Web.ActivityPub.MRF.` part), but on adding custom module you need to use full name.",
         suggestions:
           Generator.list_modules_in_dir(
             "lib/pleroma/web/activity_pub/mrf",
@@ -711,7 +711,7 @@ config :pleroma, :config_description, [
         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 sent",
         suggestions: [
           "quarantined.com",
           "*.quarantined.com"
@@ -770,7 +770,7 @@ config :pleroma, :config_description, [
         key: :cleanup_attachments,
         type: :boolean,
         description: """
-        "Enable to remove associated attachments when status is removed.
+        Enable to remove associated attachments when status is removed.
         This will not affect duplicates and attachments without status.
         Enabling this will increase load to database when deleting statuses on larger instances.
         """
@@ -838,7 +838,7 @@ config :pleroma, :config_description, [
       %{
         key: :healthcheck,
         type: :boolean,
-        description: "If enabled, system data will be shown on /api/pleroma/healthcheck"
+        description: "If enabled, system data will be shown on `/api/pleroma/healthcheck`"
       },
       %{
         key: :remote_post_retention_days,
@@ -918,6 +918,69 @@ config :pleroma, :config_description, [
         key: :external_user_synchronization,
         type: :boolean,
         description: "Enabling following/followers counters synchronization for external users"
+      },
+      %{
+        key: :multi_factor_authentication,
+        type: :keyword,
+        description: "Multi-factor authentication settings",
+        suggestions: [
+          [
+            totp: [digits: 6, period: 30],
+            backup_codes: [number: 5, length: 16]
+          ]
+        ],
+        children: [
+          %{
+            key: :totp,
+            type: :keyword,
+            description: "TOTP settings",
+            suggestions: [digits: 6, period: 30],
+            children: [
+              %{
+                key: :digits,
+                type: :integer,
+                suggestions: [6],
+                description:
+                  "Determines the length of a one-time pass-code, in characters. Defaults to 6 characters."
+              },
+              %{
+                key: :period,
+                type: :integer,
+                suggestions: [30],
+                description:
+                  "a period for which the TOTP code will be valid, in seconds. Defaults to 30 seconds."
+              }
+            ]
+          },
+          %{
+            key: :backup_codes,
+            type: :keyword,
+            description: "MFA backup codes settings",
+            suggestions: [number: 5, length: 16],
+            children: [
+              %{
+                key: :number,
+                type: :integer,
+                suggestions: [5],
+                description: "number of backup codes to generate."
+              },
+              %{
+                key: :length,
+                type: :integer,
+                suggestions: [16],
+                description:
+                  "Determines the length of backup one-time pass-codes, in characters. Defaults to 16 characters."
+              }
+            ]
+          }
+        ]
+      },
+      %{
+        key: :instance_thumbnail,
+        type: :string,
+        description:
+          "The instance thumbnail image. It will appear in [Pleroma Instances](http://distsn.org/pleroma-instances.html)",
+        suggestions: ["/instance/thumbnail.jpeg"]
       }
     ]
   },
@@ -1045,38 +1108,41 @@ config :pleroma, :config_description, [
         description: "Settings for Pleroma FE",
         suggestions: [
           %{
-            theme: "pleroma-dark",
-            logo: "/static/logo.png",
-            background: "/images/city.jpg",
-            redirectRootNoLogin: "/main/all",
-            redirectRootLogin: "/main/friends",
-            showInstanceSpecificPanel: true,
-            scopeOptionsEnabled: false,
-            formattingOptionsEnabled: false,
+            alwaysShowSubjectInput: true,
+            background: "/static/aurora_borealis.jpg",
             collapseMessageWithSubject: false,
+            disableChat: false,
+            greentext: false,
+            hideFilteredStatuses: false,
+            hideMutedPosts: false,
             hidePostStats: false,
+            hideSitename: false,
             hideUserStats: false,
+            loginMethod: "password",
+            logo: "/static/logo.png",
+            logoMargin: ".1em",
+            logoMask: true,
+            minimalScopesMode: false,
+            noAttachmentLinks: false,
+            nsfwCensorImage: "/static/img/nsfw.74818f9.png",
+            postContentType: "text/plain",
+            redirectRootLogin: "/main/friends",
+            redirectRootNoLogin: "/main/all",
             scopeCopy: true,
+            sidebarRight: false,
+            showFeaturesPanel: true,
+            showInstanceSpecificPanel: false,
             subjectLineBehavior: "email",
-            alwaysShowSubjectInput: true,
-            logoMask: false,
-            logoMargin: ".1em",
-            stickers: false,
-            enableEmojiPicker: false
+            theme: "pleroma-dark",
+            webPushNotifications: false
           }
         ],
         children: [
           %{
-            key: :theme,
-            type: :string,
-            description: "Which theme to use, they are defined in styles.json",
-            suggestions: ["pleroma-dark"]
-          },
-          %{
-            key: :logo,
-            type: :string,
-            description: "URL of the logo, defaults to Pleroma's logo",
-            suggestions: ["/static/logo.png"]
+            key: :alwaysShowSubjectInput,
+            label: "Always show subject input",
+            type: :boolean,
+            description: "When disabled, auto-hide the subject field if it's empty"
           },
           %{
             key: :background,
@@ -1086,46 +1152,35 @@ config :pleroma, :config_description, [
             suggestions: ["/images/city.jpg"]
           },
           %{
-            key: :redirectRootNoLogin,
-            label: "Redirect root no login",
-            type: :string,
-            description:
-              "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,
+            key: :collapseMessageWithSubject,
+            label: "Collapse message with subject",
+            type: :boolean,
             description:
-              "Relative URL which indicates where to redirect when a user is logged in",
-            suggestions: ["/main/friends"]
+              "When a message has a subject (aka Content Warning), collapse it by default"
           },
           %{
-            key: :showInstanceSpecificPanel,
-            label: "Show instance specific panel",
+            key: :disableChat,
+            label: "PleromaFE Chat",
             type: :boolean,
-            description: "Whenether to show the instance's specific panel"
+            description: "Disables PleromaFE Chat component"
           },
           %{
-            key: :scopeOptionsEnabled,
-            label: "Scope options enabled",
+            key: :greentext,
+            label: "Greentext",
             type: :boolean,
-            description: "Enable setting a notice visibility and subject/CW when posting"
+            description: "Enables green text on lines prefixed with the > character."
           },
           %{
-            key: :formattingOptionsEnabled,
-            label: "Formatting options enabled",
+            key: :hideFilteredStatuses,
+            label: "Hide Filtered Statuses",
             type: :boolean,
-            description:
-              "Enable setting a formatting different than plain-text (ie. HTML, Markdown) when posting, relates to `:instance`, `allowed_post_formats`"
+            description: "Hides filtered statuses from timelines."
           },
           %{
-            key: :collapseMessageWithSubject,
-            label: "Collapse message with subject",
+            key: :hideMutedPosts,
+            label: "Hide Muted Posts",
             type: :boolean,
-            description:
-              "When a message has a subject (aka Content Warning), collapse it by default"
+            description: "Hides muted statuses from timelines."
           },
           %{
             key: :hidePostStats,
@@ -1133,6 +1188,12 @@ config :pleroma, :config_description, [
             type: :boolean,
             description: "Hide notices statistics (repeats, favorites, ...)"
           },
+          %{
+            key: :hideSitename,
+            label: "Hide Sitename",
+            type: :boolean,
+            description: "Hides instance name from PleromaFE banner."
+          },
           %{
             key: :hideUserStats,
             label: "Hide user stats",
@@ -1141,26 +1202,19 @@ config :pleroma, :config_description, [
               "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",
+            key: :logo,
             type: :string,
-            description: "Allows changing the default behaviour of subject lines in replies.
-          `email`: copy and preprend re:, as in email,
-          `masto`: copy verbatim, as in Mastodon,
-          `noop`: don't copy the subject.",
-            suggestions: ["email", "masto", "noop"]
+            description: "URL of the logo, defaults to Pleroma's logo",
+            suggestions: ["/static/logo.png"]
           },
           %{
-            key: :alwaysShowSubjectInput,
-            label: "Always show subject input",
-            type: :boolean,
-            description: "When disabled, auto-hide the subject field if it's empty"
+            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: :logoMask,
@@ -1171,24 +1225,84 @@ config :pleroma, :config_description, [
                 "If you want a colorful logo you must disable logoMask."
           },
           %{
-            key: :logoMargin,
-            label: "Logo margin",
+            key: :minimalScopesMode,
+            label: "Minimal scopes mode",
+            type: :boolean,
+            description:
+              "Limit scope selection to Direct, User default, and Scope of post replying to. " <>
+                "Also prevents replying to a DM with a public post from PleromaFE."
+          },
+          %{
+            key: :nsfwCensorImage,
+            label: "NSFW Censor Image",
             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"]
+              "URL of the image to use for hiding NSFW media attachments in the timeline.",
+            suggestions: ["/static/img/nsfw.74818f9.png"]
+          },
+          %{
+            key: :postContentType,
+            label: "Post Content Type",
+            type: {:dropdown, :atom},
+            description: "Default post formatting option.",
+            suggestions: ["text/plain", "text/html", "text/markdown", "text/bbcode"]
+          },
+          %{
+            key: :redirectRootNoLogin,
+            label: "Redirect root no login",
+            type: :string,
+            description:
+              "Relative URL which indicates where to redirect when a user isn't logged in",
+            suggestions: ["/main/all"]
+          },
+          %{
+            key: :redirectRootLogin,
+            label: "Redirect root login",
+            type: :string,
+            description:
+              "Relative URL which indicates where to redirect when a user is logged in",
+            suggestions: ["/main/friends"]
+          },
+          %{
+            key: :scopeCopy,
+            label: "Scope copy",
+            type: :boolean,
+            description: "Copy the scope (private/unlisted/public) in replies to posts by default"
+          },
+          %{
+            key: :sidebarRight,
+            label: "Sidebar on Right",
+            type: :boolean,
+            description: "Change alignment of sidebar and panels to the right."
           },
           %{
-            key: :stickers,
+            key: :showFeaturesPanel,
+            label: "Show instance features panel",
             type: :boolean,
-            description: "Enables stickers."
+            description:
+              "Enables panel displaying functionality of the instance on the About page."
           },
           %{
-            key: :enableEmojiPicker,
-            label: "Emoji picker",
+            key: :showInstanceSpecificPanel,
+            label: "Show instance specific panel",
             type: :boolean,
-            description: "Enables emoji picker."
+            description: "Whether to show the instance's custom panel"
+          },
+          %{
+            key: :subjectLineBehavior,
+            label: "Subject line behavior",
+            type: :string,
+            description: "Allows changing the default behaviour of subject lines in replies.
+          `email`: copy and preprend re:, as in email,
+          `masto`: copy verbatim, as in Mastodon,
+          `noop`: don't copy the subject.",
+            suggestions: ["email", "masto", "noop"]
+          },
+          %{
+            key: :theme,
+            type: :string,
+            description: "Which theme to use. Available themes are defined in styles.json",
+            suggestions: ["pleroma-dark"]
           }
         ]
       },
@@ -1244,6 +1358,12 @@ config :pleroma, :config_description, [
         suggestions: [
           :pleroma_fox_tan
         ]
+      },
+      %{
+        key: :default_user_avatar,
+        type: :string,
+        description: "URL of the default user avatar.",
+        suggestions: ["/images/avi.png"]
       }
     ]
   },
@@ -1296,14 +1416,14 @@ config :pleroma, :config_description, [
       %{
         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"]
       },
       %{
@@ -1316,13 +1436,13 @@ config :pleroma, :config_description, [
       %{
         key: :reject,
         type: {:list, :string},
-        description: "List of instances to reject any activities from",
+        description: "List of instances to reject activities from (except deletes)",
         suggestions: ["example.com", "*.example.com"]
       },
       %{
         key: :accept,
         type: {:list, :string},
-        description: "List of instances to accept any activities from",
+        description: "List of instances to only accept activities from (except deletes)",
         suggestions: ["example.com", "*.example.com"]
       },
       %{
@@ -1342,6 +1462,12 @@ config :pleroma, :config_description, [
         type: {:list, :string},
         description: "List of instances to strip banners from",
         suggestions: ["example.com", "*.example.com"]
+      },
+      %{
+        key: :reject_deletes,
+        type: {:list, :string},
+        description: "List of instances to reject deletions from",
+        suggestions: ["example.com", "*.example.com"]
       }
     ]
   },
@@ -1422,21 +1548,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: [{: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"}]
       }
     ]
@@ -1451,7 +1577,7 @@ config :pleroma, :config_description, [
       %{
         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"]
       }
     ]
@@ -1616,203 +1742,55 @@ config :pleroma, :config_description, [
   },
   %{
     group: :pleroma,
-    key: Pleroma.Web.Endpoint,
+    key: :activitypub,
     type: :group,
-    description: "Phoenix endpoint configuration",
+    description: "ActivityPub-related settings",
     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: :unfollow_blocked,
+        type: :boolean,
+        description: "Whether blocks result in people getting unfollowed"
       },
       %{
-        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: :outgoing_blocks,
+        type: :boolean,
+        description: "Whether to federate blocks to other instances"
       },
       %{
-        key: :instrumenters,
-        type: {:list, :module},
-        suggestions: [Pleroma.Web.Endpoint.Instrumenter]
+        key: :sign_object_fetches,
+        type: :boolean,
+        description: "Sign object fetches with HTTP signatures"
       },
       %{
-        key: :protocol,
-        type: :string,
-        suggestions: ["https"]
+        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: :secret_key_base,
-        type: :string,
-        suggestions: ["aK4Abxf29xU9TTDKre9coZPUgevcVCFQJe/5xP/7Lt4BEif6idBIbjupVbOrbKxl"]
+        key: :follow_handshake_timeout,
+        type: :integer,
+        description: "Following handshake timeout",
+        suggestions: [500]
+      }
+    ]
+  },
+  %{
+    group: :pleroma,
+    key: :http_security,
+    type: :group,
+    description: "HTTP security settings",
+    children: [
+      %{
+        key: :enabled,
+        type: :boolean,
+        description: "Whether the managed content security policy is enabled"
       },
       %{
-        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: :group,
-    description: "ActivityPub-related settings",
-    children: [
-      %{
-        key: :unfollow_blocked,
-        type: :boolean,
-        description: "Whether blocks result in people getting unfollowed"
-      },
-      %{
-        key: :outgoing_blocks,
-        type: :boolean,
-        description: "Whether to federate blocks to other instances"
-      },
-      %{
-        key: :sign_object_fetches,
-        type: :boolean,
-        description: "Sign object fetches with HTTP signatures"
-      },
-      %{
-        key: :follow_handshake_timeout,
-        type: :integer,
-        description: "Following handshake timeout",
-        suggestions: [500]
-      }
-    ]
-  },
-  %{
-    group: :pleroma,
-    key: :http_security,
-    type: :group,
-    description: "HTTP security settings",
-    children: [
-      %{
-        key: :enabled,
-        type: :boolean,
-        description: "Whether the managed content security policy is enabled"
-      },
-      %{
-        key: :sts,
-        label: "STS",
-        type: :boolean,
-        description: "Whether to additionally send a Strict-Transport-Security header"
+        key: :sts,
+        label: "STS",
+        type: :boolean,
+        description: "Whether to additionally send a Strict-Transport-Security header"
       },
       %{
         key: :sts_max_age,
@@ -1855,9 +1833,8 @@ config :pleroma, :config_description, [
         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,
@@ -1924,26 +1901,7 @@ config :pleroma, :config_description, [
         key: :admin_token,
         type: :string,
         description: "Token",
-        suggestions: ["some_random_token"]
-      }
-    ]
-  },
-  %{
-    group: :pleroma_job_queue,
-    key: :queues,
-    type: :group,
-    description: "[Deprecated] Replaced with `Oban`/`:queues` (keeping the same format)"
-  },
-  %{
-    group: :pleroma,
-    key: Pleroma.Web.Federator.RetryQueue,
-    type: :group,
-    description: "[Deprecated] See `Oban` and `:workers` sections for configuration notes",
-    children: [
-      %{
-        key: :max_retries,
-        type: :integer,
-        description: "[Deprecated] Replaced as `Oban`/`:queues`/`:outgoing_federation` value"
+        suggestions: ["We recommend a secure random string or UUID"]
       }
     ]
   },
@@ -1960,12 +1918,6 @@ config :pleroma, :config_description, [
       (see https://github.com/sorentwo/oban/issues/52).
     """,
     children: [
-      %{
-        key: :repo,
-        type: :module,
-        description: "Application's Ecto repo",
-        suggestions: [Pleroma.Repo]
-      },
       %{
         key: :verbose,
         type: {:dropdown, :atom},
@@ -1986,6 +1938,7 @@ config :pleroma, :config_description, [
           "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,
@@ -2001,6 +1954,12 @@ config :pleroma, :config_description, [
             description: "Activity expiration queue",
             suggestions: [10]
           },
+          %{
+            key: :attachments_cleanup,
+            type: :integer,
+            description: "Attachment deletion queue",
+            suggestions: [5]
+          },
           %{
             key: :background,
             type: :integer,
@@ -2044,6 +2003,18 @@ config :pleroma, :config_description, [
             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}
+        ]
       }
     ]
   },
@@ -2099,7 +2070,7 @@ config :pleroma, :config_description, [
       %{
         key: :enabled,
         type: :boolean,
-        description: "Enables/disables RichMedia."
+        description: "Enables RichMedia parsing of URLs."
       },
       %{
         key: :ignore_hosts,
@@ -2117,7 +2088,8 @@ config :pleroma, :config_description, [
       %{
         key: :parsers,
         type: {:list, :module},
-        description: "List of Rich Media parsers.",
+        description:
+          "List of Rich Media parsers. Module names are shortened (removed leading `Pleroma.Web.RichMedia.Parsers.` part), but on adding custom module you need to use full name.",
         suggestions: [
           Pleroma.Web.RichMedia.Parsers.MetaTagsParser,
           Pleroma.Web.RichMedia.Parsers.OEmbed,
@@ -2129,33 +2101,14 @@ config :pleroma, :config_description, [
         key: :ttl_setters,
         label: "TTL setters",
         type: {:list, :module},
-        description: "List of rich media TTL setters.",
+        description:
+          "List of rich media TTL setters. Module names are shortened (removed leading `Pleroma.Web.RichMedia.Parser.` part), but on adding custom module you need to use full name.",
         suggestions: [
           Pleroma.Web.RichMedia.Parser.TTL.AwsSignedUrl
         ]
       }
     ]
   },
-  %{
-    group: :pleroma,
-    key: :fetch_initial_posts,
-    type: :group,
-    description: "Fetching initial posts settings",
-    children: [
-      %{
-        key: :enabled,
-        type: :boolean,
-        description:
-          "If enabled, when a new user is federated with, fetch some of their latest posts"
-      },
-      %{
-        key: :pages,
-        type: :integer,
-        description: "The amount of pages to fetch",
-        suggestions: [5]
-      }
-    ]
-  },
   %{
     group: :auto_linker,
     key: :opts,
@@ -2165,13 +2118,13 @@ 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. 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]
       },
       %{
@@ -2281,7 +2234,7 @@ config :pleroma, :config_description, [
         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,
@@ -2308,7 +2261,7 @@ config :pleroma, :config_description, [
         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,
@@ -2358,7 +2311,7 @@ config :pleroma, :config_description, [
         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."
       },
       %{
@@ -2380,7 +2333,7 @@ config :pleroma, :config_description, [
         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"]
@@ -2409,6 +2362,7 @@ config :pleroma, :config_description, [
         children: [
           %{
             key: :active,
+            label: "Enabled",
             type: :boolean,
             description: "Globally enable or disable digest emails"
           },
@@ -2496,6 +2450,20 @@ config :pleroma, :config_description, [
       }
     ]
   },
+  %{
+    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,
@@ -2517,7 +2485,7 @@ config :pleroma, :config_description, [
       %{
         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."
       }
     ]
   },
@@ -2568,19 +2536,6 @@ config :pleroma, :config_description, [
       }
     ]
   },
-  %{
-    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,
@@ -2594,6 +2549,12 @@ config :pleroma, :config_description, [
         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}],
@@ -2603,7 +2564,7 @@ config :pleroma, :config_description, [
       %{
         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}]]
       },
       %{
@@ -2719,19 +2680,6 @@ config :pleroma, :config_description, [
       }
     ]
   },
-  %{
-    group: :tesla,
-    type: :group,
-    description: "Tesla settings",
-    children: [
-      %{
-        key: :adapter,
-        type: :module,
-        description: "Tesla adapter",
-        suggestions: [Tesla.Adapter.Hackney, Tesla.Adapter.Gun]
-      }
-    ]
-  },
   %{
     group: :pleroma,
     key: :chat,
@@ -2744,32 +2692,6 @@ config :pleroma, :config_description, [
       }
     ]
   },
-  %{
-    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,
-    description: "HTTP Signatures settings",
-    children: [
-      %{
-        key: :adapter,
-        type: :module,
-        suggestions: [Pleroma.Signature]
-      }
-    ]
-  },
   %{
     group: :pleroma,
     key: :http,
@@ -2842,6 +2764,8 @@ config :pleroma, :config_description, [
       %{
         key: :scrub_policy,
         type: {:list, :module},
+        description:
+          "Module names are shortened (removed leading `Pleroma.HTML.` part), but on adding custom module you need to use full name.",
         suggestions: [Pleroma.HTML.Transform.MediaProxy, Pleroma.HTML.Scrubber.Default]
       }
     ]
@@ -2963,7 +2887,7 @@ config :pleroma, :config_description, [
       %{
         key: :enabled,
         type: :boolean,
-        description: "Enable/disable the plug. Default: `false`."
+        description: "Enable/disable the plug. Default: disabled."
       },
       %{
         key: :headers,
@@ -3017,7 +2941,7 @@ config :pleroma, :config_description, [
       %{
         key: :enabled,
         type: :boolean,
-        description: "Enables the rendering of static HTML. Defaults to `false`."
+        description: "Enables the rendering of static HTML. Default: disabled."
       }
     ]
   },
@@ -3025,7 +2949,7 @@ config :pleroma, :config_description, [
     group: :pleroma,
     key: :feed,
     type: :group,
-    description: "Configure feed rendering.",
+    description: "Configure feed rendering",
     children: [
       %{
         key: :post_title,
@@ -3075,7 +2999,7 @@ config :pleroma, :config_description, [
     group: :pleroma,
     key: :modules,
     type: :group,
-    description: "Custom Runtime Modules.",
+    description: "Custom Runtime Modules",
     children: [
       %{
         key: :runtime_dir,
@@ -3086,14 +3010,308 @@ config :pleroma, :config_description, [
   },
   %{
     group: :pleroma,
+    key: :streamer,
+    type: :group,
+    description: "Settings for notifications streamer",
+    children: [
+      %{
+        key: :workers,
+        type: :integer,
+        description: "Number of workers to send notifications.",
+        suggestions: [3]
+      },
+      %{
+        key: :overflow_workers,
+        type: :integer,
+        description: "Maximum number of workers created if pool is empty.",
+        suggestions: [2]
+      }
+    ]
+  },
+  %{
+    group: :pleroma,
+    key: :connections_pool,
+    type: :group,
+    description: "Advanced settings for `gun` connections pool",
+    children: [
+      %{
+        key: :checkin_timeout,
+        type: :integer,
+        description: "Timeout to checkin connection from pool. Default: 250ms.",
+        suggestions: [250]
+      },
+      %{
+        key: :max_connections,
+        type: :integer,
+        description: "Maximum number of connections in the pool. Default: 250 connections.",
+        suggestions: [250]
+      },
+      %{
+        key: :retry,
+        type: :integer,
+        description:
+          "Number of retries, while `gun` will try to reconnect if connection goes down. Default: 1.",
+        suggestions: [1]
+      },
+      %{
+        key: :retry_timeout,
+        type: :integer,
+        description:
+          "Time between retries when `gun` will try to reconnect in milliseconds. Default: 1000ms.",
+        suggestions: [1000]
+      },
+      %{
+        key: :await_up_timeout,
+        type: :integer,
+        description: "Timeout while `gun` will wait until connection is up. Default: 5000ms.",
+        suggestions: [5000]
+      }
+    ]
+  },
+  %{
+    group: :pleroma,
+    key: :pools,
+    type: :group,
+    description: "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."
+          }
+        ]
+      }
+    ]
+  },
+  %{
+    group: :pleroma,
+    key: Pleroma.Web.ApiSpec.CastAndValidate,
     type: :group,
-    description: "Allow instance configuration from database.",
     children: [
       %{
-        key: :configurable_from_database,
+        key: :strict,
         type: :boolean,
         description:
-          "Allow transferring configuration to DB with the subsequent customization from Admin api. Defaults to `false`"
+          "Enables strict input validation (useful in development, not recommended in production)",
+        suggestions: [false]
       }
     ]
   }