Merge branch 'develop' into issue/1383
authorMaksim Pechnikov <parallel588@gmail.com>
Mon, 27 Jan 2020 05:48:19 +0000 (08:48 +0300)
committerMaksim Pechnikov <parallel588@gmail.com>
Mon, 27 Jan 2020 05:48:19 +0000 (08:48 +0300)
1  2 
config/description.exs

diff --combined config/description.exs
index 3dba9b1218db5f9af9d4714a85a5548c6e9746c9,531f5d7e71f0714107f5dd21c920d57f0d8017df..7829497fef59823a15d90c76fb54de2d8d3b404b
@@@ -23,7 -23,7 +23,7 @@@ config :pleroma, :config_description, 
          key: :uploader,
          type: :module,
          description: "Module which will be used for uploads",
-         suggestions: [Pleroma.Uploaders.Local, Pleroma.Uploaders.MDII, Pleroma.Uploaders.S3]
+         suggestions: [Pleroma.Uploaders.Local, Pleroma.Uploaders.S3]
        },
        %{
          key: :filters,
@@@ -39,7 -39,7 +39,7 @@@
          key: :link_name,
          type: :boolean,
          description:
-           "If enabled, a name parameter will be added to the url of the upload. For example `https://instance.tld/media/imagehash.png?name=realname.png`"
+           "If enabled, a name parameter will be added to the url of the upload. For example `https://instance.tld/media/imagehash.png?name=realname.png`."
        },
        %{
          key: :base_url,
@@@ -53,7 -53,7 +53,7 @@@
          key: :proxy_remote,
          type: :boolean,
          description:
-           "If enabled, requests to media stored using a remote uploader will be proxied instead of being redirected."
+           "If enabled, requests to media stored using a remote uploader will be proxied instead of being redirected"
        },
        %{
          key: :proxy_opts,
              type: :boolean,
              description:
                "Redirects the client to the real remote URL if there's any HTTP errors. " <>
-                 "Any error during body processing will not be redirected as the response is chunked"
+                 "Any error during body processing will not be redirected as the response is chunked."
            },
            %{
              key: :max_body_length,
              type: :integer,
              description:
-               "limits the content length to be approximately the " <>
-                 "specified length. It is validated with the `content-length` header and also verified when proxying"
+               "Limits the content length to be approximately the " <>
+                 "specified length. It is validated with the `content-length` header and also verified when proxying."
            },
            %{
              key: :http,
        %{
          key: :uploads,
          type: :string,
-         description: "Path where user uploads will be saved",
+         description: "Path where user's uploads will be saved",
          suggestions: [
            "uploads"
          ]
          type: :string,
          description:
            "Text to replace filenames in links. If no setting, {random}.extension will be used. You can get the original" <>
-             " filename extension by using {extension}, for example custom-file-name.{extension}",
+             " filename extension by using {extension}, for example custom-file-name.{extension}.",
          suggestions: [
            "custom-file-name.{extension}"
          ]
        },
        %{
          key: :email,
+         label: "Admin Email Address",
          type: :string,
          description: "Email used to reach an Administrator/Moderator of the instance",
          suggestions: [
        },
        %{
          key: :notify_email,
+         label: "Sender Email Address",
          type: :string,
-         description: "Email used for notifications",
+         description: "Envelope FROM address for mail sent via Pleroma",
          suggestions: [
            "notify@example.com"
          ]
        %{
          key: :registrations_open,
          type: :boolean,
-         description: "Enable registrations for anyone, invitations can be enabled when false"
+         description: "Enable registrations for anyone, invitations can be enabled when `false`"
        },
        %{
          key: :invites_enabled,
          type: :boolean,
-         description: "Enable user invitations for admins (depends on registrations_open: false)"
+         description: "Enable user invitations for admins (depends on `registrations_open: false`)"
        },
        %{
          key: :account_activation_required,
          type: :integer,
          description:
            "Max. depth of reply-to activities fetching on incoming federation, to prevent out-of-memory situations while" <>
-             " fetching very long threads. If set to nil, threads of any depth will be fetched. Lower this value if you experience out-of-memory crashes",
+             " fetching very long threads. If set to `nil`, threads of any depth will be fetched. Lower this value if you experience out-of-memory crashes.",
          suggestions: [
            100
          ]
          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
          ]
          type: :boolean,
          description:
            "Makes the client API in authentificated mode-only except for user-profiles." <>
-             " Useful for disabling the Local Timeline and The Whole Known Network"
+             " Useful for disabling the Local Timeline and The Whole Known Network."
        },
        %{
          key: :quarantined_instances,
          type: {:list, :string},
          description:
-           "List of ActivityPub instances where private(DMs, followers-only) activities will not be send",
+           "List of ActivityPub instances where private (DMs, followers-only) activities will not be send",
          suggestions: [
            "quarantined.com",
            "*.quarantined.com"
          label: "MRF transparency exclusions",
          type: {:list, :string},
          description:
-           "Exclude specific instance names from MRF transparency. The use of the exclusions feature will be disclosed in nodeinfo as a boolean value",
+           "Exclude specific instance names from MRF transparency. The use of the exclusions feature will be disclosed in nodeinfo as a boolean value.",
          suggestions: [
            "exclusion.com"
          ]
          key: :extended_nickname_format,
          type: :boolean,
          description:
-           "Set to true to use extended local nicknames format (allows underscores/dashes)." <>
-             " This will break federation with older software for theses nicknames"
+           "Set to `true` to use extended local nicknames format (allows underscores/dashes)." <>
+             " This will break federation with older software for theses nicknames."
        },
        %{
          key: :max_pinned_statuses,
          type: :integer,
-         description: "The maximum number of pinned statuses. 0 will disable the feature",
+         description: "The maximum number of pinned statuses. 0 will disable the feature.",
          suggestions: [
            0,
            1,
          key: :no_attachment_links,
          type: :boolean,
          description:
-           "Set to true to disable automatically adding attachment link text to statuses"
+           "Set to `true` to disable automatically adding attachment link text to statuses"
        },
        %{
          key: :welcome_message,
          type: :string,
          description:
-           "A message that will be send to a newly registered users as a direct message",
+           "A message that will be sent to a newly registered users as a direct message",
          suggestions: [
            "Hi, @username! Welcome on board!"
          ]
        %{
          key: :max_report_comment_size,
          type: :integer,
-         description: "The maximum size of the report comment (Default: 1000)",
+         description: "The maximum size of the report comment. Default: 1000.",
          suggestions: [
            1_000
          ]
          key: :safe_dm_mentions,
          type: :boolean,
          description:
-           "If set to true, only mentions at the beginning of a post will be used to address people in direct messages." <>
-             " This is to prevent accidental mentioning of people when talking about them (e.g. \"@friend hey i really don't like @enemy\")." <>
-             " Default: false"
+           "If set to `true`, only mentions at the beginning of a post will be used to address people in direct messages." <>
+             " This is to prevent accidental mentioning of people when talking about them (e.g. \"@admin please keep an eye on @bad_actor\")." <>
+             " Default: `false`"
        },
        %{
          key: :healthcheck,
          type: :boolean,
-         description: "If set to true, system data will be shown on /api/pleroma/healthcheck"
+         description: "If set to `true`, system data will be shown on /api/pleroma/healthcheck"
        },
        %{
          key: :remote_post_retention_days,
        %{
          key: :user_bio_length,
          type: :integer,
-         description: "A user bio maximum length (default: 5000)",
+         description: "A user bio maximum length. Default: 5000.",
          suggestions: [
            5_000
          ]
        %{
          key: :user_name_length,
          type: :integer,
-         description: "A user name maximum length (default: 100)",
+         description: "A user name maximum length. Default: 100.",
          suggestions: [
            100
          ]
        %{
          key: :skip_thread_containment,
          type: :boolean,
-         description: "Skip filter out broken threads. The default is true"
+         description: "Skip filter out broken threads. Default: `true`"
        },
        %{
          key: :limit_to_local_content,
          type: [:atom, false],
          description:
-           "Limit unauthenticated users to search for local statutes and users only. The default is :unauthenticated ",
+           "Limit unauthenticated users to search for local statutes and users only. Default: `:unauthenticated`.",
          suggestions: [
            :unauthenticated,
            :all,
        %{
          key: :max_account_fields,
          type: :integer,
-         description: "The maximum number of custom fields in the user profile (default: 10)",
+         description: "The maximum number of custom fields in the user profile. Default: 10.",
          suggestions: [
            10
          ]
          key: :max_remote_account_fields,
          type: :integer,
          description:
-           "The maximum number of custom fields in the remote user profile (default: 20)",
+           "The maximum number of custom fields in the remote user profile. Default: 20.",
          suggestions: [
            20
          ]
        %{
          key: :account_field_name_length,
          type: :integer,
-         description: "An account field name maximum length (default: 512)",
+         description: "An account field name maximum length. Default: 512.",
          suggestions: [
            512
          ]
        %{
          key: :account_field_value_length,
          type: :integer,
-         description: "An account field value maximum length (default: 2048)",
+         description: "An account field value maximum length. Default: 2048.",
          suggestions: [
            2048
          ]
          key: :backends,
          type: [:atom, :tuple, :module],
          description:
-           "Where logs will be send, :console - send logs to stdout, {ExSyslogger, :ex_syslogger} - to syslog, Quack.Logger - to Slack.",
+           "Where logs will be sent, :console - send logs to stdout, { ExSyslogger, :ex_syslogger } - to syslog, Quack.Logger - to Slack.",
          suggestions: [:console, {ExSyslogger, :ex_syslogger}, Quack.Logger]
        }
      ]
        %{
          key: :format,
          type: :string,
-         description: "It defaults to \"$date $time [$level] $levelpad$node $metadata $message\"",
+         description: "Default: \"$date $time [$level] $levelpad$node $metadata $message\".",
          suggestions: ["$metadata[$level] $message"]
        },
        %{
        %{
          key: :format,
          type: :string,
-         description: "It defaults to \"$date $time [$level] $levelpad$node $metadata $message\"",
+         description: "Default: \"$date $time [$level] $levelpad$node $metadata $message\".",
          suggestions: ["$metadata[$level] $message"]
        },
        %{
      description:
        "This form can be used to configure a keyword list that keeps the configuration data for any " <>
          "kind of frontend. By default, settings for pleroma_fe and masto_fe are configured. If you want to " <>
-         "add your own configuration your settings need to be complete as they will override the defaults.",
+         "add your own configuration your settings all fields must be complete.",
      children: [
        %{
          key: :pleroma_fe,
              hideUserStats: false,
              scopeCopy: true,
              subjectLineBehavior: "email",
-             alwaysShowSubjectInput: true
+             alwaysShowSubjectInput: true,
+             logoMask: false,
+             logoMargin: ".1em",
+             stickers: false,
+             enableEmojiPicker: false
            }
          ],
          children: [
              label: "Redirect root no login",
              type: :string,
              description:
-               "relative URL which indicates where to redirect when a user isn't logged in",
+               "Relative URL which indicates where to redirect when a user isn't logged in",
              suggestions: ["/main/all"]
            },
            %{
              label: "Redirect root login",
              type: :string,
              description:
-               "relative URL which indicates where to redirect when a user is logged in",
+               "Relative URL which indicates where to redirect when a user is logged in",
              suggestions: ["/main/friends"]
            },
            %{
              key: :scopeOptionsEnabled,
              label: "Scope options enabled",
              type: :boolean,
-             description: "Enable setting an notice visibility and subject/CW when posting"
+             description: "Enable setting a notice visibility and subject/CW when posting"
            },
            %{
              key: :formattingOptionsEnabled,
              label: "Formatting options enabled",
              type: :boolean,
              description:
-               "Enable setting a formatting different than plain-text (ie. HTML, Markdown) when posting, relates to :instance, allowed_post_formats"
+               "Enable setting a formatting different than plain-text (ie. HTML, Markdown) when posting, relates to `:instance`, `allowed_post_formats`"
            },
            %{
              key: :collapseMessageWithSubject,
              label: "Collapse message with subject",
              type: :boolean,
              description:
-               "When a message has a subject(aka Content Warning), collapse it by default"
+               "When a message has a subject (aka Content Warning), collapse it by default"
            },
            %{
              key: :hidePostStats,
              label: "Hide post stats",
              type: :boolean,
-             description: "Hide notices statistics(repeats, favorites, ...)"
+             description: "Hide notices statistics (repeats, favorites, ...)"
            },
            %{
              key: :hideUserStats,
              label: "Hide user stats",
              type: :boolean,
              description:
-               "Hide profile statistics(posts, posts per day, followers, followings, ...)"
+               "Hide profile statistics (posts, posts per day, followers, followings, ...)"
            },
            %{
              key: :scopeCopy,
              label: "Subject line behavior",
              type: :string,
              description: "Allows changing the default behaviour of subject lines in replies.
-           `email`: Copy and preprend re:, as in email,
-           `masto`: Copy verbatim, as in Mastodon,
-           `noop`: Don't copy the subjec",
+           `email`: copy and preprend re:, as in email,
+           `masto`: copy verbatim, as in Mastodon,
+           `noop`: don't copy the subject.",
              suggestions: ["email", "masto", "noop"]
            },
            %{
              key: :alwaysShowSubjectInput,
              label: "Always show subject input",
              type: :boolean,
-             description: "When set to false, auto-hide the subject field when it's empty"
+             description: "When set to `false`, auto-hide the subject field when it's empty"
+           },
+           %{
+             key: :logoMask,
+             label: "Logo mask",
+             type: :boolean,
+             description:
+               "By default it assumes logo used will be monochrome-with-alpha one, this is done to be compatible with both light and dark themes, " <>
+                 "so that white logo designed with dark theme in mind won't be invisible over light theme, this is done via CSS3 Masking. " <>
+                 "Basically - it will take alpha channel of the image and fill non-transparent areas of it with solid color. " <>
+                 "If you really want colorful logo - it can be done by setting logoMask to false."
+           },
+           %{
+             key: :logoMargin,
+             label: "Logo margin",
+             type: :string,
+             description:
+               "allows you to adjust vertical margins between logo boundary and navbar borders. " <>
+                 "The idea is that to have logo's image without any extra margins and instead adjust them to your need in layout.",
+             suggestions: [".1em"]
+           },
+           %{
+             key: :stickers,
+             type: :boolean,
+             description: "Enables/disables stickers."
+           },
+           %{
+             key: :enableEmojiPicker,
+             label: "Emoji picker",
+             type: :boolean,
+             description: "Enables/disables emoji picker."
            }
          ]
        },
          key: :mascots,
          type: {:keyword, :map},
          description:
-           "Keyword of mascots, each element MUST contain both a url and a mime_type key",
+           "Keyword of mascots, each element must contain both an url and a mime_type key",
          suggestions: [
            pleroma_fox_tan: %{
              url: "/images/pleroma-fox-tan-smol.png",
          key: :default_mascot,
          type: :atom,
          description:
-           "This will be used as the default mascot on MastoFE (default: :pleroma_fox_tan)",
+           "This will be used as the default mascot on MastoFE. Default: `:pleroma_fox_tan`",
          suggestions: [
            :pleroma_fox_tan
          ]
          key: :media_nsfw,
          label: "Media NSFW",
          type: {:list, :string},
-         description: "List of instances to put medias as NSFW(sensitive) from",
+         description: "List of instances to put medias as NSFW (sensitive) from",
          suggestions: ["example.com", "*.example.com"]
        },
        %{
          key: :allow_followersonly,
          label: "Allow followers-only",
          type: :boolean,
-         description: "whether to allow followers-only posts"
+         description: "Whether to allow followers-only posts"
        },
        %{
          key: :allow_direct,
          type: :boolean,
-         description: "whether to allow direct messages"
+         description: "Whether to allow direct messages"
        }
      ]
    },
          type: :integer,
          description:
            "Number of mentioned users after which the message gets delisted (the message can still be seen, " <>
-             " but it will not show up in public timelines and mentioned users won't get notifications about it). Set to 0 to disable",
+             " but it will not show up in public timelines and mentioned users won't get notifications about it). Set to 0 to disable.",
          suggestions: [10]
        },
        %{
          key: :reject_threshold,
          type: :integer,
          description:
-           "Number of mentioned users after which the messaged gets rejected. Set to 0 to disable",
+           "Number of mentioned users after which the messaged gets rejected. Set to 0 to disable.",
          suggestions: [20]
        }
      ]
          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: :base_url,
          type: :string,
          description:
-           "The base URL to access a user-uploaded file. Useful when you want to proxy the media files via another host/CDN fronts",
+           "The base URL to access a user-uploaded file. Useful when you want to proxy the media files via another host/CDN fronts.",
          suggestions: ["https://example.com"]
        },
        %{
              type: :boolean,
              description:
                "Redirects the client to the real remote URL if there's any HTTP errors. " <>
-                 "Any error during body processing will not be redirected as the response is chunked"
+                 "Any error during body processing will not be redirected as the response is chunked."
            },
            %{
              key: :max_body_length,
              type: :integer,
              description:
-               "limits the content length to be approximately the " <>
-                 "specified length. It is validated with the `content-length` header and also verified when proxying"
+               "Limits the content length to be approximately the " <>
+                 "specified length. It is validated with the `content-length` header and also verified when proxying."
            },
            %{
              key: :http,
          key: :subject,
          type: :string,
          description:
-           "a mailto link for the administrative contact." <>
+           "A mailto link for the administrative contact." <>
              " It's best if this email is not a personal email address, but rather a group email so that if a person leaves an organization," <>
-             " is unavailable for an extended period, or otherwise can't respond, someone else on the list can",
+             " is unavailable for an extended period, or otherwise can't respond, someone else on the list can.",
          suggestions: ["Subject"]
        },
        %{
      type: :group,
      description:
        "Kocaptcha is a very simple captcha service with a single API endpoint, the source code is" <>
-         " here: https://github.com/koto-bank/kocaptcha. The default endpoint https://captcha.kotobank.ch is hosted by the developer",
+         " here: https://github.com/koto-bank/kocaptcha. The default endpoint (https://captcha.kotobank.ch) is hosted by the developer.",
      children: [
        %{
          key: :endpoint,
          type: :string,
-         description: "the kocaptcha endpoint to use",
+         description: "The kocaptcha endpoint to use",
          suggestions: ["https://captcha.kotobank.ch"]
        }
      ]
      group: :pleroma,
      type: :group,
      description:
-       "Allows to set a token that can be used to authenticate with the admin api without using an actual user by giving it as the 'admin_token' parameter",
+       "Allows to set a token that can be used to authenticate with the admin api without using an actual user by giving it as the `admin_token` parameter",
      children: [
        %{
          key: :admin_token,
        },
        %{
          key: :verbose,
-         type: :boolean,
-         description: "Logs verbose mode"
+         type: :atom,
+         description: "Logs verbose mode",
+         suggestions: [false, :error, :warn, :info, :debug]
        },
        %{
          key: :prune,
          key: :unfurl_nsfw,
          label: "Unfurl NSFW",
          type: :boolean,
-         description: "If set to true nsfw attachments will be shown in previews"
+         description: "If set to `true` NSFW attachments will be shown in previews"
        }
      ]
    },
          key: :ttl_setters,
          label: "TTL setters",
          type: {:list, :module},
-         description: "List of rich media ttl setters.",
+         description: "List of rich media TTL setters.",
          suggestions: [
            Pleroma.Web.RichMedia.Parser.TTL.AwsSignedUrl
          ]
          key: :enabled,
          type: :boolean,
          description:
-           "if enabled, when a new user is federated with, fetch some of their latest posts"
+           "If enabled, when a new user is federated with, fetch some of their latest posts"
        },
        %{
          key: :pages,
          type: :integer,
-         description: "the amount of pages to fetch",
+         description: "The amount of pages to fetch",
          suggestions: [5]
        }
      ]
        %{
          key: :class,
          type: [:string, false],
-         description: "specify the class to be added to the generated link. false to clear",
+         description: "Specify the class to be added to the generated link. `False` to clear",
          suggestions: ["auto-linker", false]
        },
        %{
          key: :rel,
          type: [:string, false],
-         description: "override the rel attribute. false to clear",
+         description: "Override the rel attribute. `False` to clear",
          suggestions: ["ugc", "noopener noreferrer", false]
        },
        %{
          key: :new_window,
          type: :boolean,
-         description: "set to false to remove target='_blank' attribute"
+         description: "Set to `false` to remove target='_blank' attribute"
        },
        %{
          key: :scheme,
          type: :boolean,
-         description: "Set to true to link urls with schema http://google.com"
+         description: "Set to `true` to link urls with schema http://google.com"
        },
        %{
          key: :truncate,
        %{
          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.)"
        }
      ]
    },
          key: :daily_user_limit,
          type: :integer,
          description:
-           "the number of scheduled activities a user is allowed to create in a single day (Default: 25)",
+           "The number of scheduled activities a user is allowed to create in a single day. Default: 25.",
          suggestions: [25]
        },
        %{
          key: :total_user_limit,
          type: :integer,
          description:
-           "the number of scheduled activities a user is allowed to create in total (Default: 300)",
+           "The number of scheduled activities a user is allowed to create in total. Default: 300.",
          suggestions: [300]
        },
        %{
          key: :enabled,
          type: :boolean,
-         description: "whether scheduled activities are sent to the job queue to be executed"
+         description: "Whether scheduled activities are sent to the job queue to be executed"
        }
      ]
    },
        %{
          key: :enabled,
          type: :boolean,
-         description: "whether expired activities will be sent to the job queue to be deleted"
+         description: "Whether expired activities will be sent to the job queue to be deleted"
        }
      ]
    },
      type: :group,
      description:
        "Use LDAP for user authentication. When a user logs in to the Pleroma instance, the name and password" <>
