groups:
  - name: Linkding Configuration
    description: Configure Linkding
  - name: Network Configuration
    description: Configure Network for Linkding
  - name: User and Group Configuration
    description: Configure User and Group for Linkding
  - name: Storage Configuration
    description: Configure Storage for Linkding
  - name: Resources Configuration
    description: Configure Resources for Linkding

portals:
  web_portal:
    protocols:
      - "$kubernetes-resource_configmap_portal_protocol"
    host:
      - "$kubernetes-resource_configmap_portal_host"
    ports:
      - "$kubernetes-resource_configmap_portal_port"
    path: "$kubernetes-resource_configmap_portal_path"

questions:
  - variable: linkdingConfig
    label: ""
    group: Linkding Configuration
    schema:
      type: dict
      attrs:
        - variable: username
          label: Username
          description: |
            The username for Linkding. </br>
            It creates a superuser if it doesn't exist.</br>
            Leaving this empty will disable authentication.
          schema:
            type: string
            default: ""
        - variable: password
          label: Password
          description: |
            The password for Linkding.</br>
            It creates a superuser if it doesn't exist.</br>
            Leaving this empty will disable authentication.
          schema:
            type: string
            show_if: [["username", "!=", ""]]
            default: ""
            private: true
        - variable: disableBackgroundTasks
          label: Disable Background Tasks
          description: |
            Disables background tasks, such as creating snapshots for bookmarks
            on the the Internet Archive Wayback Machine.
          schema:
            type: boolean
            default: false
        - variable: disableUrlValidation
          label: Disable URL Validation
          description: |
            Completely disables URL validation for bookmarks.
            This can be useful if you intend to store non fully qualified
            domain name URLs, such as network paths, or you want to store
            URLs that use another protocol than http or https.
          schema:
            type: boolean
            default: false
        - variable: enableAuthProxy
          label: Enable Auth Proxy
          description: |
            Enable authentication proxy. </br>
            This will disable the built-in authentication and use the
            authentication proxy instead.
          schema:
            type: boolean
            default: false
        - variable: authProxyUsernameHeader
          label: Auth Proxy Username Header
          description: |
            The HTTP header that contains the username for the authentication
            proxy.
          schema:
            type: string
            show_if: [["enableAuthProxy", "=", true]]
            default: ""
            required: true
        - variable: authProxyLogoutUrl
          label: Auth Proxy Logout URL
          description: |
            The URL to redirect to when logging out of the authentication proxy.
          schema:
            type: string
            show_if: [["enableAuthProxy", "=", true]]
            default: ""
        - variable: csrfTrustedOrigins
          label: CSRF Trusted Origins
          description: |
            A list of origins that are allowed to bypass the CSRF protection.
          schema:
            type: list
            default: []
            items:
              - variable: origin
                label: Origin
                schema:
                  type: string
                  required: true
        - variable: additionalEnvs
          label: Additional Environment Variables
          description: Configure additional environment variables for Linkding.
          schema:
            type: list
            default: []
            items:
              - variable: env
                label: Environment Variable
                schema:
                  type: dict
                  attrs:
                    - variable: name
                      label: Name
                      schema:
                        type: string
                        required: true
                    - variable: value
                      label: Value
                      schema:
                        type: string
                        required: true

  - variable: linkdingNetwork
    label: ""
    group: Network Configuration
    schema:
      type: dict
      attrs:
        - variable: webPort
          label: Web Port
          description: The port for the Linkding Web UI.
          schema:
            type: int
            default: 30083
            min: 9000
            max: 65535
            required: true
        - variable: hostNetwork
          label: Host Network
          description: |
            Bind to the host network. It's recommended to keep this disabled.</br>
          schema:
            type: boolean
            default: false

  - variable: linkdingRunAs
    label: ""
    group: User and Group Configuration
    schema:
      type: dict
      attrs:
        - variable: user
          label: User ID
          description: The user id that Linkding will run as.
          schema:
            type: int
            min: 2
            default: 568
            required: true
        - variable: group
          label: Group ID
          description: The group id that Linkding will run as.
          schema:
            type: int
            min: 2
            default: 568
            required: true

  - variable: linkdingStorage
    label: ""
    group: Storage Configuration
    schema:
      type: dict
      attrs:
        - variable: data
          label: Linkding Data Storage
          description: The path to store Linkding Data.
          schema:
            type: dict
            attrs:
              - variable: type
                label: Type
                description: |
                  ixVolume: Is dataset created automatically by the system.</br>
                  Host Path: Is a path that already exists on the system.
                schema:
                  type: string
                  required: true
                  immutable: true
                  default: "ixVolume"
                  enum:
                    - value: "hostPath"
                      description: Host Path (Path that already exists on the system)
                    - value: "ixVolume"
                      description: ixVolume (Dataset created automatically by the system)
              - variable: datasetName
                label: Dataset Name
                schema:
                  type: string
                  show_if: [["type", "=", "ixVolume"]]
                  required: true
                  hidden: true
                  immutable: true
                  default: "data"
                  $ref:
                    - "normalize/ixVolume"
              - variable: hostPath
                label: Host Path
                schema:
                  type: hostpath
                  show_if: [["type", "=", "hostPath"]]
                  immutable: true
                  required: true
        - variable: pgData
          label: Postgres Data Storage
          description: The path to store Postgres Data.
          schema:
            type: dict
            attrs:
              - variable: type
                label: Type
                description: |
                  ixVolume: Is dataset created automatically by the system.</br>
                  Host Path: Is a path that already exists on the system.
                schema:
                  type: string
                  required: true
                  immutable: true
                  default: "ixVolume"
                  enum:
                    - value: "hostPath"
                      description: Host Path (Path that already exists on the system)
                    - value: "ixVolume"
                      description: ixVolume (Dataset created automatically by the system)
              - variable: datasetName
                label: Dataset Name
                schema:
                  type: string
                  show_if: [["type", "=", "ixVolume"]]
                  required: true
                  hidden: true
                  immutable: true
                  default: "pgData"
                  $ref:
                    - "normalize/ixVolume"
              - variable: hostPath
                label: Host Path
                schema:
                  type: hostpath
                  show_if: [["type", "=", "hostPath"]]
                  immutable: true
                  required: true
        - variable: pgBackup
          label: Postgres Backup Storage
          description: The path to store Postgres Backup.
          schema:
            type: dict
            attrs:
              - variable: type
                label: Type
                description: |
                  ixVolume: Is dataset created automatically by the system.</br>
                  Host Path: Is a path that already exists on the system.
                schema:
                  type: string
                  required: true
                  immutable: true
                  default: "ixVolume"
                  enum:
                    - value: "hostPath"
                      description: Host Path (Path that already exists on the system)
                    - value: "ixVolume"
                      description: ixVolume (Dataset created automatically by the system)
              - variable: datasetName
                label: Dataset Name
                schema:
                  type: string
                  show_if: [["type", "=", "ixVolume"]]
                  required: true
                  hidden: true
                  immutable: true
                  default: "pgBackup"
                  $ref:
                    - "normalize/ixVolume"
              - variable: hostPath
                label: Host Path
                schema:
                  type: hostpath
                  show_if: [["type", "=", "hostPath"]]
                  immutable: true
                  required: true
        - variable: additionalStorages
          label: Additional Storage
          description: Additional storage for Linkding.
          schema:
            type: list
            default: []
            items:
              - variable: storageEntry
                label: Storage Entry
                schema:
                  type: dict
                  attrs:
                    - variable: type
                      label: Type
                      description: |
                        ixVolume: Is dataset created automatically by the system.</br>
                        Host Path: Is a path that already exists on the system.</br>
                        SMB Share: Is a SMB share that is mounted to a persistent volume claim.
                      schema:
                        type: string
                        required: true
                        default: "ixVolume"
                        immutable: true
                        enum:
                          - value: "hostPath"
                            description: Host Path (Path that already exists on the system)
                          - value: "ixVolume"
                            description: ixVolume (Dataset created automatically by the system)
                          - value: "smb-pv-pvc"
                            description: SMB Share (Mounts a persistent volume claim to a SMB share)
                    - variable: mountPath
                      label: Mount Path
                      description: The path inside the container to mount the storage.
                      schema:
                        type: path
                        required: true
                    - variable: hostPath
                      label: Host Path
                      description: The host path to use for storage.
                      schema:
                        type: hostpath
                        show_if: [["type", "=", "hostPath"]]
                        required: true
                    - variable: datasetName
                      label: Dataset Name
                      description: The name of the dataset to use for storage.
                      schema:
                        type: string
                        show_if: [["type", "=", "ixVolume"]]
                        required: true
                        immutable: true
                        default: "storage_entry"
                        $ref:
                          - "normalize/ixVolume"
                    - variable: server
                      label: Server
                      description: The server for the SMB share.
                      schema:
                        type: string
                        show_if: [["type", "=", "smb-pv-pvc"]]
                        required: true
                    - variable: share
                      label: Share
                      description: The share name for the SMB share.
                      schema:
                        type: string
                        show_if: [["type", "=", "smb-pv-pvc"]]
                        required: true
                    - variable: domain
                      label: Domain (Optional)
                      description: The domain for the SMB share.
                      schema:
                        type: string
                        show_if: [["type", "=", "smb-pv-pvc"]]
                    - variable: username
                      label: Username
                      description: The username for the SMB share.
                      schema:
                        type: string
                        show_if: [["type", "=", "smb-pv-pvc"]]
                        required: true
                    - variable: password
                      label: Password
                      description: The password for the SMB share.
                      schema:
                        type: string
                        show_if: [["type", "=", "smb-pv-pvc"]]
                        required: true
                        private: true
                    - variable: size
                      label: Size (in Gi)
                      description: The size of the volume quota.
                      schema:
                        type: int
                        show_if: [["type", "=", "smb-pv-pvc"]]
                        required: true
                        min: 1
                        default: 1

  - variable: resources
    group: Resources Configuration
    label: ""
    schema:
      type: dict
      attrs:
        - variable: limits
          label: Limits
          schema:
            type: dict
            attrs:
              - variable: cpu
                label: CPU
                description: CPU limit for Linkding.
                schema:
                  type: string
                  max_length: 6
                  valid_chars: '^(0\.[1-9]|[1-9][0-9]*)(\.[0-9]|m?)$'
                  valid_chars_error: |
                    Valid CPU limit formats are</br>
                    - Plain Integer - eg. 1</br>
                    - Float - eg. 0.5</br>
                    - Milicpu - eg. 500m
                  default: "4000m"
                  required: true
              - variable: memory
                label: Memory
                description: Memory limit for Linkding.
                schema:
                  type: string
                  max_length: 12
                  valid_chars: '^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$'
                  valid_chars_error: |
                    Valid Memory limit formats are</br>
                    - Suffixed with E/P/T/G/M/K - eg. 1G</br>
                    - Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi</br>
                    - Plain Integer in bytes - eg. 1024</br>
                    - Exponent - eg. 134e6
                  default: "8Gi"
                  required: true
