Merge branch 'feature/1922-media-proxy-whitelist' into 'develop'
[akkoma] / config / description.exs
index 36ec3d40af8eaa1d5e88758821db4f330fce718c..afc4dcd79b79301cfbe113468d081dd63f1cd4a7 100644 (file)
@@ -23,29 +23,26 @@ config :pleroma, :config_description, [
         key: :uploader,
         type: :module,
         description: "Module which will be used for uploads",
-        suggestions: [Pleroma.Uploaders.Local, Pleroma.Uploaders.S3]
+        suggestions: {:list_behaviour_implementations, Pleroma.Uploaders.Uploader}
       },
       %{
         key: :filters,
         type: {:list, :module},
         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",
-            "Elixir.Pleroma.Upload.Filter."
-          )
+        suggestions: {:list_behaviour_implementations, 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,
+        label: "Base URL",
         type: :string,
-        description: "Base url for the uploads, needed if you use CDN",
+        description: "Base URL for the uploads, needed if you use CDN",
         suggestions: [
           "https://cdn-host.com"
         ]
@@ -58,6 +55,7 @@ config :pleroma, :config_description, [
       },
       %{
         key: :proxy_opts,
+        label: "Proxy Options",
         type: :keyword,
         description: "Options for Pleroma.ReverseProxy",
         suggestions: [
@@ -85,6 +83,7 @@ config :pleroma, :config_description, [
           },
           %{
             key: :http,
+            label: "HTTP",
             type: :keyword,
             description: "HTTP options",
             children: [
@@ -119,6 +118,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"
       }
     ]
   },
@@ -188,7 +192,9 @@ config :pleroma, :config_description, [
       %{
         key: :args,
         type: [:string, {:list, :string}, {:list, :tuple}],
-        description: "List of actions for the mogrify command",
+        description:
+          "List of actions for the mogrify command. It's possible to add self-written settings as string. " <>
+            "For example `[\"auto-orient\", \"strip\", {\"resize\", \"3840x1080>\"}]` string will be parsed into list of the settings.",
         suggestions: [
           "strip",
           "auto-orient",
@@ -474,6 +480,7 @@ config :pleroma, :config_description, [
   %{
     group: :pleroma,
     key: :uri_schemes,
+    label: "URI Schemes",
     type: :group,
     description: "URI schemes related settings",
     children: [
@@ -487,6 +494,7 @@ config :pleroma, :config_description, [
           "dat",
           "dweb",
           "gopher",
+          "hyper",
           "ipfs",
           "ipns",
           "irc",
@@ -646,17 +654,17 @@ config :pleroma, :config_description, [
         key: :invites_enabled,
         type: :boolean,
         description:
-          "Enable user invitations for admins (depends on `registrations_open` being disabled)."
+          "Enable user invitations for admins (depends on `registrations_open` being disabled)"
       },
       %{
         key: :account_activation_required,
         type: :boolean,
-        description: "Require users to confirm their emails before signing in."
+        description: "Require users to confirm their emails before signing in"
       },
       %{
         key: :federating,
         type: :boolean,
-        description: "Enable federation with other instances."
+        description: "Enable federation with other instances"
       },
       %{
         key: :federation_incoming_replies_max_depth,
@@ -674,42 +682,23 @@ config :pleroma, :config_description, [
         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},
-        description:
-          "List of modules for federation publishing. Module names are shortened (removed leading `Pleroma.Web.` part), but on adding custom module you need to use full name.",
-        suggestions: [
-          Pleroma.Web.ActivityPub.Publisher
-        ]
-      },
       %{
         key: :allow_relay,
         type: :boolean,
         description: "Enable Pleroma's Relay, which makes it possible to follow a whole instance"
       },
-      %{
-        key: :rewrite_policy,
-        type: [:module, {:list, :module}],
-        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",
-            "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."
+          "Makes the client API in authenticated mode-only except for user-profiles." <>
+            " Useful for disabling the Local Timeline and The Whole Known Network. " <>
+            " Note: when setting to `false`, please also check `:restrict_unauthenticated` setting."
       },
       %{
         key: :quarantined_instances,
@@ -746,23 +735,6 @@ config :pleroma, :config_description, [
           "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.",
-        suggestions: [
-          "exclusion.com"
-        ]
-      },
       %{
         key: :extended_nickname_format,
         type: :boolean,
@@ -833,6 +805,7 @@ config :pleroma, :config_description, [
       },
       %{
         key: :safe_dm_mentions,
+        label: "Safe DM mentions",
         type: :boolean,
         description:
           "If enabled, only mentions at the beginning of a post will be used to address people in direct messages." <>
@@ -872,7 +845,7 @@ config :pleroma, :config_description, [
       %{
         key: :skip_thread_containment,
         type: :boolean,
-        description: "Skip filtering out broken threads. Default: enabled"
+        description: "Skip filtering out broken threads. Default: enabled."
       },
       %{
         key: :limit_to_local_content,
@@ -936,6 +909,7 @@ config :pleroma, :config_description, [
         children: [
           %{
             key: :totp,
+            label: "TOTP settings",
             type: :keyword,
             description: "TOTP settings",
             suggestions: [digits: 6, period: 30],
@@ -952,7 +926,7 @@ config :pleroma, :config_description, [
                 type: :integer,
                 suggestions: [30],
                 description:
-                  "a period for which the TOTP code will be valid, in seconds. Defaults to 30 seconds."
+                  "A period for which the TOTP code will be valid, in seconds. Defaults to 30 seconds."
               }
             ]
           },
@@ -966,7 +940,7 @@ config :pleroma, :config_description, [
                 key: :number,
                 type: :integer,
                 suggestions: [5],
-                description: "number of backup codes to generate."
+                description: "Number of backup codes to generate."
               },
               %{
                 key: :length,
@@ -978,6 +952,13 @@ config :pleroma, :config_description, [
             ]
           }
         ]
+      },
+      %{
+        key: :instance_thumbnail,
+        type: :string,
+        description:
+          "The instance thumbnail can be any image that represents your instance and is used by some apps or services when they display information about your instance.",
+        suggestions: ["/instance/thumbnail.jpeg"]
       }
     ]
   },
@@ -999,6 +980,7 @@ config :pleroma, :config_description, [
     group: :logger,
     type: :group,
     key: :ex_syslogger,
+    label: "ExSyslogger",
     description: "ExSyslogger-related settings",
     children: [
       %{
@@ -1017,7 +999,7 @@ config :pleroma, :config_description, [
       %{
         key: :format,
         type: :string,
-        description: "Default: \"$date $time [$level] $levelpad$node $metadata $message\".",
+        description: "Default: \"$date $time [$level] $levelpad$node $metadata $message\"",
         suggestions: ["$metadata[$level] $message"]
       },
       %{
@@ -1031,6 +1013,7 @@ config :pleroma, :config_description, [
     group: :logger,
     type: :group,
     key: :console,
+    label: "Console Logger",
     description: "Console logger settings",
     children: [
       %{
@@ -1042,7 +1025,7 @@ config :pleroma, :config_description, [
       %{
         key: :format,
         type: :string,
-        description: "Default: \"$date $time [$level] $levelpad$node $metadata $message\".",
+        description: "Default: \"$date $time [$level] $levelpad$node $metadata $message\"",
         suggestions: ["$metadata[$level] $message"]
       },
       %{
@@ -1055,6 +1038,7 @@ config :pleroma, :config_description, [
   %{
     group: :quack,
     type: :group,
+    label: "Quack Logger",
     description: "Quack-related settings",
     children: [
       %{
@@ -1083,6 +1067,7 @@ config :pleroma, :config_description, [
       },
       %{
         key: :webhook_url,
+        label: "Webhook URL",
         type: :string,
         description: "Configure the Slack incoming webhook",
         suggestions: ["https://hooks.slack.com/services/YOUR-KEY-HERE"]
@@ -1105,38 +1090,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,
@@ -1146,46 +1134,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,
@@ -1193,6 +1170,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",
@@ -1201,26 +1184,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,
@@ -1231,24 +1207,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"]
           }
         ]
       },
@@ -1284,7 +1320,7 @@ config :pleroma, :config_description, [
         key: :mascots,
         type: {:keyword, :map},
         description:
-          "Keyword of mascots, each element must contain both an 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",
@@ -1304,6 +1340,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"]
       }
     ]
   },
@@ -1312,7 +1354,7 @@ config :pleroma, :config_description, [
     key: :manifest,
     type: :group,
     description:
-      "This section describe PWA manifest instance-specific values. Currently this option relate only for MastoFE",
+      "This section describe PWA manifest instance-specific values. Currently this option relate only for MastoFE.",
     children: [
       %{
         key: :icons,
@@ -1346,12 +1388,47 @@ config :pleroma, :config_description, [
       }
     ]
   },
+  %{
+    group: :pleroma,
+    key: :mrf,
+    tab: :mrf,
+    label: "MRF",
+    type: :group,
+    description: "General MRF settings",
+    children: [
+      %{
+        key: :policies,
+        type: [:module, {:list, :module}],
+        description:
+          "A list of MRF policies enabled. Module names are shortened (removed leading `Pleroma.Web.ActivityPub.MRF.` part), but on adding custom module you need to use full name.",
+        suggestions: {:list_behaviour_implementations, Pleroma.Web.ActivityPub.MRF}
+      },
+      %{
+        key: :transparency,
+        label: "MRF transparency",
+        type: :boolean,
+        description:
+          "Make the content of your Message Rewrite Facility settings public (via nodeinfo)"
+      },
+      %{
+        key: :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.",
+        suggestions: [
+          "exclusion.com"
+        ]
+      }
+    ]
+  },
   %{
     group: :pleroma,
     key: :mrf_simple,
-    label: "MRF simple",
+    tab: :mrf,
+    label: "MRF Simple",
     type: :group,
-    description: "Message Rewrite Facility",
+    description: "Simple ingress policies",
     children: [
       %{
         key: :media_removal,
@@ -1370,7 +1447,7 @@ config :pleroma, :config_description, [
         key: :federated_timeline_removal,
         type: {:list, :string},
         description:
-          "List of instances to remove from Federated (aka The Whole Known Network) Timeline",
+          "List of instances to remove from the Federated (aka The Whole Known Network) Timeline",
         suggestions: ["example.com", "*.example.com"]
       },
       %{
@@ -1411,10 +1488,27 @@ config :pleroma, :config_description, [
       }
     ]
   },
+  %{
+    group: :pleroma,
+    key: :mrf_activity_expiration,
+    tab: :mrf,
+    label: "MRF Activity Expiration Policy",
+    type: :group,
+    description: "Adds automatic expiration to all local activities",
+    children: [
+      %{
+        key: :days,
+        type: :integer,
+        description: "Default global expiration time for all local activities (in days)",
+        suggestions: [90, 365]
+      }
+    ]
+  },
   %{
     group: :pleroma,
     key: :mrf_subchain,
-    label: "MRF subchain",
+    tab: :mrf,
+    label: "MRF Subchain",
     type: :group,
     description:
       "This policy processes messages through an alternate pipeline when a given message matches certain criteria." <>
@@ -1422,7 +1516,7 @@ config :pleroma, :config_description, [
     children: [
       %{
         key: :match_actor,
-        type: :map,
+        type: {:map, {:list, :string}},
         description: "Matches a series of regular expressions against the actor field",
         suggestions: [
           %{
@@ -1435,9 +1529,9 @@ 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",
+    tab: :mrf,
+    description: "RejectNonPublic drops posts with non-public visibility settings.",
+    label: "MRF Reject Non Public",
     type: :group,
     children: [
       %{
@@ -1456,16 +1550,17 @@ config :pleroma, :config_description, [
   %{
     group: :pleroma,
     key: :mrf_hellthread,
-    label: "MRF hellthread",
+    tab: :mrf,
+    label: "MRF Hellthread",
     type: :group,
-    description: "Block messages with too much mentions",
+    description: "Block messages with excessive user mentions",
     children: [
       %{
         key: :delist_threshold,
         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.",
+          "Number of mentioned users after which the message gets removed from timelines and" <>
+            "disables notifications. Set to 0 to disable.",
         suggestions: [10]
       },
       %{
@@ -1480,27 +1575,28 @@ config :pleroma, :config_description, [
   %{
     group: :pleroma,
     key: :mrf_keyword,
-    label: "MRF keyword",
+    tab: :mrf,
+    label: "MRF Keyword",
     type: :group,
     description: "Reject or Word-Replace messages with a keyword or regex",
     children: [
       %{
         key: :reject,
-        type: [:string, :regex],
+        type: {:list, :string},
         description:
           "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],
+        type: {:list, :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.",
         suggestions: ["foo", ~r/foo/iu]
       },
       %{
         key: :replace,
-        type: [{:tuple, :string, :string}, {:tuple, :regex, :string}],
+        type: {:list, :tuple},
         description:
           "A list of tuples containing {pattern, replacement}. Each pattern can be a string or a regular expression.",
         suggestions: [{"foo", "bar"}, {~r/foo/iu, "bar"}]
@@ -1510,14 +1606,15 @@ config :pleroma, :config_description, [
   %{
     group: :pleroma,
     key: :mrf_mention,
-    label: "MRF mention",
+    tab: :mrf,
+    label: "MRF Mention",
     type: :group,
-    description: "Block messages which mention a user",
+    description: "Block messages which mention a specific user",
     children: [
       %{
         key: :actors,
         type: {:list, :string},
-        description: "A list of actors for which any post mentioning them will be dropped.",
+        description: "A list of actors for which any post mentioning them will be dropped",
         suggestions: ["actor1", "actor2"]
       }
     ]
@@ -1525,7 +1622,8 @@ config :pleroma, :config_description, [
   %{
     group: :pleroma,
     key: :mrf_vocabulary,
-    label: "MRF vocabulary",
+    tab: :mrf,
+    label: "MRF Vocabulary",
     type: :group,
     description: "Filter messages which belong to certain activity vocabularies",
     children: [
@@ -1533,14 +1631,14 @@ config :pleroma, :config_description, [
         key: :accept,
         type: {:list, :string},
         description:
-          "A list of ActivityStreams terms to accept. If empty, all supported messages are accepted",
+          "A list of ActivityStreams terms to accept. If empty, all supported messages are accepted.",
         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",
+          "A list of ActivityStreams terms to reject. If empty, no messages are rejected.",
         suggestions: ["Create", "Follow", "Mention", "Announce", "Like"]
       }
     ]
@@ -1548,14 +1646,12 @@ config :pleroma, :config_description, [
   # %{
   #   group: :pleroma,
   #   key: :mrf_user_allowlist,
-  #   type: :group,
+  #   type: :map,
   #   description:
   #     "The keys in this section are the domain names that the policy should apply to." <>
   #       " Each key should be assigned a list of users that should be allowed through by their ActivityPub ID",
-  #   children: [
-  #     ["example.org": ["https://example.org/users/admin"]],
   #     suggestions: [
-  #       ["example.org": ["https://example.org/users/admin"]]
+  #       %{"example.org" => ["https://example.org/users/admin"]}
   #     ]
   #   ]
   # },
@@ -1572,13 +1668,40 @@ config :pleroma, :config_description, [
       },
       %{
         key: :base_url,
+        label: "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.",
         suggestions: ["https://example.com"]
       },
+      %{
+        key: :invalidation,
+        type: :keyword,
+        descpiption: "",
+        suggestions: [
+          enabled: true,
+          provider: Pleroma.Web.MediaProxy.Invalidation.Script
+        ],
+        children: [
+          %{
+            key: :enabled,
+            type: :boolean,
+            description: "Enables invalidate media cache"
+          },
+          %{
+            key: :provider,
+            type: :module,
+            description: "Module which will be used to cache purge.",
+            suggestions: [
+              Pleroma.Web.MediaProxy.Invalidation.Script,
+              Pleroma.Web.MediaProxy.Invalidation.Http
+            ]
+          }
+        ]
+      },
       %{
         key: :proxy_opts,
+        label: "Proxy Options",
         type: :keyword,
         description: "Options for Pleroma.ReverseProxy",
         suggestions: [
@@ -1606,6 +1729,7 @@ config :pleroma, :config_description, [
           },
           %{
             key: :http,
+            label: "HTTP",
             type: :keyword,
             description: "HTTP options",
             children: [
@@ -1644,8 +1768,52 @@ config :pleroma, :config_description, [
       %{
         key: :whitelist,
         type: {:list, :string},
-        description: "List of domains to bypass the mediaproxy",
-        suggestions: ["example.com"]
+        description: "List of hosts with scheme to bypass the mediaproxy",
+        suggestions: ["http://example.com"]
+      }
+    ]
+  },
+  %{
+    group: :pleroma,
+    key: Pleroma.Web.MediaProxy.Invalidation.Http,
+    type: :group,
+    description: "HTTP invalidate settings",
+    children: [
+      %{
+        key: :method,
+        type: :atom,
+        description: "HTTP method of request. Default: :purge"
+      },
+      %{
+        key: :headers,
+        type: {:keyword, :string},
+        description: "HTTP headers of request",
+        suggestions: [{"x-refresh", 1}]
+      },
+      %{
+        key: :options,
+        type: :keyword,
+        description: "Request options",
+        children: [
+          %{
+            key: :params,
+            type: {:map, :string}
+          }
+        ]
+      }
+    ]
+  },
+  %{
+    group: :pleroma,
+    key: Pleroma.Web.MediaProxy.Invalidation.Script,
+    type: :group,
+    description: "Script invalidate settings",
+    children: [
+      %{
+        key: :script_path,
+        type: :string,
+        description: "Path to shell script. Which will run purge cache.",
+        suggestions: ["./installation/nginx-cache-purge.sh.example"]
       }
     ]
   },
@@ -1662,6 +1830,7 @@ config :pleroma, :config_description, [
       },
       %{
         key: :ip,
+        label: "IP",
         type: :tuple,
         description: "IP address to bind to",
         suggestions: [{0, 0, 0, 0}]
@@ -1675,7 +1844,7 @@ config :pleroma, :config_description, [
       %{
         key: :dstport,
         type: :integer,
-        description: "Port advertised in urls (optional, defaults to port)",
+        description: "Port advertised in URLs (optional, defaults to port)",
         suggestions: [9999]
       }
     ]
@@ -1683,6 +1852,7 @@ config :pleroma, :config_description, [
   %{
     group: :pleroma,
     key: :activitypub,
+    label: "ActivityPub",
     type: :group,
     description: "ActivityPub-related settings",
     children: [
@@ -1705,7 +1875,7 @@ config :pleroma, :config_description, [
         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)."
+          "The number of Note replies' URIs to be included with outgoing federation (`5` to match Mastodon hardcoded value, `0` to disable the output)"
       },
       %{
         key: :follow_handshake_timeout,
@@ -1718,6 +1888,7 @@ config :pleroma, :config_description, [
   %{
     group: :pleroma,
     key: :http_security,
+    label: "HTTP security",
     type: :group,
     description: "HTTP security settings",
     children: [
@@ -1756,7 +1927,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",
+        description: "Adds the specified URL to report-uri and report-to group in CSP header",
         suggestions: ["https://example.com/report-uri"]
       }
     ]
@@ -1764,9 +1935,10 @@ config :pleroma, :config_description, [
   %{
     group: :web_push_encryption,
     key: :vapid_details,
+    label: "Vapid Details",
     type: :group,
     description:
-      "Web Push Notifications configuration. You can use the mix task mix web_push.gen.keypair to generate it",
+      "Web Push Notifications configuration. You can use the mix task mix web_push.gen.keypair to generate it.",
     children: [
       %{
         key: :subject,
@@ -1833,15 +2005,18 @@ config :pleroma, :config_description, [
   },
   %{
     group: :pleroma,
+    label: "Pleroma Admin Token",
     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 setting a token that can be used to authenticate requests with admin privileges without a normal user account token. Append the `admin_token` parameter to requests to utilize it. (Please reconsider using HTTP Basic Auth or OAuth-based authentication if possible)",
     children: [
       %{
         key: :admin_token,
         type: :string,
-        description: "Token",
-        suggestions: ["We recommend a secure random string or UUID"]
+        description: "Admin token",
+        suggestions: [
+          "Please use a high entropy string or UUID"
+        ]
       }
     ]
   },
@@ -1859,24 +2034,11 @@ config :pleroma, :config_description, [
     """,
     children: [
       %{
-        key: :repo,
-        type: :module,
-        description: "Application's Ecto repo",
-        suggestions: [Pleroma.Repo]
-      },
-      %{
-        key: :verbose,
+        key: :log,
         type: {:dropdown, :atom},
         description: "Logs verbose mode",
         suggestions: [false, :error, :warn, :info, :debug]
       },
-      %{
-        key: :prune,
-        type: [:atom, :tuple],
-        description:
-          "Non-retryable jobs [pruning settings](https://github.com/sorentwo/oban#pruning)",
-        suggestions: [:disabled, {:maxlen, 1500}, {:maxage, 60 * 60}]
-      },
       %{
         key: :queues,
         type: {:keyword, :integer},
@@ -2011,24 +2173,24 @@ config :pleroma, :config_description, [
     key: :rich_media,
     type: :group,
     description:
-      "If enabled the instance will parse metadata from attached links to generate link previews.",
+      "If enabled the instance will parse metadata from attached links to generate link previews",
     children: [
       %{
         key: :enabled,
         type: :boolean,
-        description: "Enables RichMedia parsing of URLs."
+        description: "Enables RichMedia parsing of URLs"
       },
       %{
         key: :ignore_hosts,
         type: {:list, :string},
-        description: "List of hosts which will be ignored by the metadata parser.",
+        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.",
+        description: "List TLDs (top-level domains) which will ignore for parse metadata",
         suggestions: ["local", "localdomain", "lan"]
       },
       %{
@@ -2037,9 +2199,7 @@ config :pleroma, :config_description, [
         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,
-          Pleroma.Web.RichMedia.Parsers.OGP,
           Pleroma.Web.RichMedia.Parsers.TwitterCard
         ]
       },
@@ -2058,31 +2218,32 @@ config :pleroma, :config_description, [
   %{
     group: :auto_linker,
     key: :opts,
+    label: "Auto Linker",
     type: :group,
     description: "Configuration for the auto_linker library",
     children: [
       %{
         key: :class,
         type: [:string, false],
-        description: "Specify the class to be added to the generated link. Disable 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. Disable to clear",
+        description: "Override the rel attribute. Disable to clear.",
         suggestions: ["ugc", "noopener noreferrer", false]
       },
       %{
         key: :new_window,
         type: :boolean,
-        description: "Link urls will open in new window/tab"
+        description: "Link URLs will open in new window/tab"
       },
       %{
         key: :truncate,
         type: [:integer, false],
         description:
-          "Set to a number to truncate urls longer then the number. Truncated urls will end in `..`",
+          "Set to a number to truncate URLs longer then the number. Truncated URLs will end in `..`",
         suggestions: [15, false]
       },
       %{
@@ -2093,7 +2254,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.)"
       }
     ]
   },
@@ -2139,6 +2300,7 @@ config :pleroma, :config_description, [
   },
   %{
     group: :pleroma,
+    label: "Pleroma Authenticator",
     type: :group,
     description: "Authenticator",
     children: [
@@ -2152,6 +2314,7 @@ config :pleroma, :config_description, [
   %{
     group: :pleroma,
     key: :ldap,
+    label: "LDAP",
     type: :group,
     description:
       "Use LDAP for user authentication. When a user logs in to the Pleroma instance, the name and password" <>
@@ -2238,6 +2401,7 @@ config :pleroma, :config_description, [
       },
       %{
         key: :uid,
+        label: "UID",
         type: :string,
         description:
           "LDAP attribute name to authenticate the user, e.g. when \"cn\", the filter will be \"cn=username,base\"",
@@ -2253,11 +2417,12 @@ config :pleroma, :config_description, [
     children: [
       %{
         key: :enforce_oauth_admin_scope_usage,
+        label: "Enforce OAuth admin scope usage",
         type: :boolean,
         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 disabled 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."
       },
       %{
@@ -2269,6 +2434,7 @@ config :pleroma, :config_description, [
       },
       %{
         key: :oauth_consumer_template,
+        label: "OAuth consumer template",
         type: :string,
         description:
           "OAuth consumer mode authentication form template. By default it's `consumer.html` which corresponds to" <>
@@ -2277,6 +2443,7 @@ config :pleroma, :config_description, [
       },
       %{
         key: :oauth_consumer_strategies,
+        label: "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." <>
@@ -2350,7 +2517,7 @@ config :pleroma, :config_description, [
       %{
         key: :styling,
         type: :map,
-        description: "a map with color settings for email templates.",
+        description: "A map with color settings for email templates.",
         suggestions: [
           %{
             link_color: "#d8a070",
@@ -2405,14 +2572,14 @@ config :pleroma, :config_description, [
       %{
         key: :enabled,
         type: :boolean,
-        description: "enables new users admin digest email when `true`",
-        suggestions: [false]
+        description: "Enables new users admin digest email when `true`"
       }
     ]
   },
   %{
     group: :pleroma,
     key: :oauth2,
+    label: "OAuth2",
     type: :group,
     description: "Configure OAuth 2 provider capabilities",
     children: [
@@ -2431,7 +2598,7 @@ config :pleroma, :config_description, [
       %{
         key: :clean_expired_tokens,
         type: :boolean,
-        description: "Enable a background job to clean expired oauth tokens. Default: disabled."
+        description: "Enable a background job to clean expired OAuth tokens. Default: disabled."
       }
     ]
   },
@@ -2455,7 +2622,7 @@ config :pleroma, :config_description, [
       },
       %{
         key: :groups,
-        type: {:keyword, :string, {:list, :string}},
+        type: {:keyword, {:list, :string}},
         description:
           "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.",
@@ -2515,6 +2682,7 @@ config :pleroma, :config_description, [
       },
       %{
         key: :relation_id_action,
+        label: "Relation ID action",
         type: [:tuple, {:list, :tuple}],
         description: "For actions on relation with a specific user (follow, unfollow)",
         suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
@@ -2528,6 +2696,7 @@ config :pleroma, :config_description, [
       },
       %{
         key: :status_id_action,
+        label: "Status ID action",
         type: [:tuple, {:list, :tuple}],
         description:
           "For fav / unfav or reblog / unreblog actions on the same status by the same user",
@@ -2543,6 +2712,7 @@ config :pleroma, :config_description, [
   },
   %{
     group: :esshd,
+    label: "ESSHD",
     type: :group,
     description:
       "Before enabling this you must add :esshd to mix.exs as one of the extra_applications " <>
@@ -2581,8 +2751,9 @@ config :pleroma, :config_description, [
   },
   %{
     group: :mime,
+    label: "Mime Types",
     type: :group,
-    description: "Mime types",
+    description: "Mime Types settings",
     children: [
       %{
         key: :types,
@@ -2638,21 +2809,10 @@ config :pleroma, :config_description, [
       }
     ]
   },
-  %{
-    group: :http_signatures,
-    type: :group,
-    description: "HTTP Signatures settings",
-    children: [
-      %{
-        key: :adapter,
-        type: :module,
-        suggestions: [Pleroma.Signature]
-      }
-    ]
-  },
   %{
     group: :pleroma,
     key: :http,
+    label: "HTTP",
     type: :group,
     description: "HTTP settings",
     children: [
@@ -2701,6 +2861,7 @@ config :pleroma, :config_description, [
   %{
     group: :pleroma,
     key: :markup,
+    label: "Markup Settings",
     type: :group,
     children: [
       %{
@@ -2741,8 +2902,9 @@ config :pleroma, :config_description, [
   },
   %{
     group: :pleroma,
+    tab: :mrf,
     key: :mrf_normalize_markup,
-    label: "MRF normalize markup",
+    label: "MRF Normalize Markup",
     description: "MRF NormalizeMarkup settings. Scrub configured hypertext markup.",
     type: :group,
     children: [
@@ -2798,6 +2960,7 @@ config :pleroma, :config_description, [
   },
   %{
     group: :cors_plug,
+    label: "CORS plug config",
     type: :group,
     children: [
       %{
@@ -2870,6 +3033,7 @@ config :pleroma, :config_description, [
   %{
     group: :pleroma,
     key: :web_cache_ttl,
+    label: "Web cache TTL",
     type: :group,
     description:
       "The expiration time for the web responses cache. Values should be in milliseconds or `nil` to disable expiration.",
@@ -2892,9 +3056,10 @@ config :pleroma, :config_description, [
   %{
     group: :pleroma,
     key: :static_fe,
+    label: "Static FE",
     type: :group,
     description:
-      "Render profiles and posts using server-generated HTML that is viewable without using JavaScript.",
+      "Render profiles and posts using server-generated HTML that is viewable without using JavaScript",
     children: [
       %{
         key: :enabled,
@@ -2912,18 +3077,18 @@ config :pleroma, :config_description, [
       %{
         key: :post_title,
         type: :map,
-        description: "Configure title rendering.",
+        description: "Configure title rendering",
         children: [
           %{
             key: :max_length,
             type: :integer,
-            description: "Maximum number of characters before truncating title.",
+            description: "Maximum number of characters before truncating title",
             suggestions: [100]
           },
           %{
             key: :omission,
             type: :string,
-            description: "Replacement which will be used after truncating string.",
+            description: "Replacement which will be used after truncating string",
             suggestions: ["..."]
           }
         ]
@@ -2933,8 +3098,11 @@ config :pleroma, :config_description, [
   %{
     group: :pleroma,
     key: :mrf_object_age,
+    label: "MRF Object Age",
+    tab: :mrf,
     type: :group,
-    description: "Rejects or delists posts based on their age when received.",
+    description:
+      "Rejects or delists posts based on their timestamp deviance from your server's clock.",
     children: [
       %{
         key: :threshold,
@@ -2947,7 +3115,7 @@ config :pleroma, :config_description, [
         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; " <>
+            "`: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]
       }
@@ -2975,13 +3143,13 @@ config :pleroma, :config_description, [
       %{
         key: :workers,
         type: :integer,
-        description: "Number of workers to send notifications.",
+        description: "Number of workers to send notifications",
         suggestions: [3]
       },
       %{
         key: :overflow_workers,
         type: :integer,
-        description: "Maximum number of workers created if pool is empty.",
+        description: "Maximum number of workers created if pool is empty",
         suggestions: [2]
       }
     ]
@@ -3268,8 +3436,46 @@ config :pleroma, :config_description, [
         key: :strict,
         type: :boolean,
         description:
-          "Enables strict input validation (useful in development, not recommended in production)",
-        suggestions: [false]
+          "Enables strict input validation (useful in development, not recommended in production)"
+      }
+    ]
+  },
+  %{
+    group: :pleroma,
+    key: :instances_favicons,
+    type: :group,
+    description: "Control favicons for instances",
+    children: [
+      %{
+        key: :enabled,
+        type: :boolean,
+        description: "Allow/disallow displaying and getting instances favicons"
+      }
+    ]
+  },
+  %{
+    group: :ex_aws,
+    key: :s3,
+    type: :group,
+    descriptions: "S3 service related settings",
+    children: [
+      %{
+        key: :access_key_id,
+        type: :string,
+        description: "S3 access key ID",
+        suggestions: ["AKIAQ8UKHTGIYN7DMWWJ"]
+      },
+      %{
+        key: :secret_access_key,
+        type: :string,
+        description: "Secret access key",
+        suggestions: ["JFGt+fgH1UQ7vLUQjpW+WvjTdV/UNzVxcwn7DkaeFKtBS5LvoXvIiME4NQBsT6ZZ"]
+      },
+      %{
+        key: :host,
+        type: :string,
+        description: "S3 host",
+        suggestions: ["s3.eu-central-1.amazonaws.com"]
       }
     ]
   }