-         " will be verified by trying to authenticate (bind) to an LDAP server." <>
+         " will be verified by trying to authenticate (bind) to a LDAP server." <>
          " If a user exists in the LDAP directory but there is no account with the same name yet on the" <>
          " Pleroma instance then a new Pleroma account will be created with the same name as the LDAP user name.",
      children: [
        %{
          key: :enabled,
          type: :boolean,
-         description: "enables LDAP authentication"
+         description: "Enables LDAP authentication"
        },
        %{
          key: :host,
          key: :ssl,
          label: "SSL",
          type: :boolean,
-         description: "true to use SSL, usually implies the port 636"
+         description: "`True` to use SSL, usually implies the port 636"
        },
        %{
          key: :sslopts,
          label: "SSL options",
          type: :keyword,
-         description: "additional SSL options",
+         description: "Additional SSL options",
          suggestions: [cacertfile: "path/to/file/with/PEM/cacerts", verify: :verify_peer],
          children: [
            %{
          key: :tls,
          label: "TLS",
          type: :boolean,
-         description: "true to start TLS, usually implies the port 389"
+         description: "`True` to start TLS, usually implies the port 389"
        },
        %{
          key: :tlsopts,
          label: "TLS options",
          type: :keyword,
-         description: "additional TLS options",
+         description: "Additional TLS options",
          suggestions: [cacertfile: "path/to/file/with/PEM/cacerts", verify: :verify_peer],
          children: [
            %{
          key: :auth_template,
          type: :string,
          description:
-           "authentication form template. By default it's show.html which corresponds to lib/pleroma/web/templates/o_auth/o_auth/show.html.ee",
+           "Authentication form template. By default it's `show.html` which corresponds to `lib/pleroma/web/templates/o_auth/o_auth/show.html.ee`.",
          suggestions: ["show.html"]
        },
        %{
          key: :oauth_consumer_template,
          type: :string,
          description:
-           "OAuth consumer mode authentication form template. By default it's consumer.html which corresponds to" <>
-             " lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex",
+           "OAuth consumer mode authentication form template. By default it's `consumer.html` which corresponds to" <>
+             " `lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex`.",
          suggestions: ["consumer.html"]
        },
        %{
          key: :oauth_consumer_strategies,
          type: {:list, :string},
          description:
-           "the list of enabled OAuth consumer strategies; by default it's set by OAUTH_CONSUMER_STRATEGIES environment variable." <>
-             " Each entry in this space-delimited string should be of format <strategy> or <strategy>:<dependency>" <>
+           "The list of enabled OAuth consumer strategies; by default it's set by OAUTH_CONSUMER_STRATEGIES environment variable." <>
+             " Each entry in this space-delimited string should be of format \"strategy\" or \"strategy:dependency\"" <>
              " (e.g. twitter or keycloak:ueberauth_keycloak_strategy in case dependency is named differently than ueberauth_<strategy>).",
          suggestions: ["twitter", "keycloak:ueberauth_keycloak_strategy"]
        }
            %{
              key: :active,
              type: :boolean,
-             description: "globally enable or disable digest emails"
+             description: "Globally enable or disable digest emails"
            },
            %{
              key: :schedule,
              type: :string,
              description:
-               "When to send digest email, in crontab format. \"0 0 0\" is the default, meaning \"once a week at midnight on Sunday morning\"",
+               "When to send digest email, in crontab format. \"0 0 0\" is the default, meaning \"once a week at midnight on Sunday morning\".",
              suggestions: ["0 0 * * 0"]
            },
            %{
        %{
          key: :logo,
          type: :string,
-         description: "a path to a custom logo. Set it to nil to use the default Pleroma logo",
+         description: "A path to a custom logo. Set it to `nil` to use the default Pleroma logo.",
          suggestions: ["some/path/logo.png"]
        },
        %{
        %{
          key: :clean_expired_tokens,
          type: :boolean,
-         description: "Enable a background job to clean expired oauth tokens. Defaults to false"
+         description: "Enable a background job to clean expired oauth tokens. Default: `false`."
 -      },
 -      %{
 -        key: :clean_expired_tokens_interval,
 -        type: :integer,
 -        description:
 -          "Interval to run the job to clean expired tokens. Default: 86_400_000 (24 hours).",
 -        suggestions: [86_400_000]
        }
      ]
    },
        %{
          key: :shortcode_globs,
          type: {:list, :string},
-         description: "Location of custom emoji files. * can be used as a wildcard",
+         description: "Location of custom emoji files. * can be used as a wildcard.",
          suggestions: ["/emoji/custom/**/*.png"]
        },
        %{
          key: :groups,
          type: {:keyword, :string, {:list, :string}},
          description:
-           "Emojis are ordered in groups (tags). This is an array of key-value pairs where the key is the groupname" <>
-             " and the value the location or array of locations. * can be used as a wildcard",
+           "Emojis are ordered in groups (tags). This is an array of key-value pairs where the key is the group name" <>
+             " and the value is the location or array of locations. * can be used as a wildcard.",
          suggestions: [
            Custom: ["/emoji/*.png", "/emoji/**/*.png"]
          ]
          type: :string,
          description:
            "Location of the JSON-manifest. This manifest contains information about the emoji-packs you can download." <>
-             " Currently only one manifest can be added (no arrays)",
+             " Currently only one manifest can be added (no arrays).",
          suggestions: ["https://git.pleroma.social/pleroma/emoji-index/raw/master/index.json"]
        },
        %{
        %{
          key: :rum_enabled,
          type: :boolean,
-         description: "If RUM indexes should be used. Defaults to false"
+         description: "If RUM indexes should be used. Default: `false`"
        }
      ]
    },
        %{
          key: :search,
          type: [:tuple, {:list, :tuple}],
-         description: "for the search requests (account & status search etc.)",
+         description: "For the search requests (account & status search etc.)",
          suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
        },
        %{
          key: :app_account_creation,
          type: [:tuple, {:list, :tuple}],
-         description: "for registering user accounts from the same IP address",
+         description: "For registering user accounts from the same IP address",
          suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
        },
        %{
          key: :relations_actions,
          type: [:tuple, {:list, :tuple}],
-         description: "for actions on relations with all users (follow, unfollow)",
+         description: "For actions on relations with all users (follow, unfollow)",
          suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
        },
        %{
          key: :relation_id_action,
          type: [:tuple, {:list, :tuple}],
-         description: "for actions on relation with a specific user (follow, unfollow)",
+         description: "For actions on relation with a specific user (follow, unfollow)",
          suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
        },
        %{
          key: :statuses_actions,
          type: [:tuple, {:list, :tuple}],
          description:
-           "for create / delete / fav / unfav / reblog / unreblog actions on any statuses",
+           "For create / delete / fav / unfav / reblog / unreblog actions on any statuses",
          suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
        },
        %{
          key: :status_id_action,
          type: [:tuple, {:list, :tuple}],
          description:
-           "for fav / unfav or reblog / unreblog actions on the same status by the same user",
+           "For fav / unfav or reblog / unreblog actions on the same status by the same user",
          suggestions: [{1000, 10}, [{10_000, 10}, {10_000, 50}]]
        },
        %{
          key: :authentication,
          type: [:tuple, {:list, :tuple}],
-         description: "for authentication create / password check / user existence check requests",
+         description: "For authentication create / password check / user existence check requests",
          suggestions: [{60_000, 15}]
        }
      ]
        %{
          key: :enabled,
          type: :boolean,
-         description: "Enables ssh"
+         description: "Enables SSH"
        },
        %{
          key: :priv_dir,
          type: :string,
-         description: "Dir with ssh keys",
+         description: "Dir with SSH keys",
          suggestions: ["/some/path/ssh_keys"]
        },
        %{
          key: :user_agent,
          type: [:string, :atom],
          description:
-           "What user agent to use. Must be a string or an atom `:default`. Default value is `:default`",
+           "What user agent to use. Must be a string or an atom `:default`. Default value is `:default`.",
          suggestions: ["Pleroma", :default]
        },
        %{
        %{
          key: :enabled,
          type: :boolean,
-         description: "Enable/disable the plug. Defaults to `false`."
+         description: "Enable/disable the plug. Default: `false`."
        },
        %{
          key: :headers,
          type: {:list, :string},
          description:
-           "A list of strings naming the `req_headers` to use when deriving the `remote_ip`. Order does not matter. Defaults to `~w[forwarded x-forwarded-for x-client-ip x-real-ip]`."
+           "A list of strings naming the `req_headers` to use when deriving the `remote_ip`. Order does not matter. Default: `~w[forwarded x-forwarded-for x-client-ip x-real-ip]`."
        },
        %{
          key: :proxies,
          type: {:list, :string},
          description:
-           "A list of strings in [CIDR](https://en.wikipedia.org/wiki/CIDR) notation specifying the IPs of known proxies. Defaults to `[]`."
+           "A list of strings in [CIDR](https://en.wikipedia.org/wiki/CIDR) notation specifying the IPs of known proxies. Default: `[]`."
        },
        %{
          key: :reserved,
          key: :activity_pub,
          type: :integer,
          description:
-           "activity pub routes (except question activities). Defaults to `nil` (no expiration).",
-         suggestions: [30_000]
+           "Activity pub routes (except question activities). Default: `nil` (no expiration).",
+         suggestions: [30_000, nil]
        },
        %{
          key: :activity_pub_question,
          type: :integer,
-         description:
-           "activity pub routes (question activities). Defaults to `30_000` (30 seconds).",
+         description: "Activity pub routes (question activities). Default: `30_000` (30 seconds).",
          suggestions: [30_000]
        }
      ]