# yaml-language-server: $schema=https://schema.zeabur.app/template.json
apiVersion: zeabur.com/v1
kind: Template
metadata:
    name: atuin-server
spec:
    description: Sync server for atuin, which replaces your existing shell history with a SQLite database, and records additional context for your commands.
    coverImage: https://github.com/atuinsh/atuin/assets/53315310/13216a1d-1ac0-4c99-b0eb-d88290fe0efd
    icon: https://atuin.sh/icon.png
    variables:
        - key: ATUIN_PUBLIC_DOMAIN
          type: DOMAIN
          name: Domain
          description: What is the domain you want for your atuin server?
    tags:
        - Coding
        - Sync
        - Shell History
    readme: |-
        *magical shell history*

        Atuin replaces your existing shell history with a SQLite database, and records
        additional context for your commands. Additionally, it provides optional and
        _fully encrypted_ synchronisation of your history between machines, via an Atuin
        server.

        ![animated](https://github.com/atuinsh/atuin/blob/e1ed175319d5a80cf51091459b9188ade8b5f742/demo.gif?raw=true)

        As well as the search UI, it can do things like this:

        ```
        # search for all successful `make` commands, recorded after 3pm yesterday
        atuin search --exit 0 --after "yesterday 3pm" make
        ```

        You may use either the server I host, or host your own! Or just don't use sync
        at all. As all history sync is encrypted, I couldn't access your data even if
        I wanted to. And I **really** don't want to.

        ## Features

        - rebind `ctrl-r` and `up` (configurable) to a full screen history search UI
        - store shell history in a sqlite database
        - back up and sync **encrypted** shell history
        - the same history across terminals, across sessions, and across machines
        - log exit code, cwd, hostname, session, command duration, etc
        - calculate statistics such as "most used command"
        - old history file is not replaced
        - quick-jump to previous items with <kbd>Alt-\<num\></kbd>
        - switch filter modes via ctrl-r; search history just from the current session, directory, or globally
        - enter to execute a command, tab to edit

        ## Supported Shells

        - zsh
        - bash
        - fish
        - nushell
        - xonsh
        - powershell (tier 2 support)

        ## Community

        ### Forum

        Atuin has a community forum, please ask here for help and support: <https://forum.atuin.sh/>

        ### IRC

        We're also available via #atuin on libera.chat

        ### Discord

        Atuin also has a community Discord, available [here](https://discord.gg/jR3tfchVvW)

        # Quickstart

        This will sign you up for your self-hosted sync server. Everything is end-to-end encrypted, so your secrets are safe!

        ```
        curl --proto '=https' --tlsv1.2 -LsSf https://setup.atuin.sh | sh

        export ATUIN_SYNC_ADDRESS=https://atuin.yourdomain.ltd

        atuin register -u <USERNAME> -e <EMAIL>
        atuin import auto
        atuin sync
        ```

        Then restart your shell!

        > **For Bash users**: The above sets up `bash-preexec` for necessary hooks, but
        > `bash-preexec` has limitations. For details, please see the
        > [Bash](https://docs.atuin.sh/guide/installation/#installing-the-shell-plugin)
        > section of the shell plugin documentation.

        To change the server permanently, check [Documentation](https://docs.atuin.sh/cli/self-hosting/usage/) for more infomation.

        **Note: Open registration is enabled by default. To disable it, set the `ATUIN_OPEN_REGISTRATION` environment variable to false.**
    services:
        - name: atuin
          icon: https://cdn.zeabur.com/prebuilt.svg
          template: PREBUILT_V2
          spec:
            id: atuin
            source:
                image: ghcr.io/atuinsh/atuin:18.16.1
                command:
                    - atuin-server
                    - start
            ports:
                - id: port-8888
                  port: 8888
                  type: HTTP
            volumes:
                - id: config
                  dir: /config
            env:
                ATUIN_DB_URI:
                    default: ${POSTGRES_CONNECTION_STRING}
                    expose: false
                ATUIN_HOST:
                    default: 0.0.0.0
                    expose: false
                ATUIN_OPEN_REGISTRATION:
                    default: "true"
                    expose: false
                RUST_LOG:
                    default: info,atuin_server=debug
                    expose: false
            configs: []
            portForwarding:
                enabled: false
        - name: postgresql
          icon: https://cdn.zeabur.com/marketplace/postgresql.svg
          template: PREBUILT_V2
          spec:
            id: postgresql
            source:
                image: postgres:18
                command:
                    - docker-entrypoint.sh
                    - -c
                    - config_file=/etc/postgresql/postgresql.conf
            ports:
                - id: database
                  port: 5432
                  type: TCP
            volumes:
                - id: data
                  dir: /var/lib/postgresql/18/docker
            instructions:
                - title: Connection String
                  content: postgresql://${POSTGRES_USERNAME}:${POSTGRES_PASSWORD}@${PORT_FORWARDED_HOSTNAME}:${DATABASE_PORT_FORWARDED_PORT}/${POSTGRES_DATABASE}
                - title: PostgreSQL Connect Command
                  content: psql "postgresql://${POSTGRES_USERNAME}:${POSTGRES_PASSWORD}@${PORT_FORWARDED_HOSTNAME}:${DATABASE_PORT_FORWARDED_PORT}/${POSTGRES_DATABASE}"
                - title: PostgreSQL username
                  content: ${POSTGRES_USERNAME}
                - title: PostgresSQL password
                  content: ${POSTGRES_PASSWORD}
                - title: PostgresSQL database
                  content: ${POSTGRES_DATABASE}
                - title: PostgreSQL host
                  content: ${PORT_FORWARDED_HOSTNAME}
                - title: PostgreSQL port
                  content: ${DATABASE_PORT_FORWARDED_PORT}
            env:
                PGDATA:
                    default: /var/lib/postgresql/18/docker/pgdata
                    expose: false
                POSTGRES_CONNECTION_STRING:
                    default: postgresql://${POSTGRES_USERNAME}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DATABASE}
                    expose: true
                POSTGRES_DATABASE:
                    default: ${POSTGRES_DB}
                    expose: true
                POSTGRES_DB:
                    default: zeabur
                    expose: false
                POSTGRES_HOST:
                    default: ${CONTAINER_HOSTNAME}
                    expose: true
                POSTGRES_PASSWORD:
                    default: ${PASSWORD}
                    expose: true
                POSTGRES_PORT:
                    default: ${DATABASE_PORT}
                    expose: true
                POSTGRES_URI:
                    default: ${POSTGRES_CONNECTION_STRING}
                    expose: true
                POSTGRES_USER:
                    default: root
                    expose: false
                POSTGRES_USERNAME:
                    default: ${POSTGRES_USER}
                    expose: true
            configs:
                - path: /etc/postgresql/postgresql.conf
                  template: |
                    # https: //github.com/postgres/postgres/blob/master/src/backend/utils/misc/postgresql.conf.sample
                    listen_addresses = '*'
                    max_connections = 256
                    shared_buffers = 256MB
                    dynamic_shared_memory_type = posix
                    max_wal_size = 1GB
                    min_wal_size = 80MB
                    log_timezone = 'UTC'
                    datestyle = 'iso, mdy'
                    timezone = 'UTC'
                    lc_messages = 'en_US.UTF-8'
                    lc_monetary = 'en_US.UTF-8'
                    lc_numeric = 'en_US.UTF-8'
                    lc_time = 'en_US.UTF-8'
                    default_text_search_config = 'pg_catalog.english'
                  permission: null
                  envsubst: null
            portForwarding:
                enabled: true
localization:
    zh-CN:
        description: Atuin 的同步服务器。它使用 SQLite 数据库取代你现有的 shell 历史，并为你的命令记录额外的内容。
        variables:
            - key: ATUIN_PUBLIC_DOMAIN
              type: DOMAIN
              name: 域名
              description: 你想把 atuin 同步服务器部署到哪个域名？
        readme: |-
            *神奇的 shell 历史记录*

            Atuin 使用 SQLite 数据库取代你现有的 shell 历史，并为你的命令记录额外的内容。此外，它还通过 Atuin 服务器，在机器之间提供可选的、完全加密的历史记录同步功能。

            ![animated](https://github.com/atuinsh/atuin/blob/e1ed175319d5a80cf51091459b9188ade8b5f742/demo.gif?raw=true)


            除了搜索 UI，它还可以执行以下操作：

            ```
            # 搜索昨天下午3点之后记录的所有成功的 `make` 命令
            atuin search --exit 0 --after "yesterday 3pm" make
            ```

            你可以使用作者(ellie)托管的服务器，也可以使用这个模板部署你自己的服务器！或者干脆不使用 sync 功能。所有的历史记录同步都是加密的，即使作者也无法访问你的数据。

            ## 功能

            - 重新绑定 `up` 和 `ctrl-r` 的全屏历史记录搜索UI界面
            - 使用 sqlite 数据库存储 shell 历史记录
            - 备份以及同步已加密的 shell 历史记录
            - 在不同的终端、不同的会话以及不同的机器上都有相同的历史记录
            - 记录退出代码、cwd、主机名、会话、命令持续时间，等等。
            - 计算统计数据，如 "最常用的命令"。
            - 不替换旧的历史文件
            - 通过 <kbd>Alt-\<num\></kbd> 快捷键快速跳转到之前的记录
            - 通过 ctrl-r 切换过滤模式;可以仅从当前会话、目录或全局来搜索历史记录

            ## 支持的 Shell

            - zsh
            - bash
            - fish
            - nushell
            - xonsh
            - powershell (次要支持)

            ## 社区支持

            ### 论坛

            你可以在 Atuin 论坛提出问题并获得帮助: <https://forum.atuin.sh/>

            ### IRC

            你也可以在 libera.chat 上的 #atuin 频道联系我们

            ### Discord

            Atuin 有一个 Discord 社区, 可以在 [这里](https://discord.gg/Fq8bJSKPHh) 加入。

            # 快速开始

            ## 使用默认的同步服务器

            这将为您安装 atuin 并且注册由您自己的同步服务器。 一切都是端到端加密的，所以你的秘密是安全的！

            ```
            curl --proto '=https' --tlsv1.2 -LsSf https://setup.atuin.sh | sh

            export ATUIN_SYNC_ADDRESS=https://atuin.yourdomain.ltd

            atuin register -u <USERNAME> -e <EMAIL>
            atuin import auto
            atuin sync
            ```

            之后重启您的 SHELL ！

            > [!NOTE]
            >
            > **对于 bash 用户**: 上面的脚本注册了 `bash-preexec` 的钩子，但 `bash-preexec` 存在一些限制，详情可以查看
            > [文档](https://docs.atuin.sh/guide/installation/#installing-the-shell-plugin)。

            要永久地使用您自己的服务器，请查看 [文档](https://docs.atuin.sh/cli/self-hosting/usage/) 以获取更多信息。

            **注意：为了方便，任何人都可以在服务器上注册用户，如果您不想开放注册，请在控制台将 `ATUIN_OPEN_REGISTRATION` 这一环境变量设置为 false。**
    zh-TW:
        description: Atuin 的同步伺服器。它使用 SQLite 資料庫取代你現有的 shell 歷史，併為你的命令記錄額外的內容。
        variables:
            - key: ATUIN_PUBLIC_DOMAIN
              type: DOMAIN
              name: 域名
              description: 你想把 atuin 同步伺服器部署到哪個域名？
        readme: |-
            *神奇的 shell 歷史記錄*

            Atuin 使用 SQLite 資料庫取代你現有的 shell 歷史，併為你的命令記錄額外的內容。此外，它還通過 Atuin 伺服器，在機器之間提供可選的、完全加密的歷史記錄同步功能。

            ![animated](https://github.com/atuinsh/atuin/blob/e1ed175319d5a80cf51091459b9188ade8b5f742/demo.gif?raw=true)

            除了搜尋 UI，它還可以執行以下操作：

            ```
            # 搜尋昨天下午3點之後記錄的所有成功的 `make` 命令
            atuin search --exit 0 --after "yesterday 3pm" make
            ```

            你可以使用作者(ellie)託管的伺服器，也可以使用這個模板部署你自己的伺服器！或者乾脆不使用 sync 功能。所有的歷史記錄同步都是加密的，即使作者也無法訪問你的資料。

            ## 功能

            - 重新繫結 `up` 和 `ctrl-r` 的全屏歷史記錄搜尋UI介面
            - 使用 sqlite 資料庫儲存 shell 歷史記錄
            - 備份以及同步已加密的 shell 歷史記錄
            - 在不同的終端、不同的會話以及不同的機器上都有相同的歷史記錄
            - 記錄退出程式碼、cwd、主機名、會話、命令持續時間，等等。
            - 計算統計資料，如 "最常用的命令"。
            - 不替換舊的歷史檔案
            - 通過 <kbd>Alt-\<num\></kbd> 快捷鍵快速跳轉到之前的記錄
            - 通過 ctrl-r 切換過濾模式;可以僅從當前會話、目錄或全域性來搜尋歷史記錄

            ## 支援的 Shell

            - zsh
            - bash
            - fish
            - nushell
            - xonsh
            - powershell (次要支援)

            ## 社群支援

            ### 論壇

            你可以在 Atuin 論壇提出問題並獲得幫助: <https://forum.atuin.sh/>

            ### IRC

            你也可以在 libera.chat 上的 #atuin 頻道聯絡我們

            ### Discord

            Atuin 有一個 Discord 社群, 可以在 [這裡](https://discord.gg/Fq8bJSKPHh) 加入。

            # 快速開始

            ## 使用預設的同步伺服器

            這將為您安裝 atuin 並且註冊由您自己的同步伺服器。 一切都是端到端加密的，所以你的秘密是安全的！

            ```
            curl --proto '=https' --tlsv1.2 -LsSf https://setup.atuin.sh | sh

            export ATUIN_SYNC_ADDRESS=https://atuin.yourdomain.ltd

            atuin register -u <USERNAME> -e <EMAIL>
            atuin import auto
            atuin sync
            ```

            之後重啟您的 SHELL ！

            > **對於 bash 使用者**: 上面的指令碼註冊了 `bash-preexec` 的鉤子，但 `bash-preexec` 存在一些限制，詳情可以檢視
            > [文件](https://docs.atuin.sh/guide/installation/#installing-the-shell-plugin)。

            要永久地使用您自己的伺服器，請檢視 [文件](https://docs.atuin.sh/cli/self-hosting/usage/) 以獲取更多資訊。

            **注意：為了方便，任何人都可以在伺服器上註冊使用者，如果您不想開放註冊，請在控制台將 `ATUIN_OPEN_REGISTRATION` 這一環境變數設定為 false。**
