{
    "order": [],
    "sections": {
        "updates": {
            "order": [],
            "meta": {
                "name": "Updates",
                "description": "Settings for update notifications and release channel."
            },
            "settings": {
                "enabled": {
                    "name": "Enabled",
                    "required": true,
                    "requires_restart": true,
                    "type": "bool",
                    "value": true,
                    "description": "Enable/disable updating notifications and downloading/applying updates."
                },
                "channel": {
                    "name": "Release Channel",
                    "required": true,
                    "requires_restart": false,
                    "type": "select",
                    "options": [
                        ["stable", "Stable"],
                        ["unstable", "Unstable"]
                    ],
                    "value": "",
                    "description": "Release channel for updates."
                }
            }
        },
        "jellyfin": {
            "order": [],
            "meta": {
                "name": "Jellyfin",
                "description": "Settings for connecting to Jellyfin"
            },
            "settings": {
                "username": {
                    "name": "Jellyfin Username",
                    "required": true,
                    "requires_restart": true,
                    "type": "text",
                    "value": "username",
                    "description": "It is recommended to create a limited admin account for this program."
                },
                "password": {
                    "name": "Jellyfin Password",
                    "required": true,
                    "requires_restart": true,
                    "type": "password",
                    "value": "password"
                },
                "server": {
                    "name": "Server address",
                    "required": true,
                    "requires_restart": true,
                    "type": "text",
                    "value": "http://jellyfin.local:8096",
                    "description": "Jellyfin server address. Can be public, or local for security purposes."
                },
                "public_server": {
                    "name": "Public address",
                    "required": false,
                    "requires_restart": false,
                    "type": "text",
                    "value": "https://jellyf.in:443",
                    "description": "Publicly accessible Jellyfin address for invite form. Leave blank to reuse the above address."
                },
                "client": {
                    "name": "Client Name",
                    "required": true,
                    "requires_restart": true,
                    "advanced": true,
                    "type": "text",
                    "value": "jfa-go",
                    "description": "The name of the client that will show up in the Jellyfin dashboard."
                },
                "cache_timeout": {
                    "name": "User cache timeout (minutes)",
                    "required": false,
                    "requires_restart": true,
                    "advanced": true,
                    "type": "number",
                    "value": 30,
                    "description": "Timeout of user cache in minutes. Set to 0 to disable."
                },
                "type": {
                    "name": "Server type",
                    "required": false,
                    "requires_restart": true,
                    "type": "select",
                    "options": [
                        ["jellyfin", "Jellyfin"],
                        ["emby", "Emby"]
                    ],
                    "value": "jellyfin",
                    "description": "Note: Emby integration works but is missing some features, such as Password Resets."
                },
                "substitute_jellyfin_strings": {
                    "name": "Substitute occurrences of \"Jellyfin\"",
                    "required": false,
                    "requires_restart": true,
                    "type": "text",
                    "value": "",
                    "description": "Optionally substitute occurrences of \"Jellyfin\" in the account creation form and emails with this. May result in bad grammar."
                }
            }
        },
        "ui": {
            "order": [],
            "meta": {
                "name": "General",
                "description": "Settings related to the UI and program functionality."
            },
            "settings": {
                "language-form": {
                    "name": "Default Form Language",
                    "required": false,
                    "requires_restart": true,
                    "type": "select",
                    "options": [
                        ["en-us", "English (US)"]
                    ],
                    "value": "en-us",
                    "description": "Default Account Form Language. Visit weblate.jfa-go.com if you'd like to translate."
                },
                "language-admin": {
                    "name": "Default Admin Language",
                    "required": false,
                    "requires_restart": true,
                    "type": "select",
                    "options": [
                        ["en-us", "English (US)"]
                    ],
                    "value": "en-us",
                    "description": "Default Admin page Language. Settings has not been translated. Visit weblate.jfa-go.com if you'd like to translate."
                },
                "theme": {
                    "name": "Default Look",
                    "required": false,
                    "requires_restart": true,
                    "type": "select",
                    "options": [
                        ["Jellyfin (Dark)", "Jellyfin (Dark)"],
                        ["Default (Light)", "Default (Light)"]
                    ],
                    "value": "Jellyfin (Dark)",
                    "description": "Default appearance for all users."
                },
                "host": {
                    "name": "Address",
                    "required": true,
                    "requires_restart": true,
                    "type": "text",
                    "value": "0.0.0.0",
                    "description": "Set 0.0.0.0 to run on localhost"
                },
                "port": {
                    "name": "Port",
                    "required": true,
                    "requires_restart": true,
                    "type": "number",
                    "value": 8056
                },
                "jellyfin_login": {
                    "name": "Use Jellyfin for authentication",
                    "required": false,
                    "requires_restart": true,
                    "type": "bool",
                    "value": true,
                    "description": "Enable this to use Jellyfin users instead of the below username and pw."
                },
                "admin_only": {
                    "name": "Allow admin users only",
                    "required": false,
                    "requires_restart": true,
                    "depends_true": "jellyfin_login",
                    "type": "bool",
                    "value": true,
                    "description": "Allows only admin users on Jellyfin to access the admin page."
                },
                "allow_all": {
                    "name": "Allow all users to login",
                    "required": false,
                    "requires_restart": true,
                    "depends_true": "jellyfin_login",
                    "type": "bool",
                    "value": false,
                    "description": "Allow all Jellyfin users to access jfa-go. Not recommended, add individual users in the Accounts tab instead."
                },
                "username": {
                    "name": "Web Username",
                    "required": true,
                    "requires_restart": true,
                    "depends_false": "jellyfin_login",
                    "type": "text",
                    "value": "your username",
                    "description": "Username for admin page (Leave blank if using jellyfin_login)"
                },
                "password": {
                    "name": "Web Password",
                    "required": true,
                    "requires_restart": true,
                    "depends_false": "jellyfin_login",
                    "type": "password",
                    "value": "your password",
                    "description": "Password for admin page (Leave blank if using jellyfin_login)"
                },
                "email": {
                    "name": "Admin email address",
                    "required": false,
                    "requires_restart": false,
                    "depends_false": "jellyfin_login",
                    "type": "text",
                    "value": "example@example.com",
                    "description": "Address to send notifications to (Leave blank if using jellyfin_login)"
                },
                "debug": {
                    "name": "Debug logging",
                    "required": false,
                    "requires_restart": true,
                    "type": "bool",
                    "value": false,
                    "description": "Enables debug logging and exposes pprof as a route (Don't use in production!)"
                },
                "contact_message": {
                    "name": "Contact message",
                    "required": false,
                    "requires_restart": false,
                    "type": "text",
                    "value": "Need help? contact me.",
                    "description": "Displayed at bottom of all pages except admin"
                },
                "help_message": {
                    "name": "Help message",
                    "required": false,
                    "requires_restart": false,
                    "type": "text",
                    "value": "Enter your details to create an account.",
                    "description": "Displayed at top of invite form."
                },
                "success_message": {
                    "name": "Success message",
                    "required": false,
                    "requires_restart": false,
                    "type": "text",
                    "value": "Your account has been created. Click below to continue to Jellyfin.",
                    "description": "Displayed when a user creates an account"
                },
                "url_base": {
                    "name": "Reverse Proxy subfolder",
                    "required": false,
                    "requires_restart": true,
                    "type": "text",
                    "value": "",
                    "description": "URL base for when running jfa-go with a reverse proxy in a subfolder. include preceding /, e.g \"/accounts\"."
                },
                "redirect_url": {
                    "name": "Form success redirect URL",
                    "required": false,
                    "requires_restart": false,
                    "type": "text",
                    "value": "",
                    "advanced": true,
                    "description": "Set a different URL for the sign-up form to redirect the user to when they've signed up. Default to 'Public Server' or 'Server' in the Jellyfin tab."
                },
                "auto_redirect": {
                    "name": "Auto redirect on success",
                    "required": false,
                    "requires_restart": true,
                    "type": "bool",
                    "value": false,
                    "advanced": true,
                    "description": "Navigate directly to the above URL instead of needing the user to click \"Continue\"."
                },
                "login_appearance": {
                    "name": "Login screen appearance",
                    "required": false,
                    "requires_restart": false,
                    "type": "select",
                    "options": [
                        ["clear", "Transparent"],
                        ["opaque", "Opaque"]
                    ],
                    "value": "clear",
                    "description": "Appearance of the Admin login screen."
                }
            }
        },
        "advanced": {
            "order": [],
            "meta": {
                "name": "Advanced",
                "description": "Advanced settings.",
                "advanced": true
            },
            "settings": {
                "tls": {
                    "name": "TLS/HTTP2",
                    "required": false,
                    "requires_restart": true,
                    "type": "bool",
                    "value": false,
                    "description": "Enable TLS."
                },
                "tls_port": {
                    "name": "TLS Port",
                    "depends_true": "tls",
                    "required": false,
                    "requires_restart": true,
                    "type": "number",
                    "value": 8057,
                    "description": "Port to run TLS server on"
                },
                "tls_cert": {
                    "name": "Path to TLS Certificate",
                    "depends_true": "tls",
                    "required": false,
                    "requires_restart": true,
                    "type": "text",
                    "value": "",
                    "description": "Path to .crt file. See jfa-go wiki for more info."
                },
                "tls_key": {
                    "name": "Path to TLS Key file",
                    "depends_true": "tls",
                    "required": false,
                    "requires_restart": true,
                    "type": "text",
                    "value": "",
                    "description": "Path to .key file. See jfa-go wiki for more info."
                },
                "auth_retry_count": {
                    "name": "Initial auth retry count",
                    "required": false,
                    "requires_restart": true,
                    "type": "number",
                    "value": 6,
                    "description": "Number of times to retry initial connection to Jellyfin before failing."
                },
                "auth_retry_gap": {
                    "name": "Initial auth retry gap (seconds)",
                    "required": false,
                    "requires_restart": true,
                    "type": "number",
                    "value": 10,
                    "description": "Duration in seconds to wait between connection retries."
                },
                "proxy": {
                    "name": "Use Proxy",
                    "required": false,
                    "requires_restart": true,
                    "type": "bool",
                    "value": false,
                    "description": "Whether or not to use a HTTP/SOCKS5 Proxy."
                },
                "proxy_protocol": {
                    "name": "Proxy Protocol",
                    "depends_true": "proxy",
                    "required": false,
                    "requires_restart": true,
                    "type": "select",
                    "options": [
                        ["http", "HTTP"],
                        ["socks", "SOCKS5"]
                    ],
                    "value": "http",
                    "description": "Protocol to use for proxy connection."
                },
                "proxy_address": {
                    "name": "Proxy Address",
                    "depends_true": "proxy",
                    "required": false,
                    "requires_restart": true,
                    "type": "text",
                    "value": "",
                    "description": "Proxy address, including port."
                },
                "proxy_user": {
                    "name": "Proxy Username",
                    "depends_true": "proxy",
                    "required": false,
                    "requires_restart": true,
                    "type": "text",
                    "value": "",
                    "description": "Leave blank for no Authentication."
                },
                "proxy_password": {
                    "name": "Proxy Password",
                    "depends_true": "proxy",
                    "required": false,
                    "requires_restart": true,
                    "type": "password",
                    "value": "",
                    "description": "Leave blank for no Authentication."
                }
            }
        },
        "captcha": {
            "order": [],
            "meta": {
                "name": "Captcha",
                "description": "Settings related to user creation CAPTCHAs."
            },
            "settings": {
                "enabled": {
                    "name": "Enabled",
                    "required": false,
                    "requires_restart": true,
                    "type": "bool",
                    "value": false,
                    "description": "Enable a CAPTCHA on the account creation form."
                },
                "recaptcha": {
                    "name": "Use Google reCAPTCHA",
                    "required": false,
                    "requires_restart": true,
                    "type": "bool",
                    "depends_true": "enabled",
                    "value": false,
                    "description": "More reliable, but requires some setup. See jfa-go wiki for more info."
                },
                "recaptcha_site_key": {
                    "name": "reCAPTCHA Site Key",
                    "required": false,
                    "requires_restart": true,
                    "type": "text",
                    "depends_true": "recaptcha",
                    "value": "",
                    "description": "Site Key, see jfa-go wiki for how to acquire one."
                },
                "recaptcha_secret_key": {
                    "name": "reCAPTCHA Secret Key",
                    "required": false,
                    "requires_restart": true,
                    "type": "text",
                    "depends_true": "recaptcha",
                    "value": "",
                    "description": "Secret Key, see jfa-go wiki for how to acquire one."
                },
                "recaptcha_hostname": {
                    "name": "Hostname",
                    "required": false,
                    "requires_restart": true,
                    "type": "text",
                    "depends_true": "recaptcha",
                    "value": "",
                    "description": "Public host-name of jfa-go, e.g. \"site.com\". Don't include any subpaths."
                }
            }
        },
        "user_page": {
            "order": [],
            "meta": {
                "name": "User Page/\"My Account\"",
                "description": "The User Page (My Account) allows users to access and modify info directly, such as changing/adding contact methods, seeing their expiry date, sending referrals or changing their password. Password resets can also be initiated from here, given a contact method or username. ",
                "depends_true": "ui|jellyfin_login"
            },
            "settings": {
                "enabled": {
                    "name": "Enabled",
                    "required": false,
                    "requires_restart": true,
                    "type": "bool",
                    "value": true
                },
                "jellyfin_login_note": {
                    "name": "Note:",
                    "type": "note",
                    "value": "",
                    "depends_true": "enabled",
                    "required": "false",
                    "description": "Jellyfin Login must be enabled to use this feature, and password resets with a link must be enabled for self-service.",
                    "style": "critical"
                },
                "edit_note": {
                    "name": "Message Cards:",
                    "type": "note",
                    "value": "",
                    "depends_true": "enabled",
                    "required": "false",
                    "description": "Click the edit icon next to the \"User Page\" Setting to add custom Markdown messages that will be shown to the user. Note message cards are not private, little effort is required for anyone to view them."
                },
                "show_link": {
                    "name": "Show Link on Admin Login page",
                    "required": false,
                    "requires_restart": false,
                    "type": "bool",
                    "value": true,
                    "description": "Whether or not to show a link to the \"My Account\" page on the admin login screen, to direct lost users."
                },
                "referrals": {
                    "name": "User Referrals",
                    "required": false,
                    "requires_restart": true,
                    "type": "bool",
                    "value": true,
                    "description": "Users are given their own \"invite\" to send to others."
                },
                "referrals_note": {
                    "name": "Using Referrals:",
                    "type": "note",
                    "value": "",
                    "depends_true": "referrals",
                    "required": "false",
                    "description": "Create an invite with your desired settings, then either assign it to a user in the accounts tab, or to a profile in settings."
                }
            }
        },
        "password_validation": {
            "order": [],
            "meta": {
                "name": "Password Validation",
                "description": "Password validation (minimum length, etc.)"
            },
            "settings": {
                "enabled": {
                    "name": "Enabled",
                    "required": false,
                    "requires_restart": false,
                    "type": "bool",
                    "value": true
                },
                "min_length": {
                    "name": "Minimum Length",
                    "requires_restart": false,
                    "depends_true": "enabled",
                    "type": "text",
                    "value": "8"
                },
                "upper": {
                    "name": "Minimum uppercase characters",
                    "requires_restart": false,
                    "depends_true": "enabled",
                    "type": "text",
                    "value": "1"
                },
                "lower": {
                    "name": "Minimum lowercase characters",
                    "requires_restart": false,
                    "depends_true": "enabled",
                    "type": "text",
                    "value": "0"
                },
                "number": {
                    "name": "Minimum number count",
                    "requires_restart": false,
                    "depends_true": "enabled",
                    "type": "text",
                    "value": "1"
                },
                "special": {
                    "name": "Minimum number of special characters",
                    "requires_restart": false,
                    "depends_true": "enabled",
                    "type": "text",
                    "value": "0"
                }
            }
        },
        "messages": {
            "order": [],
            "meta": {
                "name": "Messages/Notifications",
                "description": "General settings for emails/messages."
            },
            "settings": {
                "enabled": {
                    "name": "Enabled",
                    "required": true,
                    "requires_restart": true,
                    "type": "bool",
                    "value": true,
                    "description": "Enable the sending of emails/messages such as password resets, announcements, etc."
                },
                "use_24h": {
                    "name": "Use 24h time",
                    "required": false,
                    "requires_restart": false,
                    "depends_true": "method",
                    "type": "bool",
                    "value": true
                },
                "date_format": {
                    "name": "Date format",
                    "required": false,
                    "requires_restart": false,
                    "advanced": true,
                    "depends_true": "method",
                    "type": "text",
                    "value": "%d/%m/%y",
                    "description": "Date format used in emails. Follows datetime.strftime format."
                },
                "message": {
                    "name": "Help message",
                    "required": false,
                    "requires_restart": false,
                    "depends_true": "method",
                    "type": "text",
                    "value": "Need help? contact me.",
                    "description": "Message displayed at bottom of emails."
                },
                "edit_note": {
                    "name": "Customize Messages:",
                    "type": "note",
                    "value": "",
                    "depends_true": "enabled",
                    "required": "false",
                    "description": "Click the edit icon next to the \"Messages/Notifications\" Setting to customize the messages sent to users with Markdown."
                }
            }
        },
        "email": {
            "order": [],
            "meta": {
                "name": "Email",
                "description": "General email settings.",
                "depends_true": "messages|enabled"
            },
            "settings": {
                "language": {
                    "name": "Email Language",
                    "required": false,
                    "requires_restart": false,
                    "depends_true": "method",
                    "type": "select",
                    "options": [
                        ["en-us", "English (US)"]
                    ],
                    "value": "en-us",
                    "description": "Default email language. Submit a PR on github if you'd like to translate."
                },
                "no_username": {
                    "name": "Use email addresses as username",
                    "required": false,
                    "requires_restart": false,
                    "depends_true": "method",
                    "type": "bool",
                    "value": false,
                    "description": "Use email address from invite form as username on Jellyfin."
                },
                "method": {
                    "name": "Email method",
                    "required": false,
                    "requires_restart": false,
                    "type": "select",
                    "options": [
                        ["", "Disabled"],
                        ["smtp", "SMTP"],
                        ["mailgun", "Mailgun"]
                    ],
                    "value": "smtp",
                    "description": "Method of sending email to use."
                },
                "address": {
                    "name": "Sent from (address)",
                    "required": false,
                    "requires_restart": false,
                    "depends_true": "method",
                    "type": "email",
                    "value": "jellyfin@jellyf.in",
                    "description": "Address to send emails from"
                },
                "from": {
                    "name": "Sent from (name)",
                    "required": false,
                    "requires_restart": false,
                    "depends_true": "method",
                    "type": "text",
                    "value": "Jellyfin",
                    "description": "The name of the sender"
                },
                "plaintext": {
                    "name": "Send emails as plain text",
                    "required": false,
                    "requires_restart": false,
                    "advanced": true,
                    "depends_true": "method",
                    "type": "bool",
                    "value": false,
                    "description": "Send emails as plain text instead of HTML."
                },
                "required": {
                    "name": "Require on sign-up",
                    "required": false,
                    "requires_restart": false,
                    "depends_true": "method",
                    "type": "bool",
                    "value": false,
                    "description": "Require an email address on sign-up."
                },
                "require_unique": {
                    "name": "Require unique address",
                    "required": false,
                    "requires_restart": true,
                    "type": "bool",
                    "value": false,
                    "description": "Disables using the same address on multiple accounts."
                }
            }
        },
        "mailgun": {
            "order": [],
            "meta": {
                "name": "Mailgun (Email)",
                "description": "Mailgun API connection settings",
                "depends_true": "email|method"
            },
            "settings": {
                "api_url": {
                    "name": "API URL",
                    "required": false,
                    "requires_restart": false,
                    "type": "text",
                    "value": "https://api.mailgun.net..."
                },
                "api_key": {
                    "name": "API Key",
                    "required": false,
                    "requires_restart": false,
                    "type": "text",
                    "value": "your api key"
                }
            }
        },
        "smtp": {
            "order": [],
            "meta": {
                "name": "SMTP (Email)",
                "description": "SMTP Server connection settings.",
                "depends_true": "email|method"
            },
            "settings": {
                "username": {
                    "name": "Username",
                    "required": false,
                    "requires_restart": false,
                    "type": "text",
                    "value": "",
                    "description": "Username for SMTP. Leave blank to user send from address as username."
                },
                "encryption": {
                    "name": "Encryption Method",
                    "required": false,
                    "requires_restart": false,
                    "type": "select",
                    "options": [
                        ["ssl_tls", "SSL/TLS"],
                        ["starttls", "STARTTLS"]
                    ],
                    "value": "starttls",
                    "description": "Your email provider should provide different ports for each encryption method. Generally 465 for ssl_tls, 587 for starttls."
                },
                "server": {
                    "name": "Server address",
                    "required": false,
                    "requires_restart": false,
                    "type": "text",
                    "value": "smtp.jellyf.in",
                    "description": "SMTP Server address."
                },
                "port": {
                    "name": "Port",
                    "required": false,
                    "requires_restart": false,
                    "type": "number",
                    "value": 465
                },
                "password": {
                    "name": "Password",
                    "required": false,
                    "requires_restart": false,
                    "type": "password",
                    "value": "smtp password"
                },
                "hello_hostname": {
                    "name": "HELLO Hostname",
                    "required": false,
                    "requires_restart": false,
                    "advanced": true,
                    "type": "text",
                    "value": "localhost",
                    "description": "Hostname sent when sending HELLO to the SMTP server. Some servers don't like the default \"localhost\" value, such as smtp-relay.gmail.com."
                },
                "ssl_cert": {
                    "name": "Path to custom SSL certificate",
                    "required": false,
                    "requires_restart": false,
                    "advanced":  true,
                    "type": "text",
                    "value": "",
                    "description": "Use if your SMTP server's SSL Certificate is not trusted by the system."
                },
                "cert_validation": {
                    "name": "Verify certificate",
                    "required": false,
                    "requires_restart": false,
                    "advanced": true,
                    "type": "bool",
                    "value": true,
                    "description": "Warning, disabling this makes you much more vulnerable to man-in-the-middle attacks"
                }
            }
        },
        "discord": {
            "order": [],
            "meta": {
                "name": "Discord",
                "description": "Settings for Discord invites/signup/notifications"
            },
            "settings": {
                "enabled": {
                    "name": "Enabled",
                    "required": false,
                    "requires_restart": true,
                    "type": "bool",
                    "value": false,
                    "description": "Enable signup verification through Discord and the sending of notifications through it.\nSee the jfa-go wiki for setting up a bot."
                },
                "show_on_reg": {
                    "name": "Show on user registration",
                    "required": false,
                    "requires_restart": true,
                    "type": "bool",
                    "depends_true": "enabled",
                    "value": true,
                    "description": "Allow users to link their Discord on the registration page."
                },
                "required": {
                    "name": "Require on sign-up",
                    "required": false,
                    "requires_restart": true,
                    "depends_true": "enabled",
                    "type": "bool",
                    "value": false,
                    "description": "Require Discord connection on sign-up. See the jfa-go wiki for info on setting this up."
                },
                "require_unique": {
                    "name": "Require unique user",
                    "required": false,
                    "requires_restart": true,
                    "type": "bool",
                    "value": false,
                    "description": "Disables using the same user on multiple Jellyfin accounts."
                },
                "token": {
                    "name": "API Token",
                    "required": false,
                    "requires_restart": true,
                    "depends_true": "enabled",
                    "type": "text",
                    "value": "",
                    "description": "Discord Bot API Token."
                },
                "start_command": {
                    "name": "Start command",
                    "required": false,
                    "requires_restart": true,
                    "depends_true": "enabled",
                    "type": "text",
                    "value": "start",
                    "description": "Command to start the user verification process."
                },
                "channel": {
                    "name": "Channel to monitor",
                    "required": false,
                    "requires_restart": true,
                    "depends_true": "enabled",
                    "type": "text",
                    "value": "",
                    "description": "Only listen to commands in specified channel. Leave blank to monitor all."
                },
                "provide_invite": {
                    "name": "Provide server invite",
                    "required": false,
                    "requires_restart": true,
                    "depends_true": "enabled",
                    "type": "bool",
                    "value": false,
                    "description": "Generate a one-time discord server invite for the account creation form. Required Bot permission \"Create instant invite\", you may need to re-add the bot to your server after."
                },
                "invite_channel": {
                    "name": "Invite channel",
                    "required": false,
                    "requires_restart": true,
                    "depends_true": "provide_invite",
                    "type": "text",
                    "value": "",
                    "description": "Channel to invite new users to."
                },
                "apply_role": {
                    "name": "Apply Role on connection",
                    "required": false,
                    "requires_restart": true,
                    "depends_true": "enabled",
                    "type": "select",
                    "options": [
                        ["", "None"]
                    ],
                    "value": "",
                    "description": "Add the selected role to a user when they sign up."
                },
                "language": {
                    "name": "Language",
                    "required": false,
                    "requires_restart": false,
                    "depends_true": "enabled",
                    "type": "select",
                    "options": [
                        ["en-us", "English (US)"]
                    ],
                    "value": "en-us",
                    "description": "Default Discord message language. Visit weblate if you'd like to translate."
                }
            }
        },
        "telegram": {
            "order": [],
            "meta": {
                "name": "Telegram",
                "description": "Settings for Telegram signup/notifications. See the jfa-go wiki for info on setting this up."
            },
            "settings": {
                "enabled": {
                    "name": "Enabled",
                    "required": false,
                    "requires_restart": true,
                    "type": "bool",
                    "value": false,
                    "description": "Enable signup verification through Telegram and the sending of notifications through it.\nSee the jfa-go wiki for setting up a bot."
                },
                "show_on_reg": {
                    "name": "Show on user registration",
                    "required": false,
                    "requires_restart": true,
                    "type": "bool",
                    "depends_true": "enabled",
                    "value": true,
                    "description": "Allow users to link their Telegram on the registration page."
                },
                "required": {
                    "name": "Require on sign-up",
                    "required": false,
                    "required_restart": true,
                    "depends_true": "enabled",
                    "type": "bool",
                    "value": false,
                    "description": "Require telegram connection on sign-up."
                },
                "require_unique": {
                    "name": "Require unique user",
                    "required": false,
                    "requires_restart": true,
                    "type": "bool",
                    "value": false,
                    "description": "Disables using the same user on multiple Jellyfin accounts."
                },
                "token": {
                    "name": "API Token",
                    "required": false,
                    "requires_restart": true,
                    "depends_true": "enabled",
                    "type": "text",
                    "value": "",
                    "description": "Telegram Bot API Token."
                },
                "language": {
                    "name": "Language",
                    "required": false,
                    "requires_restart": false,
                    "depends_true": "enabled",
                    "type": "select",
                    "options": [
                        ["en-us", "English (US)"]
                    ],
                    "value": "en-us",
                    "description": "Default telegram message language. Visit weblate if you'd like to translate."
                }
            }
        },
        "matrix": {
            "order": [],
            "meta": {
                "name": "Matrix",
                "description": "Settings for Matrix invites/signup/notifications. See the jfa-go wiki for info on setting this up."
            },
            "settings": {
                "enabled": {
                    "name": "Enabled",
                    "required": false,
                    "requires_restart": true,
                    "type": "bool",
                    "value": false,
                    "description": "Enable signup verification through Matrix and the sending of notifications through it.\nSee the jfa-go wiki for setting up a bot."
                },
                "show_on_reg": {
                    "name": "Show on user registration",
                    "required": false,
                    "requires_restart": true,
                    "type": "bool",
                    "depends_true": "enabled",
                    "value": true,
                    "description": "Allow users to link their Matrix on the registration page."
                },
                "required": {
                    "name": "Require on sign-up",
                    "required": false,
                    "required_restart": true,
                    "depends_true": "enabled",
                    "type": "bool",
                    "value": false,
                    "description": "Require Matrix connection on sign-up."
                },
                "require_unique": {
                    "name": "Require unique user",
                    "required": false,
                    "requires_restart": true,
                    "type": "bool",
                    "value": false,
                    "description": "Disables using the same user on multiple Jellyfin accounts."
                },
                "homeserver": {
                    "name": "Home Server URL",
                    "required": false,
                    "requires_restart": true,
                    "depends_true": "enabled",
                    "type": "text",
                    "value": "",
                    "description": "Matrix Home server URL."
                },
                "token": {
                    "name": "Access Token",
                    "required": false,
                    "requires_restart": true,
                    "depends_true": "enabled",
                    "type": "text",
                    "value": "",
                    "description": "Matrix Bot API Token."
                },
                "user_id": {
                    "name": "Bot User ID",
                    "required": false,
                    "requires_restart": true,
                    "depends_true": "enabled",
                    "type": "text",
                    "value": "",
                    "description": "User ID of bot account (Example: @jfa-bot:riot.im)"
                },
                "topic": {
                    "name": "Chat topic",
                    "required": false,
                    "requires_restart": true,
                    "depends_true": "enabled",
                    "type": "text",
                    "value": "Jellyfin notifications",
                    "description": "Topic of Matrix private chats."
                },
                "language": {
                    "name": "Language",
                    "required": false,
                    "requires_restart": false,
                    "depends_true": "enabled",
                    "type": "select",
                    "options": [
                        ["en-us", "English (US)"]
                    ],
                    "value": "en-us",
                    "description": "Default Matrix message language. Visit weblate if you'd like to translate."
                },
                "encryption": {
                    "name": "End-to-end encryption (experimental)",
                    "required": false,
                    "requires_restart": true,
                    "depends_true": "enabled",
                    "advanced": true,
                    "type": "bool",
                    "value": false,
                    "description": "Enable end-to-end encryption for messages. Very experimental, currently does not support receiving commands (e.g !lang)."
                }
            }
        },
        "password_resets": {
            "order": [],
            "meta": {
                "name": "Password Resets",
                "description": "Settings for the password reset handler.",
                "depends_true": "messages|enabled"
            },
            "settings": {
                "enabled": {
                    "name": "Enabled",
                    "required": false,
                    "requires_restart": true,
                    "type": "bool",
                    "value": true,
                    "description": "Enable to store provided email addresses, monitor Jellyfin directory for pw-resets, and send reset pins"
                },
                "pwr_note": {
                    "name": "Setup:",
                    "type": "note",
                    "value": "",
                    "depends_true": "enabled",
                    "required": "false",
                    "description": "There are multiple ways password resets can be set up. See the <a href=\"https://wiki.jfa-go.com/docs/pwr/\" target=\"_blank\">wiki page</a> for more information."
                },
                "watch_directory": {
                    "name": "Jellyfin directory",
                    "required": false,
                    "requires_restart": true,
                    "depends_true": "enabled",
                    "type": "text",
                    "value": "/path/to/jellyfin",
                    "description": "Path to the folder Jellyfin puts password-reset files."
                },
                "link_reset": {
                    "name": "Use reset link instead of PIN (Required for Ombi)",
                    "required": false,
                    "requires_restart": true,
                    "depends_true": "enabled",
                    "type": "bool",
                    "value": false,
                    "description": "Send users a link to reset their password instead of a PIN. Must be enabled to reset Ombi password at the same time as the Jellyfin password."
                },
                "set_password": {
                    "name": "Set password through link",
                    "required": false,
                    "requires_restart": true,
                    "depends_true": "link_reset",
                    "type": "bool",
                    "value": false,
                    "description": "Instead of automatically setting the user's password to the PIN, allow them to set a new password through the reset link."
                },
                "url_base": {
                    "name": "URL Base",
                    "required": true,
                    "requires_restart": false,
                    "depends_true": "link_reset",
                    "type": "text",
                    "value": "http://accounts.jellyf.in:8056",
                    "description": "Base URL for jfa-go. You can leave this if you have one set in \"Invite Emails\". This is necessary because using a reverse proxy means the program has no way of knowing the URL itself."
                },
                "language": {
                    "name": "Default reset link language",
                    "required": false,
                    "requires_restart": true,
                    "depends_true": "link_reset",
                    "type": "select",
                    "options": [
                        ["en-us", "English (US)"]
                    ],
                    "value": "en-us",
                    "description": "Default language for password reset success screen."
                },
                "email_html": {
                    "name": "Custom email (HTML)",
                    "required": false,
                    "requires_restart": false,
                    "advanced": true,
                    "depends_true": "enabled",
                    "type": "text",
                    "value": "",
                    "description": "Path to custom email html"
                },
                "email_text": {
                    "name": "Custom email (plaintext)",
                    "required": false,
                    "requires_restart": false,
                    "advanced": true,
                    "depends_true": "enabled",
                    "type": "text",
                    "value": "",
                    "description": "Path to custom email in plain text"
                },
                "subject": {
                    "name": "Email subject",
                    "required": false,
                    "requires_restart": false,
                    "depends_true": "enabled",
                    "type": "text",
                    "value": "",
                    "description": "Subject of password reset emails."
                }
            }
        },
        "invite_emails": {
            "order": [],
            "meta": {
                "name": "Invite emails",
                "description": "Settings for sending invites directly to users.",
                "depends_true": "email|method"
            },
            "settings": {
                "enabled": {
                    "name": "Enabled",
                    "required": false,
                    "requires_restart": false,
                    "type": "bool",
                    "value": true
                },
                "email_html": {
                    "name": "Custom email (HTML)",
                    "required": false,
                    "requires_restart": false,
                    "advanced": true,
                    "depends_true": "enabled",
                    "type": "text",
                    "value": "",
                    "description": "Path to custom email HTML"
                },
                "email_text": {
                    "name": "Custom email (plaintext)",
                    "required": false,
                    "requires_restart": false,
                    "advanced": true,
                    "depends_true": "enabled",
                    "type": "text",
                    "value": "",
                    "description": "Path to custom email in plain text"
                },
                "subject": {
                    "name": "Email subject",
                    "required": true,
                    "requires_restart": false,
                    "depends_true": "enabled",
                    "type": "text",
                    "value": "",
                    "description": "Subject of invite emails."
                },
                "url_base": {
                    "name": "URL Base",
                    "required": true,
                    "requires_restart": false,
                    "depends_true": "enabled",
                    "type": "text",
                    "value": "http://accounts.jellyf.in:8056",
                    "description": "Base URL for jfa-go. This is necessary because using a reverse proxy means the program has no way of knowing the URL itself."
                }
            }
        },
        "template_email": {
            "order": [],
            "meta": {
                "name": "Custom email template",
                "description": "Settings for the template used for announcements & custom messages. HTML should include {{ .text }}, Plaintext should include {{ .plaintext }}, and either can have {{ .message }} to include the contact message.",
                "advanced": true
            },
            "settings": {
                "email_html": {
                    "name": "Custom template email (HTML)",
                    "required": false,
                    "requires_restart": false,
                    "advanced": true,
                    "depends_true": "enabled",
                    "type": "text",
                    "value": "",
                    "description": "Path to custom email HTML template for announcements/custom messages."
                },
                "email_text": {
                    "name": "Custom template email (plaintext)",
                    "required": false,
                    "requires_restart": false,
                    "advanced": true,
                    "depends_true": "enabled",
                    "type": "text",
                    "value": "",
                    "description": "Path to custom email text template for announcements/custom messages."
                }
            }
        },
        "notifications": {
            "order": [],
            "meta": {
                "name": "Notifications",
                "description": "Notification related settings.",
                "depends_true": "messages|enabled"
            },
            "settings": {
                "enabled": {
                    "name": "Enabled",
                    "required": "false",
                    "requires_restart": true,
                    "type": "bool",
                    "value": true,
                    "description": "Enabling adds optional toggles to invites to notify on expiry and user creation."
                },
                "expiry_html": {
                    "name": "Expiry email (HTML)",
                    "required": false,
                    "requires_restart": false,
                    "advanced":  true,
                    "depends_true": "enabled",
                    "type": "text",
                    "value": "",
                    "description": "Path to expiry notification email HTML."
                },
                "expiry_text": {
                    "name": "Expiry email (Plaintext)",
                    "required": false,
                    "requires_restart": "false",
                    "advanced":  true,
                    "depends_true": "enabled",
                    "type": "text",
                    "value": "",
                    "description": "Path to expiry notification email in plaintext."
                },
                "created_html": {
                    "name": "User created email (HTML)",
                    "required": false,
                    "requires_restart": false,
                    "advanced":  true,
                    "depends_true": "enabled",
                    "type": "text",
                    "value": "",
                    "description": "Path to user creation notification email HTML."
                },
                "created_text": {
                    "name": "User created email (Plaintext)",
                    "required": false,
                    "requires_restart": false,
                    "advanced":  true,
                    "depends_true": "enabled",
                    "type": "text",
                    "value": "",
                    "description": "Path to user creation notification email in plaintext."
                }
            }
        },
        "ombi": {
            "order": [],
            "meta": {
                "name": "Ombi Integration",
                "description": "Connect to Ombi to automatically create both Ombi and Jellyfin accounts for new users. You'll need to add a ombi template to an existing User Profile for accounts to be created, which you can do by refreshing then checking Settings > User Profiles. To handle password resets for Ombi & Jellyfin, enable \"Use reset link instead of PIN\"."
            },
            "settings": {
                "enabled": {
                    "name": "Enabled",
                    "required": false,
                    "requires_restart": true,
                    "type": "bool",
                    "value": false,
                    "description": "Enable to create an Ombi account for new Jellyfin users"
                },
                "server": {
                    "name": "URL",
                    "required": false,
                    "requires_restart": true,
                    "type": "text",
                    "value": "localhost:5000",
                    "depends_true": "enabled",
                    "description": "Ombi server URL, including http(s)://."
                },
                "api_key": {
                    "name": "API Key",
                    "required": false,
                    "requires_restart": true,
                    "type": "text",
                    "value": "",
                    "depends_true": "enabled",
                    "description": "API Key. Get this from the first tab in Ombi settings."
                }
            }
        },
        "welcome_email": {
            "order": [],
            "meta": {
                "name": "Welcome Message",
                "description": "Optionally send a welcome message to new users with the Jellyfin URL and their username.",
                "depends_true": "messages|enabled"
            },
            "settings": {
                "enabled": {
                    "name": "Enabled",
                    "required": false,
                    "requires_restart": true,
                    "type": "bool",
                    "value": false,
                    "description": "Enable to send welcome emails to new users."
                },
                "subject": {
                    "name": "Email subject",
                    "required": false,
                    "requires_restart": false,
                    "type": "text",
                    "value": "",
                    "description": "Subject of welcome emails."
                },
                "email_html": {
                    "name": "Custom email (HTML)",
                    "required": false,
                    "requires_restart": false,
                    "advanced": true,
                    "type": "text",
                    "value": "",
                    "description": "Path to custom email html"
                },
                "email_text": {
                    "name": "Custom email (plaintext)",
                    "required": false,
                    "requires_restart": false,
                    "advanced": true,
                    "type": "text",
                    "value": "",
                    "description": "Path to custom email in plain text"
                }
            }
        },
        "email_confirmation": {
            "order": [],
            "meta": {
                "name": "Email confirmation",
                "description": "If enabled, a user will be sent an email confirmation link to ensure their password is right before they can make an account.",
                "depends_true": "email|method"
            },
            "settings": {
                "enabled": {
                    "name": "Enabled",
                    "required": false,
                    "requires_restart": true,
                    "type": "bool",
                    "value": false
                },
                "subject": {
                    "name": "Email subject",
                    "required": false,
                    "requires_restart": false,
                    "type": "text",
                    "value": "",
                    "description": "Subject of email confirmation emails."
                },
                "email_html": {
                    "name": "Custom email (HTML)",
                    "required": false,
                    "requires_restart": false,
                    "advanced": true,
                    "type": "text",
                    "value": "",
                    "description": "Path to custom email html"
                },
                "email_text": {
                    "name": "Custom email (plaintext)",
                    "required": false,
                    "requires_restart": false,
                    "advanced": true,
                    "type": "text",
                    "value": "",
                    "description": "Path to custom email in plain text"
                }
            }
        },
        "user_expiry": {
            "order": [],
            "meta": {
                "name": "User Expiry",
                "description": "When set on an invite, users will be deleted or disabled a specified amount of time after they create their account."
            },
            "settings": {
                "behaviour": {
                    "name": "Behaviour",
                    "required": false,
                    "requires_restart": false,
                    "type": "select",
                    "options": [
                        ["delete_user", "Delete user"],
                        ["disable_user", "Disable user"]
                    ],
                    "value": "disable_user",
                    "description": "Whether to delete or disable users on expiry."
                },
                "send_email": {
                    "name": "Send email",
                    "required": false,
                    "requires_restart": false,
                    "type": "bool",
                    "value": true,
                    "depends_true": "messages|enabled",
                    "description": "Send an email when a user's account expires."
                },
                "subject": {
                    "name": "Email subject",
                    "required": false,
                    "requires_restart": false,
                    "depends_true": "messages|enabled",
                    "type": "text",
                    "value": "",
                    "description": "Subject of user expiry emails."
                },
                "email_html": {
                    "name": "Custom email (HTML)",
                    "required": false,
                    "requires_restart": false,
                    "advanced": true,
                    "depends_true": "messages|enabled",
                    "type": "text",
                    "value": "",
                    "description": "Path to custom email html"
                },
                "email_text": {
                    "name": "Custom email (plaintext)",
                    "required": false,
                    "requires_restart": false,
                    "advanced": true,
                    "depends_true": "messages|enabled",
                    "type": "text",
                    "value": "",
                    "description": "Path to custom email in plain text"
                }
            }
        },
        "disable_enable": {
            "order": [],
            "meta": {
                "name": "Account Disabling/Enabling",
                "description": "Subject/email files for account disabling/enabling emails.",
                "depends_true": "messages|enabled"
            },
            "settings": {
                "subject_disabled": {
                    "name": "Email subject (Disabled)",
                    "required": false,
                    "requires_restart": false,
                    "type": "text",
                    "value": "",
                    "description": "Subject of account disabling emails."
                },
                "subject_enabled": { 
                    "name": "Email subject (Enabled)",
                    "required": false,
                    "requires_restart": false,
                    "type": "text",
                    "value": "",
                    "description": "Subject of account enabling emails."
                },
                "disabled_html": {
                    "name": "Custom disabling email (HTML)",
                    "required": false,
                    "requires_restart": false,
                    "advanced": true,
                    "type": "text",
                    "value": "",
                    "description": "Path to custom email html"
                },
                "disabled_text": {
                    "name": "Custom disabling email (plaintext)",
                    "required": false,
                    "requires_restart": false,
                    "advanced": true,
                    "type": "text",
                    "value": "",
                    "description": "Path to custom email in plain text"
                },
                "enabled_html": {
                    "name": "Custom enabling email (HTML)",
                    "required": false,
                    "requires_restart": false,
                    "advanced": true,
                    "type": "text",
                    "value": "",
                    "description": "Path to custom email html"
                },
                "enabled_text": {
                    "name": "Custom enabling email (plaintext)",
                    "required": false,
                    "requires_restart": false,
                    "advanced": true,
                    "type": "text",
                    "value": "",
                    "description": "Path to custom email in plain text"
                }
            }
        },
        "deletion": {
            "order": [],
            "meta": {
                "name": "Account Deletion",
                "description": "Subject/email files for account deletion emails.",
                "depends_true": "messages|enabled"
            },
            "settings": {
                "subject": {
                    "name": "Email subject",
                    "required": false,
                    "requires_restart": false,
                    "type": "text",
                    "value": "",
                    "description": "Subject of account deletion emails."
                },
                "email_html": {
                    "name": "Custom email (HTML)",
                    "required": false,
                    "requires_restart": false,
                    "advanced": true,
                    "type": "text",
                    "value": "",
                    "description": "Path to custom email html"
                },
                "email_text": {
                    "name": "Custom email (plaintext)",
                    "required": false,
                    "requires_restart": false,
                    "advanced": true,
                    "type": "text",
                    "value": "",
                    "description": "Path to custom email in plain text"
                }
            }
        },
        "files": {
            "order": [],
            "meta": {
                "name": "File Storage",
                "description": "Optional settings for changing storage locations.",
                "advanced": true
            },
            "settings": {
                "invites": {
                    "name": "Invite Storage",
                    "required": false,
                    "requires_restart": true,
                    "type": "text",
                    "value": "",
                    "description": "Location of stored invites (json)."
                },
                "password_resets": {
                    "name": "Password Resets",
                    "required": false,
                    "requires_restart": true,
                    "type": "text",
                    "value": "",
                    "description": "Location of stored non-Jellyfin password resets (json)."
                },
                "emails": {
                    "name": "Email Addresses",
                    "required": false,
                    "requires_restart": true,
                    "type": "text",
                    "value": "",
                    "description": "Location of stored email addresses (json)."
                },
                "users": {
                    "name": "User storage",
                    "required": false,
                    "requires_restart": false,
                    "type": "text",
                    "value": "",
                    "description": "Stores users temporarily when a user expiry is set."
                },
                "ombi_template": {
                    "name": "Ombi user template",
                    "required": false,
                    "requires_restart": false,
                    "type": "text",
                    "value": "",
                    "description": "Location of stored Ombi user template."
                },
                "user_profiles": {
                    "name": "User Profiles",
                    "required": false,
                    "requires_restart": true,
                    "type": "text",
                    "value": "",
                    "description": "Location of stored user profiles (encompasses template and configuration and displayprefs) (json)"
                },
                "html_templates": {
                    "name": "Custom HTML Template Directory",
                    "required": false,
                    "requires_restart": true,
                    "type": "text",
                    "value": "",
                    "description": "Path to directory containing custom versions of web ui pages. See wiki for more info."
                },
                "lang_files": {
                    "name": "Custom language files directory",
                    "required": false,
                    "requires_restart": true,
                    "type": "text",
                    "value": "",
                    "description": "The path to a directory which following the same form as the internal 'lang/' directory. See GitHub for more info."
                },
                "custom_emails": {
                    "name": "Custom email content",
                    "required": false,
                    "requires_restart": false,
                    "type": "text",
                    "value": "",
                    "description": "JSON file generated by program in settings, different from email_html/email_text. See wiki for more info."
                },
                "custom_user_page_content": {
                    "name": "Custom user page content",
                    "required": false,
                    "requires_restart": false,
                    "type": "text",
                    "value": "",
                    "description": "JSON file generated by program in settings, containing user page messages. See wiki for more info."
                },
                "telegram_users": {
                    "name": "Telegram users",
                    "required": false,
                    "requires_restart": false,
                    "type": "text",
                    "value": "",
                    "description": "Stores telegram user IDs and language preferences."
                },
                "matrix_users": {
                    "name": "Matrix users",
                    "required": false,
                    "requires_restart": false,
                    "type": "text",
                    "value": "",
                    "description": "Stores matrix user IDs and language preferences."
                },
                "matrix_sql": {
                    "name": "Matrix encryption DB",
                    "required": false,
                    "requires_restart": false,
                    "type": "text",
                    "value": "",
                    "description": "Stores cryptographic material for Matrix end-to-end encryption."
                },
                "discord_users": {
                    "name": "Discord users",
                    "required": false,
                    "requires_restart": false,
                    "type": "text",
                    "value": "",
                    "description": "Stores discord user IDs and language preferences."
                },
                "announcements": {
                    "name": "Announcement templates",
                    "required": false,
                    "requires_restart": false,
                    "type": "text",
                    "value": "",
                    "description": "Stores custom announcement templates."
                }
            }
        }
    }
}
