Skip to content

feat (ct): add atuin - #2173

Open
pascaldevink wants to merge 1 commit into
community-scripts:mainfrom
pascaldevink:pascaldevink/atuin
Open

feat (ct): add atuin#2173
pascaldevink wants to merge 1 commit into
community-scripts:mainfrom
pascaldevink:pascaldevink/atuin

Conversation

@pascaldevink

@pascaldevink pascaldevink commented Aug 12, 2026

Copy link
Copy Markdown

✍️ Description

Community installation script for atuin

🔗 Related PR / Issue

Link: #

✅ Prerequisites (X in brackets)

  • Self-review completed – Code follows project standards.
  • Tested thoroughly – Changes work as expected.
  • No breaking changes – Existing functionality remains intact.
  • No security risks – No hardcoded secrets, unnecessary privilege escalations, or permission issues.

🏗️ arm64 Support (X in brackets)

  • arm64 supported - Tested and supported on arm64.
  • arm64 not tested - Assumed to work on arm64, but testing has not been done.
  • arm64 not supported - Confirmed upstream dependencies or binaries do not support arm64.

🛠️ Type of Change (X in brackets)

  • 🐞 Bug fix – Resolves an issue without breaking functionality.
  • New feature – Adds new, non-breaking functionality.
  • 💥 Breaking change – Alters existing functionality in a way that may require updates.
  • 🆕 New script – A fully functional and tested script or script set.
  • 🌍 Website update – Changes to website-related JSON files or metadata.
  • 🔧 Refactoring / Code Cleanup – Improves readability or maintainability without changing functionality.
  • 📝 Documentation update – Changes to README, AppName.md, CONTRIBUTING.md, or other docs.

🔍 Code & Security Review (X in brackets)

  • Follows CODE-AUDIT.md & CONTRIBUTING.md guidelines
  • Uses correct script structure (AppName.sh, AppName-install.sh, AppName.json)
  • No hardcoded credentials
  • No Docker / Docker Compose – The application is installed bare-metal; Docker is not used.
  • No git pull – Updates use fetch_and_deploy_gh_release, fetch_and_deploy_codeberg_release, fetch_and_deploy_gl_release, or fetch_and_deploy_from_url instead of git pull.

🤖 AI Assistance (X in brackets)

If you used an AI tool (GitHub Copilot, Claude, ChatGPT, etc.) to write or generate any scripts in this PR, you must confirm compliance below.
Select exactly one option.

  • No AI used – Scripts were written without AI assistance.
  • AI was used – I confirm the scripts were built using AGENTS.md and .github/agents/pve-script-creator.agent.md as guidance, and the output has been reviewed and corrected to match those guidelines.

📋 Additional Information (optional)


📦 Application Requirements (for new scripts)

⚠️ Do not remove this section.
It is used by automated PR validation checks.
If this PR is not a new script submission, leave the checkboxes unchecked.

Required for 🆕 New script submissions.
Pull requests that do not meet these requirements may be closed without review.

  • The application is at least 6 months old
  • The application is actively maintained
  • The application has 600+ GitHub stars
  • Official release tarballs are published
  • I understand that not all scripts will be accepted due to various reasons and criteria by the community-scripts ORG

🌐 Source

Github link

@github-actions

Copy link
Copy Markdown
Contributor

Try this script

COMMUNITY_SCRIPTS_URL=https://raw.githubusercontent.com/pascaldevink/ProxmoxVED/pascaldevink/atuin \
bash -c "$(curl -fsSL https://raw.githubusercontent.com/pascaldevink/ProxmoxVED/pascaldevink/atuin/ct/atuin.sh)"

COMMUNITY_SCRIPTS_URL is not optional. Fetching the ct/ script from a branch
does not tell the engine where that branch is — with bash -c "$(curl …)" there
is no file on disk for the scripts root to be derived from, so it would fall back
to upstream main and look for the install script there.

Against a core branch as well

Add COMMUNITY_SCRIPTS_CORE_URL=https://raw.githubusercontent.com/OWNER/core/BRANCH
to test an engine change at the same time. The two resolve independently.

Useful flags while testing

dev_mode=net logs every fetch with status and duration, so you can confirm the
branch is really being used. dev_mode=keep stops a failed build from deleting
the container along with the evidence.

@asylumexp

Copy link
Copy Markdown
Member

Can you explain what the intended use case you see by having this as a ct script? Personally I just cannot see it.

image

@pascaldevink

Copy link
Copy Markdown
Author

I have multiple machines that I want to sync the terminal history for. This is useful for example when that useful bash one-liner I executed at my home machine is also one I need at work, or on the go. Atuin offers a centralised store in which they say everything is stored encrypted, but they also offer this self-hosted version of their server. Since setup is a bit involved, with a database, I think having it as a CT script, with easy updating and sane defaults could be very useful

@asylumexp

Copy link
Copy Markdown
Member

so is this a server that atuin interacts with to sync or is this a ct that is just a shell with atuin installed?

@pascaldevink

Copy link
Copy Markdown
Author

@asylumexp This is a server that atuin interacts with

Comment thread ct/atuin.sh Outdated
Comment thread ct/atuin.sh Outdated
Comment thread ct/atuin.sh Outdated
Comment thread install/atuin-install.sh
PG_DB_NAME="atuin" PG_DB_USER="atuin" setup_postgresql_db

msg_info "Installing Atuin"
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/atuinsh/atuin/releases/latest/download/atuin-server-installer.sh | ATUIN_SERVER_INSTALL_DIR="/opt/atuin" $STD sh

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

--proto '=https' --tlsv1.2

is this needed?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I copied it directly from the atuin server documentation: https://docs.atuin.sh/latest/self-hosting/server-setup/

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

just cut it

Comment thread json/atuin.json
Comment on lines +42 to +48
"text": "Registration is open by default, do not forget to close if required",
"type": "info"
},
{
"text": "Uses PostgreSQL",
"type": "info"
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
"text": "Registration is open by default, do not forget to close if required",
"type": "info"
},
{
"text": "Uses PostgreSQL",
"type": "info"
}
"text": "Credentials are saved in /root/atuin.creds",
"type": "info"
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

also add external script warning from other scripts

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've updated the notes, are there more notes needed?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

external warning + remove registration comment like i said, also remove the config comment it is shown on the website

Comment thread json/atuin.json Outdated
Comment thread json/atuin.json Outdated
"website": "https://atuin.sh",
"repository": "https://github.com/atuinsh/atuin",
"logo": "https://avatars.githubusercontent.com/u/122059230?s=60&v=4",
"description": "Sync, search, and back up your shell history with end-to-end encryption. Ask Atuin AI for help without leaving your prompt.",

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can this be a bit more descriptive?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've updated to focus more on what sync and search means, and express that this is Atuin server

Comment thread install/atuin-install.sh
PG_DB_NAME="atuin" PG_DB_USER="atuin" setup_postgresql_db

msg_info "Installing Atuin"
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/atuinsh/atuin/releases/latest/download/atuin-server-installer.sh | ATUIN_SERVER_INSTALL_DIR="/opt/atuin" $STD sh

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

just cut it

Comment thread json/atuin.json
Comment on lines +42 to +48
"text": "Registration is open by default, do not forget to close if required",
"type": "info"
},
{
"text": "Uses PostgreSQL",
"type": "info"
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

external warning + remove registration comment like i said, also remove the config comment it is shown on the website

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants